PWM: अपने Arduino बोर्ड के साथ एनालॉग पिन का अनुकरण

PWM संकेत

डिजिटल और एनालॉग पिन के साथ, जिसे आप अपने Arduino बोर्ड पर उपयोग कर सकते हैं, आप अपनी इलेक्ट्रॉनिक परियोजनाओं से डेटा को नियंत्रित या प्राप्त करने के लिए विद्युत संकेत प्राप्त या भेज सकते हैं। इसके अलावा, इस तरह की प्लेट में अन्य बहुत दिलचस्प संकेत हैं, और वे हैं पीडब्लूएम, यह वास्तव में एनालॉग होने के बिना एक एनालॉग सिग्नल का अनुकरण कर सकता है। यही है, वे डिजिटल पिंस हैं जो एनालॉग सिग्नल के रूप में एक समान तरीके से काम कर सकते हैं (समान नहीं)।

इस प्रकार के सिग्नल बहुत ही व्यावहारिक हैं जब आप न केवल डिजिटल हाई और एलओवी सिग्नल का उपयोग करना चाहते हैं, अर्थात, 1 या 0, चालू और बंद, लेकिन आप आगे जाना चाहते हैं और वर्णन करना चाहते हैं कुछ और जटिल संकेत। उदाहरण के लिए, एक की गति को संशोधित करना संभव है मोटर डीसी, या एक प्रकाश की प्रकाश तीव्रता, एक solenoid के लिए, आदि।

एनालॉग बनाम डिजिटल सिस्टम

एनालॉग बनाम डिजिटल सिग्नल

इलेक्ट्रॉनिक सर्किट को दो बड़े परिवारों या श्रेणियों में विभाजित किया जा सकता है: डिजिटल और एनालॉग। डिजिटल इलेक्ट्रॉनिक्स के बारे में बात करते समय, हम असतत मूल्यों के साथ मात्रा का उपयोग कर रहे हैं, अर्थात्, एक द्विआधारी प्रणाली जो उन बिट्स की स्थिति की व्याख्या करने के लिए कम या उच्च वोल्टेज के विद्युत संकेतों द्वारा दर्शाया जाता है। दूसरी ओर, जब यह एक एनालॉग सर्किट होता है, तो निरंतर मूल्यों के साथ मात्रा का उपयोग किया जाता है।

डिजिटल प्रणालियों के भीतर बारी में पाया जा सकता है संयोजन के प्रकार और अनुक्रमिक प्रकार के उन। यही है, पूर्व वे हैं जिनमें सिस्टम का आउटपुट केवल इनपुट की स्थिति पर निर्भर करता है। दूसरी ओर, अनुक्रमिक वाले में, स्मृति तत्व शामिल होते हैं, और आउटपुट इनपुट की वर्तमान स्थिति और संग्रहीत किए गए पिछले राज्य पर निर्भर करेगा।

एनालॉग्स के मामले में ये दो बड़े समूह या वेरिएंट नहीं हैं, क्योंकि यहां वे निरंतर संकेत हैं जो हमेशा निर्भर रहेंगे ला सेनल वर्तमान व्यवस्था। उदाहरण के लिए, लाउडस्पीकर में, जो संकेत दिया जाता है, वह उस ध्वनि पर निर्भर करेगा जिसे आप पुन: उत्पन्न करना चाहते हैं। एक माइक्रोफोन के साथ एक ही, जो प्राप्त होने वाली ध्वनि के आधार पर एक एनालॉग सिग्नल उत्पन्न करेगा। निश्चित रूप से आपने इसे कई अन्य सेंसरों के साथ भी देखा है जिन्हें हमने इस ब्लॉग में वर्णित किया है और जो एनालॉग सिग्नल के साथ काम करते हैं (और इसलिए, एक सूत्र बनाना होगा ताकि बाद में मानों को Arduino IDE स्केच में परिकलित या वातानुकूलित किया जा सके। ) ...

एक और दूसरे की ये विशेषताएं कुछ को अपना बनाती हैं फायदे और नुकसान, जैसा कि लगभग हर चीज में होता है। उदाहरण के लिए, डिजिटल वाले आमतौर पर सस्ते, तेज, विकसित करने में आसान होते हैं, जानकारी को अधिक आसानी से संग्रहीत किया जा सकता है, उनके पास अधिक सटीकता है, उन्हें प्रोग्राम किया जा सकता है, वे शोर के प्रभाव के प्रति संवेदनशील नहीं हैं, आदि। लेकिन यह भी सच है कि एनालॉग्स के साथ आप अधिक जटिल संकेतों के साथ काम कर सकते हैं।

