एक बार, एक छोटी सी घरेलू परियोजना के लिए, मुझे एक एसी बिजली की मोटर के रोटेशन की गति को समायोजित करने के लिए उपयुक्त बिजली नियामक की आवश्यकता थी। STM32F103RBT6 माइक्रोकंट्रोलर पर आधारित
इस तरह के मदरबोर्ड को आधार के रूप में इस्तेमाल किया गया था। बोर्ड को एक ईमानदार RS232 इंटरफ़ेस और एक ही समय में अतिरिक्त घटकों के एक न्यूनतम होने के रूप में चुना गया था। घड़ी को बिजली देने के लिए बोर्ड पर लिथियम बैटरी के लिए कोई स्लॉट नहीं है, लेकिन इसे लेने के लिए पंद्रह मिनट की बात है।
तो, चलो सिद्धांत के साथ शुरू करते हैं। हर कोई तथाकथित
पल्स-चौड़ाई मॉड्यूलेशन से परिचित है, जो आपको अधिकतम दक्षता के साथ लोड (या कम, आमतौर पर वोल्टेज भर में) वर्तमान को नियंत्रित करने की अनुमति देता है। इस मामले में अतिरिक्त शक्ति का उपयोग केवल गर्मी के रूप में विघटित होने के बजाय, रैखिक विनियमन में नहीं किया जाएगा, जो कि रिओस्तात के जटिल संस्करण से ज्यादा कुछ नहीं है। हालांकि, कई कारणों से, इस तरह के नियंत्रण, "माथे पर" निष्पादित किया जा रहा है, हमेशा चालू करने के लिए उपयुक्त नहीं है। उनमें से एक अधिक सर्किटरी जटिलता है, क्योंकि MOSFET या IGBT ट्रांजिस्टर के साथ पावर यूनिट को बिजली देने के लिए एक डायोड ब्रिज की आवश्यकता होती है। ये कमियाँ त्रिक नियंत्रण से वंचित हैं, जो पीडब्लूएम का एक संशोधन है।
ट्राईक (अंग्रेजी साहित्य में
TRIAC ) एक अर्धचालक उपकरण है, जो थाइरिस्टर का एक संशोधन है, जिसे एक कुंजी के रूप में काम करने के लिए डिज़ाइन किया गया है, अर्थात यह या तो खुला या बंद हो सकता है और इसमें ऑपरेशन का रैखिक मोड नहीं होता है। Thyristor से मुख्य अंतर खुले राज्य में दो तरफा चालकता है और (कुछ आरक्षण के साथ) वर्तमान की ध्रुवीयता से स्वतंत्रता (thyristors और triacs वर्तमान द्वारा नियंत्रित किया जाता है, द्विध्रुवी ट्रांजिस्टर की तरह) एक नियंत्रण इलेक्ट्रोड के माध्यम से। इससे AC सर्किट में triac का उपयोग करना आसान हो जाता है। थायरिस्टर्स के साथ आम दूसरी विशेषता यह है कि जब नियंत्रण प्रवाह गायब हो जाता है तो चालकता बनाए रखने की क्षमता होती है। मुख्य इलेक्ट्रोड के बीच करंट को बंद कर दिया जाता है, यानी जब प्रत्यावर्ती धारा शून्य से गुजरती है, तो त्रिक बंद हो जाता है। इसका एक दुष्प्रभाव शटडाउन के दौरान शोर में कमी है। इस प्रकार, ट्राईक को खोलने के लिए, हमारे लिए यह नियंत्रण इलेक्ट्रोड पर लागू करने के लिए पर्याप्त है कि वह छोटी अवधि की एक उद्घाटन पल्स, दसियों माइक्रोसेकंड के आदेश के लिए, और यह बारी-बारी से चालू आधे चक्र के अंत में खुद को बंद कर देगा।
Triac नियंत्रण इस उपकरण के उपरोक्त गुणों को ध्यान में रखता है और शून्य क्रॉसिंग बिंदु के सापेक्ष निरंतर विलंब के साथ प्रत्यावर्ती धारा के प्रत्येक आधे चक्र पर triac को अनलॉक करने में शामिल होता है। इस प्रकार, प्रत्येक आधा अवधि से एक "टुकड़ा" काटा जाता है। आकृति में छायांकित भाग इस प्रक्रिया का परिणाम है। इस प्रकार, एक साइनसॉइड के बजाय, हमारे पास कुछ ऐसा होगा जो एक निश्चित सीमा तक देखा जाता है:

अब हमारा काम समय पर triac अनलॉक करना है। हम इस कार्य को माइक्रोकंट्रोलर को सौंपेंगे। नीचे दिए गए आरेख उपलब्ध समाधानों के विश्लेषण के साथ-साथ ऑप्टोकॉपर्स के लिए प्रलेखन का परिणाम है। विशेष रूप से, पावर यूनिट को टेक्सास इंस्ट्रूमेंट्स द्वारा निर्मित ट्राईक ऑप्टोकॉप्लर के लिए प्रलेखन से लिया गया है। सर्किट कमियां के बिना नहीं है, जिनमें से एक शक्तिशाली तार अवरोधक-स्टोव है, जिसके माध्यम से एक ऑप्टोकॉपलर का पता लगाया जाता है, जो शून्य के माध्यम से संक्रमण का पता लगाता है।

यह कैसे काम करता है? आकृति पर विचार करें।

