class Encoder -- bộ giải mã cầu phương

Lớp Encoder bao bọc khối phần cứng i.MX RT QENC được cấu hình dưới dạng bộ giải mã cầu phương. Nó theo dõi tín hiệu hai pha (phase_a / phase_b) đến từ một bộ mã hóa quay, tăng hoặc giảm bộ đếm vị trí 32-bit theo mối quan hệ pha, và có thể kết hợp với các đầu vào index / reset tùy chọn để tham chiếu tuyệt đối.

Chỉ khả dụng trên OpenMV Cam RT1062 (cổng mimxrt). Trên các OpenMV Cam dựa trên STM32, hãy dùng pyb.Timer được cấu hình cho chế độ encoder (Timer.ENC_AB) thay thế. Không được hỗ trợ trên OpenMV Cam AE3 (cổng alif).

Ví dụ sử dụng:

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())

Hàm khởi tạo

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)

Khởi tạo (hoặc lấy singleton của) khối encoder QENC được xác định bởi id. Các đối số tương tự cũng được init() chấp nhận để cấu hình lại một thực thể hiện có.

phase_a / phase_b là hai chân đầu vào cầu phương.

phases (chỉ từ khóa) chọn độ phân giải giải mã. QENC hỗ trợ 1 (đếm một cạnh mỗi cặp xung), 2 (cả hai cạnh của pha A) hoặc 4 ("giải mã 4x" -- mỗi cạnh của cả hai pha đều được đếm). Mặc định 1.

filter_ns (chỉ từ khóa) -- thời gian đầu vào ổn định tối thiểu tính bằng nano giây. Driver sử dụng bộ lọc phần cứng dài nhất nhỏ hơn hoặc bằng giá trị này. 0 (mặc định) sẽ tắt bộ lọc.

max / min (chỉ từ khóa) -- phạm vi modulo của bộ đếm vị trí. Khi bộ đếm vượt qua max, nó quay về min và bộ đếm chu kỳ tăng lên (giảm khi di chuyển theo chiều ngược lại). Truyền cả hai bằng 0 sẽ vô hiệu hóa phạm vi.

index (chỉ từ khóa) -- một Pin có cạnh lên sẽ nạp lại bộ đếm vị trí về min và cập nhật bộ đếm chu kỳ theo hướng; thường được dùng làm dấu kênh Z trên một bộ mã hóa quay.

reset (chỉ từ khóa) -- một Pin có cạnh lên sẽ nạp lại bộ đếm vị trí về giá trị bắt đầu (không thay đổi bộ đếm chu kỳ).

match (chỉ từ khóa) -- giá trị vị trí mà tại đó một ngắt IRQ_MATCH được kích hoạt. Truyền None để vô hiệu hóa.

match_pin (chỉ từ khóa) -- một Pin được kéo cao khi bộ đếm vị trí bằng match và kéo thấp trong các trường hợp còn lại.

Phương thức

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

Khởi tạo lại encoder với các tham số đã cho và đặt lại các bộ đếm vị trí và chu kỳ. Chấp nhận các đối số từ khóa giống như hàm khởi tạo.

deinit() None

Dừng encoder, vô hiệu hóa bất kỳ ngắt đang chờ xử lý nào và giải phóng tài nguyên phần cứng QENC. Một lần reset mềm sẽ tự động deinitialise tất cả các thực thể Encoder.

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

Lấy hoặc đặt bộ đếm vị trí có dấu.

Không có đối số, trả về vị trí hiện tại.

Với một đối số value duy nhất, đặt nguyên tử bộ đếm vị trí thành value và trả về giá trị đếm trước đó. Thành ngữ phổ biến enc.value(0) đặt lại bộ đếm ở đầu cửa sổ đo lường.

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

Lấy hoặc đặt bộ đếm chu kỳ, một số nguyên 16-bit có dấu theo dõi số lần bộ đếm vị trí đã vượt qua max / min.

Không có đối số, trả về giá trị đếm chu kỳ hiện tại.

Với một đối số value duy nhất, đặt bộ đếm chu kỳ thành value (không ảnh hưởng đến bộ đếm vị trí) và trả về giá trị đếm trước đó.

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

Đăng ký một hàm gọi lại được gọi khi một trong các sự kiện QENC được hỗ trợ xảy ra. Bộ xử lý nhận đối tượng Encoder làm đối số duy nhất; sự kiện cụ thể có thể được xác định bên trong bộ xử lý qua irq.flags().

trigger là một bitmask của một hoặc nhiều hằng số IRQ_*:

  • IRQ_RESET -- chân reset được kích hoạt.

  • IRQ_INDEX -- chân index được kích hoạt.

  • IRQ_MATCH -- bộ đếm vị trí đạt đến match. Match là một lần và phải được tái kích hoạt bằng cách cài đặt lại IRQ.

  • IRQ_ROLL_OVER -- bộ đếm vị trí quay từ max về min.

  • IRQ_ROLL_UNDER -- bộ đếm vị trí quay từ min về max.

hard=True đăng ký một bộ xử lý ngắt cứng (độ trễ thấp hơn, nhưng bộ xử lý không được phân bổ bộ nhớ). Mặc định là một hàm gọi lại theo lịch. Truyền handler=None để vô hiệu hóa ngắt.

Hằng số

IRQ_RESET: int

Cờ kích hoạt irq() cho sự kiện chân reset.

IRQ_INDEX: int

Cờ kích hoạt irq() cho sự kiện chân index.

IRQ_MATCH: int

Cờ kích hoạt irq() cho sự kiện khớp vị trí.

IRQ_ROLL_OVER: int

Cờ kích hoạt irq() cho sự kiện bộ đếm quay vòng (max -> min).

IRQ_ROLL_UNDER: int

Cờ kích hoạt irq() cho sự kiện bộ đếm quay ngược (min -> max).