- AVR माइक्रोकंट्रोलर Atmega16 में PWM पिंस
- PWM सिग्नल क्या है?
- अवयव आवश्यक
- सर्किट आरेख
- PWM के लिए Atmega16 प्रोग्रामिंग
पल्स चौड़ाई मॉड्यूलेशन (पीडब्लूएम) एक शक्तिशाली तकनीक है जहां आवृत्ति को स्थिर रखते हुए नाड़ी की चौड़ाई को बदल दिया जाता है। तकनीक का उपयोग आज कई नियंत्रण प्रणालियों में किया जाता है। पीडब्लूएम का अनुप्रयोग सीमित नहीं है और इसका उपयोग कई प्रकार के अनुप्रयोगों में किया जाता है जैसे मोटर गति नियंत्रण, माप, शक्ति नियंत्रण और संचार आदि। पीडब्लूएम तकनीक में, डिजिटल सिग्नल का उपयोग करके आसानी से एनालॉग आउटपुट सिग्नल उत्पन्न किया जा सकता है । यह ट्यूटोरियल आपको PWM, इसकी शब्दावली और हम माइक्रोकंट्रोलर का उपयोग करके इसे कैसे लागू कर सकते हैं, यह समझने में मदद करेंगे। इस ट्यूटोरियल में हम एक एलईडी की तीव्रता को अलग करके AVR Atmega16 माइक्रोकंट्रोलर के साथ PWM का प्रदर्शन करेंगे ।
PWM की मूल बातें विस्तार से समझने के लिए, कृपया विभिन्न माइक्रोकंट्रोलर्स के साथ PWM पर हमारे पिछले ट्यूटोरियल पर जाएँ:
- ARM7-LPC2148 PWM ट्यूटोरियल: एलईडी की चमक को नियंत्रित करना
- पल्स चौड़ाई मॉड्यूलेशन (PWM) MSP430G2 का उपयोग करते हुए: एलईडी की चमक को नियंत्रित करना
- MPLAB और XC8 के साथ PIC माइक्रोकंट्रोलर का उपयोग करके PWM उत्पन्न करना
- पल्स चौड़ाई मॉडुलन (PWM) STM32F103C8 में: डीसी फैन की गति को नियंत्रित करना
- PIC माइक्रोकंट्रोलर के GPIO पिन पर PWM सिग्नल उत्पन्न करना
- रास्पबेरी पाई PWM ट्यूटोरियल
AVR माइक्रोकंट्रोलर Atmega16 में PWM पिंस
Atmega16 में चार समर्पित PWM पिन हैं । ये पिन PB3 (OC0), PD4 (OC1B), PD5 (OC1A), PD7 (OC2) हैं।
इसके अलावा Atmega16 में दो 8-बिट टाइमर और एक 16 बिट टाइमर है। Timer0 और Timer2 8-बिट टाइमर हैं जबकि Timer1 16-बिट टाइमर है । PWM उत्पन्न करने के लिए हमारे पास टाइमर का अवलोकन होना चाहिए क्योंकि PWM उत्पन्न करने के लिए टाइमर का उपयोग किया जाता है। जैसा कि हम जानते हैं कि आवृत्ति प्रति सेकंड चक्र की संख्या है जो टाइमर पर चलती है। तो उच्च आवृत्ति हमें एक तेज टाइमर देगी। पीडब्लूएम उत्पन्न करने में, एक तेज पीडब्लूएम आवृत्ति आउटपुट पर बेहतर नियंत्रण देगी क्योंकि यह नए पीडब्लूएम ड्यूटी साइकल का तेजी से जवाब दे सकता है।
इस Atmega16 PWM ट्यूटोरियल में हम टाइमर 2 का उपयोग करेंगे। आप कोई भी कर्तव्य चक्र चुन सकते हैं। यदि आप नहीं जानते कि PWM में कर्तव्य चक्र क्या है तो आइए संक्षेप में चर्चा करते हैं।
PWM सिग्नल क्या है?
पल्स चौड़ाई मॉड्यूलेशन (पीडब्लूएम) एक डिजिटल सिग्नल है जो नियंत्रण सर्किटरी में सबसे अधिक उपयोग किया जाता है। जिस समय के दौरान सिग्नल अधिक रहता है उसे "समय पर" कहा जाता है और जिस समय सिग्नल कम रहता है उसे "समय" कहा जाता है। नीचे दिए गए चर्चा के अनुसार PWM के लिए दो महत्वपूर्ण पैरामीटर हैं:
PWM का कर्तव्य चक्र
समय का प्रतिशत जिसमें PWM सिग्नल उच्च रहता है (समय पर) को कर्तव्य चक्र कहा जाता है।
जैसे 100ms पल्स सिग्नल में, यदि सिग्नल 50ms के लिए हाई है और 50ms के लिए LOW है, तो इसका मतलब है कि पल्स आधा समय हाई और हाफ टाइम LOW था। तो हम कह सकते हैं कि शुल्क चक्र 50% है। इसी तरह यदि पल्स 25ms उच्च अवस्था में है और 100ms में से LOW राज्य में 75ms है, तो कर्तव्य चक्र 25% होगा। ध्यान दें कि हम केवल उच्च स्थिति की अवधि की गणना करते हैं। आप दृश्य समझ के लिए नीचे दिए गए चित्र का संदर्भ ले सकते हैं। कर्तव्य चक्र का सूत्र तब है,
ड्यूटी साइकिल (%) = समय पर / (समय + बंद समय पर)
इसलिए, कर्तव्य चक्र को बदलकर हम पीडब्लूएम की चौड़ाई को बदल सकते हैं, जिससे एलईडी चमक में परिवर्तन होता है। हमारे पास एलईडी की चमक को नियंत्रित करने में विभिन्न कर्तव्य चक्र का उपयोग करने का डेमो होगा। इस ट्यूटोरियल के अंत में डेमो वीडियो देखें ।
कर्तव्य चक्र का चयन करने के बाद, अगला कदम PWM मोड का चयन करना होगा। PWM मोड निर्दिष्ट करता है कि आप PWM कैसे काम करना चाहते हैं। मुख्य रूप से 3 प्रकार के PWM मोड हैं। ये इस प्रकार हैं:
- फास्ट PWM
- चरण सही पीडब्लूएम
- चरण और आवृत्ति सही PWM
फास्ट पीडब्ल्यूएम का उपयोग किया जाता है जहां चरण परिवर्तन कोई फर्क नहीं पड़ता। Fast PWM का उपयोग करके, हम PWM मूल्यों को तेजी से आउटपुट कर सकते हैं। फास्ट पीडब्लूएम का उपयोग नहीं किया जा सकता है, जहां चरण परिवर्तन मोटर नियंत्रण जैसे संचालन को प्रभावित करता है, इसलिए ऐसे अनुप्रयोग में पीडब्लूएम के अन्य मोड का उपयोग किया जाता है। चूंकि हम एलईडी की चमक को नियंत्रित करेंगे, जहां चरण परिवर्तन बहुत प्रभावित नहीं करेगा, इसलिए हम फास्ट पीडब्लूएम मोड का उपयोग करेंगे।
पीडब्लूएम उत्पन्न करने के लिए हम गणना करने के लिए आंतरिक टाइमर को नियंत्रित करेंगे और फिर एक विशेष गणना में शून्य पर वापस सेट करेंगे, इसलिए टाइमर की गिनती होगी और फिर से और फिर से शून्य पर सेट होगी। यह अवधि निर्धारित करता है। अब हमारे पास एक नाड़ी को नियंत्रित करने का विकल्प है, जो टाइमर में एक विशिष्ट गणना पर एक नाड़ी को चालू करते हुए ऊपर जाता है। जब काउंटर 0 पर वापस जाता है, तो पल्स को बंद कर दें। इसके साथ बहुत लचीलापन है क्योंकि आप हमेशा टाइमर की गिनती का उपयोग कर सकते हैं और एक ही टाइमर के साथ अलग-अलग दालें प्रदान कर सकते हैं। यह बहुत अच्छा है जब आप एक साथ कई एलईडी को नियंत्रित करना चाहते हैं। अब चलो PWM के लिए Atmega16 के साथ एक एलईडी को बदलना शुरू करें ।
यहां सभी पीडब्लूएम संबंधित परियोजनाओं की जांच करें।
अवयव आवश्यक
- एटमेगा 16 एवीआर माइक्रोकंट्रोलर आईसी
- 16Mhz क्रिस्टल थरथरानवाला
- दो 100nF कैपेसिटर
- दो 22pF कैपेसिटर
- बटन दबाओ
- जम्पर तार
- ब्रेड बोर्ड
- USBASP v2.0
- 2 एलईडी (कोई भी रंग)
सर्किट आरेख
हम PWM यानी Pin21 (PD7) के लिए OC2 का उपयोग कर रहे हैं। तो Atmega16 के PD7 पिन पर एक एलईडी कनेक्ट करें।
PWM के लिए Atmega16 प्रोग्रामिंग
पूरा कार्यक्रम नीचे दिया गया है। JTAG और Atmel स्टूडियो का उपयोग करके Atmega16 में कार्यक्रम को जलाएं और LED पर PWM का प्रभाव देखें। PWM के अलग-अलग कर्तव्य चक्र के कारण इसकी चमक धीरे-धीरे बढ़ेगी और घटेगी। अंत में दिए गए वीडियो को देखें ।
Timer2 रजिस्टर की स्थापना के साथ Atmega16 प्रोग्रामिंग शुरू करें। Timer2 रजिस्टर बिट्स इस प्रकार हैं और हम बिट्स को तदनुसार सेट या रीसेट कर सकते हैं।
अब हम Timer2 के सभी बिट्स के बारे में चर्चा करेंगे ताकि हम लिखित प्रोग्राम का उपयोग करके वांछित PWM प्राप्त कर सकें।
टिमर 2 रजिस्टर में मुख्य रूप से चार भाग हैं:
FOC2 (फ़ोर्स आउटपुट तुलना टाइमर के लिए): FOC2 बिट तब सेट होता है जब WGM बिट्स एक गैर-पीडब्लू मोड निर्दिष्ट करते हैं।
WGM2 (टिमर 2 के लिए वेव जेनरेशन मोड): ये बिट्स काउंटर के काउंटिंग सीक्वेंस को नियंत्रित करते हैं, अधिकतम (TOP) काउंटर वैल्यू के स्रोत और किस तरह के वेवफॉर्म जेनरेशन का उपयोग किया जाता है।
COM2 (टाइमर 2 के लिए आउटपुट मोड की तुलना करें): ये बिट्स आउटपुट व्यवहार को नियंत्रित करते हैं। पूर्ण बिट विवरण नीचे समझाया गया है।
TCCR2 - = (1 <
PWM फास्ट मोड को सक्रिय करने के लिए WGM20 और WGM21 बिट्स को हाई सेट करें। डब्ल्यूजीएम स्टेंड्स फॉर वेवफॉर्म जेनरेशन मोड। चयन बिट्स नीचे हैं।
WGM00 |
WGM01 |
टाइमर 2 मोड ऑपरेशन |
० |
० |
सामान्य स्थिति |
० |
1 |
सीटीसी (मैच की तुलना पर स्पष्ट टाइमर) |
1 |
० |
पीडब्ल्यूएम, चरण सही |
1 |
1 |
फास्ट PWM मोड |
वेवफॉर्म जेनरेशन मोड के बारे में अधिक जानकारी के लिए, आप Atmega16 की आधिकारिक डेटशीट का उल्लेख कर सकते हैं।
TCCR2 - = (1 <
इसके अलावा हमने किसी भी पूर्व-स्केलिंग का उपयोग नहीं किया है इसलिए हमने क्लॉक सोर्स रजिस्टर को '001' के रूप में सेट किया है।
घड़ी चयन बिट्स इस प्रकार हैं:
CS22 |
CS21 |
CS20 |
विवरण |
० |
० |
० |
कोई घड़ी स्रोत (टाइमर / काउंटर बंद) |
० |
० |
1 |
clk T2S / (कोई पूर्व निर्धारित नहीं) |
० |
1 |
० |
Clk T2S / 8 (प्रीस्कूलर से) |
० |
1 |
1 |
Clk T2S / 32 (प्रीस्कूलर से) |
1 |
० |
० |
Clk T2S / 64 (प्रीस्कूलर से) |
1 |
० |
1 |
Clk T2S / 128 (प्रीस्कूलर से) |
1 |
1 |
० |
Clk T2S / 256 (प्रीस्कूलर से) |
1 |
1 |
1 |
Clk T2S / 1024 (प्रीस्कूलर से) |
इसके अलावा OC2 को COM21 बिट को '1' और COM20 को '0' के रूप में सेट करके मैच से साफ किया जाता है।
Fast PWM मोड के लिए आउटपुट मोड (COM) चयन विकल्प नीचे दिए गए हैं:
COM21 |
COM21 |
विवरण |
० |
० |
सामान्य पोर्ट ऑपरेशन, OC2 डिस्कनेक्ट हो गया। |
० |
1 |
सुरक्षित |
1 |
० |
OC2 की तुलना मैच पर करें, OC2 को TOP पर सेट करें |
1 |
1 |
मिलान पर OC2 सेट करें, शीर्ष पर OC2 साफ़ करें |
कर्तव्य चक्र को 0% से बढ़ाकर 100% करें ताकि समय के साथ चमक बढ़े। 0-255 से मान लें और इसे OCR2 पिन पर भेजें।
के लिए (कर्तव्य = 0; कर्तव्य <255; कर्तव्य ++) // 0 से अधिकतम कर्तव्य चक्र { OCR2 = कर्तव्य; // धीरे-धीरे एलईडी चमक बढ़ाएं _delay_ms (10); }
इसी तरह एलईडी की चमक को कम करने के लिए कर्तव्य चक्र को 100% से घटाकर 0% करें।
for (ड्यूटी = 0; कर्तव्य> 255; कर्तव्य--) // अधिकतम 0 कर्तव्य चक्र { OCR2 = कर्तव्य; // धीरे-धीरे एलईडी चमक कम करें _delay_ms (10); }
यह Atmega16 / 32 में PWM का उपयोग करने पर हमारे ट्यूटोरियल को पूरा करता है ।