- PWM सिग्नल की मूल बातें
- हार्डवेयर सेटअप और आवश्यकता
- Nuvoton N76E003 माइक्रोकंट्रोलर एलईडी डिमिंग के लिए सर्किट आरेख
- PWM N76E003 नुवोटन माइक्रोकंट्रोलर पर पिन करता है
- PWM रजिस्टर और N76E003 Nuvoton माइक्रोकंट्रोलर में कार्य
- Nuvoton N6E003 माइक्रोकंट्रोलर में PWM ऑपरेटिंग मोड
- PWM के लिए Nuvoton N76E003 प्रोग्रामिंग
- कोड चमकती और आउटपुट का परीक्षण
पल्स चौड़ाई मॉड्यूलेशन (पीडब्लूएम) एक परिभाषित आवृत्ति और कर्तव्य चक्र के साथ निरंतर पल्स सिग्नल का उत्पादन करने के लिए माइक्रोकंट्रोलर में आमतौर पर इस्तेमाल की जाने वाली तकनीक है। संक्षेप में, पीडब्लूएम एक पल्स की चौड़ाई को बदलने के बारे में है जबकि आवृत्ति स्थिर है।
एक PWM सिग्नल का उपयोग ज्यादातर एक इमदादी मोटर या एक एलईडी की चमक को नियंत्रित करने के लिए किया जाता है। इसके अलावा, चूंकि माइक्रोकंट्रोलर केवल आउटपुट 1 पर लॉजिक 1 (हाई) या लॉजिक 0 (लो) प्रदान कर सकते हैं, यह तब तक अलग-अलग एनालॉग वोल्टेज प्रदान नहीं कर सकता जब तक कि डीएसी या डिजिटल से एनालॉग कनवर्टर का उपयोग न किया जाए। ऐसे मामले में, माइक्रोकंट्रोलर को पीडब्लूएम को एक अलग ड्यूटी चक्र के साथ आउटपुट करने के लिए प्रोग्राम किया जा सकता है जिसे तब अलग-अलग एनालॉग वोल्टेज में परिवर्तित किया जा सकता है। हमने पहले कई अन्य माइक्रोकंट्रोलर में PWM परिधीय का उपयोग किया है।
- ARM7-LPC2148 PWM ट्यूटोरियल: एलईडी की चमक को नियंत्रित करना
- पल्स चौड़ाई मॉड्यूलेशन (PWM) MSP430G2 का उपयोग करते हुए: एलईडी की चमक को नियंत्रित करना
- MPLAB और XC8 के साथ PIC माइक्रोकंट्रोलर का उपयोग करके PWM उत्पन्न करना
- पल्स चौड़ाई मॉडुलन (PWM) STM32F103C8 में: डीसी फैन की गति को नियंत्रित करना
- PIC माइक्रोकंट्रोलर के GPIO पिन पर PWM सिग्नल उत्पन्न करना
- रास्पबेरी पाई PWM ट्यूटोरियल
- PWM ट्यूटोरियल ईएसपी 32 के साथ
इस ट्यूटोरियल में, हम N76E003 माइक्रोकंट्रोलर यूनिट से इस पीडब्लूएम सिग्नल का उपयोग करके एक एलईडी को नियंत्रित करेंगे। हम मूल्यांकन करेंगे कि हमें किस तरह के हार्डवेयर सेटअप की आवश्यकता है और हमें अपने माइक्रोकंट्रोलर को कैसे प्रोग्राम करना चाहिए। इससे पहले, आइए PWM सिग्नल की कुछ बुनियादी बातों को समझें।
PWM सिग्नल की मूल बातें
नीचे की छवि में एक निरंतर PWM संकेत दिखाया गया है।
ऊपर छवि कुछ भी नहीं है लेकिन एक ही साथ एक निरंतर वर्ग तरंग है पर समय और एक ही रवाना समय । मान लीजिए, सिग्नल की कुल अवधि 1 सेकंड है। इस प्रकार समय पर और बंद समय 500ms है। यदि एक एलईडी इस सिग्नल से जुड़ा हुआ है, तो एलईडी 500ms के लिए चालू होगा और 500ms के लिए बंद हो जाएगा। इसलिए, परिप्रेक्ष्य में, एलईडी को वास्तविक चमक के आधे हिस्से के साथ जलाया जाएगा यदि इसे बिना किसी बंद समय के सीधे 5V सिग्नल पर चालू किया जाता है।
अब जैसा कि ऊपर की छवि में दिखाया गया है, यदि कर्तव्य चक्र को बदल दिया जाता है, तो पहले से चर्चा किए गए समान सिद्धांत का उपयोग करके एलईडी वास्तविक चमक के 25% के साथ जल जाएगी। यदि आप पल्स चौड़ाई मॉड्यूलेशन (पीडब्लूएम) के बारे में अधिक जानना और जानना चाहते हैं, तो आप लिंक किए गए लेख को देख सकते हैं।
हार्डवेयर सेटअप और आवश्यकता
जैसा कि इस परियोजना की आवश्यकता पीडब्लूएम का उपयोग करके एलईडी को नियंत्रित करने के लिए है। एक एलईडी को N76E003 के साथ हस्तक्षेप करने की आवश्यकता है। चूंकि N76E003 विकास बोर्ड में एक एलईडी उपलब्ध है, इसलिए इसका उपयोग इस परियोजना में किया जाएगा। किसी अन्य घटक की आवश्यकता नहीं है।
उल्लेख नहीं करने के लिए, हमें N76E003 माइक्रोकंट्रोलर आधारित विकास बोर्ड के साथ-साथ न्यू-लिंक प्रोग्रामर की आवश्यकता है । यदि प्रोग्रामर को पावर स्रोत के रूप में उपयोग नहीं किया जाता है तो अतिरिक्त 5V बिजली आपूर्ति इकाई की आवश्यकता हो सकती है।
Nuvoton N76E003 माइक्रोकंट्रोलर एलईडी डिमिंग के लिए सर्किट आरेख
जैसा कि हम नीचे योजनाबद्ध में देख सकते हैं, टेस्ट एलईडी विकास बोर्ड के अंदर उपलब्ध है और यह पोर्ट 1.4 पर जुड़ा हुआ है। चरम बाईं ओर, प्रोग्रामिंग इंटरफ़ेस कनेक्शन दिखाया गया है।
PWM N76E003 नुवोटन माइक्रोकंट्रोलर पर पिन करता है
N76E003 में 20 पिन हैं, जिनमें से 10 पिन को PWM के रूप में इस्तेमाल किया जा सकता है। नीचे की छवियां पीडब्लूएम पिंस को लाल वर्ग बॉक्स में हाइलाइट करती हुई दिखा रही हैं।
जैसा कि हम देख सकते हैं, हाइलाइट किए गए PWM पिन का उपयोग अन्य उद्देश्यों के लिए भी किया जा सकता है। हालाँकि, पिंस का यह अन्य उद्देश्य उपलब्ध नहीं होगा जब पिंस PWM आउटपुट के लिए कॉन्फ़िगर किए गए हैं। पिन 1.4 जो पीडब्लूएम आउटपुट पिन के रूप में उपयोग किया जाता है, यह अन्य कार्यक्षमता खो देगा। लेकिन, यह एक समस्या नहीं है क्योंकि इस परियोजना के लिए एक और कार्यक्षमता की आवश्यकता नहीं है।
पिन 1.4 को आउटपुट पिन के रूप में चुनने के पीछे का कारण यह है कि इनबिल्ट टेस्ट एलईडी विकास बोर्ड में उस पिन पर जुड़ा हुआ है, इस प्रकार हमें बाहरी एलईडी की आवश्यकता नहीं है। हालाँकि, 20 पिनों में से इस माइक्रोकंट्रोलर में, 10 पिनों का उपयोग PWM आउटपुट पिन के रूप में किया जा सकता है और किसी अन्य PWM पिन का उपयोग आउटपुट से संबंधित उद्देश्यों के लिए किया जा सकता है।
PWM रजिस्टर और N76E003 Nuvoton माइक्रोकंट्रोलर में कार्य
N76E003 सिस्टम घड़ी या टाइमर 1 का उपयोग करता है, जो कि 1/1 ~ 1/128 में से प्रेस्क्लर के साथ PWM घड़ी द्वारा विभाजित है। PWM अवधि को 16-बिट पीरियड रजिस्टर PWMPH और PWMPL रजिस्टर का उपयोग करके सेट किया जा सकता है ।
माइक्रोकंट्रोलर में छह अलग-अलग PWM रजिस्टर होते हैं, जो PG0, PG1, PG2, PG3, PG4 और PG5 नामक छह PWM सिग्नल उत्पन्न करते हैं। हालाँकि, प्रत्येक PWM चैनलों के लिए अवधि समान है क्योंकि वे समान 16-बिट अवधि के काउंटर को साझा करते हैं लेकिन प्रत्येक PWM का कर्तव्य चक्र दूसरों से अलग हो सकता है क्योंकि प्रत्येक PWM अलग - अलग 16-बिट ड्यूटी चक्र रजिस्टर का उपयोग करता है जिसका नाम {PWM0H, PWML} है, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L}, और {PWM5H, PWM5L}। इस प्रकार, N76E003 में, छह PWM आउटपुट अलग-अलग ड्यूटी साइकल के साथ स्वतंत्र रूप से उत्पन्न किए जा सकते हैं।
अन्य माइक्रोकंट्रोलर्स के विपरीत, PWM को सक्षम करने से I / O पिन को अपने PWM आउटपुट में स्वचालित रूप से सेट नहीं किया जाता है। इस प्रकार, उपयोगकर्ता को I / O आउटपुट मोड को कॉन्फ़िगर करने की आवश्यकता है।
तो, आवेदन के लिए जो कुछ भी आवश्यक है, पहला कदम यह निर्धारित करना या चयन करना है कि पीडब्लूएम आउटपुट के रूप में कौन से एक या दो या दो से अधिक I / O पिन हैं। एक का चयन करने के बाद, I / O पिंस को पीडब्लू-सिग्नल उत्पन्न करने के लिए पुश-पुल मोड या क्वासी-बिडायरेक्शनल के रूप में सेट करने की आवश्यकता होती है। इसे PxM1 और PxM2 रजिस्टर का उपयोग करके चुना जा सकता है । ये दो रजिस्टर I / O मोड सेट करते हैं जहां x पोर्ट नंबर के लिए है (उदाहरण के लिए, पोर्ट P1.0 रजिस्टर P1M1 और P1M2 होगा, P3.0 के लिए यह P3M1 और P3M2, आदि होगा)
विन्यास को नीचे दी गई छवि में देखा जा सकता है-
फिर, अगला कदम PWM को उस विशेष I / O पिन (s) में सक्षम करना है। ऐसा करने के लिए, उपयोगकर्ता को PIOCON0 या PIOCON1 रजिस्टर सेट करना होगा । रजिस्टर पिन मैपिंग पर निर्भर है क्योंकि PIOCON0 और PIOCON1 पीडब्लूएम संकेतों पर निर्भर विभिन्न पिनों को नियंत्रित करते हैं। इन दो रजिस्टरों का विन्यास नीचे दी गई छवि में देखा जा सकता है-
जैसा कि हम देख सकते हैं, उपरोक्त रजिस्टर 6 कॉन्फ़िगरेशन को नियंत्रित करता है। बाकी के लिए, PIOCON1 रजिस्टर का उपयोग करें।
इस प्रकार, उपरोक्त रजिस्टर बाकी 4 कॉन्फ़िगरेशन को नियंत्रित करता है।
Nuvoton N6E003 माइक्रोकंट्रोलर में PWM ऑपरेटिंग मोड
अगला कदम PWM ऑपरेशन मोड का चयन करना है। प्रत्येक PWM तीन ऑपरेशन मोड का समर्थन करता है - इंडिपेंडेंट, सिंक्रोनस और डेड-टाइम इनेबल मोड।
स्वतंत्र मोड समाधान प्रदान करता है जहां छह पीडब्लूएम सिग्नल स्वतंत्र रूप से उत्पन्न हो सकते हैं। जब एलईडी संबंधित संचालन या बजर को चालू करने और नियंत्रित करने की आवश्यकता होती है तो यह अधिकतम समय की आवश्यकता होती है।
तुल्यकालिक मोड सेट PG1 / 3/5 एक ही चरण में PWM उत्पादन में, PG0 / 2/4, जहां PG0 / 2/4 प्रदान करता है स्वतंत्र PWM उत्पादन संकेतों के रूप में ही। यह मुख्य रूप से तीन-चरण मोटर्स को नियंत्रित करने के लिए आवश्यक है।
मृत समय प्रविष्टि मोड एक छोटे से जटिल और वास्तविक मोटर अनुप्रयोगों में लागू किया, विशेष रूप से औद्योगिक अनुप्रयोगों में थोड़ा है। ऐसे अनुप्रयोगों में, एक पूरक PWM आउटपुट को "डेड-टाइम" प्रविष्टि की आवश्यकता होती है जो GPIB जैसे पावर स्विचिंग उपकरणों को नुकसान से बचाता है। कॉन्फ़िगरेशन को इस मोड में इस तरह सेट किया जाता है कि PG0 / 2/4 स्वतंत्र मोड के समान पीडब्लूएम आउटपुट सिग्नल प्रदान करता है, लेकिन PG1 / 3/5 पीजी0 / 2/4 के "आउट-फेज पीडब्लूएम सिग्नल" आउटपुट प्रदान करता है। और PG1 / 3/5 ड्यूटी रजिस्टर को अनदेखा करें।
नीचे दिए गए रजिस्टर कॉन्फ़िगरेशन का उपयोग करके तीन मोड से ऊपर का चयन किया जा सकता है-
अगला कॉन्फ़िगरेशन PWMON1 रजिस्टर का उपयोग करके PWM प्रकारों का चयन है।
इसलिए, जैसा कि हम देख सकते हैं, दो PWM प्रकार उपलब्ध हैं जिन्हें उपरोक्त रजिस्टर का उपयोग करके चुना जा सकता है। किनारे-संरेखित में, 16-बिट काउंटर 0000H से {PWMPH, PWMPL} के सेट मान तक और फिर 0000H से शुरू करके सिंगल-स्लोप ऑपरेशन का उपयोग करता है। आउटपुट तरंग बाएं-किनारे से जुड़ी हुई है।
लेकिन, केंद्र-संरेखित मोड में, 16-बिट काउंटर 0000H से {PWMPH, PWMPL} तक की गिनती करके दोहरे-ढलान संचालन का उपयोग करता है और फिर नीचे गिनती करके {PWMPH, PWMPL} से 0000H तक जाता है। आउटपुट केंद्र संरेखित है और यह गैर-अतिव्यापी तरंगों को उत्पन्न करने के लिए उपयोगी है। अब अंत में पीडब्लूएम कंट्रोल ऑपरेशन जिन्हें नीचे रजिस्टरों में चेक किया जा सकता है-
घड़ी स्रोत सेट करने के लिए, CKCON घड़ी नियंत्रण रजिस्टर का उपयोग करें ।
PWM आउटपुट सिग्नल को PMEN रजिस्टर का उपयोग करके भी मास्क किया जा सकता है। इस रजिस्टर का उपयोग करके, उपयोगकर्ता आउटपुट सिग्नल को 0 या 1 से मास्क कर सकता है।
अगला PWM कंट्रोल रजिस्टर है-
पीडब्लूएम को चलाने के लिए, नई अवधि और ड्यूटी लोड को लोड करने, पीडब्लूएम फ्लैग को नियंत्रित करने और पीडब्लूएम काउंटर को खाली करने के लिए उपरोक्त रजिस्टर उपयोगी है।
संबंधित बिट विन्यास नीचे दिखाए गए हैं-
घड़ी डिवाइडर सेट करने के लिए, PWMON1 रजिस्टर को PWM घड़ी डिवाइडर के लिए उपयोग करें । 5 बिट का उपयोग समूह मोड सक्षम ग्रुप PWM के लिए किया जाता है और पहले तीन PWM जोड़े के लिए समान कर्तव्य चक्र प्रदान करता है।
PWM के लिए Nuvoton N76E003 प्रोग्रामिंग
कोडिंग सरल है और इस ट्यूटोरियल के लिए उपयोग किया गया पूरा कोड इस पृष्ठ के निचले भाग में पाया जा सकता है। एलईडी P1.4 पिन से जुड़ा है। इस प्रकार P1.4 पिन को PWM आउटपुट के लिए उपयोग करने की आवश्यकता है।
मुख्य कार्यक्रम में, सेटिंग्स संबंधित क्रम में की जाती हैं। कोड की पंक्तियों के नीचे PWM सेट करता है और P1.4 पिन को PWM आउटपुट के रूप में कॉन्फ़िगर करता है।
P14_PushPull_Mode;
यह पिन P1.4 को पुश-पुल मोड में सेट करने के लिए उपयोग किया जाता है। इसे Function_define.h लाइब्रेरी में इस प्रकार परिभाषित किया गया है-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
अगली लाइनें P1.4 में PWM को सक्षम करने के लिए उपयोग की जाती हैं। इसे Function_define.h लाइब्रेरी में भी परिभाषित किया गया है-
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA =; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- =x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; = = = ======== PWM1 आउटपुट PWM_IMDEPENDENT_MODE सक्षम करें;
नीचे दिए गए कोड का उपयोग PWM को स्वतंत्र मोड में सेट करने के लिए किया जाता है। में Function_define.h पुस्तकालय, यह जैसे- परिभाषित किया गया है
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
फिर हमें EDGE टाइप PWM आउटपुट सेट करना होगा। में Function_define.h पुस्तकालय, यह जैसे- परिभाषित किया गया है
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
इसके बाद, हमें PWM काउंटर वैल्यू को क्लियर करना होगा जो SFR_Macro.h लाइब्रेरी में उपलब्ध है-
#define set_CLRPWM CLRPWM = 1
उसके बाद, PWM घड़ी को Fsys घड़ी के रूप में चुना जाता है और उपयोग किया जाने वाला विभाजन कारक 64 विभाजन है।
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
दोनों को इस प्रकार परिभाषित किया गया है-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xBW PWM_OUTPUT_ALL_NORMAL;
कोड की निचली पंक्ति का उपयोग आउटपुट PWM सिग्नल को 0 से परिभाषित करने के लिए किया जाता है-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
फिर हमें पीडब्लूएम सिग्नल की अवधि का समय निर्धारित करना होगा। यह फ़ंक्शन PWMPL और PWMPH रजिस्टर में अवधि निर्धारित करता है। चूंकि यह एक 16-बिट रजिस्टर है, पीडब्लूएम अवधि निर्धारित करने के लिए फ़ंक्शन थोड़ी शिफ्टिंग विधि का उपयोग करता है।
शून्य सेट_PWM_period (अहस्ताक्षरित int मान) { PWMPL = (मान & 0x00FF); PWMPH = ((मान & 0xFF00) >> 8); }
हालांकि, 1023 और 8-बिट अवधि के अलावा, उपयोगकर्ता अन्य मूल्यों का भी उपयोग कर सकते हैं। पीरियड के बढ़ने से स्मूद डिमिंग या फेडिंग हो जाता है।
set_PWMRUN;
यह PWM शुरू करेगा जिसे SFR_Macro.h लाइब्रेरी में परिभाषित किया गया है-
#define set_PWMRUN PWMRUN = 1
अगला, जबकि लूप में , एलईडी चालू होता है और लगातार फीका होता है।
जबकि (1) {के लिए (मान = 0; मूल्य <1024; मूल्य + = 10) { set_PWM1 (मूल्य); टाइमर 1_ डेलय 10ms (3); } के लिए (मान = 1023; मान> 0; मूल्य - = 10) { set_PWM1 (मूल्य); टाइमर 1_ डेलय 10ms (2); } } }
कर्तव्य चक्र set_PWM1 ();, एक फ़ंक्शन है जो PWM1L और PWM1H रजिस्टर में कर्तव्य चक्र सेट करता है।
void set_PWM1 (अहस्ताक्षरित int मान) { PWM1L = (मान & 0x00FF); PWM1H = ((मूल्य और 0xFF00) >> 8); set_LOAD; }
कोड चमकती और आउटपुट का परीक्षण
कोड तैयार होने के बाद, बस इसे संकलित करें और इसे नियंत्रक पर अपलोड करें। यदि आप पर्यावरण के लिए नए हैं, तो मूल बातें जानने के लिए Nuvoton N76E003 ट्यूटोरियल से शुरुआत करें। जैसा कि आप नीचे दिए गए परिणाम से देख सकते हैं, कोड 0 चेतावनी और 0 त्रुटियाँ लौटा दी गई और केइल द्वारा डिफ़ॉल्ट चमकती विधि का उपयोग करके फ्लैश किया गया। एप्लिकेशन काम करना शुरू कर देता है।
पुनर्निर्माण शुरू किया: प्रोजेक्ट: PWM पुनर्निर्माण लक्ष्य 'टारगेट 1' को STARTUP.A51… असेंबलिंग main.c… संकलन Delay.c… लिंकिंग… कार्यक्रम का आकार: डेटा = 35.1 xdata = 0 कोड = 709 बनाना हेक्स फ़ाइल "। \ Objects \ pwm"… "। \ Objects \ pwm" से - 0 त्रुटि (s), 0 चेतावनी (s)। बिल्ड समय समाप्त: 00:00:05
हार्डवेयर बिजली स्रोत से जुड़ा है और यह उम्मीद के मुताबिक काम कर रहा था। यही कारण है कि ऑनबोर्ड एलईडी की चमक कम हो गई और फिर परिवर्तन पीडब्लूएम कर्तव्य चक्र को इंगित करने के लिए बढ़ गया।
इस ट्यूटोरियल का पूरा काम नीचे दिए गए वीडियो में भी देखा जा सकता है। आशा है कि आपने ट्यूटोरियल का आनंद लिया है और कुछ उपयोगी सीखा है यदि आपके कोई प्रश्न हैं, तो उन्हें टिप्पणी अनुभाग में छोड़ दें या आप अन्य तकनीकी प्रश्नों के लिए हमारे मंचों का उपयोग कर सकते हैं।