class Encoder – 직교 디코더¶
Encoder 클래스는 직교 디코더로 구성된 i.MX RT QENC 하드웨어 블록을 래핑합니다. 로터리 인코더에서 들어오는 2상 신호(phase_a / phase_b)를 추적하고, 위상 관계에 따라 32비트 위치 카운터를 증가 또는 감소시키며, 절대 기준점을 위해 선택적 index / reset 입력과 결합할 수 있습니다.
OpenMV Cam RT1062(mimxrt 포트)에서만 사용할 수 있습니다. STM32 기반 OpenMV 카메라에서는 대신 인코더 모드(Timer.ENC_AB)로 구성된 pyb.Timer를 사용하세요. OpenMV Cam AE3(alif 포트)에서는 제공되지 않습니다.
사용 예:
from machine import Pin, Encoder
enc = Encoder(0, Pin("P0", Pin.IN), Pin("P1", Pin.IN), phases=4)
enc.value(0)
# ... rotate the encoder ...
print("position:", enc.value())
생성자¶
- class machine.Encoder(id: int, phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None)¶
id로 식별되는 QENC 인코더 블록을 생성합니다(또는 해당 싱글톤을 가져옵니다). 기존 인스턴스를 다시 구성하기 위해init()도 동일한 인수를 받습니다.phase_a/phase_b는 두 개의 직교 입력 핀입니다.phases(키워드 전용) – 디코딩 세분성을 선택합니다. QENC는1(펄스 쌍당 한 에지 카운트),2(phase A의 양쪽 에지) 또는4(“4배 디코딩” – 두 위상의 모든 에지를 카운트)를 지원합니다. 기본값은1입니다.filter_ns(키워드 전용) – 최소 입력 안정 시간(나노초 단위)입니다. 드라이버는 이 값보다 작거나 같은 가장 긴 하드웨어 필터를 사용합니다.0(기본값)은 필터링을 비활성화합니다.max/min(키워드 전용) – 위치 카운터의 모듈로 범위입니다. 카운터가max를 넘어가면min으로 래핑되고 사이클 카운터가 증가합니다(반대 방향으로 이동하면 감소). 둘 다0으로 전달하면 범위가 비활성화됩니다.index(키워드 전용) – 상승 에지에서 위치 카운터를min으로 다시 로드하고 방향에 따라 사이클 카운터를 업데이트하는Pin입니다. 일반적인 용도는 로터리 인코더의 Z-채널 마크입니다.reset(키워드 전용) – 상승 에지에서 위치 카운터를 시작 값으로 다시 로드하는Pin입니다(사이클 카운터는 변경하지 않음).match(키워드 전용) –IRQ_MATCH인터럽트가 발생하는 위치 값입니다. 비활성화하려면None을 전달하세요.match_pin(키워드 전용) – 위치 카운터가match와 같을 때 high로 구동되고 그 외에는 low로 구동되는Pin입니다.메서드¶
- init(phase_a: Pin | None = None, phase_b: Pin | None = None, *, phases: int = 1, filter_ns: int = 0, max: int | None = None, min: int = 0, index: Pin | None = None, reset: Pin | None = None, match: int | None = None, match_pin: Pin | None = None) None¶
주어진 매개변수로 인코더를 다시 초기화하고 위치 및 사이클 카운터를 재설정합니다. 생성자와 동일한 키워드 인수를 받습니다.
- deinit() None¶
인코더를 중지하고 대기 중인 인터럽트를 비활성화하며 QENC 하드웨어 리소스를 해제합니다. 소프트 리셋은 모든
Encoder인스턴스를 자동으로 해제(deinitialise)합니다.
- value() int¶
- value(value: int, /) int
부호 있는 위치 카운터를 가져오거나 설정합니다.
인수가 없으면 현재 위치를 반환합니다.
단일
value인수가 있으면 위치 카운터를value로 원자적으로 설정하고 이전 카운트를 반환합니다. 일반적인 관용구enc.value(0)은 측정 창 시작 시 카운터를 재설정합니다.
- cycles() int¶
- cycles(value: int, /) int
위치 카운터가
max/min을 몇 번 넘어갔는지 추적하는 부호 있는 16비트 정수인 사이클 카운터를 가져오거나 설정합니다.인수가 없으면 현재 사이클 카운트를 반환합니다.
단일
value인수가 있으면 사이클 카운터를value로 설정하고(위치 카운터는 건드리지 않음) 이전 카운트를 반환합니다.
- irq(handler: Callable[[Encoder], None] | None = None, trigger: int = 0, hard: bool = False) None¶
지원되는 QENC 이벤트 중 하나가 발생할 때 호출할 콜백을 등록합니다. 핸들러는 유일한 인수로
Encoder객체를 받으며, 핸들러 내부에서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을 전달하세요.
상수¶