[SLOT_n]
mode = tachometerПрограммный модуль тахометра: измеряет частоту импульсов на входе — в герцах либо в оборотах в минуту.
Совместимость
Принцип работы
Импульсы считаются аппаратным счётчиком PCNT в окне длиной 1/refreshRate; по окончании окна модуль пересчитывает частоту и рапортует её при изменении.
Опция divider задаёт число импульсов на один оборот, timeQuant выбирает
единицы: sec — герцы, min — обороты в минуту. Дребезг подавляется аппаратным
фильтром (debounceGap), дрожание показаний — опциями deadBand и filterK.
При заданном threshold модуль дополнительно рапортует дискретное состояние:
1, когда частота выше порога, и 0, когда ниже.
Ограничения по периферии
Счётчиков PCNT в ESP32-S3 всего четыре, и они делятся между
tachometer, encoderInc и stepper — суммарно этих модулей в конфигурации может быть не больше четырёх. Если свободного счётчика не осталось, модуль в этом слоте не запускается: в консоль и лог на SD-карте пишется ошибка, а после подключения к брокеру публикуетсяtachometer_<slot>/event/warningс текстомinit failed, no free PCNT unit (4 total for encoderInc, tachometer, stepper). Остальные слоты продолжают работать.
Топики
База топика события:
<deviceName>/tachometer_<slot>— напримерmoduleBox/tachometer_0
База топика действия:
<deviceName>/tachometer_<slot>— напримерmoduleBox/tachometer_0
Полный топик — база плюс направление и имя: moduleBox/tachometer_0/event/val.
Опции
Доступные опции:
- disableOnStart — флаг, стартовать в выключенном состоянии и ждать
action/enableсо значением1. По умолчанию модуль активен сразу. - front — строка(enum), активный фронт сигнала: rise (восходящий), fall (нисходящий), any (оба). Значения:
rise,fall,any. - divider — число(int), делитель - сколько импульсов приходится на один оборот, целое. Диапазон 1–65535. По умолчанию 1.
- timeQuant — строка(enum), квант времени: sec (частота в герцах) или min (обороты в минуту). Значения:
sec,min. - refreshRate — число(int), частота обновления в герцах - сколько раз в секунду пересчитываем частоту и рапортуем при изменении. Окно подсчёта импульсов равно периоду 1/refreshRate. Диапазон 1–100. По умолчанию 10.
- debounceGap — число(int), антидребезг в миллисекундах - по умолчанию 0 (выключен) Реализован аппаратным glitch-фильтром PCNT и зажимается к ~10 мкс. Диапазон 0–4096. По умолчанию 0.
- deadBand — число(int), минимальное изменение частоты для отправки рапорта - подавляет дрожание. Диапазон 0–1000000. По умолчанию 0.
- filterK — число(float), коэффициент сглаживающего фильтра (скользящее среднее), от 0 до 1. Значение 1 отключает фильтр. По умолчанию 1.
- threshold — число(int), пороговое значение частоты - если задано (больше 0), модуль дополнительно рапортует threshold 1 когда частота выше порога и 0 когда ниже. Диапазон 0–1000000. По умолчанию 0.
События
| Топик | Payload | Описание |
|---|---|---|
tachometer_<slot>/event/val | целое | Рапортует текущую частоту - целое значение 0-uint32 |
tachometer_<slot>/event/threshold | целое | Рапортует состояние порога 0/1 при заданной опции threshold |
tachometer_<slot>/event/enable | 0 / 1 | Состояние модуля - активен (1) или спит (0) |
tachometer_<slot>/event/warning | строка | Причина, по которой модуль не работает (нет свободного PCNT) |
Пример: топик moduleBox/tachometer_0/event/val, payload 1450.
Команды
| Топик | Payload | Описание |
|---|---|---|
tachometer_<slot>/action/enable | 0 / 1 | Включить (1) или выключить (0) модуль |
Примеры
[SLOT_1]
mode = tachometer
options = divider:2, timeQuant:min, front:rise, deadBand:10
;обороты вентилятора уходят на индикацию
crosslink = tachometer_1/event/val:@->scaler_6/action/pushVal:@Датчик даёт два импульса на оборот, показания в оборотах в минуту, изменения меньше 10 об/мин не рапортуются.
[SLOT_2]
mode = tachometer
options = threshold:100, timeQuant:sec
;падение частоты ниже 100 Гц выключает реле
crosslink = tachometer_2/event/threshold:0->relay_3/action/setVal:0Подробнее — внутренние связи (crossLink).