पोर ejemplo, एक डिजिटल प्रकार हॉल प्रभाव सेंसर केवल पास के चुंबकीय क्षेत्र की उपस्थिति या अनुपस्थिति का पता लगा सकता है। इसके बजाय, एक एनालॉग हॉल इफेक्ट सेंसर ऐसा कर सकता है और यह भी कहा जा सकता है कि एनालॉग सिग्नल की बदौलत यह कहा जाता है कि यह अपने आउटपुट पर उत्पन्न होता है। अधिक से अधिक या कम वोल्टेज के उस सिग्नल की व्याख्या कैसे करें, यह जानकर आप आसानी से उस परिमाण को जान सकते हैं। आपके पास प्रकृति के परिमाण में ऐसे अन्य उदाहरण हैं कि आप एक एनालॉग सिस्टम के साथ मात्रात्मक रूप से माप सकते हैं, जैसे कि तापमान, समय, दबाव, दूरी, ध्वनि, आदि।

एनालॉग बनाम डिजिटल सिग्नल

कहा जा रहा है, ए एनालॉग संकेत यह एक वोल्टेज या विद्युत प्रवाह होगा जो समय और निरंतर के साथ बदलता रहता है। यदि एक ग्राफ पर प्लॉट किया जाता है, तो एनालॉग सिग्नल एक एकल आवृत्ति साइन लहर होगा।

लिए के रूप में डिजिटल सिग्नल, एक वोल्टेज है जो समय के संबंध में एक चरणबद्ध तरीके से बदलता है। यही है, अगर यह एक ग्राफ में दर्शाया गया है, तो यह एक कदम संकेत होगा जो लगातार अलग-अलग नहीं होता है, लेकिन चरणों में परिवर्तन या असतत बदलाव होता है।

आपको पता होना चाहिए कि एनालॉग सिग्नल से डिजिटल एक या इसके विपरीत जाने के लिए सर्किट हैं। इन कन्वर्टर्स उन्हें DAC (डिजिटल-से-एनालॉग कनवर्टर) और ADC (एनालॉग-टू-डिजिटल कनवर्टर) के रूप में जाना जाता है। और वे बहुत से उपकरणों में अक्सर होते हैं जो हम आज का उपयोग करते हैं, जैसे टीवी, कंप्यूटर आदि। उनके साथ आप इन उपकरणों द्वारा उपयोग किए जाने वाले डिजिटल सिग्नलों को अन्य स्तरों या एनालॉग में काम करने वाले भागों के साथ इलेक्ट्रॉनिक स्तर पर परिवर्तित कर सकते हैं।

पोर ejemplo, एनालॉग सिग्नल के साथ एक स्पीकर या माइक्रोफोन जो साउंड कार्ड, या डिजिटल ग्राफिक्स कार्ड के साथ काम करता है, जिसमें एनालॉग मॉनिटर पोर्ट के लिए प्रसिद्ध RAMDAC चिप थी ... Arduino में इस प्रकार के कन्वर्टर्स का उपयोग कई परियोजनाओं के लिए भी किया जाता है, जैसा कि हम देखेंगे ...

PWM क्या है?

ग्राफिक कर्तव्य चक्र

हालांकि PWM (पल्स-चौड़ाई मॉडुलन), या पल्स चौड़ाई मॉडुलन, एक डिजिटल आधार है, इसके संकेत का आकार कुछ हद तक "स्क्वायर" एनालॉग सिग्नल जैसा दिखता है। यह डिजिटल दालों के माध्यम से एक एनालॉग सिस्टम का अनुकरण करने के लिए संकेत को अलग-अलग करने की अनुमति देता है जैसा कि मैंने पहले ही टिप्पणी की है। वास्तव में, यदि आप नाम पर गौर करते हैं, तो यह पहले से ही डिजिटल दालों की चौड़ाई के माध्यम से आपको यह बताता है कि यह क्या करता है।

