الفئة PWM -- تعديل عرض النبضة (pulse-width modulation)

تُخرج الفئة PWM إشارة معدّلة بعرض النبضة على Pin. وهي الواجهة البرمجية الحديثة عبر المنافذ لـ PWM؛ وعلى كاميرات OpenMV من نوع STM32 تغلّف آلية قناة 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()

البواني (Constructors)

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 بت غير موقّعة في النطاق 0 -- 65535 أو اضبطها.

بدون وسيطة، تُعيد دورة العمل الحالية.

مع وسيطة 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 بت. انظر دليل مرجع المتحكم الدقيق المعني لمعرفة النطاقات الدقيقة.

  • على STM32 تشارك قنوات PWM المتعددة على نفس TIM التردد نفسه. يؤدي ضبط freq() على نسخة واحدة إلى تغيير خرج كل قناة أخرى متصلة بذلك TIM.