class Counter – 펄스 카운터

Counter 클래스는 단일 입력 펄스 카운터로 구성된 i.MX RT QENC(직교 인코더/카운터) 하드웨어 블록을 래핑합니다. 소스 핀의 각 상승 에지마다 하드웨어 위치 카운터가 증가(또는 감소)하며, ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH 이벤트에 소프트웨어 콜백을 연결할 수 있습니다.

OpenMV Cam RT1062(mimxrt 포트)에서만 사용할 수 있습니다. STM32 기반 OpenMV 카메라에서는 대신 입력 캡처용으로 구성된 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입니다(low = 증가 카운트, high = 감소 카운트).

filter_ns (키워드 전용) – 펄스가 카운트되기 위해 필요한 최소 입력 안정 시간(나노초 단위)입니다. 드라이버는 이 값보다 작거나 같은 가장 긴 하드웨어 필터를 사용합니다. 0(기본값)은 필터링을 비활성화합니다.

max / min (키워드 전용) – 위치 카운터의 모듈로 범위입니다. 카운터가 max를 넘어가면 min으로 래핑되고 사이클 카운터가 증가합니다(감소 카운트 시에는 감소). maxmin을 모두 0으로 전달하면 범위가 비활성화됩니다.

reset (키워드 전용) – 상승 에지에서 위치 카운터를 시작 값으로 다시 로드하는 Pin입니다(사이클 카운터는 변경하지 않음).

match (키워드 전용) – IRQ_MATCH 인터럽트가 발생하는 카운터 값입니다. 비활성화하려면 None을 전달하세요.

match_pin (키워드 전용) – 위치 카운터가 match와 같을 때 high로 구동되고 그 외에는 low로 구동되는 Pin입니다.

메서드

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 인스턴스를 자동으로 해제(deinitialise)합니다.

value() int
value(value: int, /) int

부호 있는 위치 카운터를 가져오거나 설정합니다.

인수가 없으면 현재 카운트를 반환합니다.

단일 value 인수가 있으면 위치 카운터를 value로 원자적으로 설정하고 이전 카운트를 반환합니다. 일반적인 관용구 counter.value(0)은 측정 창 시작 시 카운터를 재설정합니다.

cycles() int
cycles(value: int, /) int

위치 카운터가 max / min을 몇 번 넘어갔는지 추적하는 부호 있는 16비트 정수인 사이클 카운터를 가져오거나 설정합니다.

인수가 없으면 현재 사이클 카운트를 반환합니다.

단일 value 인수가 있으면 사이클 카운터를 value로 설정하고(위치 카운터는 건드리지 않음) 이전 카운트를 반환합니다.

irq(handler: Callable[[Counter], None] | None = None, trigger: int = 0, hard: bool = False) None

지원되는 QENC 이벤트 중 하나가 발생할 때 호출할 콜백을 등록합니다. 핸들러는 유일한 인수로 Counter 객체를 받으며, 핸들러 내부에서 irq.flags()를 통해 특정 이벤트를 식별할 수 있습니다.

trigger는 하나 이상의 IRQ_* 상수로 구성된 비트마스크입니다:

  • IRQ_RESETreset 핀이 어서트되었습니다.

  • IRQ_INDEXindex 라인에서 전환이 발생했습니다.

  • IRQ_MATCH – 위치 카운터가 match에 도달했습니다. Match는 발생 후 자동으로 비활성화되며 IRQ를 다시 설치하여 재무장해야 합니다.

  • IRQ_ROLL_OVER – 위치 카운터가 max에서 min으로 래핑되었습니다.

  • IRQ_ROLL_UNDER – 위치 카운터가 min에서 max로 래핑되었습니다.

hard=True는 하드 인터럽트 핸들러를 등록합니다(지연 시간이 더 짧지만 핸들러는 메모리를 할당하면 안 됨). 기본값은 스케줄된 콜백입니다. 인터럽트를 비활성화하려면 handler=None을 전달하세요.

상수

UP: int

상승 에지를 양수로 카운트하려면 direction에 전달합니다.

DOWN: int

상승 에지를 음수로 카운트하려면 direction에 전달합니다.

IRQ_RESET: int

reset 핀 이벤트에 대한 irq() 트리거 플래그입니다.

IRQ_INDEX: int

인덱스 입력 이벤트에 대한 irq() 트리거 플래그입니다.

IRQ_MATCH: int

위치 일치 이벤트에 대한 irq() 트리거 플래그입니다.

IRQ_ROLL_OVER: int

카운터 롤오버(max -> min)에 대한 irq() 트리거 플래그입니다.

IRQ_ROLL_UNDER: int

카운터 롤언더(min -> max)에 대한 irq() 트리거 플래그입니다.