- पीडब्लूएम (मॉड्यूलेशन के साथ पल्स) क्या है?
- STM32 में PWM
- अवयव आवश्यक
- STM32 का पिन विवरण
- सर्किट आरेख और कनेक्शन
- प्रोग्रामिंग STM32
पिछले लेख में हमने एसटीएम 32 का उपयोग करके एडीसी रूपांतरण के बारे में देखा है। इस ट्यूटोरियल में, हम STM32 में PWM (पल्स चौड़ाई मॉडुलन) के बारे में जानेंगे और हम PWM तकनीक का उपयोग करके डीसी पंखे की एलईडी या गति को कैसे नियंत्रित कर सकते हैं।
हम जानते हैं कि सिग्नल दो प्रकार के होते हैं: एनालॉग और डिजिटल। एनालॉग सिग्नल में वोल्टेज होते हैं जैसे (3V, 1V… आदि) और डिजिटल सिग्नल में (1 'और 0) होता है। सेंसर आउटपुट एनालॉग सिग्नल के होते हैं और ये एनालॉग सिग्नल एडीसी का उपयोग करके डिजिटल में परिवर्तित हो जाते हैं, क्योंकि माइक्रोकंट्रोलर केवल डिजिटल को समझते हैं। उन एडीसी मूल्यों को संसाधित करने के बाद, फिर से आउटपुट को एनालॉग उपकरणों को चलाने के लिए एनालॉग रूप में परिवर्तित करने की आवश्यकता होती है। उसके लिए हम PWM, डिजिटल से एनालॉग (DAC) कन्वर्टर्स आदि जैसे कुछ तरीकों का उपयोग करते हैं।
पीडब्लूएम (मॉड्यूलेशन के साथ पल्स) क्या है?
PWM डिजिटल मूल्य का उपयोग करके एनालॉग उपकरणों को नियंत्रित करने का एक तरीका है जैसे मोटर की गति को नियंत्रित करना, एक एलईडी की चमक आदि। हम जानते हैं कि एनालॉग सिग्नल पर मोटर और एलईडी काम करता है। लेकिन पीडब्लूएम शुद्ध एनालॉग आउटपुट प्रदान नहीं करता है, पीडब्लूएम लघु दालों द्वारा किए गए एनालॉग सिग्नल की तरह दिखता है, जो कि ड्यूटी चक्र द्वारा प्रदान किया जाता है।
PWM का कर्तव्य चक्र
समय का प्रतिशत जिसमें PWM सिग्नल उच्च रहता है (समय पर) को कर्तव्य चक्र कहा जाता है। यदि सिग्नल हमेशा चालू रहता है तो यह 100% शुल्क चक्र में होता है और यदि यह हमेशा बंद रहता है तो यह 0% शुल्क चक्र है।
ड्यूटी साइकिल = समय चालू करें / (समय चालू करें + बंद समय चालू करें)
STM32 में PWM
STM32F103C8 में 15 PWM पिन और 10 ADC पिन हैं। 7 टाइमर हैं और प्रत्येक PWM आउटपुट 4 टाइमर से जुड़े चैनल द्वारा प्रदान किया जाता है। इसमें 16-बिट पीडब्लूएम रिज़ॉल्यूशन (2 16) है, जो काउंटर और वैरिएबल 65535 जितना बड़ा हो सकता है। 72MHz क्लॉक रेट के साथ, PWM आउटपुट में अधिकतम एक मिली सेकेंड की अवधि हो सकती है।
- तो 65535 का मूल्य, डीसी फैन (100% ड्यूटी साइकिल) के पूर्ण एलईडी और पूर्ण गति प्रदान करता है
- इसी तरह 32767 का मूल्य HALF BRIGHTNESS को LED और HALF SPEED की DC फैन (50% ड्यूटी साइकिल) देता है
- और 13107 का मूल्य (20%) ब्राइटनेस और (20%) स्पीड (20% ड्यूटी साइकिल)
इस ट्यूटोरियल में, हम PWM तकनीक द्वारा डीसी प्रशंसक की एलईडी और गति की चमक को अलग करने के लिए पोटेंशियोमीटर और एसटीएम 32 का उपयोग कर रहे हैं। एक 16x2 एलसीडी का उपयोग एडीसी मान (0-4095) और संशोधित चर (पीडब्लूएम मूल्य) को प्रदर्शित करने के लिए किया जाता है जो आउटपुट (0-65535) है।
यहाँ अन्य माइक्रोकंट्रोलर के साथ कुछ PWM उदाहरण दिए गए हैं:
- MPLAB और XC8 के साथ PIC माइक्रोकंट्रोलर का उपयोग करके PWM उत्पन्न करना
- रास्पबेरी पाई के साथ सर्वो मोटर नियंत्रण
- पीडब्लूएम का उपयोग करके अरुडिनो आधारित एलईडी डिमर
- पल्स चौड़ाई मॉड्यूलेशन (PWM) MSP430G2 का उपयोग कर
यहां सभी पीडब्लूएम संबंधित परियोजनाओं की जांच करें।
अवयव आवश्यक
- STM32F103C8
- डीसी फैन
- ULN2003 मोटर चालक आईसी
- एलईडी (लाल)
- एलसीडी (16x2)
- तनाव नापने का यंत्र
- ब्रेड बोर्ड
- बैटरी 9 वी
- जम्पर तार
डीसी फैन: यहां उपयोग किया जाने वाला डीसी फैन एक पुराने पीसी से बीएलडीसी प्रशंसक है। इसे बाहरी आपूर्ति की आवश्यकता होती है इसलिए हम 9 वी डीसी बैटरी का उपयोग कर रहे हैं।
ULN2003 मोटर चालक आईसी: इसका उपयोग मोटर को एक दिशा में चलाने के लिए किया जाता है क्योंकि मोटर यूनिडायरेक्शनल है और पंखे के लिए बाहरी शक्ति भी आवश्यक है। ULN2003 आधारित मोटर चालक सर्किट के बारे में अधिक जानें। नीचे ULN2003 का चित्र है:
पिंस (IN1 से IN7) इनपुट पिन हैं और (OUT 1 से OUT 7) संबंधित आउटपुट पिन हैं। COM को आउटपुट डिवाइस के लिए आवश्यक सकारात्मक स्रोत वोल्टेज दिया जाता है।
एलईडी: लाल रंग के एलईडी का उपयोग किया जाता है जो लाल बत्ती का उत्सर्जन करता है। किसी भी रंग का इस्तेमाल किया जा सकता है।
पोटेंशियोमीटर: एक दो नापने उपयोग किया जाता है एडीसी को एनालॉग इनपुट के लिए वोल्टेज विभाजक के लिए है और एक अन्य चमक को नियंत्रित करने के लिए नेतृत्व के लिए है।
STM32 का पिन विवरण
जैसा कि हम देख सकते हैं कि PWM पिन को वेव फॉर्मेट (~) में दर्शाया गया है, 15 ऐसे पिन हैं, ADC पिन ग्रीन कलर में प्रतिनिधित्व करते हैं, 10 ADC पिन होते हैं जो एनालॉग इनपुट के लिए उपयोग किए जाते हैं।
सर्किट आरेख और कनेक्शन
विभिन्न घटकों के साथ STM32 के कनेक्शन नीचे दिए गए हैं:
एनालॉग इनपुट (ADC) के साथ STM32
सर्किट के बाईं ओर मौजूद पोटेंशियोमीटर का उपयोग वोल्टेज नियामक के रूप में किया जाता है जो 3.3V पिन से वोल्टेज को नियंत्रित करता है। पोटेंशियोमीटर यानी पोटेंशियोमीटर के सेंटर पिन से आउटपुट STM32 के ADC पिन (PA4) से जुड़ा होता है।
LED के साथ STM32
STM32 PWM आउटपुट पिन (PA9) एक श्रृंखला रोकनेवाला और एक संधारित्र के माध्यम से एलईडी के सकारात्मक पिन से जुड़ा हुआ है।
रेजिस्टर और कैपेसिटर के साथ एलईडी
श्रृंखला में एक रोकनेवाला और समानांतर में एक संधारित्र पीडब्लूएम आउटपुट से सही एनालॉग वेव उत्पन्न करने के लिए एलईडी के साथ जुड़ा हुआ है क्योंकि एनालॉग आउटपुट पीडब्लूएम पिन से सीधे उत्पन्न होने पर शुद्ध नहीं है।
ULM2003 के साथ STM32 और फैन के साथ ULN2003
STM32 PWM आउटपुट पिन (PA8) ULN2003 IC के इनपुट पिन (IN1) से जुड़ा है और ULN2003 का संबंधित आउटपुट पिन (OUT1) DC FAN के नकारात्मक तार से जुड़ा है।
DC फैन का पॉज़िटिव पिन ULN2003 IC के COM पिन से जुड़ा होता है और बाहरी बैटरी (9V DC) भी ULN2003 IC के उसी COM पिन से जुड़ा होता है। ULN2003 का GND पिन STM32 के GND पिन से जुड़ा है और बैटरी नकारात्मक उसी GND पिन से जुड़ा है।
STM32 एलसीडी के साथ (16x2)
एलसीडी पिन नं |
एलसीडी पिन नाम |
STM32 पिन नाम |
1 |
ग्राउंड (Gnd) |
ग्राउंड (जी) |
२ |
वीसीसी |
5 वी |
३ |
वी |
पोटेंशियोमीटर के केंद्र से पिन |
४ |
रजिस्टर का चयन करें (RS) |
पीबी 11 |
५ |
पढ़ें / लिखें (RW) |
ग्राउंड (जी) |
६ |
सक्षम (EN) |
PB10 |
। |
डेटा बिट 0 (DB0) |
कोई कनेक्शन (NC) |
। |
डेटा बिट 1 (DB1) |
कोई कनेक्शन (NC) |
९ |
डेटा बिट 2 (DB2) |
कोई कनेक्शन (NC) |
१० |
डेटा बिट 3 (DB3) |
कोई कनेक्शन (NC) |
1 1 |
डेटा बिट 4 (DB4) |
पीबी ० |
१२ |
डेटा बिट 5 (DB5) |
पीबी 1 |
१३ |
डेटा बिट 6 (DB6) |
PC13 |
१४ |
डेटा बिट 7 (DB7) |
PC14 |
१५ |
एलईडी सकारात्मक |
5 वी |
१६ |
एलईडी नकारात्मक |
ग्राउंड (जी) |
एलसीडी डिस्प्ले के विपरीत को नियंत्रित करने के लिए दाईं ओर एक पोटेंशियोमीटर का उपयोग किया जाता है। उपरोक्त तालिका एलसीडी और एसटीएम 32 के बीच संबंध को दर्शाती है।
प्रोग्रामिंग STM32
पिछले ट्यूटोरियल की तरह, हमने FTM प्रोग्रामर का उपयोग किए बिना USB पोर्ट के माध्यम से Arduino IDE के साथ STM32F103C8 प्रोग्राम किया। Arduino IDE के साथ STM32 प्रोग्रामिंग के बारे में जानने के लिए लिंक का अनुसरण करें। हम Arduino की तरह प्रोग्रामिंग को आगे बढ़ा सकते हैं। पूरा कोड अंत में दिया गया है।
इस कोडिंग में हम ADC पिन (PA4) से एक इनपुट एनालॉग वैल्यू लेने जा रहे हैं जो लेफ्ट पोटेंशियोमीटर के सेंटर पिन से जुड़ा है और फिर एनालॉग वैल्यू (0-3.3V) को डिजिटल या पूर्णांक फॉर्मेट (0-4095) में बदल देता है। यह डिजिटल मूल्य आगे एलईडी चमक और डीसी प्रशंसक की गति को नियंत्रित करने के लिए पीडब्लूएम आउटपुट के रूप में प्रदान किया गया है। ADC और मैप किए गए मान (PWM आउटपुट मान) को प्रदर्शित करने के लिए 16x2 LCD का उपयोग किया जाता है।
पहले हमें एलसीडी हेडर फ़ाइल को शामिल करने, एलसीडी पिन घोषित करने और नीचे दिए गए कोड का उपयोग करके उन्हें इनिशियलाइज़ करने की आवश्यकता है। STM32 के साथ एलसीडी को यहाँ रखने के बारे में अधिक जानें।
#शामिल
अगला घोषित और STM32 के पिन का उपयोग करके पिन नामों को परिभाषित करें
const int analoginput = PA4; // पोटेंशियोमीटर कास्ट इंट इंट्रोड्यूस = पीए 9 से इनपुट ; // एलईडी आउटपुट कास्ट इंट फैन = PA8; // प्रशंसक उत्पादन
अब सेटअप के अंदर () , हमें कुछ संदेश प्रदर्शित करने और कुछ सेकंड के बाद उन्हें साफ करने और INPUT पिन और PWM आउटपुट पिन निर्दिष्ट करने की आवश्यकता है
lcd.begin (16,2); // एलसीडी तैयार करना lcd.clear (); // क्लीयर एलसीडी lcd.setCursor (0,0); // row0 और column0 lcd.print पर कर्सर सेट करता है ("CIRCUIT DIGEST"); // प्रदर्शित करता है सर्किट डाइजेस्ट lcd.setCursor (0,1); // स्तंभ 0 और row1 lcd.print पर कर्सर सेट करता है ("PWM USING STM32"); // STM32 देरी (2000) का उपयोग करके PWM प्रदर्शित करता है ; // विलंब समय lcd.clear (); // क्लियर एलसीडी पिनमोड (एनालॉगिनपुट, INPUT); // सेट पिन मोड एनालॉगिनपुट INPUT पिनमोड (एलईडी, PWM) के रूप में; // सेट पिन मोड PWM आउटपुट पिनकोड (प्रशंसक, PWM) के रूप में नेतृत्व किया ; // सेट पिन मोड प्रशंसक PWM आउटपुट के रूप में
एनालॉग इनपुट पिन (PA4) को पिनपोड (एनालॉगिन, INPUT) द्वारा INPUT के रूप में सेट किया गया है , LED पिन को पिनमोड (एलईडी, PWM) द्वारा PWM आउटपुट के रूप में सेट किया गया है और प्रशंसक पिन को PinMode (पंखा, PWM) के लिए PWM आउटपुट के रूप में सेट किया गया है । यहां PWM आउटपुट पिन LED (PA9) और फैन (PA8) से जुड़े हैं।
शून्य लूप () फ़ंक्शन में अगला, हम एडीसी पिन (पीए 4) से एनालॉग सिग्नल को पढ़ते हैं और इसे पूर्णांक चर में संग्रहीत करते हैं जो एनालॉग वोल्टेज को डिजिटल पूर्णांक मानों (0-4095) में नीचे कोड इंट वैल्यूएड = एनालॉगहेड (एनालॉगिनपुट ) का उपयोग करके परिवर्तित करता है);
यहां ध्यान देने वाली महत्वपूर्ण बात यह है कि PWM पिन जो कि STM32 के चैनल हैं, में 16-बिट रिज़ॉल्यूशन (0-65535) है, इसलिए हमें मानचित्र फ़ंक्शन के नीचे दिए गए एनालॉग वैल्यू के साथ मैप करने की आवश्यकता है
int result = नक्शा (वैल्यूएडसी, 0, 4095, 0, 65535)।
यदि मैपिंग का उपयोग नहीं किया जाता है, तो हम पोटेंशियोमीटर को अलग करके पंखे की पूरी गति या एलईडी की पूरी चमक प्राप्त नहीं करेंगे।
तब हम pwmWrite (एलईडी, परिणाम) और PWM आउटपुट को pwmWrite (प्रशंसक, परिणाम ) कार्यों का उपयोग करके पंखे का उपयोग करके एलईडी को PWM आउटपुट लिखते हैं ।
अंत में हम निम्न कमांड का उपयोग करके एलसीडी डिस्प्ले पर एनालॉग इनपुट वैल्यू (ADC वैल्यू) और आउटपुट वैल्यू (PWM वैल्यू) प्रदर्शित करते हैं
lcd.setCursor (0,0); // पंक्ति 0 और कॉलम 0 एलसीडी.प्रिंट ("एडीसी मूल्य =") पर कर्सर सेट करता है ; // शब्द प्रिंट करता है "" lcd.print (valueeadc); // प्रदर्शित करता है वैल्यूएडसी lcd.setCursor (0,1); // सेट करें कर्सर को कॉलम 0 और रो 1 lcd.print ("आउटपुट =") पर; // " lcd.print (परिणाम) " में शब्दों को प्रिंट करता है ; // मूल्य परिणाम प्रदर्शित करता है
एक प्रदर्शन वीडियो के साथ पूरा कोड नीचे दिया गया है।