class Encoder – kuadratür çözücü

Encoder sınıfı, bir kuadratür çözücü olarak yapılandırılmış i.MX RT QENC donanım bloğunu sarmalar. Bir döner enkoderden gelen iki fazlı bir sinyali (phase_a / phase_b) izler, faz ilişkisine göre 32 bitlik bir konum sayacını artırır veya azaltır ve mutlak referanslama için isteğe bağlı index / reset girişleriyle birleştirilebilir.

Yalnızca OpenMV Cam RT1062 (mimxrt portu) üzerinde mevcuttur. STM32 tabanlı OpenMV kameralarında, bunun yerine enkoder modu için yapılandırılmış pyb.Timer (Timer.ENC_AB) kullanın. OpenMV Cam AE3 (alif portu) üzerinde sunulmaz.

Örnek kullanım:

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

Yapıcılar

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 ile tanımlanan QENC enkoder bloğunu oluşturur (veya bu blok için tekil örneği getirir). Aynı argümanlar, mevcut bir örneği yeniden yapılandırmak için init() tarafından da kabul edilir.

phase_a / phase_b, iki kuadratür giriş pinidir.

phases (yalnızca anahtar sözcük) çözme ayrıntı düzeyini seçer. QENC; 1 (darbe çifti başına bir kenar say), 2 (faz A’nın her iki kenarı) veya 4 (“4x çözme” – her iki fazın her kenarı sayılır) değerlerini destekler. Varsayılan 1.

filter_ns (yalnızca anahtar sözcük) – nanosaniye cinsinden minimum giriş kararlılık süresi. Sürücü, bu değere eşit veya bundan küçük olan en uzun donanım filtresini kullanır. 0 (varsayılan) filtrelemeyi devre dışı bırakır.

max / min (yalnızca anahtar sözcük) – konum sayacının modulo aralığı. Sayaç max değerini geçtiğinde min değerine sarmalanır ve cycles sayacı artar (diğer yönde hareket ederken azalır). Her ikisini de 0 olarak geçmek aralığı devre dışı bırakır.

index (yalnızca anahtar sözcük) – yükselen kenarı konum sayacını min değerine yeniden yükleyen ve cycles sayacını yöne göre güncelleyen bir Pin; tipik kullanım, bir döner enkoder üzerindeki Z kanalı işaretidir.

reset (yalnızca anahtar sözcük) – yükselen kenarı konum sayacını başlangıç değerine yeniden yükleyen bir Pin (cycles sayacını değiştirmeden).

match (yalnızca anahtar sözcük) – bir IRQ_MATCH kesmesinin tetiklendiği konum değeri. Devre dışı bırakmak için None geçin.

match_pin (yalnızca anahtar sözcük) – konum sayacı match değerine eşit olduğunda yüksek, aksi halde düşük sürülen bir Pin.

Metotlar

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

Enkoderi verilen parametrelerle yeniden başlatır ve konum ile cycles sayaçlarını sıfırlar. Yapıcı ile aynı anahtar sözcük argümanlarını kabul eder.

deinit() None

Enkoderi durdurur, bekleyen tüm kesmeleri devre dışı bırakır ve QENC donanım kaynaklarını serbest bırakır. Bir yazılımsal sıfırlama, tüm Encoder örneklerini otomatik olarak serbest bırakır.

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

İşaretli konum sayacını alır veya ayarlar.

Argüman verilmediğinde, geçerli konumu döndürür.

Tek bir value argümanı ile, konum sayacını atomik olarak value değerine ayarlar ve önceki sayımı döndürür. Yaygın deyim enc.value(0), bir ölçüm penceresinin başında sayacı sıfırlar.

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

Konum sayacının max / min değerlerini kaç kez geçtiğini izleyen, işaretli 16 bitlik bir tamsayı olan cycles sayacını alır veya ayarlar.

Argüman verilmediğinde, geçerli cycles sayımını döndürür.

Tek bir value argümanı ile, cycles sayacını (konum sayacına dokunmadan) value değerine ayarlar ve önceki sayımı döndürür.

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

Desteklenen QENC olaylarından biri tetiklendiğinde çağrılacak bir geri çağırma (callback) kaydeder. İşleyici, tek argümanı olarak Encoder nesnesini alır; belirli olay, işleyici içinde irq.flags() aracılığıyla tanımlanabilir.

trigger, bir veya daha fazla IRQ_* sabitinden oluşan bir bit maskesidir:

  • IRQ_RESETreset pini etkinleştirildi.

  • IRQ_INDEXindex pini etkinleştirildi.

  • IRQ_MATCH – konum sayacı match değerine ulaştı. Match tek seferliktir ve IRQ yeniden kurularak yeniden etkinleştirilmelidir.

  • IRQ_ROLL_OVER – konum sayacı max değerinden min değerine sarmalandı.

  • IRQ_ROLL_UNDER – konum sayacı min değerinden max değerine sarmalandı.

hard=True, bir donanım kesme işleyicisi kaydeder (daha düşük gecikme, ancak işleyici bellek ayırmamalıdır). Varsayılan, zamanlanmış bir geri çağırmadır. Kesmeyi devre dışı bırakmak için handler=None geçin.

Sabitler

IRQ_RESET: int

reset pin olayı için irq() tetikleme bayrağı.

IRQ_INDEX: int

index pin olayı için irq() tetikleme bayrağı.

IRQ_MATCH: int

Konum eşleşmesi olayı için irq() tetikleme bayrağı.

IRQ_ROLL_OVER: int

Bir sayaç roll-over olayı (max -> min) için irq() tetikleme bayrağı.

IRQ_ROLL_UNDER: int

Bir sayaç roll-under olayı (min -> max) için irq() tetikleme bayrağı.