इसके लिए फायदेमंद है Arduino चूंकि कई ऑटोमैटिस या इलेक्ट्रॉनिक घटक हैं जिन्हें आप अपनी परियोजनाओं में जोड़ सकते हैं एक सच्चे अनुरूप संकेत प्रदान करने में सक्षम नहीं हैं, लेकिन वे संचालित करने के लिए इस PWM का उपयोग करते हैं। न ही वे एक विरूपित एनालॉग सिग्नल का उपयोग कर सकते हैं, अर्थात, एक डिजिटल एक के समान वोल्टेज कूदता है। वे क्या कर सकते हैं इस अजीबोगरीब संकेत उत्पन्न करने के लिए एक डिजिटल आउटपुट -Vcc या Vcc का एक डिजिटल प्रकार का उपयोग करें ...

इसलिए, PWM एक तरह की "ट्रिक" है, जिसके साथ Arduino और अन्य सिस्टम इस प्रकार के संकेतों के साथ हस्तक्षेप कर सकते हैं वे पूरी तरह से एनालॉग या पारंपरिक डिजिटल नहीं बनते हैं। इसे संभव बनाने के लिए, वे एक विशेष समय या बंद के लिए एक डिजिटल आउटपुट को सक्रिय रखते हैं, जो हर समय ब्याज पर निर्भर करता है। यह डिजिटल घड़ी या बाइनरी कोड सिग्नल क्या होगा, जिसकी दालों की चौड़ाई समान है।

Arduino के साथ अपनी परियोजनाओं में आप इस प्रकार के PWM संकेतों की जांच कर सकते हैं जिसमें समय के साथ पल्स ट्रिगर की निरंतर आवृत्ति बनी रहती है, लेकिन इन दालों की चौड़ाई विविध है। वास्तव में, इसे ड्यूटी साइकिल कहा जाता है जब चक्र के कुल के संबंध में एक संकेत उच्च पर रखा जाता है। इसलिए, ड्यूटी साइकिल% में दी गई है।

याद रखें कि एक PWM एनालॉग सिग्नल में, विभिन्न वोल्टेज मूल्यों के बीच काम नहीं करता है और यह उनके बीच उतार-चढ़ाव करता है। PWM के मामले में यह डिजिटल शैली में एक वर्ग संकेत है और जिसका अधिकतम मूल्य Vcc है। उदाहरण के लिए, यदि आप 3V बिजली की आपूर्ति के साथ काम करते हैं, तो आप 3V या 0V दालें दे सकते हैं, लेकिन 1V या किसी अन्य मध्यवर्ती मूल्य के रूप में नहीं जो वास्तविक एनालॉग में होता है। उस स्थिति में क्या भिन्न होगा, यह नाड़ी की चौड़ाई है, जिसे हम 30% उस उच्च Vcc मान पर रख सकते हैं, या इसे अधिक शक्ति देने के लिए 60%, आदि।

लेकिन सावधान रहें, क्योंकि अगर कोई डिवाइस Vcc की सीमा का समर्थन करता है और PWM के साथ पार हो जाता है तो यह क्षतिग्रस्त हो सकता है। इसलिए निर्माताओं द्वारा प्रदान किए गए डेटाशीट के मूल्यों का सम्मान करना हमेशा आवश्यक होगा। इसके अलावा, कुछ उपकरणों में जैसे डीसी मोटर्स, रिले, इलेक्ट्रोमैग्नेट्स, इत्यादि, ड्यूटी साइकिल के बाद वोल्टेज की वापसी का मतलब यह हो सकता है कि आगमनात्मक भार नुकसान पहुंचा सकता है। यही कारण है कि सुरक्षा समय पर।

Arduino पर PWM

Arduino I2C बस

अब जब आप जानते हैं कि यह कैसे काम करता है, तो आइए देखें Arduino दुनिया के भीतर PWM के विशिष्ट मामले ...

PWM: Arduino पर पिनआउट

Arduino बोर्डों पर आप कई पिन पा सकते हैं जो हार्डवेयर PWM को लागू करते हैं। आप उन्हें पीसीबी पर ही पहचान सकते हैं क्योंकि उनके पास ए प्रतीक ~ (छोटा सिर) पिन नंबरिंग के साथ। यह Arduino कोड में सॉफ़्टवेयर द्वारा भी किया जा सकता है, लेकिन यह काम के साथ माइक्रोकंट्रोलर को अधिभारित करेगा, कुछ बेतुका जब यह देशी और हार्डवेयर द्वारा किया जा सकता है ...

  • Arduino UNO, मिनी और नैनो- आपके पास पिन 6, 8, 3, 5, 6, और 9 पर 10 11-बिट पीडब्लूएम आउटपुट हैं, जिसमें नंबर के सामने वह ~ अधिकार होगा।
  • अरुडिनो मेगा- इस सबसे शक्तिशाली Arduino बोर्ड पर आपके पास 15 8-बिट PWM आउटपुट हैं। वे 2 और 13 के माध्यम से 44 के माध्यम से 46 पिन पर हैं।
  • Arduino ड्यू: इस मामले में 13 8-बिट PWM आउटपुट हैं। वे पिन 2 से 13 पर हैं, साथ ही दो अन्य एनालॉग आउटपुट डीएसी द्वारा 12-बिट रिज़ॉल्यूशन के साथ डिस्क्राइब्ड हैं।

