- PWM सिग्नल क्या है?
- PWM PIC16F877A का उपयोग कर:
- PWM सिग्नल उत्पन्न करने के लिए प्रोग्रामिंग PIC:
- स्कैमैटिक्स और परीक्षण:
- हार्डवेयर पर काम करना:
यह MPLAB और XC8 का उपयोग करते हुए PIC PIC माइक्रोकंट्रोलर सीखने का हमारा 10 वां ट्यूटोरियल है । अब तक, हमने कई बुनियादी ट्यूटोरियल्स को कवर किया है जैसे कि LED ब्लिंकिंग के साथ PIC, टाइमर में PIC, LCD को इंटरफेयर करते हुए, 7-सेगमेंट को ADC करते हुए, PIC का उपयोग करते हुए ADC आदि। यदि आप एक पूर्ण शुरुआत करते हैं, तो कृपया यहां PIC ट्यूटोरियल्स की पूरी सूची देखें और सीखना शुरू करें।
इस ट्यूटोरियल में, हम सीखेंगे कि PIC PICFF877A का उपयोग करके PWM सिग्नल कैसे जेनरेट करें । हमारे PIC MCU में एक विशेष मॉड्यूल है जिसे कैप्चर मॉड्यूल (CCP) कहा जाता है जिसका उपयोग PWM सिग्नल उत्पन्न करने के लिए किया जा सकता है। यहां, हम 5% से 100% के चर शुल्क चक्र के साथ 5 kHz का PWM उत्पन्न करेंगे। कर्तव्य चक्र को बदलने के लिए हम एक पोटेंशियोमीटर का उपयोग कर रहे हैं, इसलिए पीडब्लूएम के साथ शुरू करने से पहले एडीसी ट्यूटोरियल सीखने की सिफारिश की जाती है। पीडब्लूएम मॉड्यूल भी इसकी आवृत्ति सेट करने के लिए टाइमर का उपयोग करता है इसलिए यहां पहले से टाइमर का उपयोग करना सीखें। इसके अलावा, इस ट्यूटोरियल में हम PWM मानों को एनालॉग वोल्टेज में बदलने के लिए RC सर्किट और LED का उपयोग करेंगे और इसका उपयोग LED लाइट को डिम करने के लिए करेंगे।
PWM सिग्नल क्या है?
पल्स चौड़ाई मॉड्यूलेशन (पीडब्लूएम) एक डिजिटल सिग्नल है जो नियंत्रण सर्किटरी में सबसे अधिक उपयोग किया जाता है। यह संकेत पूर्वनिर्धारित समय और गति में उच्च (5v) और निम्न (0v) सेट है। जिस समय के दौरान सिग्नल उच्च रहता है उसे "समय पर" कहा जाता है और जिस समय सिग्नल कम रहता है उसे "समय" कहा जाता है। नीचे दिए गए चर्चा के अनुसार PWM के लिए दो महत्वपूर्ण पैरामीटर हैं:
PWM का कर्तव्य चक्र:
समय का प्रतिशत जिसमें PWM सिग्नल उच्च रहता है (समय पर) को कर्तव्य चक्र कहा जाता है। यदि सिग्नल हमेशा चालू रहता है तो यह 100% शुल्क चक्र में होता है और यदि यह हमेशा बंद रहता है तो यह 0% शुल्क चक्र है।
ड्यूटी साइकिल = समय चालू करें / (समय चालू करें + बंद समय चालू करें)
एक PWM की आवृत्ति:
पीडब्लूएम सिग्नल की आवृत्ति निर्धारित करती है कि पीडब्लूएम कितनी तेजी से एक अवधि पूरी करता है। उपरोक्त अवधि में दिखाए गए अनुसार PWM सिग्नल की एक अवधि पूर्ण और बंद है। हमारे ट्यूटोरियल में हम 5KHz की आवृत्ति सेट करेंगे।
PWM PIC16F877A का उपयोग कर:
PWM सिग्नल हमारे PIC Microcontroller में CCP (कैप्चर PWM की तुलना करके ) मॉड्यूल का उपयोग करके उत्पन्न किया जा सकता है । हमारे PWM सिग्नल का रिज़ॉल्यूशन 10-बिट है, जो कि 0 के मान के लिए है, 0% का एक कर्तव्य चक्र होगा और 1024 (2 ^ 10) के मान के लिए 100% का एक कर्तव्य चक्र होगा। हमारे PIC MCU (CCP1 और CCP2) में दो CCP मॉड्यूल हैं, इसका मतलब है कि हम दो अलग-अलग पिंस (पिन 17 और 16) पर एक साथ दो PWM सिग्नल उत्पन्न कर सकते हैं, अपने ट्यूटोरियल में हम PCP1 का उपयोग पिन 17 के लिए PWM सिग्नल जेनरेट करने के लिए कर रहे हैं।
हमारे PIC MCU का उपयोग करके PWM सिग्नल उत्पन्न करने के लिए निम्नलिखित रजिस्टरों का उपयोग किया जाता है:
- CCP1CON (CCP1 नियंत्रण रजिस्टर)
- T2CON (टाइमर 2 नियंत्रण रजिस्टर)
- PR2 (टाइमर 2 मॉड्यूल अवधि रजिस्टर)
- CCPR1L (CCP रजिस्टर 1 लो)
PWM सिग्नल उत्पन्न करने के लिए प्रोग्रामिंग PIC:
हमारे कार्यक्रम में हम एक पोटेंशियोमीटर से 0-5v का एनालॉग वोल्टेज पढ़ेंगे और हमारे एडीसी मॉड्यूल का उपयोग करके इसे 0-1024 तक मैप कर सकते हैं। फिर हम आवृत्ति 5000 हर्ट्ज के साथ पीडब्लूएम सिग्नल उत्पन्न करते हैं और इनपुट एनालॉग वोल्टेज के आधार पर इसके कर्तव्य चक्र को बदलते हैं। यह 0-1024 है जिसे 0% -100% ड्यूटी चक्र में बदल दिया जाएगा। यह ट्यूटोरियल मानता है कि आपने पहले ही PIC में ADC का उपयोग करना सीख लिया है यदि नहीं, तो इसे यहाँ से पढ़ें, क्योंकि हम इस ट्यूटोरियल में इसके बारे में विवरण छोड़ देंगे।
इसलिए, एक बार कॉन्फ़िगरेशन बिट्स सेट हो जाने और प्रोग्राम को एनालॉग मूल्य पढ़ने के लिए लिखा जाता है, हम PWM के साथ आगे बढ़ सकते हैं।
PWM ऑपरेशन के लिए CCP मॉड्यूल को कॉन्फ़िगर करते समय निम्नलिखित कदम उठाए जाने चाहिए:
- PR2 रजिस्टर को लिखकर PWM की अवधि निर्धारित करें।
- CCPR1L रजिस्टर और CCP1CON <5: 4> बिट्स पर लिखकर PWM ड्यूटी चक्र सेट करें।
- TRISC <2> बिट को साफ़ करके CCP1 को आउटपुट बनाएं।
- TMR2 प्रीस्केल मान सेट करें और T2CON को लिखकर टाइमर 2 को सक्षम करें।
- PWM ऑपरेशन के लिए CCP1 मॉड्यूल को कॉन्फ़िगर करें।
PWM सिग्नल उत्पन्न करने के लिए इस कार्यक्रम में दो महत्वपूर्ण कार्य हैं। एक PWM_Initialize () फ़ंक्शन है जो PWM मॉड्यूल को सेट करने के लिए आवश्यक रजिस्टरों को इनिशियलाइज़ करेगा और फिर जिस आवृत्ति पर PWM को काम करना चाहिए, वह निर्धारित करता है, दूसरा फ़ंक्शन PWM_Duty () फ़ंक्शन है जो PWM सिग्नल के कर्तव्य चक्र को सेट करेगा। आवश्यक रजिस्टर।
PWM_Initialize () {PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1; // Datasheet का उपयोग कर PR2 फॉर्मूले सेट करना // 5KHZ CCP1M3 = 1 में PWM काम करता है; CCP1M2 = 1; // CCP1 मॉड्यूल को कॉन्फ़िगर करें T2CKPS0 = 1; T2CKPS1 = 0; TMR2ON = 1; // टाइमर मॉड्यूल को कॉन्फ़िगर करें TRISC2 = 0; // आउटपुट के रूप में C पर पोर्ट पिन बनाएं}
उपरोक्त फ़ंक्शन PWM इनिशियलाइज़ फंक्शन है, इस फ़ंक्शन में CCP1 मॉड्यूल को बिट CCP1M3 और CCP1M2 को उच्च बनाते हुए PWM का उपयोग करने के लिए सेट किया गया है।
टाइमर मॉड्यूल का प्रीस्कूलर बिट T2CKPS0 को उच्च और T2CKPS1 के रूप में सेट करता है क्योंकि टाइमर को प्रारंभ करने के लिए कम बिट TMR2ON को सेट किया जाता है।
अब, हमें PWM सिग्नल की फ्रिक्वेंसी सेट करनी होगी । आवृत्ति का मान PR2 रजिस्टर में लिखा जाना चाहिए। नीचे दिए गए फ़ार्मुलों का उपयोग करके वांछित आवृत्ति निर्धारित की जा सकती है
PWM अवधि = * 4 * TOSC * (TMR2 प्रेस्केल वैल्यू)
PR2 पाने के लिए इन फ़ार्मुलों को पुनर्व्यवस्थित करना
PR2 = (अवधि / (4 * टोस्क * TMR2 प्रेस्केल)) - 1
हम जानते हैं कि अवधि = (1 / PWM_freq) और Tosc = (1 / _XTAL_FREQ)। इसलिए…..
PR2 = (_XTAL_FREQ / (PWM_freq * 4 * TMR2PRESCALE)) - 1;
एक बार आवृत्ति सेट हो जाने के बाद इस फ़ंक्शन को तब तक दोबारा कॉल करने की आवश्यकता नहीं होती है जब तक कि हमें आवृत्ति को फिर से बदलने की आवश्यकता न हो। हमारे ट्यूटोरियल में मैंने PWM_freq = 5000 दिया है; ताकि हम अपने PWM सिग्नल के लिए 5 KHz ऑपरेटिंग फ्रीक्वेंसी प्राप्त कर सकें।
अब नीचे दिए गए फंक्शन का उपयोग करके PWM के कर्तव्य चक्र को निर्धारित करते हैं
PWM_Duty (अहस्ताक्षरित इंट ड्यूटी) {if (कर्तव्य <1023) {कर्तव्य = ((फ्लोट) कर्तव्य / 1023) * (_ XTAL_FREQ / (PWM_freq * TMR2PRESBALE)); // // ड्यूटी कम करने पर (= ((फ्लोट) ड्यूटी / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE); CCP1X = कर्तव्य और 1; // 1 बिट CCP1Y = ड्यूटी और 2 स्टोर करें; // स्टोर करें 0 बिट CCPR1L = ड्यूटी >> 2; // स्टोर को रीमिनिंग 8 बिट}}
हमारे PWM सिग्नल में 10-बिट रिज़ॉल्यूशन है, इसलिए इस मान को एक ही रजिस्टर में संग्रहीत नहीं किया जा सकता है क्योंकि हमारे PIC में केवल 8-बिट डेटा लाइनें हैं। इसलिए हमारे पास CCP1CON <5: 4> (CCP1X और CCP1Y) के अन्य दो बिट्स का उपयोग अंतिम दो LSB को संग्रहीत करने और फिर शेष 8 बिट्स को CCPR1L रजिस्टर में संग्रहीत करने के लिए है।
PWM कर्तव्य चक्र समय की गणना नीचे दिए गए सूत्रों का उपयोग करके की जा सकती है:
PWM ड्यूटी साइकिल = (CCPRIL: CCP1CON <5: 4>) * टोस्क * (TMR2 प्रेस्केल वैल्यू)
CCPR1L और CCP1CON का मान प्राप्त करने के लिए इन फ़ार्मुलों को पुन: व्यवस्थित करना:
CCPRIL: CCP1Con <5: 4> = PWM ड्यूटी साइकिल / (Tosc * TMR2 प्रेस्केल वैल्यू)
हमारे ADC का मान 0-1024 होगा। हमें चाहिए कि 0% -100% में हो, इसलिए PWM ड्यूटी साइकिल = ड्यूटी / 1023। इस कर्तव्य चक्र को समय की अवधि में बदलने के लिए हमें इसे अवधि (1 / PWM_freq) से गुणा करना होगा
हम यह भी जानते हैं कि Tosc = (1 / PWM_freq), इसलिए ।।
ड्यूटी = (((फ्लोट) ड्यूटी / 1023) * (1 / PWM_freq)) / ((1 / _XTAL_FREQ) * TMR2PRESCALE);
उपरोक्त समीकरण को हल करने से हमें मिलेगा:
ड्यूटी = ((फ्लोट) ड्यूटी / 1023) * (_XTAL_FREQ / (PWM_freq * TMR2PRESCALE));
आप विस्तृत वीडियो के साथ नीचे दिए गए कोड अनुभाग में पूरा कार्यक्रम देख सकते हैं ।
स्कैमैटिक्स और परीक्षण:
हमेशा की तरह हम प्रोटीन सिमुलेशन का उपयोग करके आउटपुट को सत्यापित करते हैं। सर्किट आरेख नीचे दिखाया गया है।
0-5 के वोल्टेज में खिलाने के लिए 7 वें पिन से एक पोटेंशियोमीटर कनेक्ट करें । CCP1 मॉड्यूल पिन 17 (RC2) के साथ है, यहां PWM उत्पन्न होगा जिसे डिजिटल आस्टसीलस्कप का उपयोग करके सत्यापित किया जा सकता है। आगे इसे एक चर वोल्टेज में परिवर्तित करने के लिए हमने एक आरसी-फिल्टर और एक एलईडी का उपयोग किया है ताकि उत्पादन की गुंजाइश न हो।
RC-Filter क्या है?
एक आर सी फिल्टर या एक कम पास फिल्टर अर्थात् दो निष्क्रिय तत्व बाधा और संधारित्र के साथ एक सरल सर्किट है। इन दो घटकों का उपयोग हमारे PWM सिग्नल की आवृत्ति को फ़िल्टर करने और इसे एक चर डीसी वोल्टेज बनाने के लिए किया जाता है।
यदि हम सर्किट की जांच करते हैं, जब एक चर वोल्टेज आर के इनपुट पर लागू होता है, तो संधारित्र सी चार्ज करना शुरू कर देगा। अब संधारित्र के मूल्य के आधार पर, संधारित्र को पूरी तरह से चार्ज होने में कुछ समय लगेगा, एक बार चार्ज होने पर यह डीसी करंट को रोक देगा (याद रखें संधारित्र डीसी को ब्लॉक करता है) लेकिन एसी की अनुमति देता है इसलिए इनपुट डीसी वोल्टेज आउटपुट में दिखाई देगा। कैपेसिटर के माध्यम से उच्च आवृत्ति पीडब्लूएम (एसी सिग्नल) को जमीन पर उतारा जाएगा। इस प्रकार संधारित्र के पार एक शुद्ध डीसी प्राप्त होता है। इस परियोजना के लिए 1000Ohm और 1uf का मान उपयुक्त पाया गया। आर और सी के मूल्यों की गणना में ट्रांसफर फ़ंक्शन का उपयोग करके सर्किट विश्लेषण शामिल है, जो इस ट्यूटोरियल के दायरे से बाहर है।
कार्यक्रम के आउटपुट को डिजिटल ऑसिलोस्कोप का उपयोग करके सत्यापित किया जा सकता है जैसा कि नीचे दिखाया गया है, पेन्टेंटियोमीटर में भिन्नता है और पीडब्लूएम के कर्तव्य चक्र को बदलना चाहिए। हम वोल्टमीटर का उपयोग करके आरसी सर्किट के आउटपुट वोल्टेज को भी नोटिस कर सकते हैं। अगर सब कुछ उम्मीद के मुताबिक काम कर रहा है तो हम अपने हार्डवेयर के साथ आगे बढ़ सकते हैं। आगे पूरी प्रक्रिया के लिए वीडियो देखें।
हार्डवेयर पर काम करना:
परियोजना का हार्डवेयर सेटअप बहुत सरल है, हम बस नीचे दिखाए गए हमारे PIC Perf बोर्ड का पुन: उपयोग करने जा रहे हैं।
हमें एनालॉग वोल्टेज में खिलाने के लिए एक पोटेंशियोमीटर की भी आवश्यकता होगी, मैंने अपने पॉट में कुछ महिला अंत तारों को संलग्न किया है (नीचे दिखाया गया है) ताकि हम सीधे उन्हें PIC परफेक्ट बोर्ड से कनेक्ट कर सकें।
अंत में आउटपुट को सत्यापित करने के लिए हमें एक RC सर्किट और एक LED की आवश्यकता होती है, यह देखने के लिए कि PWM सिग्नल कैसे काम करता है, मैंने बस एक छोटा सा परफेक्ट बोर्ड इस्तेमाल किया है और RC सर्किट और एलईडी (चमक को नियंत्रित करने के लिए) को सोल्डर किया है जैसा कि नीचे दिखाया गया है
हम साधारण महिला से महिला को जोड़ने वाले तारों का उपयोग कर सकते हैं और ऊपर दिखाए गए योजनाबद्ध के अनुसार उन्हें जोड़ सकते हैं। एक बार जब कनेक्शन हो जाता है, तो हमारे पिकिट 3 का उपयोग करके प्रोग्राम को PIC पर अपलोड करें और आपको अपने पोटेंशियोमीटर के इनपुट के आधार पर एक चर वोल्टेज प्राप्त करने में सक्षम होना चाहिए। यहाँ एलईडी की चमक को नियंत्रित करने के लिए चर आउटपुट का उपयोग किया जाता है।
मैंने चर आउटपुट को मापने के लिए अपने मल्टीमीटर का उपयोग किया, हम विभिन्न वोल्टेज स्तरों के लिए एलईडी की चमक को बदल सकते हैं।
यह हमने बर्तन से एनालॉग वोल्टेज को पढ़ने और पीडब्लूएम संकेतों में परिवर्तित करने के लिए प्रोग्राम किया है, जो बदले में आरसी फिल्टर का उपयोग करके परिवर्तनीय वोल्टेज में परिवर्तित हो गया है और परिणाम हमारे हार्डवेयर का उपयोग करके सत्यापित किया गया है। यदि आपको कुछ संदेह है या कहीं अटक गए हैं तो कृपया नीचे टिप्पणी अनुभाग का उपयोग करें, हमें आपकी सहायता करने में खुशी होगी। पूरा काम कर रहे वीडियो में काम कर रहा है ।
अन्य माइक्रोकंट्रोलर पर हमारे अन्य PWM ट्यूटोरियल की भी जाँच करें:
- रास्पबेरी पाई PWM ट्यूटोरियल
- Arduino ड्यू के साथ PWM
- पीडब्लूएम का उपयोग करके अरुडिनो आधारित एलईडी डिमर
- ATmega32 माइक्रोकंट्रोलर का उपयोग कर पावर एलईडी डिमर