คลาส Counter -- ตัวนับพัลส์

คลาส Counter ห่อหุ้มบล็อกฮาร์ดแวร์ i.MX RT QENC (quadrature encoder / counter) ที่กำหนดค่าเป็นตัวนับพัลส์แบบอินพุตเดียว แต่ละขอบขาขึ้นบนพินต้นทางจะเพิ่ม (หรือลด) ตัวนับตำแหน่งของฮาร์ดแวร์ และสามารถเชื่อมต่อคอลแบ็กของซอฟต์แวร์กับเหตุการณ์ ROLL_OVER / ROLL_UNDER / RESET / INDEX / MATCH ได้

ใช้ได้เฉพาะบน OpenMV Cam RT1062 (พอร์ต mimxrt) เท่านั้น สำหรับ OpenMV Cam ที่ใช้ STM32 ให้ใช้ pyb.Timer ที่กำหนดค่าสำหรับ input-capture แทน ไม่เปิดเผยบน 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)

สร้าง (หรือดึง singleton สำหรับ) บล็อกตัวนับ QENC ที่ระบุด้วย id RT1062 มีบล็อก QENC หลายบล็อก (id เลือกบล็อกหนึ่ง) อาร์กิวเมนต์เดียวกันนี้ยังได้รับโดย init() เพื่อกำหนดค่าใหม่ให้กับอินสแตนซ์ที่มีอยู่

src -- พินอินพุตที่นับขอบขาขึ้น

direction (keyword-only) -- ใช้ UP / DOWN เพื่อกำหนดทิศทางคงที่ หรือใช้ Pin ที่ระดับลอจิกเลือกทิศทางขณะรันไทม์ (low = นับขึ้น, high = นับลง)

filter_ns (keyword-only) -- เวลาที่อินพุตต้องคงที่ขั้นต่ำในหน่วยนาโนวินาทีเพื่อให้นับพัลส์ ไดรเวอร์จะใช้ตัวกรองฮาร์ดแวร์ที่ยาวที่สุดที่น้อยกว่าหรือเท่ากับค่านี้ 0 (ค่าเริ่มต้น) จะปิดการกรอง

max / min (keyword-only) -- ช่วง modulo ของตัวนับตำแหน่ง เมื่อตัวนับเกิน max จะวนกลับไปที่ min และตัวนับรอบจะเพิ่มขึ้น (ลดลงเมื่อนับลง) การส่ง max และ min เป็น 0 ทั้งคู่จะปิดการใช้ช่วง

reset (keyword-only) -- Pin ที่ขอบขาขึ้นจะโหลดตัวนับตำแหน่งกลับสู่ค่าเริ่มต้น (โดยไม่เปลี่ยนตัวนับรอบ)

match (keyword-only) -- ค่าของตัวนับที่ทำให้เกิดอินเทอร์รัปต์ IRQ_MATCH ส่ง None เพื่อปิดการใช้งาน

match_pin (keyword-only) -- Pin ที่ถูกขับให้เป็น high ขณะที่ตัวนับตำแหน่งเท่ากับ match และเป็น low ในกรณีอื่น

เมธอด

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

เริ่มต้นตัวนับใหม่ด้วยพารามิเตอร์ที่กำหนดและรีเซ็ตตัวนับตำแหน่งและรอบ รับ keyword arguments เดียวกันกับตัวสร้าง

deinit() None

หยุดตัวนับ ปิดการใช้งานอินเทอร์รัปต์ที่รอดำเนินการ และปล่อยทรัพยากรฮาร์ดแวร์ QENC การ soft reset จะดีอินิเชียลไลซ์อินสแตนซ์ Counter ทั้งหมดโดยอัตโนมัติ

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

รับหรือตั้งค่าตัวนับตำแหน่งแบบมีเครื่องหมาย

เมื่อไม่มีอาร์กิวเมนต์ จะคืนค่าการนับปัจจุบัน

เมื่อมีอาร์กิวเมนต์ value เพียงตัวเดียว จะตั้งค่าตัวนับตำแหน่งเป็น value แบบอะตอมิกและคืนค่าการนับก่อนหน้า สำนวนทั่วไป counter.value(0) รีเซ็ตตัวนับที่จุดเริ่มต้นของช่วงการวัด

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

รับหรือตั้งค่าตัวนับรอบ ซึ่งเป็นจำนวนเต็มแบบมีเครื่องหมาย 16 บิตที่ติดตามจำนวนครั้งที่ตัวนับตำแหน่งเกิน max / min

เมื่อไม่มีอาร์กิวเมนต์ จะคืนค่าการนับรอบปัจจุบัน

เมื่อมีอาร์กิวเมนต์ 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 ลงทะเบียนตัวจัดการอินเทอร์รัปต์แบบ hard (เวลาแฝงต่ำกว่า แต่ตัวจัดการต้องไม่จัดสรรหน่วยความจำ) ค่าเริ่มต้นคือ scheduled callback ส่ง handler=None เพื่อปิดการใช้งานอินเทอร์รัปต์

ค่าคงที่

UP: int

ส่งไปยัง direction เพื่อนับขอบขาขึ้นเป็นบวก

DOWN: int

ส่งไปยัง direction เพื่อนับขอบขาขึ้นเป็นลบ

IRQ_RESET: int

ค่าสถานะทริกเกอร์ irq() สำหรับเหตุการณ์พิน reset

IRQ_INDEX: int

ค่าสถานะทริกเกอร์ irq() สำหรับเหตุการณ์อินพุต index

IRQ_MATCH: int

ค่าสถานะทริกเกอร์ irq() สำหรับเหตุการณ์ตำแหน่งตรงกัน

IRQ_ROLL_OVER: int

ค่าสถานะทริกเกอร์ irq() สำหรับตัวนับที่วนเกิน (max -> min)

IRQ_ROLL_UNDER: int

ค่าสถานะทริกเกอร์ irq() สำหรับตัวนับที่วนต่ำกว่า (min -> max)