מחלקה PWM – אפנון רוחב פולס

המחלקה PWM מוציאה אות מאופנן ברוחב פולס על Pin. זהו ה-API המודרני, החוצה-פורטים, עבור PWM; במצלמות STM32 OpenMV הוא עוטף את מנגנון ערוץ pyb.Timer הבסיסי, כך שכל מופע PWM תופס ערוץ טיימר אחד.

דוגמת שימוש:

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

בנאים

class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)

בנו אובייקט PWM שמניע את dest (Pin במצלמות OpenMV). ארגומנטים שהם מילות מפתח שקולים לקריאה ל-init() מיד לאחר הבנייה:

  • freq – תדר ה-PWM ב-Hz.

  • duty_u16 – מחזור עבודה כיחס duty_u16 / 65535.

  • duty_ns – רוחב הפולס בננו-שניות.

  • invert – אם True, הופך את קוטביות הפלט.

ניתן להעביר לכל היותר אחד מבין duty_u16 / duty_ns בכל פעם. הגדרת freq עשויה להשפיע על מופעי PWM אחרים שחולקים את אותו טיימר בסיסי (נכון ב-STM32 – כל ערוץ של TIM נתון רץ באותו תדר).

שיטות

init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None

מגדירים מחדש את פלט ה-PWM. רק הארגומנטים שסופקו מעודכנים; השאר שומרים על ערכיהם הקודמים. ראו את הבנאי למשמעות כל ארגומנט.

deinit() None

מנטרלים את פלט ה-PWM ומשחררים את ערוץ הטיימר שתפס.

freq() int
freq(value: int, /) None

מקבלים או מגדירים את תדר ה-PWM.

ללא ארגומנט, מחזיר את התדר הנוכחי ב-Hz.

עם ארגומנט יחיד value, מגדירים את התדר לערך זה ב-Hz. עשוי להעלות ValueError אם התדר נמצא מחוץ לטווח שניתן להשגה על ידי הטיימר הבסיסי.

duty_u16() int
duty_u16(value: int, /) None

מקבלים או מגדירים את מחזור העבודה כערך 16 ביט ללא סימן בטווח 065535.

ללא ארגומנט, מחזיר את מחזור העבודה הנוכחי.

עם ארגומנט יחיד value, מגדירים את מחזור העבודה ל-value / 65535 מהמחזור. 0 תמיד נמוך, 65535 תמיד גבוה.

duty_ns() int
duty_ns(value: int, /) None

מקבלים או מגדירים את רוחב הפולס ישירות בננו-שניות.

ללא ארגומנט, מחזיר את רוחב הפולס הנוכחי.

עם ארגומנט יחיד value, מגדירים את זמן הגובה של כל מחזור ל-value ננו-שניות. שימושי עבור פלטים בסגנון סרוו שבהם רוחב הפולס הוא הכמות המשמעותית ולא יחס מחזור העבודה.

מגבלות

  • תדר ה-PWM ורזולוציית מחזור העבודה תלויים זה בזה בכל טיימר חומרה: בתדרים גבוהים, פחות צעדי מונה נכנסים במחזור ולכן פחות ביטים נמוכים של duty_u16 הם משמעותיים.

  • תדר ה-PWM שניתן להשגה תלוי במקור השעון ובמחלק התדר (prescaler) של הטיימר. STM32 TIM2 / TIM5 הם 32 ביט ברוב הרכיבים (וגם TIM3 / TIM4 ב-STM32N6), מה שמעניק טווחי תדר ומחזור עבודה רחבים יותר; שאר הטיימרים הם 16 ביט. ראו את מדריך העזר של ה-MCU הרלוונטי לטווחים המדויקים.

  • ב-STM32 ערוצי PWM מרובים על אותו TIM חולקים תדר. הגדרת freq() על מופע אחד משנה את הפלט של כל ערוץ אחר המחובר לאותו TIM.