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 PWM yang mengendalikan dest (sebuah Pin pada OpenMV cams). Argumen kata kunci setara dengan memanggil init() segera setelah konstruksi:

  • freq -- frekuensi PWM dalam Hz.

  • duty_u16 -- siklus tugas sebagai rasio duty_u16 / 65535.

  • duty_ns -- lebar pulsa dalam nanodetik.

  • invert -- jika True, balikkan polaritas keluaran.

Paling banyak satu dari duty_u16 / duty_ns yang dapat dilewatkan pada satu waktu. Mengatur freq dapat mempengaruhi instansi PWM lain 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.

deinit() None

Nonaktifkan keluaran PWM dan lepaskan saluran timer yang digunakan.

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 memunculkan ValueError jika 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 ke value / 65535 dari periode. 0 selalu rendah, 65535 selalu 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 ke value nanodetik. 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_u16 yang 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 PWM pada TIM yang sama berbagi frekuensi. Mengatur freq() pada satu instansi mengubah keluaran setiap saluran lain yang terhubung ke TIM tersebut.