जब आप 8 बिट्स या 12 बिट्स इत्यादि के रिज़ॉल्यूशन के बारे में बात करते हैं, तो इस प्रकार के पीडब्लूएम आउटपुट में, आपके पास पैंतरेबाज़ी के लिए कमरे का जिक्र है। साथ में 8 बिट्स के 256 स्तर हैं जिसके बीच आप भिन्न हो सकते हैं, और 12 बिट्स 4096 के स्तर तक जाते हैं।

टाइमर के साथ नियंत्रण

हार्डवेयर PWM नियंत्रण के लिए, Arduino टाइमर का उपयोग करेगा इसके लिए। प्रत्येक वर्तमान टाइमर 2 या 3 PWM आउटपुट दे सकता है। प्रत्येक आउटपुट के लिए एक तुलना रजिस्टर इस सिस्टम को पूरक करता है ताकि जब समय रजिस्टर के मूल्य तक पहुंच जाए, तो उन ड्यूटी साइकल को रोकने के लिए आउटपुट की स्थिति या मूल्य बदल दिया जाता है। यद्यपि एक ही टाइमर द्वारा नियंत्रित दो आउटपुट हैं, दोनों में अलग-अलग ड्यूटी चक्र हो सकते हैं, हालांकि वे समान आवृत्ति साझा करते हैं।

प्रत्येक पीडब्लूएम पिन से जुड़े टाइमर के मामले में, यह अलग-अलग होगा Arduino बोर्ड के प्रकार पर निर्भर करता है कि आपके पास है:

  • Arduino UNO, मिनी और नैनो:
    • समय ० - ५ और ६
    • समय ० - ५ और ६
    • समय ० - ५ और ६
  • अरुडिनो मेगा:
    • समय ० - ५ और ६
    • समय ० - ५ और ६
    • समय ० - ५ और ६
    • टाइमर 3 - 2, 3 और 5
    • टाइमर 4 - 6, 7 और 8
    • टाइमर 5 - 44, 45 और 46

पूर्व निर्धारित रजिस्टर एक पूर्णांक द्वारा समय को विभाजित करेगा और टाइमर संबंधित पीडब्लूएम आउटपुट को नियंत्रित करने के लिए बाकी काम करता है। रजिस्ट्री मान को संशोधित करना आवृत्ति को बदल सकता है। आवृत्ति वे टाइमर और प्लेट के आधार पर भी भिन्न होंगे:

  • Arduino UNO, मिनी और नैनो:
    • टाइमर 0: 1, 8, 64, 256 और 1024 के प्रीस्कूलिंग की अनुमति देता है। आवृत्ति 62.5 Khz है।
    • टाइमर 1: 1, 8, 64, 256 और 1024 के प्रीसेट के साथ। 31.25 खज़ की आवृत्ति के साथ।
    • Timer2: Timer1 के बराबर, केवल यह पिछले वाले के अलावा 32 और 128 का प्रीस्कूलिंग जोड़ता है।
  • अरुडिनो मेगा:
    • टाइमर 0, 1, 2: ऊपर जैसा।
    • तिमेर 3, 4, और 5: 31.25 खज़ की आवृत्ति के साथ और 1, 8, 64, 256 और 1024 के प्रिस्कल के साथ।

असंगति और संघर्ष

