- دبابيس PWM في متحكم AVR Atmega16
- ما هي إشارة PWM؟
- المكونات مطلوبة
- مخطط الرسم البياني
- برمجة Atmega16 لـ PWM
يعد تعديل عرض النبضة (PWM) تقنية قوية حيث يتم تغيير عرض النبضة عن طريق الحفاظ على التردد ثابتًا. تستخدم هذه التقنية في العديد من أنظمة التحكم اليوم. تطبيق PWM غير محدود ويستخدم في مجموعة واسعة من التطبيقات مثل التحكم في سرعة المحرك والقياس والتحكم في الطاقة والاتصالات وما إلى ذلك. في تقنية PWM ، يمكن للمرء بسهولة إنشاء إشارة خرج تناظرية باستخدام الإشارات الرقمية. سيساعدك هذا البرنامج التعليمي في فهم PWM ومصطلحاته وكيف يمكننا تنفيذه باستخدام متحكم دقيق. في هذا البرنامج التعليمي سوف نعرض PWM باستخدام متحكم AVR Atmega16 من خلال تغيير شدة LED.
لفهم أساسيات PWM بالتفصيل ، يرجى الانتقال إلى دروسنا السابقة حول PWM مع ميكروكنترولر متنوعة:
- ARM7-LPC2148 PWM تعليمي: التحكم في سطوع LED
- تعديل عرض النبضة (PWM) باستخدام MSP430G2: التحكم في سطوع LED
- توليد PWM باستخدام PIC Microcontroller مع MPLAB و XC8
- تعديل عرض النبضة (PWM) في STM32F103C8: التحكم في سرعة مروحة التيار المستمر
- توليد إشارات PWM على دبابيس GPIO في متحكم PIC
- دروس Raspberry Pi PWM
دبابيس PWM في متحكم AVR Atmega16
يحتوي Atmega16 على أربعة دبابيس PWM مخصصة. هذه المسامير هي PB3 (OC0) ، PD4 (OC1B) ، PD5 (OC1A) ، PD7 (OC2).
يحتوي Atmega16 أيضًا على مؤقتين 8 بت وجهاز ضبط وقت 16 بت. Timer0 و Timer2 عبارة عن مؤقتات 8 بت بينما Timer1 هو مؤقت 16 بت. لإنشاء PWM ، يجب أن يكون لدينا نظرة عامة على المؤقتات حيث يتم استخدام أجهزة ضبط الوقت لإنشاء PWM. كما نعلم أن التردد هو عدد الدورات في الثانية التي يعمل بها المؤقت. لذا فإن التردد العالي يعطينا مؤقتًا أسرع. عند توليد PWM ، سيعطي تردد PWM الأسرع تحكمًا أفضل في الإخراج لأنه يمكن أن يستجيب بشكل أسرع لدورات عمل PWM الجديدة.
في هذا البرنامج التعليمي Atmega16 PWM سنستخدم Timer2. يمكنك اختيار أي دورة عمل. إذا كنت لا تعرف ما هي دورة العمل في PWM ، فلنناقش بإيجاز.
ما هي إشارة PWM؟
يعد تعديل عرض النبض (PWM) إشارة رقمية تستخدم بشكل شائع في دوائر التحكم. يسمى الوقت الذي تظل فيه الإشارة عالية "في الوقت المحدد" والوقت الذي تظل خلاله الإشارة منخفضة يسمى "وقت التوقف". هناك نوعان من المعلمات الهامة لـ PWM كما هو موضح أدناه:
دورة عمل PWM
تسمى النسبة المئوية للوقت الذي تظل فيه إشارة PWM عالية (في الوقت المحدد) كدورة عمل.
كما هو الحال في إشارة النبض 100 مللي ثانية ، إذا كانت الإشارة عالية لمدة 50 مللي ثانية ومنخفضة لمدة 50 مللي ثانية ، فهذا يعني أن النبض كان نصف الوقت مرتفعًا ونصف الوقت منخفض. لذلك يمكننا القول أن دورة العمل هي 50٪. وبالمثل ، إذا كانت النبضة في حالة 25 مللي ثانية عالية و 75 مللي ثانية في حالة منخفضة من 100 مللي ثانية ، فإن دورة العمل ستكون 25٪. لاحظ أننا نحسب فقط مدة الحالة HIGH. يمكنك الرجوع إلى الصورة أدناه للفهم البصري. صيغة دورة العمل إذن ،
دورة العمل (٪) = وقت التشغيل / (وقت التشغيل + وقت الإيقاف)
لذلك ، من خلال تغيير دورة العمل ، يمكننا تغيير عرض PWM مما يؤدي إلى تغيير سطوع LED. سيكون لدينا عرض توضيحي لاستخدام دورة عمل مختلفة في التحكم في سطوع LED. تحقق من الفيديو التوضيحي في نهاية هذا البرنامج التعليمي.
بعد تحديد دورة العمل ، ستكون الخطوة التالية هي اختيار وضع PWM. يحدد وضع PWM كيف تريد عمل PWM. هناك ثلاثة أنواع رئيسية من أوضاع PWM. هذه كالتالي:
- سريع PWM
- المرحلة الصحيحة PWM
- تصحيح الطور والتردد PWM
يتم استخدام PWM السريع حيث لا يهم تغيير المرحلة. باستخدام Fast PWM ، يمكننا إخراج قيم PWM بسرعة. لا يمكن استخدام Fast PWM حيث يؤثر تغيير الطور على العملية مثل التحكم في المحرك ، لذلك في مثل هذا التطبيق يتم استخدام أوضاع أخرى من PWM. نظرًا لأننا سنتحكم في سطوع LED حيث لن يؤثر تغيير الطور كثيرًا ، لذلك سنستخدم وضع Fast PWM.
الآن لإنشاء PWM ، سوف نتحكم في المؤقت الداخلي للعد ثم نعيده إلى الصفر عند عدد معين ، لذلك سيعد عداد الوقت ثم يعود إلى الصفر مرارًا وتكرارًا. هذا يحدد الفترة. لدينا الآن خيار التحكم في النبض ، وتشغيل النبض عند عدد معين في المؤقت أثناء ارتفاعه. عندما يعود العداد إلى 0 ، قم بإيقاف تشغيل النبض. هناك الكثير من المرونة مع هذا لأنه يمكنك دائمًا الوصول إلى عدد الموقت وتوفير نبضات مختلفة بمؤقت واحد. يعد هذا أمرًا رائعًا عندما تريد التحكم في مصابيح LED متعددة مرة واحدة. لنبدأ الآن في توصيل مؤشر LED واحد مع Atmega16 لـ PWM.
تحقق من جميع المشاريع المتعلقة بـ PWM هنا.
المكونات مطلوبة
- متحكم Atmega16 AVR IC
- 16 ميجا هرتز الكريستال المذبذب
- اثنين من المكثفات 100nF
- مكثفتان 22pF
- اضغط الزر
- أسلاك توصيل
- اللوح
- USBASP v2.0
- 2 ليد (أي لون)
مخطط الرسم البياني
نحن نستخدم OC2 لـ PWM ie Pin21 (PD7). لذا قم بتوصيل مؤشر LED واحد في PD7 pin من Atmega16.
برمجة Atmega16 لـ PWM
البرنامج الكامل معطى أدناه. انسخ البرنامج في Atmega16 باستخدام JTAG و Atmel studio وشاهد تأثير PWM على LED. سيزداد سطوعه وينخفض ببطء بسبب دورة العمل المتغيرة لـ PWM. تحقق من الفيديو المعطى في النهاية.
ابدأ برمجة Atmega16 مع إعداد Timer2 Register. بتات السجل Timer2 هي كما يلي ويمكننا ضبط أو إعادة تعيين البتات وفقًا لذلك.
سنناقش الآن جميع أجزاء Timer2 حتى نتمكن من الحصول على PWM المطلوب باستخدام برنامج مكتوب.
هناك أربعة أجزاء رئيسية في سجل Timer2:
FOC2 (مقارنة إخراج القوة لـ Timer2): يتم تعيين بت FOC2 عندما تحدد بتات WGM وضعًا غير PWM.
WGM2 (وضع توليد الموجة لـ Timer2): تتحكم هذه البتات في تسلسل العد للعداد ، ومصدر قيمة العداد القصوى (TOP) ، ونوع توليد شكل الموجة الذي سيتم استخدامه.
COM2 (قارن وضع الإخراج لـ Timer2): تتحكم هذه البتات في سلوك الإخراج. يتم شرح وصف البت الكامل أدناه.
TCCR2 - = (1 <
قم بتعيين WGM20 و WGM21 بتات على أنها عالية لتنشيط الوضع السريع PWM. يقف WGM لوضع إنشاء الموجي. بتات الاختيار على النحو التالي.
WGM00 |
WGM01 |
تشغيل وضع Timer2 |
0 |
0 |
الوضع العادي |
0 |
1 |
CTC (مسح المؤقت عند مقارنة المطابقة) |
1 |
0 |
PWM ، المرحلة صحيحة |
1 |
1 |
وضع PWM السريع |
لمزيد من التفاصيل حول وضع إنشاء الموجة ، يمكنك الرجوع إلى ورقة البيانات الرسمية لـ Atmega16.
TCCR2 - = (1 <
كما أننا لم نستخدم أي قياس مسبق لذلك قمنا بتعيين سجل مصدر الساعة على أنه "001".
بتات اختيار الساعة هي كما يلي:
CS22 |
CS21 |
CS20 |
وصف |
0 |
0 |
0 |
لا يوجد مصدر ساعة (تم إيقاف المؤقت / العداد) |
0 |
0 |
1 |
clk T2S / (بدون ترقيق مسبق) |
0 |
1 |
0 |
Clk T2S / 8 (من مقياس مسبق) |
0 |
1 |
1 |
Clk T2S / 32 (من المقياس المسبق) |
1 |
0 |
0 |
Clk T2S / 64 (من مقياس مسبق) |
1 |
0 |
1 |
Clk T2S / 128 (من مقياس مسبق) |
1 |
1 |
0 |
Clk T2S / 256 (من المقياس المسبق) |
1 |
1 |
1 |
Clk T2S / 1024 (من المقياس المسبق) |
يتم أيضًا مسح OC2 عند مقارنة المطابقة عن طريق تعيين COM21 bit كـ "1" و COM20 كـ "0".
فيما يلي خيارات تحديد وضع المقارنة (COM) لوضع Fast PWM:
كوم 21 |
كوم 21 |
وصف |
0 |
0 |
عملية المنفذ العادية ، OC2 غير متصل. |
0 |
1 |
محجوز |
1 |
0 |
امسح OC2 عند المقارنة ، قم بتعيين OC2 في TOP |
1 |
1 |
اضبط OC2 على مقارنة المقارنة ، امسح OC2 في TOP |
قم بزيادة دورة العمل من 0٪ إلى 100٪ حتى يزداد السطوع بمرور الوقت. خذ القيمة من 0-255 وأرسلها إلى دبوس OCR2.
لـ (واجب = 0 ؛ واجب <255 ؛ واجب ++) // 0 إلى دورة عمل قصوى { OCR2 = واجب ؛ // زيادة سطوع LED ببطء _delay_ms (10) ؛ }
وبالمثل ، قم بتقليل دورة العمل من 100٪ إلى 0٪ لتقليل سطوع LED تدريجيًا.
من أجل (واجب = 0 ؛ واجب> 255 ؛ واجب -) // بحد أقصى 0 دورة عمل { OCR2 = واجب ؛ // قلل ببطء سطوع LED _delay_ms (10) ؛ }
بهذا ينتهي برنامجنا التعليمي حول استخدام PWM في Atmega16 / 32.