class Counter -- bộ đếm xung

Lớp Counter bao bọc khối phần cứng i.MX RT QENC (bộ mã hóa cầu phương / bộ đếm) được cấu hình dưới dạng bộ đếm xung đơn đầu vào. Mỗi cạnh lên trên chân nguồn sẽ tăng (hoặc giảm) một bộ đếm vị trí phần cứng; có thể gắn các hàm gọi lại phần mềm vào các sự kiện ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH.

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ế độ bắt đầu vào thay thế. Không được hỗ trợ trên OpenMV Cam AE3 (cổng alif).

Ví dụ sử dụng:

from machine import Pin, Counter

counter = Counter(0, Pin("P0", Pin.IN))
counter.value(0)
# ... wait some time ...
print("pulses:", counter.value())

Hàm khởi tạo

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)

Khởi tạo (hoặc lấy singleton của) khối bộ đếm QENC được xác định bởi id. RT1062 có nhiều khối QENC (id chọn một); 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ó.

src -- chân đầu vào có các cạnh lên được đếm.

direction (chỉ từ khóa) -- hoặc là UP / DOWN để đặt hướng cố định, hoặc là một Pin mà mức logic của nó chọn hướng tại thời điểm chạy (thấp = đếm lên, cao = đếm xuống).

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 để một xung được đếm. 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 đếm xuống). Truyền cả maxmin bằng 0 sẽ vô hiệu hóa phạm vi.

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ị bộ đếm 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(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

Khởi tạo lại bộ đếm 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 bộ đếm, 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ể Counter.

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ề giá trị đếm 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 counter.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[[Counter], 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 Counter 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 -- một sự chuyển tiếp trên đường index.

  • IRQ_MATCH -- bộ đếm vị trí đạt đến match. Match tự động bị vô hiệu hóa sau khi kích hoạt 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ố

UP: int

Truyền vào direction để đếm các cạnh lên là dương.

DOWN: int

Truyền vào direction để đếm các cạnh lên là âm.

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 đầu vào 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).