टाइमर आउटपुट के साथ जुड़ा न केवल उस फ़ंक्शन के लिए है, दूसरों द्वारा उपयोग किया जाता है। इसलिए, यदि वे किसी अन्य फ़ंक्शन द्वारा उपयोग किए जा रहे हैं, तो आपको एक या दूसरे के बीच चयन करना होगा, आप एक ही समय में दोनों का उपयोग नहीं कर सकते। उदाहरण के लिए, ये कुछ असंगतताएँ हैं जिन्हें आप अपनी परियोजनाओं में पा सकते हैं:

  • सर्वो पुस्तकालय: जब आप सर्वो मोटर्स का उपयोग करते हैं, तो टाइमर का उपयोग गहन रूप से किया जाता है, इसलिए यह संघर्ष पैदा कर सकता है। UNO, Nano और Mini के लिए विशेष रूप से Timer1 का उपयोग करें, यानी आप उस लाइब्रेरी के साथ स्केच का उपयोग करते समय पिन 9 और 10 का उपयोग नहीं कर सकते। मेगा में यह सर्वो की संख्या पर निर्भर करेगा ...
  • SPI: यदि Arduino बोर्ड पर SPI संचार का उपयोग किया जाता है, तो MOSI फ़ंक्शन के लिए पिन 11 का उपयोग किया जा रहा है। यही कारण है कि PWM पिन का उपयोग नहीं किया जा सकता है।
  • स्वर: यह फ़ंक्शन संचालित करने के लिए टाइमर 2 का उपयोग करता है। इसलिए यदि इसका उपयोग किया जाता है, तो आप पिन 3 और 11 (या मेगा के लिए 9 और 10) बेकार दे रहे हैं।

Arduino के साथ हाथों पर परीक्षण

एलईडी के साथ Arduino PWM योजनाबद्ध

यदि आप इन-प्लेस देखना चाहते हैं कि PWM Arduino पर कैसे काम करता है, तो आप जो सबसे अच्छा काम कर सकते हैं, वह है वाल्टमीटर या मल्टीमीटर (वोल्टेज को मापने के लिए फ़ंक्शन में) PWM पिन के बीच जिसे आपने उपयोग करने के लिए चुना है और Arduino बोर्ड का ग्राउंड पिन या GND। इस तरह, मापने वाले डिवाइस की स्क्रीन पर आप यह देख पाएंगे कि वोल्टेज कैसे एक आउटपुट के साथ बदल रहा है जो इस पीडब्लूएम चाल के लिए डिजिटल धन्यवाद है।

आप वोल्टमीटर / मल्टीमीटर को एक एलईडी के साथ बदल सकते हैं यह देखने के लिए कि प्रकाश की तीव्रता कैसे बदलती है, डीसी मोटर के साथ, या किसी अन्य तत्व के साथ जो आप चाहते हैं। मैंने इसे बिना किसी एलईडी के फ्रिटिंग के साथ आरेख में सरल किया है, लेकिन आप जानते हैं कि यह एक मल्टीमीटर की युक्तियों का भी प्रतिनिधित्व कर सकता है ...

यदि आप एक एलईडी का उपयोग करते हैं, तो कैथोड और जीएनडी पर प्रतिरोध को याद रखें।

पैरा स्रोत कोड Arduino बोर्ड माइक्रोकंट्रोलर को सब कुछ काम करने के लिए नियंत्रित करने के लिए, आपको इसे Arduino IDE में डालना चाहिए (इस मामले में मैंने PWM पिन 6 का उपयोग किया है Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
मैं आपको मूल्यों के साथ खेलने और देखने की सलाह देता हूं प्रकाश या वाल्टमीटर पर परिणाम। कार्यक्रम 0 से 9 तक मान प्राप्त कर सकता है ताकि आप देख सकें कि सब कुछ कैसे बदलता है। अधिक जानकारी के लिए, मैं आपको सलाह देता हूं आर्डिनो कोर्स कि हम मुफ्त डाउनलोड में है ...

एक टिप्पणी, अपनी छोड़ो

अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   जोस कहा

    नमस्ते आपका दिन शुभ हो। सबसे पहले मैं आपको इस स्पष्टीकरण के लिए समर्पित नवीनतम समय के लिए धन्यवाद देना चाहता हूं।
    मैं आपको एक प्रश्न करना चाहता हूं। मैं Arguino Mega के लिए एक प्रोटीस 8 एमुलेटर पर कोड चलाने की कोशिश कर रहा हूं। मैं एक वोल्टमीटर को 6 पिन से जोड़ता हूं, प्रोटीस एक सीरियल पोर्ट से जुड़ा हुआ है, लेकिन मुझे नहीं पता कि कैसे या क्या अलग करना है ताकि विभिन्न वोल्टेज आउटपुट हों। मुझे इसे संकलित करने के लिए कोड में मामूली समायोजन करना पड़ा। मदद के लिए आपका बहुत बहुत धन्यवाद