تعرف على كيفية التحكم في سطوع مؤشر LED المتصل بـ Raspberry Pi باستخدام PWM.

PWM هو شيء نستخدمه جميعًا كل يوم، حتى لو لم نكن نعرف ذلك. إنها تقنية واضحة ومفيدة بشكل لا يصدق في مجموعة من التطبيقات. والأفضل من ذلك، أنه شيء يمكن لجهاز Raspberry Pi الخاص بك القيام به دون بذل أي جهد. كيف؟ لنلقي نظرة.

ما هو PWM؟

كما يقول المصطلح، يبدو "تعديل عرض النبض" خياليًا جدًا. لكن كل ما نتحدث عنه هنا هو إيقاف تشغيل الإشارة الكهربائية وتشغيلها مرة أخرى، بسرعة كبيرة جدًا. لماذا قد نريد أن نفعل هذا؟ ببساطة لأنها طريقة سهلة جدًا لمحاكاة إشارة تناظرية متغيرة، دون اللجوء إليها قبعات راسبيري باي، والإضافاتأو دوائر إضافية. بالنسبة لبعض التطبيقات، مثل تسخين الموقد، أو تشغيل المحرك، أو تعتيم مؤشر LED، لا يمكن تمييز إشارة PWM حرفيًا عن الجهد التناظري "الحقيقي".

دورات العمل

لذا، لدينا سلسلة من النبضات يتم تغذيتها في الحمولة (الشيء الذي نقوده). وهذا وحده ليس مفيدًا إلى أن نبدأ في تغيير (أو تعديل) عرض تلك النبضات. يمكن أن تستغرق مرحلة "التشغيل" لفترة تشغيل وإيقاف معينة ما بين 0 إلى 100% من إجمالي الدورة. نحن نسمي هذه النسبة دورة العمل.

instagram viewer

على سبيل المثال، لنفترض أن لدينا إشارة PWM 3V مع دورة تشغيل تبلغ 50%. إن متوسط ​​كمية الطاقة التي تمر عبر مؤشر LED سيكون مكافئًا لإشارة تعمل دائمًا تبلغ 1.5 فولت. قم برفع دورة العمل، ويصبح مؤشر LED أكثر سطوعًا؛ اطلبه لأسفل، وسيصبح مؤشر LED خافتًا. يمكننا إنشاء الصوت باستخدام نفس الطريقة، ولهذا السبب قد يتوقف الصوت الموجود على جهاز Raspberry Pi عن العمل إذا كنت تستخدم PWM لأشياء أخرى.

PWM على راسبيري باي

يمكنك استخدام برنامج PWM على كل دبوس GPIO في Raspberry Pi. ولكن الأجهزة PWM متاحة فقط على GPIO12، GPIO13، GPIO18، و GPIO19.

ماهو الفرق؟ حسنًا، إذا كنت ستستخدم برنامجًا لإنشاء الإشارة، فسوف تستهلك دورات وحدة المعالجة المركزية. ومع ذلك، قد يكون لدى وحدة المعالجة المركزية الخاصة بك أشياء أفضل للقيام بها بدلاً من إخبار مؤشر LED بإيقاف التشغيل وتشغيله عدة مئات من المرات في الثانية. في الواقع، قد يصبح مشتتًا ومتعثرًا بسبب مهام أخرى، مما قد يؤدي إلى إفساد توقيت PWM بشكل خطير.

وبالتالي، غالبًا ما يكون من الأفضل تفويض المهمة إلى دوائر متخصصة. في حالة Raspberry Pi، تعيش هذه الدائرة في الداخل النظام على الرقاقة الذي يضم وحدة المعالجة المركزية. غالبًا ما تكون أجهزة PWM أكثر دقة وملاءمة، وبالتالي فهي الخيار المفضل في معظم الحالات. إذا كنت تريد فكرة عما يحدث تحت الغطاء في شريحة Broadcom BCM2711 الخاصة بـ Raspberry Pi 4، فيمكنك إلقاء نظرة على وثائق BCM2711. يغطي الفصل الثامن عناصر PWM!

تعتيم الصمام

لكي يعمل مؤشر LED الخاص بنا مع Raspberry Pi، سنحتاج إلى القيام ببعض أعمال اللوح. وهذا يعني مكونين: LED نفسه، ومقاومًا محددًا للتيار، والذي سنقوم بتوصيله على التوالي معه. بدون المقاوم، يكون مصباح LED الخاص بك معرضًا لخطر الموت بسبب نفخة دخان كريهة الرائحة إذا مر عبره تيار كبير.

العمل على قيمة المقاوم

لا يهم أي طرف من LED تقوم بتوصيل المقاوم به. ما يهم هو قيمة المقاوم. يمكن لـ Raspberry Pi 4 توفير حوالي 16 مللي أمبير لكل دبوس. إذن نحن نستطيع استخدم قانون أوم لمعرفة قيمة المقاومة المطلوبة.

