class Counter – счётчик импульсов¶
Класс Counter является обёрткой над аппаратным блоком i.MX RT QENC (квадратурный энкодер / счётчик), настроенным как счётчик импульсов с одним входом. Каждый нарастающий фронт на входном выводе увеличивает (или уменьшает) аппаратный счётчик позиции; к событиям ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH можно прикреплять программные функции обратного вызова.
Доступно только на OpenMV Cam RT1062 (порт mimxrt). На камерах OpenMV на базе STM32 используйте вместо этого pyb.Timer, настроенный на захват входного сигнала. Недоступно на OpenMV Cam AE3 (порт alif).
Пример использования:
from machine import Pin, Counter
counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())
Конструкторы¶
- class machine.Counter(id: int, src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
Создаёт (или возвращает синглтон для) блок счётчика QENC, идентифицируемый по
id. RT1062 имеет несколько блоков QENC (idвыбирает один из них); те же аргументы также принимаются методомinit()для повторной настройки существующего экземпляра.src– входной вывод, нарастающие фронты на котором подсчитываются.direction(только именованный аргумент) – либоUP/DOWNдля задания фиксированного направления, либоPin, логический уровень которого выбирает направление во время выполнения (низкий уровень = счёт вверх, высокий = счёт вниз).filter_ns(только именованный аргумент) – минимальное время стабильности входного сигнала в наносекундах для подсчёта импульса. Драйвер использует самый длинный аппаратный фильтр, который меньше или равен этому значению.0(по умолчанию) отключает фильтрацию.max/min(только именованные аргументы) – диапазон по модулю для счётчика позиции. Когда счётчик переходит черезmax, он сбрасывается кmin, а счётчик циклов увеличивается (уменьшается при счёте вниз). Передачаmaxиminравными0отключает диапазон.reset(только именованный аргумент) –Pin, нарастающий фронт на котором перезагружает счётчик позиции в начальное значение (не изменяя счётчик циклов).match(только именованный аргумент) – значение счётчика, при котором срабатывает прерываниеIRQ_MATCH. ПередайтеNoneдля отключения.match_pin(только именованный аргумент) –Pin, который удерживается в высоком состоянии, пока счётчик позиции равенmatch, и в низком в противном случае.Методы¶
- init(src: Pin | None = None, *, direction: int | Pin = UP, filter_ns: int = 0, max: int | None = None, min: int = 0, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
Повторно инициализирует счётчик с заданными параметрами и сбрасывает его счётчики позиции и циклов. Принимает те же именованные аргументы, что и конструктор.
- deinit() None¶
Останавливает счётчик, отключает все ожидающие прерывания и освобождает аппаратные ресурсы QENC. Программный сброс автоматически деинициализирует все экземпляры
Counter.
- value() int¶
- value(value: int, /) int
Получает или устанавливает знаковый счётчик позиции.
Без аргумента возвращает текущее значение счётчика.
С единственным аргументом
valueатомарно устанавливает счётчик позиции вvalueи возвращает предыдущее значение. Распространённый приёмcounter.value(0)сбрасывает счётчик в начале окна измерения.
- cycles() int¶
- cycles(value: int, /) int
Получает или устанавливает счётчик циклов – знаковое 16-битное целое число, которое отслеживает, сколько раз счётчик позиции переходил через
max/min.Без аргумента возвращает текущее значение счётчика циклов.
С единственным аргументом
valueустанавливает счётчик циклов вvalue(не затрагивая счётчик позиции) и возвращает предыдущее значение.
- irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None¶
Регистрирует функцию обратного вызова, которая будет вызвана при срабатывании одного из поддерживаемых событий QENC. Обработчик получает объект
Counterв качестве единственного аргумента; конкретное событие можно определить внутри обработчика черезirq.flags().trigger– битовая маска из одной или нескольких константIRQ_*:IRQ_RESET– выводresetсработал.IRQ_INDEX– переход на линииindex.IRQ_MATCH– счётчик позиции достигmatch. После срабатывания совпадение автоматически отключается и должно быть повторно активировано путём повторной установки IRQ.IRQ_ROLL_OVER– счётчик позиции перешёл сmaxнаmin.IRQ_ROLL_UNDER– счётчик позиции перешёл сminнаmax.
hard=Trueрегистрирует жёсткий обработчик прерывания (меньшая задержка, но обработчик не должен выделять память). По умолчанию используется запланированная функция обратного вызова. Передайтеhandler=Noneдля отключения прерывания.
Константы¶