class Counter -- 脉冲计数器¶
Counter 类封装了配置为单输入脉冲计数器的 i.MX RT QENC(正交编码器 / 计数器)硬件模块。源引脚上的每个上升沿都会使硬件位置计数器递增(或递减);可以为 ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH 事件附加软件回调。
仅在 OpenMV Cam RT1062(mimxrt 移植)上可用。在基于 STM32 的 OpenMV cam 上,请改用配置为输入捕获模式的 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)¶
构造(或获取)由
id标识的 QENC 计数器模块的单例。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¶
使用给定参数重新初始化计数器,并重置其位置计数器和循环计数器。接受与构造函数相同的关键字参数。
- 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可禁用中断。
常量¶