ينص القانون المذكور على أن المقاومة يجب أن تساوي الجهد على التيار. نحن نعرف الجهد الخارج من طرف GPIO الخاص بـ Pi (3.3 فولت)، ونعرف ما يجب أن يكون عليه التيار (16 مللي أمبير، أو 0.016 أمبير). إذا قسمنا الأول على الأخير، نحصل على 206.25. الآن، نظرًا لأنك ستواجه صعوبة في العثور على مقاومات بهذه القيمة، فلنستخدم 220 أوم بدلاً من ذلك.

قم بتوصيل أنود LED (الساق الطويلة) بـ جي بي اي 18 (وهو الدبوس الفعلي 12 على Raspberry Pi). قم بتوصيل الكاثود (الساق القصيرة) بأي من دبابيس Pi الأرضية. لا تنسى المقاوم، في مكان ما على طول الطريق. أنت الآن جاهز للانطلاق!

تنفيذ PWM على Raspberry Pi

لكي يعمل PWM للأجهزة على Raspberry Pi، سنستخدم الأمر مكتبة rpi-hardware-pwm من كاميرون ديفيدسون بيلون، مقتبس من كود جيريمي إمبسون. وقد تم استخدام هذا في مفاعل حيوي (مفاعل حيوي قائم على باي) - لكنه بسيط بما فيه الكفاية لأغراضنا.

أولا، دعونا قم بتحرير ملف config.txtالملف الموجود في /boot الدليل. نحتاج فقط إلى إضافة سطر واحد: dtoverlay=pwm-2chan. إذا أردنا استخدام أطراف GPIO بخلاف 18 و19، فيمكننا إضافة بعض الوسائط الإضافية هنا. في الوقت الحالي، دعونا نبقي الأمور بسيطة.

أعد تشغيل Pi الخاص بك وقم بتشغيل:

lsmod | grep pwm

يسرد هذا الأمر جميع الوحدات المحملة على الجزء المركزي من نظام التشغيل، المسمى kernel. هنا، نقوم بتصفيتهم للعثور على عناصر PWM فقط، باستخدام الملف grep (هذا أمر "طباعة التعبير العادي العالمي").

لو pwm_bcm2835 يظهر بين الوحدات المدرجة، فنحن على المسار الصحيح. لقد انتهينا تقريبًا من التحضير! كل ما تبقى هو تثبيت المكتبة الفعلية. من المحطة، قم بتشغيل:

sudo pip3 install rpi-hardware-pwm

نحن الآن جاهزون للبدء.

ترميز دائرة PWM LED

حان الوقت لتتسخ أيدينا بالقليل من الترميز في بايثون. أطلق النار على Thonny وانسخ الكود التالي. ثم ضرب يجري.

from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()

كل شيء على ما يرام، سترى أن مؤشر LED يصبح أكثر سطوعًا تدريجيًا حتى أنا متغير العداد يصل إلى 100. ثم سيتم إيقافه. ما الذي يحدث هنا؟ دعونا نسير من خلال ذلك.

نحن نقوم باستيراد الجزء ذي الصلة من مكتبة PWM للأجهزة (جنبًا إلى جنب مع ملف وقت الوحدة النمطية) والإعلان عن متغير جديد. يمكننا ضبط pwm_channel إلى 0 أو 1، والتي تتوافق على التوالي مع دبابيس GPIO 18 و19 على Pi.

ال هرتز القيمة التي يمكننا ضبطها على أي تردد نريده (على الرغم من أننا مقيدون في النهاية بسرعة ساعة Pi). عند 60 هرتز، لا ينبغي أن نرى أي وميض لـ PWM. ولكن قد يكون من الجيد البدء بقيمة منخفضة جدًا (مثل 10) ثم رفع الأمور تدريجيًا. افعل هذا، وستكون قادرًا بالفعل على رؤية حدوث النبضات. لا تأخذ كلمتنا فقط!

نحن نعمل دورة واجبنا (أنا) من 0 إلى 100 باستخدام بايثون للحلقة. ومن الجدير بالذكر أنه يمكننا ضبط وقت النوم حجة إلى ما نشاء — نظرًا لأنه يتم التعامل مع PWM في الأجهزة، فسيتم تشغيله خلف الكواليس، مهما طالت المدة التي طلبنا فيها من البرنامج الانتظار.

هناك المزيد لتتعلمه مع PWM

تهانينا! لقد كتبت برنامج PWM الأول الخاص بك. ولكن، كما هو الحال غالبًا مع Raspberry Pi، هناك الكثير مما يمكنك فعله بهذه الأشياء، خاصة إذا قمت بتعزيز Raspberry Pi باستخدام قبعة PWM المناسبة. لذا، لا تكتفي بمصباح LED صغير. يمكنك استخدام هذه القوة الجديدة للتحكم في المحركات وترميز الرسائل وإنشاء نغمات المركب. عالم من التعديل ينتظر!