3.13. توليد إشارة تماثلية باستخدام PWM ومرشح RC¶
يقرأ ADC الجهود على دبوس. أما العكس -- توليد جهد وسيط بين 0 فولت و Vcc على دبوس -- فهو أصعب، لأن خرج GPIO لا يعرف سوى كيفية القيادة إلى قطبيه. والبديل القياسي هو تبديل الدبوس بين القطبين بسرعة كافية بحيث يصبح الجهد المتوسط هو ما يهمك.
3.13.1. تعديل عرض النبضة¶
إشارة تعديل عرض النبضة (PWM) هي موجة مربعة بتردد ثابت يُضبط زمن ارتفاعها -- أي نسبة كل دورة تُقضى عند Vcc بدلاً من الأرضي -- في البرمجيات. وهذه النسبة هي دورة العمل. والجهد المتوسط للموجة هو دورة العمل مضروبةً في Vcc:
V_avg = duty × Vcc
دورة عمل بنسبة 25 % يبلغ متوسطها Vcc / 4؛ ودورة عمل بنسبة 50 % متوسطها Vcc / 2؛ ودورة عمل بنسبة 75 % متوسطها 3 × Vcc / 4.
PWM بدورة عمل 25 % و 50 % و 75 %. الجهد المتوسط يتتبع دورة العمل.¶
يُضبط التردد عند تهيئة PWM؛ أما دورة العمل فهي ما تغيره البرمجيات أثناء التشغيل. ويغلّف الصنف machine.PWM قناة مؤقت عتادية تولّد الموجة دون مساعدة المعالج -- فبمجرد التهيئة، تستمر الإشارة بالتردد ودورة العمل المختارين حتى يتم تغييرهما.
3.13.2. الصنف machine.PWM¶
أنشئ نسخة PWM بالدبوس وتردد ودورة عمل أوليين:
from machine import PWM, Pin
pwm = PWM(Pin("P7"), freq=20_000, duty_u16=32768)
يبدأ ذلك موجة مربعة بتردد 20 kHz عند دورة عمل 50 % على P7. وتغير طريقتان الخرج أثناء التشغيل:
pwm.duty_u16(16384) # change to 25 % (16384 / 65535)
pwm.freq(5_000) # change to 5 kHz
تأخذ duty_u16() عددًا صحيحًا بلا إشارة بعرض 16 بت تربط 0 بحالة "منخفض دائمًا" و 65535 بحالة "مرتفع دائمًا". وتضبط freq() تردد الحامل بالهرتز.
ملاحظة
كل قناة PWM على نفس المؤقت العتادي تشترك في تردده. واستدعاء freq() على قناة واحدة يغير كل قناة أخرى مرتبطة بذلك المؤقت. استخدم قنوات مؤقتات مختلفة عندما يجب أن تعمل الخرجات بترددات مختلفة.
استدعِ deinit() لتحرير قناة المؤقت عندما لم يعد الخرج مطلوبًا.
3.13.3. حساب المتوسط بمرشح RC منخفض التمرير¶
إشارة PWM الخام ليست جهدًا ناعمًا؛ بل هي موجة مربعة متوسطها هو ما نريده. ولاستخراج ذلك المتوسط، مرّر PWM عبر مرشح منخفض التمرير -- نفس تركيبة المقاومة والمكثف المستخدمة لإزالة ارتداد المفتاح في إزالة الارتداد.
PWM عبر مرشح RC منخفض التمرير: يحسب المكثف متوسط الموجة المربعة محولاً إياها إلى جهد ثابت يتناسب مع دورة العمل.¶
تردد القطع للمرشح -- وهو الحد الفاصل بين الترددات التي يمررها وتلك التي يحجبها -- يحدده نفس حاصل ضرب RC الذي أعطى ثابت الزمن لدائرة إزالة الارتداد:
f_c = 1 / (2π × R × C)
لكي يستخرج المرشح جهدًا ثابتًا نظيفًا من دخل PWM، يجب أن يكون تردد القطع أدنى بكثير من تردد PWM نفسه. فالمكوّن الثابت (تردد 0) يمر دون تغيير؛ والتوافقي الأساسي لـ PWM (عند تردد PWM) يُخمد بمقدار يقارب f_c / f_PWM. ونسبة قدرها 1 / 200 تقلل التموج المتبقي عند الخرج إلى نحو 0.5 % من تأرجح الدخل.
نقطة بداية معقولة لقيمة مرجعية بطيئة التغير:
تردد PWM
f_PWM = 20 kHz-- أعلى بكثير من نطاق الصوت، وسهل على المؤقت أن يولده بنظافة.قيم المرشح
R = 1.6 kΩ،C = 1 µF-- تعطيf_c = 1 / (2π × 1.6 kΩ × 1 µF) ≈ 100 Hz.
إن الإخماد بمقدار 200× عند الحامل يقلل التأرجح الكامل لـ PWM إلى نحو Vcc / 200 من التموج المتبقي عند V_out -- أي نحو 16 ميلي فولت عند 3.3 فولت.
ملاحظتان عمليتان:
ممانعة خرج المرشح تقارب
R. وأي حمل لاحق يسحب تيارًا يحوّلRوالحمل إلى مقسم يسحبV_outإلى ما دون المتوسط المثالي، تمامًا مثل المقسم في صفحة قراءة الإشارة التماثلية باستخدام ADC. غذِّ دبوس ADC أو مخزنًا عالي الممانعة، وليس حملاً يسحب ميلي أمبيرات.يستغرق المكثف نحو
5 × R × C ≈ 8 msليستقر عند تغير دورة العمل؛ ويتأخرV_outعن إعداد دورة العمل بهذا المقدار. وللحصول على قيمة مرجعية تحتاج إلى تحديث أسرع، ارفع تردد القطع (بتصغيرRأوC) واقبل مزيدًا من التموج.