सकारात्मक अर्ध-चक्र पर, जब ऑप्टोकॉप्लर के माध्यम से धारा एक निश्चित सीमा मान से अधिक हो जाती है, तो ऑप्टोकॉप्लर खुल जाता है और माइक्रोकंट्रोलर के इनपुट पर वोल्टेज लगभग शून्य हो जाता है (आकृति में "ZC" वक्र)। जब वर्तमान फिर से इस मूल्य से नीचे आता है, तो एक बार फिर माइक्रोकंट्रोलर पर आता है। यह उस समय होता है जब इंस्टेंट शून्य से डीज़ हो जाता है। यह dz ध्यान देने योग्य है, मेरे मामले में यह लगभग 0.8 एमएस है, और इसे ध्यान में रखा जाना चाहिए। यह मुश्किल नहीं है: हम टी अवधि और उच्च-स्तरीय पल्स एच, व्हेंस डीज़ = (एच - टी / 2) / 2 की अवधि जानते हैं। इस प्रकार, हमें ऑप्टोकॉपलर से सिग्नल के प्रमुख किनारे से डीज़ + डीपी के माध्यम से त्रिक को खोलने की आवश्यकता है।
चरण शिफ्ट डीपी पर अलग से चर्चा की जानी चाहिए। सी डीसी पीडब्लूएम के मामले में, औसत आउटपुट करंट नियंत्रण रेखा के कर्मी चक्र पर निर्भर करेगा। लेकिन यह केवल इसलिए है क्योंकि निरंतर का अभिन्न एक रैखिक निर्भरता देता है। हमारे मामले में, साइन अभिन्न के मूल्य से आगे बढ़ना आवश्यक है। एक साधारण समीकरण का समाधान हमें वांछित निर्भरता प्रदान करता है: औसत वर्तमान मूल्य में एक रैखिक परिवर्तन के लिए, आर्कोसिन कानून के अनुसार चरण बदलाव को बदलना आवश्यक है, जिसके लिए यह LUT नियंत्रण कार्यक्रम में तालिका में प्रवेश करने के लिए पर्याप्त है।
भविष्य में मैं जो कुछ भी चर्चा करूंगा, वह सीधे STM32 श्रृंखला के माइक्रोकंट्रोलरों की वास्तुकला से संबंधित है, विशेष रूप से, उनके टाइमर की वास्तुकला के लिए। इस श्रृंखला के माइक्रोकंट्रोलरों में टाइमर की एक अलग संख्या है, उनमें से सात STM32F103RBT6 में हैं, जिनमें से चार PWM को पकड़ने और उत्पन्न करने के लिए उपयुक्त हैं। टाइमर को कैस्केड किया जा सकता है: प्रत्येक टाइमर के लिए, आंतरिक घटनाओं में से एक (अतिप्रवाह, रीसेट, इनपुट या आउटपुट चैनलों में से किसी एक पर स्तर में परिवर्तन, आदि। विवरण के लिए; आपको दस्तावेज़ में भेजें), आप एक दिन की घोषणा कर सकते हैं और इसे दूसरे टाइमर पर भेज सकते हैं, इसे असाइन कर सकते हैं। एक निश्चित कार्रवाई: शुरू, बंद करो, रीसेट, आदि। हमें तीन टाइमर की आवश्यकता होगी: उनमें से एक, तथाकथित में काम करना। PWM इनपुट मोड, इनपुट सिग्नल की अवधि और उच्च स्तर की पल्स चौड़ाई को मापता है। माप के अंत में, प्रत्येक अवधि के बाद एक बाधा उत्पन्न होती है। इसी समय, इस घटना से जुड़ा चरण शिफ्ट टाइमर शुरू होता है, जो स्टैंडबाय मोड में संचालित होता है। इस टाइमर के अतिप्रवाह की घटना पर, एक टाइमर रीसेट होता है, जो आउटपुट कंट्रोल सिग्नल को ट्राइक पर उत्पन्न करता है, इस प्रकार, वैकल्पिक चालू की प्रत्येक पूर्ण अवधि के बाद, कंट्रोल सिग्नल का चरण समायोजित हो जाता है। केवल पहला टाइमर एक बाधा उत्पन्न करता है, और हैंडलर का कार्य चरण शिफ्ट (वेटिंग टाइमर के एआरआर रजिस्टर) और पीडब्लूएम टाइमर अवधि (भी एआरआर दर्ज करें) को समायोजित करना है ताकि यह हमेशा वैकल्पिक वर्तमान की आधी अवधि के बराबर हो। इस प्रकार, सभी नियंत्रण हार्डवेयर स्तर पर होते हैं और सॉफ्टवेयर देरी का प्रभाव पूरी तरह से समाप्त हो जाता है। हां, यह प्रोग्रामेटिक रूप से किया जा सकता है, लेकिन कैस्केड टाइमर के रूप में इस तरह के अवसर का लाभ नहीं उठाना पाप था।
मैं पूरी परियोजना के कोड को समीक्षा के लिए अपलोड करने की बात नहीं देखता, इसके अलावा, यह पूरी तरह से दूर है। मैं केवल
ऊपर वर्णित एल्गोरिथ्म युक्त एक
टुकड़ा दूंगा। यह अन्य भागों से पूरी तरह से स्वतंत्र है और आसानी से एक संगत माइक्रोकंट्रोलर पर दूसरी परियोजना के लिए पोर्ट किया जा सकता है।
और अंत में, एक्शन में डिवाइस दिखाने वाला एक वीडियो: