class PWM – darbe genişlik modülasyonu¶
PWM sınıfı, bir Pin üzerinde darbe genişlik modülasyonlu bir sinyal çıkarır. PWM için modern, portlar arası API’dir; STM32 OpenMV kameralarda altta yatan pyb.Timer kanal mekanizmasını sarmalar, dolayısıyla her PWM örneği bir zamanlayıcı kanalını işgal eder.
Örnek kullanım:
from machine import PWM, Pin
# 50 Hz PWM on a header pin with a 12.5 % duty.
pwm = PWM(Pin("P7"), freq=50, duty_u16=8192)
pwm.duty_u16(32768) # change duty to 50 %
pwm.init(freq=5000, duty_ns=5000) # re-init at 5 kHz, 5 us pulse
pwm.duty_ns(3000) # 3 us pulse
pwm.deinit()
Yapıcılar¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
destöğesini (OpenMV kameralarda birPin) süren birPWMnesnesi oluşturun. Anahtar sözcük argümanları, oluşturmanın hemen ardındaninit()çağrılmasına eşdeğerdir:freq– Hz cinsinden PWM frekansı.duty_u16–duty_u16 / 65535oranı olarak görev döngüsü.duty_ns– nanosaniye cinsinden darbe genişliği.invert–Trueise çıkış polaritesini tersine çevirir.
Bir seferde
duty_u16/duty_nsöğelerinden en fazla biri geçirilebilir.freqayarlamak, aynı altta yatan zamanlayıcıyı paylaşan diğerPWMörneklerini etkileyebilir (STM32’de doğrudur – belirli bir TIM’in her kanalı aynı frekansta çalışır).Yöntemler¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
PWM çıkışını yeniden yapılandırın. Yalnızca sağlanan argümanlar güncellenir; diğerleri önceki değerlerini korur. Her argümanın anlamı için yapıcıya bakın.
- deinit() None¶
PWM çıkışını devre dışı bırakın ve işgal ettiği zamanlayıcı kanalını serbest bırakın.
- freq() int¶
- freq(value: int, /) None
PWM frekansını alın veya ayarlayın.
Argüman olmadan, geçerli frekansı Hz cinsinden döndürür.
Tek bir
valueargümanıyla, frekansı Hz cinsinden o değere ayarlar. Frekans, altta yatan zamanlayıcının ulaşabileceği aralığın dışındaysaValueErroroluşturabilir.
- duty_u16() int¶
- duty_u16(value: int, /) None
Görev döngüsünü
0–65535aralığında işaretsiz 16 bitlik bir değer olarak alın veya ayarlayın.Argüman olmadan, geçerli görev döngüsünü döndürür.
Tek bir
valueargümanıyla, görev döngüsünü periyodunvalue / 65535oranına ayarlar.0her zaman düşüktür,65535her zaman yüksektir.
- duty_ns() int¶
- duty_ns(value: int, /) None
Darbe genişliğini doğrudan nanosaniye cinsinden alın veya ayarlayın.
Argüman olmadan, geçerli darbe genişliğini döndürür.
Tek bir
valueargümanıyla, her döngünün yüksek süresinivaluenanosaniyeye ayarlar. Anlamlı niceliğin görev döngüsü oranı yerine darbe genişliği olduğu servo tarzı çıkışlar için kullanışlıdır.
Kısıtlamalar¶
PWM frekansı ve görev döngüsü çözünürlüğü her donanım zamanlayıcısında birbirine bağlıdır: yüksek frekanslarda bir periyoda daha az sayaç adımı sığar, dolayısıyla
duty_u16değerinin daha az düşük biti anlamlı olur.Ulaşılabilir PWM frekansı, zamanlayıcının saat kaynağına ve ön ölçekleyicisine bağlıdır. STM32 TIM2 / TIM5 çoğu parçada 32 bittir (ve STM32N6’da TIM3 / TIM4 de öyledir), bu da daha geniş frekans ve görev döngüsü aralıkları sağlar; geri kalan zamanlayıcılar 16 bittir. Tam aralıklar için ilgili MCU referans kılavuzuna bakın.
STM32’de aynı TIM üzerindeki birden çok
PWMkanalı bir frekansı paylaşır. Bir örnektefreq()ayarlamak, o TIM’e bağlı diğer her kanalın çıkışını değiştirir.