PWM: a pin that can only be on or off, faking an in-between
أو تصفّح كل الدروس.
- 503قطعة على المنضدة
- 44لوحة تعمل الآن
- 1.00xزمن حقيقي، على كل لوحة
للطرف الرقمي المخرج حالتان فقط. لا يستطيع البقاء عند 2.5 V ليجعل الـLED بنصف سطوعه. لكن تعديل عرض النبضة (PWM) يحقق التأثير نفسه بطريقة مختلفة: بدّل الطرف بين التشغيل والإيقاف بسرعة كافية، وغيّر نسبة الوقت التي يقضيها في التشغيل من كل دورة، فيرى أي شيء بعده لا يستطيع مجاراة هذه السرعة المتوسطَ فقط، وهو يتصرف كجهد وسطي حقيقي.
الدائرة أعلاه هي برنامج fade المدمج في Arduino Uno، يعمل فعليًا. تضع analogWrite() على الطرف 9 المؤقت 1 في وضع PWM بدقة 8 بت وتصحيح الطور مع مقسّم 64، وهذا يعطي 16 MHz مقسومة على 64 ضرب 510، أي نحو 490 Hz. هذا الرقم ليس تخمينًا؛ إنه ما ينتجه عتاد المؤقت فعلًا عند هذا المقسّم وهذا الوضع، وبعد ضبطه يحافظ المؤقت على دورة العمل من تلقاء نفسه. لا يغيّر الكود إلا سجل المقارنة، ثلاثين مرة في الثانية، عبر جدول من 64 قيمة بشكل دورة واحدة من (1 - جيب التمام) مقسومة على 2، وهذا ما يجعل الضوء يبدو كأنه يتنفس بدل أن يرتفع بخط مستقيم: فالعين تقرأ السطوع تقريبًا بشكل لوغاريتمي، لذلك يبدو المنحدر الخطي كأنه يتسارع عند الطرف الأعلى.
هذا هو PWM العتادي: بعد ضبط المؤقت، يصبح المعالج حرًا ليفعل شيئًا آخر بين التحديثات، ولا يتعثر الشكل الموجي على الطرف حتى لو انشغل الكود قليلًا. أما PWM البرمجي، وهو البديل على طرف لا مؤقت خلفه، فيجعل المعالج نفسه يقلب الطرف وفق جدول زمني، وهذا يكلّف وقتًا من المعالج يتناسب مع التردد، وقد يتذبذب توقيته إذا احتاج شيء آخر المعالج في لحظة غير مناسبة.
وما تراه على الـLED ليس التبديل اللحظي بين التشغيل والإيقاف أيضًا. مجس الـLED في Mokxi متوسط قصير العمر لسطوعه، بثابت زمني قريب من 8 ملي ثانية، وهو في نطاق الوقت الذي تحتاجه استجابة العين لتغيّر. وعند 490 Hz تستغرق كل دورة PWM نحو 2 ملي ثانية، أسرع بكثير مما يستطيع ذلك المتوسط تتبعه، فيعكس الـLED دورة العمل بدقة تصل إلى نسبة مئوية بسيطة بدل أن يومض في كل دورة. وهذه ليست خدعة عرض تنوب عن التمويه؛ بل هي التوسيط نفسه الذي تقوم به شبكية العين الحقيقية، محسوبًا بالطريقة نفسها.
افتح الدائرة وشاهد التنفس يستقر على إيقاعه. المقارنة التي تستحق الإجراء بعد ذلك هي على ESP32-C3، التي تأتي بالتنفس نفسه بطريقتين: fade ينفّذه برمجيًا، وpwmfade يسلّمه إلى LEDC، وحدة PWM الخاصة بالشريحة، على أي طرف بدل ستة أطراف ثابتة. كلاهما في صفحات محاكي اللوحات.
ابنِ هذا على أرض الواقع
افتح المحرر وغيّر قيمة وشاهد الرقم يتحرك معها. لا شيء لتثبّته ولا حاجة إلى حساب.