class PWM -- pulse-width modulation¶
Kelas PWM menghasilkan sinyal pulse-width-modulated pada Pin. Ini adalah API lintas-port modern untuk PWM; pada STM32 OpenMV cams, kelas ini membungkus mekanisme saluran pyb.Timer yang mendasarinya, sehingga setiap instansi PWM menggunakan satu saluran timer.
Contoh penggunaan:
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()
Konstruktor¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Buat objek
PWMyang mengendalikandest(sebuahPinpada OpenMV cams). Argumen kata kunci setara dengan memanggilinit()segera setelah konstruksi:freq-- frekuensi PWM dalam Hz.duty_u16-- siklus tugas sebagai rasioduty_u16 / 65535.duty_ns-- lebar pulsa dalam nanodetik.invert-- jikaTrue, balikkan polaritas keluaran.
Paling banyak satu dari
duty_u16/duty_nsyang dapat dilewatkan pada satu waktu. Mengaturfreqdapat mempengaruhi instansiPWMlain yang berbagi timer yang sama (berlaku pada STM32 -- setiap saluran dari TIM tertentu berjalan pada frekuensi yang sama).Metode¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Konfigurasi ulang keluaran PWM. Hanya argumen yang diberikan yang diperbarui; yang lain mempertahankan nilai sebelumnya. Lihat konstruktor untuk arti setiap argumen.
- freq() int¶
- freq(value: int, /) None
Dapatkan atau atur frekuensi PWM.
Tanpa argumen, kembalikan frekuensi saat ini dalam Hz.
Dengan satu argumen
value, atur frekuensi ke nilai tersebut dalam Hz. Dapat memunculkanValueErrorjika frekuensi berada di luar jangkauan yang dapat dicapai oleh timer yang mendasarinya.
- duty_u16() int¶
- duty_u16(value: int, /) None
Dapatkan atau atur siklus tugas sebagai nilai 16-bit tak bertanda dalam rentang
0--65535.Tanpa argumen, kembalikan siklus tugas saat ini.
Dengan satu argumen
value, atur siklus tugas kevalue / 65535dari periode.0selalu rendah,65535selalu tinggi.
- duty_ns() int¶
- duty_ns(value: int, /) None
Dapatkan atau atur lebar pulsa langsung dalam nanodetik.
Tanpa argumen, kembalikan lebar pulsa saat ini.
Dengan satu argumen
value, atur waktu tinggi setiap siklus kevaluenanodetik. Berguna untuk keluaran gaya servo di mana lebar pulsa adalah besaran yang bermakna, bukan rasio siklus tugas.
Keterbatasan¶
Frekuensi PWM dan resolusi siklus tugas saling bergantung pada setiap timer perangkat keras: pada frekuensi tinggi, lebih sedikit langkah counter yang masuk dalam satu periode sehingga lebih sedikit bit rendah dari
duty_u16yang bermakna.Frekuensi PWM yang dapat dicapai bergantung pada sumber clock dan prescaler timer. STM32 TIM2 / TIM5 adalah 32-bit pada sebagian besar perangkat (dan TIM3 / TIM4 juga pada STM32N6), memberikan rentang frekuensi dan siklus tugas yang lebih luas; timer yang tersisa adalah 16-bit. Lihat manual referensi MCU yang relevan untuk rentang yang tepat.
Pada STM32, beberapa saluran
PWMpada TIM yang sama berbagi frekuensi. Mengaturfreq()pada satu instansi mengubah keluaran setiap saluran lain yang terhubung ke TIM tersebut.