Содержание

@amperka/hysteresis

Модуль помогает преобразовать нестабильный входной аналоговый сигнал в выходной стабильный цифровой сигнал, сравнивая вход с заданными пороговыми значениями.

В качестве параметров объекту-гистерезису определяют 2 порога: верхний и нижний, и 2 времени задержки: верхнее и нижнее. Время задержки называют лагом.

Гистерезис может генерировать 2 события:

Значения входного сигнала передают через метод push.

Область применения

Гистерезис используют там, где приводить в действие исполнительное устройство можно только после стабилизации входного сигнала. Например:

Принцип действия

Представим гистерезис, у которого нулевой нижний лаг и ненулевой верхний.

Ключевые моменты таковы:

  1. Входной сигнал пересекает нижний порог. Т.к. у гистерезиса нет нижнего лага, выход переходит в нижнее состояние, он генерирует событие "low".
  2. Сигнал возвращается в зону неопределённости. Гистерезис остаётся в нижнем состоянии, событий не происходит.
  3. Сигнал снова пересекает нижний порог. Т.к. гистерезис уже находится в нижнем состоянии, ничего не меняется.
  4. Сигнал пересекает верхний порог, начинается отсчёт верхнего лага, состояние не меняется.
  5. Сигнал возвращается в зону неопределённости, не дождавшись прошествия лага, состояние не меняется.
  6. Сигнал вновь пересекает верхний порог. Отсчёт лага начинается заново, состояние не меняется.
  7. Время верхнего лага истекло. Гистерезис переходит в верхнее состояние, генерируется событие "high".
  8. Гистерезис переходит в нижнее состояние, генерирует событие "low".

Функции модуля

create(opts)

Создаёт новый объект Hysteresis с параметрами, заданными в объекте opts.

В opts ожидаются поля:

Если lowLag или highLag не заданы, они принимаются равными нулю.

Значения low и high могут совпадать. В этом случае одно из значений можно опустить.

Hysteresis

Класс, представляющий гистерезис. Используйте функцию create, чтобы создать новый объект.

Hysteresis.push(val)

Добавляет новое значение val входного сигнала.

Насколько часто программа должна вызывать метод — ваше решение. Если входной сигнал динамично меняется, важно вызывать push достаточно часто, чтобы гистерезис попросту не пропустил ключевые моменты, когда сигнал пересекает пороговые значения.

Вызывать push через равные промежутки времени не обязательно.

Hysteresis.on('high', …)

Событие возникает при переходе гистерезиса в стабильное верхнее состояние, спустя highLag после пересечения входным сигналом порога high.

Hysteresis.on('low', …)

Событие возникает при переходе гистерезиса в стабильное нижнее состояние, спустя lowLag после пересечения входным сигналом порога low.