في هذا المشروع ، سنستخدم إحدى ميزات ATmega32A لضبط سطوع 1 وات LED. الطريقة المستخدمة لضبط سرعة LED هي PWM (تعديل عرض النبض). هذا البرنامج التعليمي AVR متحكم PWM يشرح مفهوم PWM وتوليد PWM في التفاصيل (يمكنك أيضا التحقق من هذا PWM بسيطة دائرة مولد). ضع في اعتبارك دائرة بسيطة كما هو موضح في الشكل.
الآن إذا تم إغلاق المفتاح في الشكل أعلاه بشكل مستمر خلال فترة زمنية ، فسيتم تشغيل المصباح بشكل مستمر خلال ذلك الوقت. إذا تم إغلاق المفتاح لمدة 8 مللي ثانية وفتح لمدة 2 مللي ثانية على مدار 10 مللي ثانية ، فسيتم تشغيل المصباح فقط في وقت 8 مللي ثانية. الآن متوسط المحطة عبر فترة 10 مللي ثانية = وقت التشغيل / (وقت التشغيل + وقت إيقاف التشغيل) ، هذا يسمى دورة العمل وهو 80٪ (8 / (8 + 2)) ، وبالتالي فإن المتوسط سيكون جهد الخرج 80٪ من جهد البطارية.
في الحالة الثانية ، يتم إغلاق المفتاح لمدة 5 مللي ثانية وفتحه لمدة 5 مللي ثانية على مدى 10 مللي ثانية ، وبالتالي فإن متوسط الجهد الطرفي عند الخرج سيكون 50٪ من جهد البطارية. لنفترض أن جهد البطارية هو 5 فولت ودورة العمل 50٪ ، وبالتالي فإن متوسط جهد المحطة 2.5 فولت.
في الحالة الثالثة ، تكون دورة التشغيل 20٪ ومتوسط الجهد الطرفي 20٪ من جهد البطارية.
في ATMEGA32A لدينا أربع قنوات PWM ، وهي OC0 و OC1A و OC1B و OC2. هنا نحن نذهب ل استخدام قناة OC0 PWM ل تختلف سطوع LED.
المكونات مطلوبة
المعدات:
متحكم ATmega32
مزود الطاقة (5 فولت)
مبرمج AVR-ISP
100 فائق التوهج مكثف ،
1 وات LED
الترانزستور TIP127
أزرار (2 قطعة)
100nF (104) مكثف (2 قطعة) ،
مقاومات 100Ω و 1kΩ (قطعتان).
البرمجيات:
استوديو اتميل 6.1.1
Progisp أو فلاش السحر
مخطط الدائرة وشرح العمل
يوضح الشكل أعلاه مخطط دائرة باهتة LED مع متحكم AVR (يمكنك أيضًا التحقق من دائرة باهتة LED البسيطة).
في ATmega ، لأربع قنوات PWM ، قمنا بتعيين أربعة دبابيس. يمكننا فقط أخذ إخراج PWM على هذه المسامير فقط. نظرًا لأننا نستخدم PWM0 ، يجب أن نأخذ إشارة PWM في OC0 pin (PORTB 3 rd PIN). كما هو موضح في الشكل ، نقوم بتوصيل قاعدة الترانزستور بدبوس OC0 لتشغيل مؤشر LED للطاقة. هنا شيء آخر هو أكثر من أربع قنوات PWM ، اثنتان من قنوات PWM 8 بت. سنستخدم قناة PWM 8 بت هنا.
يتم توصيل مكثف بكل زر من الأزرار لتجنب الارتداد. كلما تم الضغط على زر سيكون هناك بعض الضوضاء في الدبوس. على الرغم من أن هذه الضوضاء تستقر في أجزاء من الثانية. بالنسبة لجهاز التحكم ، تعمل القمم الحادة قبل التثبيت كمحفزات. يمكن القضاء على هذا التأثير إما عن طريق البرامج أو الأجهزة ، ليكون البرنامج بسيطًا. نحن نستخدم طريقة الأجهزة عن طريق إضافة مكثف التخفيض.
تلغي المكثفات تأثير ارتداد الأزرار.
يوجد في ATMEGA طريقتان لتوليد PWM ، وهما:
1. المرحلة الصحيحة PWM
2. سريع PWM
هنا سنبقي كل شيء بسيطًا ، لذلك سنستخدم طريقة FAST PWM لتوليد إشارة PWM.
أول من يختار تردد PWM ، هذا يعتمد على التطبيق عادة ، بالنسبة لمصباح LED ، فإن أي تردد أكبر من 50 هرتز سيفعل. لهذا السبب نختار ساعة العداد 1 ميجا هرتز. لذلك نحن لا نختار بريسكالار. ما قبل القياس هو رقم يتم اختياره للحصول على ساعة عداد أقل. على سبيل المثال ، إذا كانت ساعة المذبذب 8 ميجا هرتز ، فيمكننا اختيار مقياس مسبق من "8" للحصول على ساعة 1 ميجا هرتز للعداد. يتم اختيار المقياس على أساس التردد. إذا أردنا المزيد من النبضات ذات الفترات الزمنية ، فعلينا أن نختار ما قبل الكالار الأعلى.
الآن للحصول على FAST PWM لساعة 50 هرتز من ATMEGA ، نحتاج إلى تمكين البتات المناسبة في سجل “ TCCR0 ”. هذا هو السجل الوحيد الذي نحتاج إلى إزعاجنا ، للحصول على 8bit FAST PWM.
هنا،
1. CS00 ، CS01 ، CS02 (أصفر) - حدد مقياس التحمل لاختيار ساعة العداد. يظهر الجدول الخاص بريسكالار المناسب في الجدول أدناه. لذلك من أجل القياس المسبق (ساعة المذبذب = ساعة العداد).
لذا فإن CS00 = 1 ، والبتتان الأخريان هما صفر.
2. تم تعديل WGM01 و WGM00 لاختيار أوضاع توليد شكل الموجة ، بناءً على الجدول أدناه ، للحصول على PWM سريع. لدينا WGM00 = 1 و WGM01 = 1 ؛
3. نحن نعلم الآن أن PWM هي إشارة ذات نسبة عمل مختلفة أو أوقات إيقاف تشغيل مختلفة. حتى الآن اخترنا تردد ونوع PWM. الموضوع الرئيسي لهذا المشروع يكمن في هذا القسم. للحصول على نسبة واجب مختلفة ، سنختار قيمة بين 0 و 255 (2 ^ 8 بسبب 8 بت). لنفترض أننا اخترنا القيمة 180 ، نظرًا لأن العداد يبدأ في العد من 0 ويصل إلى القيمة 180 ، فقد يتم تشغيل استجابة الإخراج. قد يكون هذا الزناد مقلوبًا أو غير مقلوب. هذا هو الناتج يمكن إخباره بسحبه عند الوصول إلى العد ، أو يمكن إخباره بالسحب لأسفل عند الوصول إلى العد.
يتم اختيار هذا الاختيار للسحب لأعلى أو لأسفل بواسطة بت CM00 و CM01.
كما هو موضح في الجدول ، لكي يرتفع الناتج عند المقارنة وسيظل الناتج مرتفعًا حتى القيمة القصوى (كما هو موضح في الشكل في الأسفل). علينا أن نختار الوضع العكسي للقيام بذلك ، لذا COM00 = 1 ؛ COM01 = 1.
كما هو مبين في الشكل أدناه ، OCR0 (سجل مقارنة المخرجات 0) هو البايت الذي يخزن القيمة التي اختارها المستخدم. لذلك إذا قمنا بتغيير OCR0 = 180 ، فإن وحدة التحكم تقوم بتشغيل التغيير (مرتفع) عندما يصل العداد إلى 180 من 0.
الآن لتغيير سطوع LED ، يتعين علينا تغيير DUTY RATIO لإشارة PWM. لتغيير نسبة الرسوم ، نحتاج إلى تغيير قيمة OCR0. عندما نغير قيمة OCR0 ، يستغرق العداد وقتًا مختلفًا للوصول إلى OCR0. لذا فإن جهاز التحكم يسحب الإخراج عاليًا في أوقات مختلفة.
لذلك بالنسبة لـ PWM لدورات العمل المختلفة ، نحتاج إلى تغيير قيمة OCR0.
في الدائرة لدينا زرين. زر واحد لزيادة قيمة OCR0 وبالتالي فإن DUTY RATIO لإشارة PWM ، والآخر لتخفيض قيمة OCR0 وبالتالي فإن DUTY RATIO لإشارة PWM.