[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/enable0 / 1Состояние модуля - активен (1) или спит (0)
tachometer_<slot>/event/warningстрокаПричина, по которой модуль не работает (нет свободного PCNT)

Пример: топик moduleBox/tachometer_0/event/val, payload 1450.

Команды

ТопикPayloadОписание
tachometer_<slot>/action/enable0 / 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).