клас Counter – лічильник імпульсів¶
Клас Counter охоплює апаратний блок i.MX RT QENC (квадратурний енкодер / лічильник), налаштований як однофазний лічильник імпульсів. Кожен висхідний фронт на вхідному виводі збільшує (або зменшує) апаратний лічильник позиції; програмні зворотні виклики можна прив’язати до подій ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.
Доступно лише на OpenMV Cam RT1062 (порт mimxrt). На OpenMV Cam на базі 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. Match автоматично вимикається після спрацювання і потрібно повторно активувати, перевстановивши IRQ.IRQ_ROLL_OVER– лічильник позиції обернувся зmaxдоmin.IRQ_ROLL_UNDER– лічильник позиції обернувся зminдоmax.
hard=Trueреєструє обробник жорсткого переривання (менша затримка, але обробник не повинен виділяти пам’ять). За замовчуванням використовується запланований зворотний виклик. Передайтеhandler=Noneдля вимкнення переривання.
Константи¶