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)¶
idile 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çininit()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ı) veya4(“4x çözme” – her iki fazın her kenarı sayılır) değerlerini destekler. Varsayılan1.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çmaxdeğerini geçtiğindemindeğerine sarmalanır ve cycles sayacı artar (diğer yönde hareket ederken azalır). Her ikisini de0olarak geçmek aralığı devre dışı bırakır.index(yalnızca anahtar sözcük) – yükselen kenarı konum sayacınımindeğerine yeniden yükleyen ve cycles sayacını yöne göre güncelleyen birPin; 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 birPin(cycles sayacını değiştirmeden).match(yalnızca anahtar sözcük) – birIRQ_MATCHkesmesinin tetiklendiği konum değeri. Devre dışı bırakmak içinNonegeçin.match_pin(yalnızca anahtar sözcük) – konum sayacımatchdeğerine eşit olduğunda yüksek, aksi halde düşük sürülen birPin.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
valueargümanı ile, konum sayacını atomik olarakvaluedeğerine ayarlar ve önceki sayımı döndürür. Yaygın deyimenc.value(0), bir ölçüm penceresinin başında sayacı sıfırlar.
- cycles() int¶
- cycles(value: int, /) int
Konum sayacının
max/mindeğ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
valueargümanı ile, cycles sayacını (konum sayacına dokunmadan)valuedeğ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
Encodernesnesini alır; belirli olay, işleyici içindeirq.flags()aracılığıyla tanımlanabilir.trigger, bir veya daha fazlaIRQ_*sabitinden oluşan bir bit maskesidir:IRQ_RESET–resetpini etkinleştirildi.IRQ_INDEX–indexpini etkinleştirildi.IRQ_MATCH– konum sayacımatchdeğerine ulaştı. Match tek seferliktir ve IRQ yeniden kurularak yeniden etkinleştirilmelidir.IRQ_ROLL_OVER– konum sayacımaxdeğerindenmindeğerine sarmalandı.IRQ_ROLL_UNDER– konum sayacımindeğerindenmaxdeğ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çinhandler=Nonegeçin.
Sabitler¶