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으로 래핑되고 사이클 카운터가 증가합니다(감소 카운트 시에는 감소).max와min을 모두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_RESET–reset핀이 어서트되었습니다.IRQ_INDEX–index라인에서 전환이 발생했습니다.IRQ_MATCH– 위치 카운터가match에 도달했습니다. Match는 발생 후 자동으로 비활성화되며 IRQ를 다시 설치하여 재무장해야 합니다.IRQ_ROLL_OVER– 위치 카운터가max에서min으로 래핑되었습니다.IRQ_ROLL_UNDER– 위치 카운터가min에서max로 래핑되었습니다.
hard=True는 하드 인터럽트 핸들러를 등록합니다(지연 시간이 더 짧지만 핸들러는 메모리를 할당하면 안 됨). 기본값은 스케줄된 콜백입니다. 인터럽트를 비활성화하려면handler=None을 전달하세요.
상수¶