- सर्वो मोटर
- LPC2148 PWM और ADC का उपयोग करके इमदादी मोटर को नियंत्रित करना
- ARM7-LPC2148 में PWM और ADC पिन
- अवयव आवश्यक
- सर्किट आरेख और कनेक्शन
- इमदादी मोटर नियंत्रण के लिए ARM7-LPC2148 प्रोग्रामिंग
हमारे पिछले ट्यूटोरियल में, हमने ARM7-LPC2148 के साथ स्टेपर मोटर को बाधित किया है। इस ट्यूटोरियल में, हम ARM7-LPC2148 के साथ सर्वो मोटर को नियंत्रित करेंगे । सर्वो मोटर में स्टेपर मोटर पर कम बिजली की खपत होती है। एक सर्वो मोटर अपनी बिजली की खपत को रोक देती है जब वांछित स्थिति तक पहुँच जाती है लेकिन स्टेपर मोटर वांछित स्थिति में शाफ्ट को लॉक करने के लिए बिजली की खपत करती है। सर्वो मोटर्स का उपयोग रोबोटिक्स प्रोजेक्ट्स में ज्यादातर उनकी सटीकता और आसान हैंडलिंग के कारण किया जाता है।
इस ट्यूटोरियल में हम सर्वो मोटर और ARM7-LPC2148 के साथ सर्वो इंटरफ़ेस के बारे में जानेंगे । एक पोटेंशियोमीटर को सर्वो मोटर की शाफ्ट, और कोण मूल्य को प्रदर्शित करने के लिए एक एलसीडी की स्थिति में अंतर करने के लिए भी हस्तक्षेप किया जाता है।
सर्वो मोटर
एक सर्वो मोटर डीसी मोटर, स्थिति नियंत्रण प्रणाली और गियर का एक संयोजन है। सर्वो मोटर के रोटेशन को पीडब्लूएम सिग्नल लगाकर नियंत्रित किया जाता है, पीडब्लूएम सिग्नल की चौड़ाई मोटर के रोटेशन कोण और दिशा को तय करती है। यहां हम इस ट्यूटोरियल में SG90 सर्वो मोटर का उपयोग करेंगे, यह लोकप्रिय और सबसे सस्ती में से एक है। SG90 एक 180 डिग्री सर्वो है। तो इस सर्वो के साथ हम अक्ष को 0-180 डिग्री से जोड़ सकते हैं:
- ऑपरेटिंग वोल्टेज: + 5 वी
- गियर प्रकार: प्लास्टिक
- रोटेशन कोण: 0 से 180 डिग्री
- वजन: 9 ग्राम
- टोक़: 2.5 किग्रा / सेमी
इससे पहले कि हम सर्वो मोटर के लिए प्रोग्रामिंग शुरू कर सकें हमें पता होना चाहिए कि सर्वो मोटर को नियंत्रित करने के लिए किस प्रकार का संकेत भेजा जाना है। हमें इमदादी मोटर के सिग्नल तार को पीडब्लूएम सिग्नल भेजने के लिए एमसीयू को प्रोग्राम करना चाहिए। इमदादी मोटर के अंदर एक नियंत्रण सर्किट्री होती है जो पीडब्लूएम सिग्नल के कर्तव्य चक्र को पढ़ती है और संबंधित मोटर में शाफ्ट मोटर्स को स्थिति के अनुसार नीचे चित्र में दिखाया गया है
हर 20 मिलीसेकंड के लिए सर्वो मोटर पल्स की जांच करती है। तो, मोटर की शाफ्ट को घुमाने के लिए सिग्नल की पल्स चौड़ाई को समायोजित करें।
- इमदादी के 0 डिग्री के रोटेशन के लिए 1 एमएस (1 मिलीसेकंड) पल्स की चौड़ाई
- 90 डिग्री के रोटेशन के लिए 1.5ms पल्स की चौड़ाई (तटस्थ स्थिति)
- सर्वो के रोटेशन के लिए 180 डिग्री के लिए 2 एमएस पल्स चौड़ाई ।
इमदादी को ARM7-LPC2148 से जोड़ने से पहले, आप इस सर्वो मोटर परीक्षक सर्किट की मदद से अपने सर्वो का परीक्षण कर सकते हैं। यह भी जांचें कि एक सर्वो मोटर को अन्य माइक्रोकंट्रोलर के साथ कैसे जोड़ा जा सकता है:
- Arduino का उपयोग करके इमदादी मोटर नियंत्रण
- 8051 माइक्रोकंट्रोलर के साथ सर्वो मोटर इंटरफेसिंग
- MATLAB का उपयोग कर इमदादी मोटर नियंत्रण
- रास्पबेरी पाई के साथ सर्वो मोटर नियंत्रण
- MSP430G2 के साथ सर्वो मोटर में हस्तक्षेप करना
- STM32F103C8 के साथ सर्वो मोटर में हस्तक्षेप करना
LPC2148 PWM और ADC का उपयोग करके इमदादी मोटर को नियंत्रित करना
PWM का उपयोग करके LPC2148 द्वारा एक सर्वो मोटर को नियंत्रित किया जा सकता है। 20ms की अवधि और 50Hz की आवृत्ति के साथ SERVO'S PWM पिन को पीडब्लूएम सिग्नल प्रदान करके हम सर्वो मोटर के शाफ्ट को 180 डिग्री (-90 से +90) के आसपास रख सकते हैं।
एक पोटेंशियोमीटर का उपयोग पीडब्लूएम सिग्नल के कर्तव्य चक्र को अलग करने और सर्वो मोटर के शाफ्ट को घुमाने के लिए किया जाता है, इस विधि को LPC2148 में ADC मॉड्यूल का उपयोग करके कार्यान्वित किया जाता है। इसलिए हमें इस ट्यूटोरियल में PWM और ADC अवधारणाओं को लागू करने की आवश्यकता है। तो कृपया ARM7-LPC2148 में PWM और ADC सीखने के लिए हमारे पिछले ट्यूटोरियल देखें।
- ARM7-LPC2148 में PWM का उपयोग कैसे करें
- एआरएम-एलपीएलसी 2148 में एडीसी का उपयोग कैसे करें
ARM7-LPC2148 में PWM और ADC पिन
नीचे दी गई छवि LPC2148 में PWM और ADC पिन दिखाती है। पीले बॉक्स इंगित करते हैं (6) पीडब्लूएम पिन और ब्लैक बॉक्स इंगित करता है कि (14) एडीसी पिन।
अवयव आवश्यक
हार्डवेयर
- ARM7-LPC2148
- एलसीडी (16x2) प्रदर्शन मॉड्यूल
- सर्वो मोटर (SG-90)
- 3.3V वोल्टेज नियामक
- 10k पोटेंशियोमीटर (2 नग)
- ब्रेड बोर्ड
- तारों को जोड़ना
सॉफ्टवेयर
- कील uVision5
- फ्लैश मैजिक टूल
सर्किट आरेख और कनेक्शन
नीचे दी गई तालिका सर्वो मोटर और ARM7-LPC2148 के बीच संबंध को दर्शाती है :
सर्वो पिन्स |
ARM7-LPC2148 |
RED (+ 5 वी) |
+ 5 वी |
ब्राउन (GND) |
GND |
ऑरेंज (PWM) |
P0.1 |
पिन P0.1 LPC2148 का PWM आउटपुट है।
नीचे दी गई तालिका एलसीडी और ARM7-LPC2148 के बीच सर्किट कनेक्शन दिखाती है ।
ARM7-LPC2148 |
एलसीडी (16x2) |
P0.4 |
रुपये (पंजीकरण चुनें) |
P0.6 |
ई (सक्षम) |
P0.12 |
D4 (डेटा पिन 4) |
P0.13 |
D5 (डेटा पिन 5) |
P0.14 |
D6 (डेटा पिन 6) |
P0.15 |
D7 (डेटा पिन 7) |
GND |
वीएसएस, आर / डब्ल्यू, के |
+ 5 वी |
वीडीडी, ए |
नीचे दी गई तालिका ARMV LPC2148 और पोटेंटियोमीटर के बीच 3.3V वोल्टेज नियामक के साथ कनेक्शन दिखाती है ।
3.3V वोल्टेज नियामक आईसी |
पिन समारोह |
एआरएम -7 एलपीसी 2148 पिन |
1. टाईट पिन |
- जीएनडी से वे |
जीएनडी पिन |
2.कंपनी पिन |
विनियमित + 3.3V आउटपुट |
LPC2148 के P0.28 को पोटेंशियोमीटर इनपुट और पोटेंशियोमीटर के आउटपुट के लिए |
3. राइट पिन |
+ वी 5 वी से इनपुट |
+ 5 वी |
ध्यान देने योग्य बिंदु
1. 3.3V के एक वोल्टेज रेगुलेटर का उपयोग LPC4148 के ADC पिन (P0.28) के अनुरूप इनपुट मूल्य प्रदान करने के लिए किया जाता है। जैसा कि हम 5V शक्ति का उपयोग कर रहे हैं, हमें 3.3V के वोल्टेज नियामक के साथ वोल्टेज को विनियमित करने की आवश्यकता है।
2. LPC2148 पिन P0.28 को एनालॉग इनपुट (ADC) प्रदान करने के लिए (0V से 3.3V) के बीच वोल्टेज को अलग करने के लिए एक पोटेंशियोमीटर का उपयोग किया जाता है।
3. LPC2148 का पिन P0.1 मोटर की स्थिति को नियंत्रित करने के लिए सर्वो मोटर को PWM आउटपुट प्रदान करता है।
4. एनालॉग इनपुट (ADC) के अनुसार LPC2148 के P0.1 पर PWM आउटपुट पिन के माध्यम से (0 से 180 डिग्री) सर्वो मोटर परिवर्तन की स्थिति को महत्व देता है।
इमदादी मोटर नियंत्रण के लिए ARM7-LPC2148 प्रोग्रामिंग
ARM7-LPC2148 प्रोग्राम करने के लिए हमें keil uVision और Flash Magic टूल की आवश्यकता है। हम माइक्रो यूएसबी पोर्ट के माध्यम से ARM7 स्टिक को प्रोग्राम करने के लिए USB केबल का उपयोग कर रहे हैं। हम Keil का उपयोग करके कोड लिखते हैं और एक हेक्स फ़ाइल बनाते हैं और फिर HEX फाइल को फ्लैश मैजिक का उपयोग करते हुए ARM7 स्टिक में लाते हैं। काइल uVision और फ्लैश मैजिक को स्थापित करने के बारे में अधिक जानने के लिए और उनका उपयोग कैसे करें लिंक का पालन करें ARM7 LPC2148 माइक्रोकंट्रोलर के साथ शुरुआत करें और इसे Keil uVision का उपयोग करके प्रोग्राम करें।
सर्वो मोटर को नियंत्रित करने के लिए PWM और ADC के लिए LPC2148 को कॉन्फ़िगर करने में शामिल कदम
चरण 1: - LPC2148 कोडिंग के लिए आवश्यक हेडर फाइलें शामिल करें
#शामिल
चरण 2: - अगली बात यह है कि घड़ी की पीढ़ी के लिए पीएलएल को कॉन्फ़िगर करना है क्योंकि यह सिस्टम घड़ी और एलपीसी 2148 के परिधीय घड़ी को सेट करता है जैसा कि प्रोग्रामर को आवश्यकता होती है। LPC2148 के लिए अधिकतम घड़ी आवृत्ति 60Mhz है। PLL घड़ी पीढ़ी को कॉन्फ़िगर करने के लिए निम्नलिखित पंक्तियों का उपयोग किया जाता है।
शून्य initilizePLL (शून्य) // फ़ंक्शन का उपयोग घड़ी की पीढ़ी के लिए PLL का उपयोग करने के लिए { PLL0CON = 0x01; PLL0CFG = 0x24; PLL0FEED = 0xAA; PLL0FEED = 0x55; जबकि (((PLL0STAT & 0x00000400)); PLL0CON = 0x03; PLL0FEED = 0xAA; PLL0FEED = 0x55; VPBDIV = 0x01; }
चरण 3: - अगली बात करने के लिए PINSEL रजिस्टर का उपयोग करके LPC2148 के PWM पिन और PWM फ़ंक्शन का चयन करें। LPC2148 के PWM आउटपुट के लिए P0.1 का उपयोग करते हुए हम PINSEL0 का उपयोग करते हैं।
PINSEL0 - = 0x00000008; // PWM3 के रूप में LPC2148 का पिन P0.1 सेट करना
चरण 4: - अगला, हमें PWMTCR (टाइमर कंट्रोल रजिस्टर) का उपयोग करके टाइमर को रीसेट करने की आवश्यकता है।
PWMTCR = 0x02; // PWM के लिए काउंटर को रीसेट और अक्षम करें
और फिर अगले निर्धारित मूल्य निर्धारित करता है जो PWM के संकल्प को निर्धारित करता है।
PWMPR = 0x1D; // प्रेस्केल रजिस्टर मूल्य
चरण 5: - इसके बाद, PWMMCR (पीडब्लूएम मैच कंट्रोल रजिस्टर) सेट करें क्योंकि यह रीसेट की तरह ऑपरेशन सेट करता है, PWMMR0 और PWMMR3 के लिए व्यवधान डालता है।
PWMMCR = 0x00000203; // MR0 मैच पर रीसेट और इंटरप्ट, MR3 मैच पर इंटरप्ट
चरण 6: - पीडब्लूएम चैनल की अधिकतम अवधि पीडब्लूएमआरआर0 का उपयोग करके निर्धारित की गई है और पीडब्लूएम ड्यूटी चक्र के टन को शुरू में 0.65msec पर सेट किया गया है
PWMMR0 = 20000; // PWM लहर की समय अवधि, 20msec PWMMR3 = 650; // PWM लहर का टन 0.65 मिसे
चरण 7: - अगला, हमें PWMLER का उपयोग करके संबंधित मैच रजिस्टरों को लैच इनेबल सेट करना होगा
PWMLER = 0x09; // PWM3 और PWM0 के लिए सक्षम लैच
(हम PWMMR0 और PWMMR3 का उपयोग करते हैं) इसलिए PWMLER में 1 सेट करके संबंधित बिट को सक्षम करें
चरण 8: - PWM आउटपुट को पिन में सक्षम करने के लिए हमें PWMTCR का उपयोग करने के लिए PWM टाइमर काउंटर और PWM मोड को सक्षम करने की आवश्यकता है।
PWMPCR = 0x0800; // PWM3 और PWM 0 को सक्षम करें, एकल किनारे नियंत्रित PWM PWMTCR = 0x09; // PWM और काउंटर सक्षम करें
चरण 9: - अब हमें ADC पिन P0.28 से PWM के कर्तव्य चक्र को स्थापित करने के लिए पोटेंशियोमीटर मान प्राप्त करने की आवश्यकता है। तो, हम ADC मान (0 से 1023) के लिए पोटेंशियोमीटर एनालॉग इनपुट (0 से 3.3V) को परिवर्तित करने के लिए LPC2148 में ADC मॉड्यूल का उपयोग करते हैं।
चरण 10: - LPC2148 में ADC पिन P0.28 का चयन करने के लिए , हम उपयोग करते हैं
PINSEL1 = 0x01000000; // P0.28 को ADC INPUT AD0CR के रूप में सेट करना = (((14) << 8) - (1 << 21)); // सेटिंग घड़ी और पीडीएन ए / डी रूपांतरण के लिए
निम्न लाइनें एनालॉग इनपुट (0 से 3.3V) पर कब्जा करती हैं और इसे डिजिटल मूल्य (0 से 1023) में परिवर्तित करती हैं। और फिर इस डिजिटल मूल्यों को उन्हें (0 से 255) में बदलने के लिए 4 से विभाजित किया गया है और अंत में LPC2148 के P0.1 पिन में PWM आउटपुट के रूप में खिलाया गया है । यहाँ हम 0-1023 से 0-255 तक मानों को परिवर्तित कर रहे हैं , इसे 4 के साथ विभाजित करके LPC2148 के PWM में 8-बिट रिज़ॉल्यूशन (28) है ।
AD0CR - = (1 << 1); // ADC रजिस्टर डिलेटाइम (10) में AD0.1 चैनल का चयन करें ; AD0CR - = (1 << 24); // ए / डी रूपांतरण शुरू करते समय ((AD0DR1 और (1 << 31)) == 0); // ADC डेटा रजिस्टर adcvalue = (AD0DR1 >> 6) और 0x3ff में पूर्ण बिट की जाँच करें ; // ADC डेटा रजिस्टर dutycycle = adcvalue / 4 से रिजल्ट प्राप्त करें; // (0 से 255) पीडब्लूएमआर 1 = ड्यूटिकाइकल से ड्यूटिकाइकल मान प्राप्त करने का सूत्र ; // सेट dutycycle मान को PWM मैच रजिस्टर PWMLER - = (1 << 1); // dutycycle मान के साथ PWM आउटपुट सक्षम करें
चरण 11: - अगला, हम उन मूल्यों को एलसीडी (16X2) डिस्प्ले मॉड्यूल में प्रदर्शित करते हैं। तो हम एलसीडी डिस्प्ले मॉड्यूल को इनिशियलाइज़ करने के लिए निम्नलिखित पंक्तियों को जोड़ते हैं
शून्य LCD_INITILIZE (शून्य) // एलसीडी तैयार करने के लिए फ़ंक्शन { IO0DIR = 0x0000FF00; // सेट पिन P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 के रूप में OUTPUT देरी (20); LCD_SEND (0x02); // प्रारंभिक एलसीडी को ऑपरेशन के 4-बिट मोड में LCD_SEND (0x28); // 2 लाइनें (16X2) LCD_SEND (0x0C); // LCD_SEND (0x06) पर कर्सर पर प्रदर्शन ; // ऑटो इंक्रीमेंट कर्सर LCD_SEND (0x01); // स्पष्ट LCD_SEND (0x80) प्रदर्शित करें ; // पहली पंक्ति पहली स्थिति }
जैसा कि हमने एलपीसी 2148 के साथ 4-बिट मोड में एलसीडी कनेक्ट किया है, हमें निबल (ऊपरी निबल और लोअर नीबबल) द्वारा प्रदर्शित होने के लिए मान भेजने की आवश्यकता है। तो निम्नलिखित पंक्तियों का उपयोग किया जाता है।
void LCD_DISPLAY (चार * संदेश) // एक { uint8_t i = 0 द्वारा भेजे गए वर्णों को मुद्रित करने का कार्य ; जबकि (संदेश! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((संदेश और 0xF0) << 8)); // अपर निबल IO0SET = 0x00000050 भेजता है ; // RS उच्च और सक्षम डेटा IO0CLR = 0x00000020 मुद्रित करने के लिए उच्च ; // आरडब्ल्यू कम लिखें मोड विलंब (2); IO0CLR = 0x00000040; // एन = 0, आरएस और आरडब्ल्यू अपरिवर्तित (यानी आरएस = 1, आरडब्ल्यू = 0) विलंब (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((संदेश और 0x0F) << 12)); // लोअर निबल IO0SET = 0x00000050 भेजता है ; // RS & EN हाई IO0CLR = 0x00000020; देरी (2); IO0CLR = 0x00000040; देरी (5); मैं ++; } }
उन एडीसी और पीडब्लूएम मूल्यों को प्रदर्शित करने के लिए हम इंट मेन () फ़ंक्शन में निम्नलिखित लाइनों का उपयोग करते हैं।
LCD_SEND (0x80); स्प्रिंटफ (डिस्प्लेडेक, "एडक्वाल्यू =% एफ", ड्यूटिसाइकल); LCD_DISPLAY (displayadc); // प्रदर्शन ADC मान (0 से 1023) कोण = (adcvalue / 5.7); // फॉर्मूला ADC मान को कोण में परिवर्तित करने के लिए (o 180 डिग्री तक) LCD_SEND (0xC0); स्प्रिंटफ (एंगलवेल्यू, "एएनजीएल =%। 2 एफ डीएल", कोण); LCD_DISPLAY (कोण-निर्धारण);
ट्यूटोरियल का पूरा कोड और वीडियो विवरण नीचे दिया गया है