คลาส 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 ที่ระบุด้วย
idRT1062 มีบล็อก 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-- การเปลี่ยนแปลงบนสายindexIRQ_MATCH-- ตัวนับตำแหน่งถึงmatchแล้ว Match จะถูกปิดอัตโนมัติหลังจากทำงานและต้องเปิดใช้ใหม่ด้วยการติดตั้ง IRQ ใหม่IRQ_ROLL_OVER-- ตัวนับตำแหน่งวนจากmaxไปยังminIRQ_ROLL_UNDER-- ตัวนับตำแหน่งวนจากminไปยังmax
hard=Trueลงทะเบียนตัวจัดการอินเทอร์รัปต์แบบ hard (เวลาแฝงต่ำกว่า แต่ตัวจัดการต้องไม่จัดสรรหน่วยความจำ) ค่าเริ่มต้นคือ scheduled callback ส่งhandler=Noneเพื่อปิดการใช้งานอินเทอร์รัปต์
ค่าคงที่¶