ШІМ-відбір: Як налаштувати клапан правильно
Широтно-імпульсна модуляція (ШІМ, англ. PWM) є основним методом регулювання швидкості відбору спирту або дистиляту за допомогою стандартних електромагнітних клапанів. Оскільки клапан може перебувати лише у двох станах, повністю відкритий або повністю закритий, швидкість відбору (літрів на годину) регулюється часовим співвідношенням цих станів.
Принцип роботи ШІМ-відбору#
ШІМ-відбір базується на понятті періоду ШІМ (зазвичай становить від 5 до 20 секунд).
Наприклад, якщо встановлено період ШІМ 10 секунд, то відсоткове значення відбору (швидкість) визначає час відкриття клапана всередині цього вікна:
- Відбір 100%: Клапан відкритий всі 10 секунд періоду (максимальний струмінь відбору).
- Відбір 50%: Клапан відкритий перші 5 секунд, і закритий наступні 5 секунд.
- Відбір 10% (часто використовується для відбору «голів»): Клапан відкритий лише 1 секунду та закритий 9 секунд.
Занадто короткий період ШІМ (наприклад, менше 3 секунд) призводить до швидкого механічного зносу клапана та перегріву його котушки. Занадто довгий період (понад 20 секунд) може спричинити температурні коливання в колоні через циклічне осушення та переповнення насадкової частини дефлегматора. Оптимальним вважається період 10 секунд.
Реалізація ШІМ-відбору в C++ скрипті oCBot#
В автоматиці oCBot ви можете реалізувати логіку ШІМ як програмно через таймери, так і апаратно, якщо клапан налаштований у системі як пристрій із підтримкою ШІМ на рівні драйвера.
Ось приклад коду для програмної реалізації циклу ШІМ-відбору «голів» (швидкість 8%):
#include "OcbScript.h"
class PwmSelectionScenario : public OcbScript {
private:
int valveId; // ID клапана відбору
unsigned long lastPeriodStart;
const unsigned long periodMs = 10000; // Період ШІМ = 10 секунд (10000 мс)
float selectionPercent; // Поточний відсоток відбору (0.0 - 100.0)
public:
PwmSelectionScenario() {
valveId = 3; // ID клапана з меню Периферії
selectionPercent = 8.0; // Встановлюємо 8% для відбору голів
}
void init() override {
lastPeriodStart = millis();
setPeripheralValue(valveId, 0.0); // Зачиняємо клапан
logMessage("Запуск ШІМ-відбору. Швидкість: " + String(selectionPercent) + "%");
}
void loop() override {
unsigned long currentMillis = millis();
unsigned long timeInPeriod = currentMillis - lastPeriodStart;
// Якщо поточний період завершився, починаємо новий
if (timeInPeriod >= periodMs) {
lastPeriodStart = currentMillis;
timeInPeriod = 0;
}
// Розраховуємо час, протягом якого клапан має бути відкритим
unsigned long openDuration = (periodMs * selectionPercent) / 100.0;
if (timeInPeriod < openDuration) {
// Клапан має бути відкритим
setPeripheralValue(valveId, 1.0);
} else {
// Клапан має бути зачиненим
setPeripheralValue(valveId, 0.0);
}
}
};
Практичні поради щодо калібрування швидкості#
- Визначення максимальної пропускної здатності:
- Повністю відкрийте клапан (100% ШІМ) на 60 секунд. Виміряйте об'єм зібраної рідини (наприклад, отримали 50 мл).
- Помножте на 60, щоб отримати максимальну швидкість в л/год:
0.050 л * 60 = 3 л/год.
- Розрахунок відсотка для відбору «голів»:
- Якщо вам потрібна швидкість відбору голів 150 мл/год, то необхідний відсоток складе: $$\text{Відсоток} = \left( \frac{150 \text{ мл/год}}{3000 \text{ мл/год}} \right) \times 100% = 5%$$
- Задайте
selectionPercent = 5.0у вашому сценарії.