- సర్వో మోటార్
- LPC2148 PWM & ADC ఉపయోగించి సర్వో మోటార్ను నియంత్రించడం
- ARM7-LPC2148 లో PWM & ADC పిన్స్
- భాగాలు అవసరం
- సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
- సర్వో మోటార్ కంట్రోల్ కోసం ప్రోగ్రామింగ్ ARM7-LPC2148
మా మునుపటి ట్యుటోరియల్లో, మేము ARM7-LPC2148 తో ఇంటర్ఫేస్డ్ స్టెప్పర్ మోటారును కలిగి ఉన్నాము. ఈ ట్యుటోరియల్లో, మేము ARM7-LPC2148 తో సర్వో మోటార్ను నియంత్రిస్తాము. సర్వో మోటారుకు స్టెప్పర్ మోటారు కంటే తక్కువ విద్యుత్ వినియోగ ప్రయోజనం ఉంది. కావలసిన స్థానానికి చేరుకున్నప్పుడు ఒక సర్వో మోటారు దాని విద్యుత్ వినియోగాన్ని ఆపివేస్తుంది, కాని స్టెప్పర్ మోటారు నిరంతరాయంగా కావలసిన స్థితిలో షాఫ్ట్ను లాక్ చేయడానికి శక్తిని వినియోగించుకుంటుంది. సర్వో మోటార్లు రోబోటిక్స్ ప్రాజెక్టులలో ఎక్కువగా ఉపయోగించబడతాయి ఎందుకంటే వాటి ఖచ్చితత్వం మరియు సులభంగా నిర్వహించడం.
ఈ ట్యుటోరియల్లో మేము సర్వో మోటార్ గురించి మరియు ARM7-LPC2148 తో సర్వోను ఎలా ఇంటర్ఫేస్ చేయాలో నేర్చుకుంటాము. సర్వో మోటర్ యొక్క షాఫ్ట్ యొక్క స్థితిని మార్చడానికి ఒక పొటెన్షియోమీటర్ కూడా ఇంటర్ఫేస్ చేయబడింది మరియు కోణ విలువను ప్రదర్శించడానికి ఒక LCD.
సర్వో మోటార్
సర్వో మోటార్ అనేది DC మోటార్, పొజిషన్ కంట్రోల్ సిస్టమ్ మరియు గేర్ల కలయిక. సర్వో మోటారు యొక్క భ్రమణం దానికి PWM సిగ్నల్ను వర్తింపజేయడం ద్వారా నియంత్రించబడుతుంది, PWM సిగ్నల్ యొక్క వెడల్పు మోటారు యొక్క భ్రమణ కోణం మరియు దిశను నిర్ణయిస్తుంది. ఇక్కడ మేము ఈ ట్యుటోరియల్లో SG90 సర్వో మోటారును ఉపయోగిస్తాము, ఇది జనాదరణ పొందిన మరియు చౌకైనది. SG90 180 డిగ్రీల సర్వో. కాబట్టి ఈ సర్వోతో మనం 0-180 డిగ్రీల నుండి అక్షాన్ని ఉంచవచ్చు:
- ఆపరేటింగ్ వోల్టేజ్: + 5 వి
- గేర్ రకం: ప్లాస్టిక్
- భ్రమణ కోణం: 0 నుండి 180 డిగ్రీలు
- బరువు: 9 గ్రా
- టార్క్: 2.5 కిలోలు / సెం.మీ.
మేము సర్వో మోటారు కోసం ప్రోగ్రామింగ్ ప్రారంభించే ముందు, సర్వో మోటారును నియంత్రించడానికి ఏ రకమైన సిగ్నల్ పంపించాలో తెలుసుకోవాలి. సర్వో మోటర్ యొక్క సిగ్నల్ వైర్కు పిడబ్ల్యుఎం సిగ్నల్లను పంపడానికి మేము ఎంసియును ప్రోగ్రామ్ చేయాలి. సర్వో మోటారు లోపల కంట్రోల్ సర్క్యూట్రీ ఉంది, ఇది పిడబ్ల్యుఎం సిగ్నల్ యొక్క విధి చక్రం చదివి, క్రింద ఉన్న చిత్రంలో చూపిన విధంగా సంబంధిత ప్రదేశంలో సర్వో మోటార్ షాఫ్ట్ను ఉంచుతుంది
ప్రతి 20 మిల్లీసెకన్లకు సర్వో మోటార్ పల్స్ తనిఖీ చేస్తుంది. కాబట్టి, మోటారు షాఫ్ట్ తిప్పడానికి సిగ్నల్ యొక్క పల్స్ వెడల్పును సర్దుబాటు చేయండి.
- సర్వోను 0 డిగ్రీకి తిప్పడానికి 1 ఎంఎస్ (1 మిల్లీసెకండ్) పల్స్ వెడల్పు
- 90 డిగ్రీల (తటస్థ స్థానం) కు భ్రమణం కోసం 1.5ms పల్స్ వెడల్పు
- సర్వోను 180 డిగ్రీల వరకు తిప్పడానికి 2 ఎంఎస్ పల్స్ వెడల్పు.
సర్వోను ARM7-LPC2148 కు కనెక్ట్ చేయడానికి ముందు, మీరు ఈ సర్వో మోటార్ టెస్టర్ సర్క్యూట్ సహాయంతో మీ సర్వోను పరీక్షించవచ్చు. సర్వో మోటారును ఇతర మైక్రోకంట్రోలర్లతో ఎలా అనుసంధానించవచ్చో కూడా తనిఖీ చేయండి:
- ఆర్డునో ఉపయోగించి సర్వో మోటార్ కంట్రోల్
- 8051 మైక్రోకంట్రోలర్తో సర్వో మోటార్ ఇంటర్ఫేసింగ్
- మాట్లాబ్ ఉపయోగించి సర్వో మోటార్ కంట్రోల్
- రాస్ప్బెర్రీ పైతో సర్వో మోటార్ కంట్రోల్
- MSP430G2 తో ఇంటర్ఫేసింగ్ సర్వో మోటార్
- STM32F103C8 తో ఇంటర్ఫేసింగ్ సర్వో మోటార్
LPC2148 PWM & ADC ఉపయోగించి సర్వో మోటార్ను నియంత్రించడం
పిడబ్ల్యుఎం ఉపయోగించి ఎల్పిసి 2148 ద్వారా సర్వో మోటార్ను నియంత్రించవచ్చు. SERVO యొక్క PWM పిన్కు 20ms వ్యవధి మరియు 50Hz పౌన frequency పున్యంతో PWM సిగ్నల్ అందించడం ద్వారా మేము 180 డిగ్రీల (-90 నుండి +90) వరకు సర్వో మోటార్ యొక్క షాఫ్ట్ను ఉంచవచ్చు.
పిడబ్ల్యుఎం సిగ్నల్ యొక్క విధి చక్రం మారడానికి మరియు సర్వో మోటార్ యొక్క షాఫ్ట్ను తిప్పడానికి ఒక పొటెన్టోమీటర్ ఉపయోగించబడుతుంది, ఈ పద్ధతి LPC2148 లోని ADC మాడ్యూల్ ఉపయోగించి అమలు చేయబడుతుంది. కాబట్టి ఈ ట్యుటోరియల్లో అమలు చేయడానికి మాకు పిడబ్ల్యుఎం మరియు ఎడిసి భావనలు రెండూ అవసరం. కాబట్టి ARM7-LPC2148 లో PWM మరియు ADC నేర్చుకోవడానికి మా మునుపటి ట్యుటోరియల్లను దయచేసి చూడండి.
- ARM7-LPC2148 లో PWM ను ఎలా ఉపయోగించాలి
- ARM-LPLC2148 లో ADC ని ఎలా ఉపయోగించాలి
ARM7-LPC2148 లో PWM & ADC పిన్స్
క్రింద ఉన్న చిత్రం LPC2148 లోని PWM మరియు ADC పిన్లను చూపుతుంది. పసుపు పెట్టెలు (6) పిడబ్ల్యుఎం పిన్లను సూచిస్తాయి మరియు బ్లాక్ బాక్స్ (14) ఎడిసి పిన్లను సూచిస్తుంది.
భాగాలు అవసరం
హార్డ్వేర్
- ARM7-LPC2148
- LCD (16x2) డిస్ప్లే మాడ్యూల్
- సర్వో మోటార్ (SG-90)
- 3.3 వి వోల్టేజ్ రెగ్యులేటర్
- 10 కె పొటెన్టోమీటర్ (2 సంఖ్యలు)
- బ్రెడ్బోర్డ్
- వైర్లను కనెక్ట్ చేస్తోంది
సాఫ్ట్వేర్
- కైల్ uVision5
- ఫ్లాష్ మ్యాజిక్ సాధనం
సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
దిగువ పట్టిక సర్వో మోటార్ & ARM7-LPC2148 మధ్య కనెక్షన్ను చూపుతుంది :
సెర్వో పిన్స్ |
ARM7-LPC2148 |
RED (+ 5V) |
+ 5 వి |
BROWN (GND) |
GND |
ఆరెంజ్ (పిడబ్ల్యుఎం) |
పి.0.1 |
పిన్ P0.1 అనేది LPC2148 యొక్క PWM అవుట్పుట్.
దిగువ పట్టిక LCD & ARM7-LPC2148 మధ్య సర్క్యూట్ కనెక్షన్లను చూపుతుంది.
ARM7-LPC2148 |
LCD (16x2) |
పి.0.4 |
RS (రిజిస్టర్ సెలెక్ట్) |
పి.0.6 |
ఇ (ప్రారంభించు) |
పి.0.12 |
డి 4 (డేటా పిన్ 4) |
పి.0.13 |
డి 5 (డేటా పిన్ 5) |
పి.0.14 |
డి 6 (డేటా పిన్ 6) |
పి.0.15 |
డి 7 (డేటా పిన్ 7) |
GND |
VSS, R / W, K. |
+ 5 వి |
విడిడి, ఎ |
దిగువ పట్టిక 3.3V వోల్టేజ్ రెగ్యులేటర్తో ARM7 LPC2148 & పొటెన్టోమీటర్ మధ్య కనెక్షన్లను చూపుతుంది.
3.3 వి వోల్టేజ్ రెగ్యులేటర్ ఐసి |
పిన్ ఫంక్షన్ |
ARM-7 LPC2148 పిన్ |
1. ఎడమ పిన్ |
- GND నుండి Ve |
GND పిన్ |
2.సెంటర్ పిన్ |
నియంత్రిత + 3.3 వి అవుట్పుట్ |
పొటెన్టోమీటర్ ఇన్పుట్ మరియు పొటెన్టోమీటర్ యొక్క అవుట్పుట్ LPC2148 యొక్క P0.28 కు |
3.రైట్ పిన్ |
5V నుండి + Ve INPUT |
+ 5 వి |
గమనించవలసిన పాయింట్లు
1. LPC2148 యొక్క ADC పిన్ (P0.28) కు అనలాగ్ ఇన్పుట్ విలువను అందించడానికి 3.3V యొక్క వోల్టేజ్ రెగ్యులేటర్ ఇక్కడ ఉపయోగించబడుతుంది. మేము 5 వి శక్తిని ఉపయోగిస్తున్నందున 3.3 వి వోల్టేజ్ రెగ్యులేటర్తో వోల్టేజ్ను నియంత్రించాలి.
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 ప్రోగ్రామ్ చేయడానికి మాకు కైల్ యువిజన్ & ఫ్లాష్ మ్యాజిక్ సాధనం అవసరం. మైక్రో USB పోర్ట్ ద్వారా ARM7 స్టిక్ ప్రోగ్రామ్ చేయడానికి మేము USB కేబుల్ ఉపయోగిస్తున్నాము. మేము కైల్ ఉపయోగించి కోడ్ వ్రాసి హెక్స్ ఫైల్ను క్రియేట్ చేస్తాము, ఆపై HEX ఫైల్ ఫ్లాష్ మ్యాజిక్ ఉపయోగించి ARM7 స్టిక్ కు ఫ్లాష్ అవుతుంది. కైల్ యువిజన్ మరియు ఫ్లాష్ మ్యాజిక్ను ఇన్స్టాల్ చేయడం గురించి మరియు వాటిని ఎలా ఉపయోగించాలో గురించి మరింత తెలుసుకోవడానికి లింక్ను అనుసరించండి ARM7 LPC2148 మైక్రోకంట్రోలర్తో ప్రారంభించండి మరియు కైల్ యువిజన్ ఉపయోగించి ప్రోగ్రామ్ చేయండి.
సర్వో మోటారును నియంత్రించడానికి PWM & ADC కోసం LPC2148 ను కాన్ఫిగర్ చేసే దశలు
దశ 1: - LPC2148 కోడింగ్ కోసం అవసరమైన హెడర్ ఫైళ్ళను చేర్చండి
# చేర్చండి
దశ 2: - ప్రోగ్రామర్లకు అవసరమైన విధంగా సిస్టమ్ గడియారం మరియు LPC2148 యొక్క పరిధీయ గడియారాన్ని సెట్ చేస్తున్నందున క్లాక్ జనరేషన్ కోసం PLL ను కాన్ఫిగర్ చేయడం తదుపరి విషయం. LPC2148 యొక్క గరిష్ట గడియార పౌన frequency పున్యం 60Mhz. PLL గడియార ఉత్పత్తిని కాన్ఫిగర్ చేయడానికి క్రింది పంక్తులు ఉపయోగించబడతాయి.
void initilizePLL (శూన్యమైనది) // గడియార ఉత్పత్తికి PLL ను ఉపయోగించటానికి ఫంక్షన్ { PLL0CON = 0x01; PLL0CFG = 0x24; PLL0FEED = 0xAA; PLL0FEED = 0x55; అయితే (! (PLL0STAT & 0x00000400)); PLL0CON = 0x03; PLL0FEED = 0xAA; PLL0FEED = 0x55; VPBDIV = 0x01; }
దశ 3: - పిన్సెల్ రిజిస్టర్ ఉపయోగించి LPC2148 యొక్క PWM పిన్స్ మరియు PWM ఫంక్షన్ను ఎంచుకోవాలి. LPC2148 యొక్క PWM అవుట్పుట్ కోసం మేము P0.1 ను ఉపయోగిస్తున్నందున మేము PINSEL0 ను ఉపయోగిస్తాము.
PINSEL0 - = 0x00000008; // LPC2148 యొక్క పిన్ P0.1 ని PWM3 గా అమర్చుట
దశ 4: - తరువాత, మేము PWMTCR (టైమర్ కంట్రోల్ రిజిస్టర్) ఉపయోగించి టైమర్లను రీసెట్ చేయాలి.
పిడబ్ల్యుఎమ్టిసిఆర్ = 0x02; // PWM కోసం కౌంటర్ను రీసెట్ చేయండి మరియు నిలిపివేయండి
ఆపై తదుపరి PWM యొక్క తీర్మానాన్ని నిర్ణయించే ప్రీస్కేల్ విలువను సెట్ చేయండి.
PWMPR = 0x1D; // ప్రీస్కేల్ రిజిస్టర్ విలువ
దశ 5: - తరువాత, PWMMCR (PWM మ్యాచ్ కంట్రోల్ రిజిస్టర్) ను రీసెట్ వంటి ఆపరేషన్ను సెట్ చేస్తుంది, PWMMR0 మరియు PWMMR3 కోసం అంతరాయాలు.
పిడబ్ల్యుఎంఎంసిఆర్ = 0x00000203; // MR0 మ్యాచ్లో రీసెట్ చేయండి మరియు అంతరాయం కలిగించండి, MR3 మ్యాచ్లో అంతరాయం కలిగించండి
దశ 6: - PWM ఛానల్ యొక్క గరిష్ట కాలం PWMMR0 ను ఉపయోగించి సెట్ చేయబడింది మరియు PWM విధి చక్రం యొక్క టన్ను ప్రారంభంలో 0.65msec కు సెట్ చేయబడింది
పిడబ్ల్యుఎంఎంఆర్ 0 = 20000; // PWM వేవ్ యొక్క కాల వ్యవధి, 20msec PWMMR3 = 650; // టన్నుల పిడబ్ల్యుఎం వేవ్ 0.65 ఎంసెక్కు
దశ 7: - తరువాత, మేము PWMLER ఉపయోగించి సంబంధిత మ్యాచ్ రిజిస్టర్లకు లాచ్ ఎనేబుల్ సెట్ చేయాలి
PWMLER = 0x09; // PWM3 మరియు PWM0 కోసం లాచ్ ఎనేబుల్
(మేము PWMMR0 & PWMMR3 ను ఉపయోగిస్తాము) కాబట్టి PWMLER లో 1 ని సెట్ చేయడం ద్వారా సంబంధిత బిట్ను ప్రారంభించండి
దశ 8: - పిడబ్ల్యుఎం అవుట్పుట్ను పిన్కు ఎనేబుల్ చెయ్యడానికి పిడబ్ల్యుఎం టైమర్ కౌంటర్లు మరియు పిడబ్ల్యుఎం మోడ్లను ప్రారంభించడానికి పిడబ్ల్యుఎమ్టిసిఆర్ ఉపయోగించాలి.
పిడబ్ల్యుఎంపిసిఆర్ = 0x0800; // PWM3 మరియు PWM 0 ను ప్రారంభించండి, సింగిల్ ఎడ్జ్ నియంత్రిత PWM PWMTCR = 0x09; // PWM మరియు కౌంటర్ను ప్రారంభించండి
దశ 9: - ఇప్పుడు మనం ADC పిన్ P0.28 నుండి PWM యొక్క విధి చక్రం సెట్ చేయడానికి పొటెన్టోమీటర్ విలువలను పొందాలి. కాబట్టి, పొటెన్షియోమీటర్ల అనలాగ్ ఇన్పుట్ (0 నుండి 3.3 వి) ను ADC విలువలకు (0 నుండి 1023 వరకు) మార్చడానికి మేము LPC2148 లో ADC మాడ్యూల్ని ఉపయోగిస్తాము.
దశ 10: - కోసం లో LPC2148 ADC పిన్ P0.28 ఎంచుకోవడం, మేము ఉపయోగించే
పిన్సెల్ 1 = 0x01000000; // P0.28 ని ADC INPUT AD0CR గా సెట్ చేస్తోంది (((14) << 8) - (1 << 21%); // A / D మార్పిడి కోసం గడియారం మరియు PDN ను అమర్చుట
కింది పంక్తులు అనలాగ్ ఇన్పుట్ (0 నుండి 3.3V) ను సంగ్రహిస్తాయి మరియు దానిని డిజిటల్ విలువగా మారుస్తాయి (0 నుండి 1023 వరకు). ఆపై ఈ డిజిటల్ విలువలను 4 ద్వారా విభజించి (0 నుండి 255 వరకు) మరియు చివరకు LPC2148 యొక్క P0.1 పిన్లో PWM అవుట్పుట్గా ఇవ్వబడుతుంది. ఇక్కడ మేము ఉంటాయి LPC2148 యొక్క PWM 4 తో విభజించడం ద్వారా 0-255 వరకు 0-1023 నుండి విలువలు మార్చే 8-బిట్ రిజల్యూషన్ (28) ఉంది.
AD0CR - = (1 << 1); // ADC రిజిస్టర్ ఆలస్యం (10) లో AD0.1 ఛానెల్ని ఎంచుకోండి ; AD0CR - = (1 << 24); // ( / AD0DR1 & (1 << 31)) == 0) A / D మార్పిడిని ప్రారంభించండి ; // ADC డేటా రిజిస్టర్లో DONE బిట్ను తనిఖీ చేయండి adcvalue = (AD0DR1 >> 6) & 0x3ff; // ADC డేటా రిజిస్టర్ డ్యూటీసైకిల్ నుండి ఫలితం పొందండి = adcvalue / 4; (0 నుండి 255 వరకు) డ్యూటీసైకిల్ విలువలను పొందడానికి // ఫార్ములా PWMMR1 = డ్యూటీసైకిల్; // డ్యూటీసైకిల్ విలువను PWM మ్యాచ్ రిజిస్టర్ PWMLER కు సెట్ చేయండి - = (1 << 1); // డ్యూటీసైకిల్ విలువతో PWM అవుట్పుట్ను ప్రారంభించండి
దశ 11: - తరువాత, మేము ఆ విలువలను LCD (16X2) డిస్ప్లే మాడ్యూల్లో ప్రదర్శిస్తాము. కాబట్టి LCD డిస్ప్లే మాడ్యూల్ను ప్రారంభించడానికి మేము ఈ క్రింది పంక్తులను చేర్చుతాము
LCD_INITILIZE (శూన్యమైనది) // ఎల్సిడిని సిద్ధం చేయడానికి ఫంక్షన్ { IO0DIR = 0x0000FFF0; // పిన్ 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) ను ప్రదర్శించు; // మొదటి పంక్తి మొదటి స్థానం }
మేము ఎల్సిడిని 4-బిట్ మోడ్లో ఎల్పిసి 2148 తో కనెక్ట్ చేసినందున, నిబ్బల్ (అప్పర్ నిబుల్ & లోయర్ నిబుల్) ద్వారా నిబుల్ గా ప్రదర్శించబడే విలువలను పంపాలి. కాబట్టి క్రింది పంక్తులు ఉపయోగించబడతాయి.
void LCD_DISPLAY (char * msg) // పంపిన అక్షరాలను ఒక్కొక్కటిగా ముద్రించే ఫంక్షన్ { uint8_t i = 0; అయితే (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8%); // ఎగువ నిబుల్ IO0SET = 0x00000050 పంపుతుంది ; డేటాను ముద్రించడానికి // RS HIGH & ENABLE HIGH IO0CLR = 0x00000020; // RW తక్కువ వ్రాసే మోడ్ ఆలస్యం (2); IO0CLR = 0x00000040; // EN = 0, RS మరియు RW మారదు (అనగా RS = 1, RW = 0) ఆలస్యం (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12%); // దిగువ నిబుల్ IO0SET = 0x00000050 పంపుతుంది ; // RS & EN HIGH IO0CLR = 0x00000020; ఆలస్యం (2); IO0CLR = 0x00000040; ఆలస్యం (5); i ++; } }
ఆ ADC & PWM విలువలను ప్రదర్శించడానికి మేము int main () ఫంక్షన్లో ఈ క్రింది పంక్తులను ఉపయోగిస్తాము.
LCD_SEND (0x80); sprintf (displayadc, "adcvalue =% f", డ్యూటీసైకిల్); LCD_DISPLAY (displayadc); // ADC విలువను ప్రదర్శించు (0 నుండి 1023 వరకు) కోణం = (adcvalue / 5.7); // ADC విలువను కోణంగా మార్చడానికి ఫార్ములా (o నుండి 180 డిగ్రీలు) LCD_SEND (0xC0); sprintf (కోణ విలువ, "ANGLE =%. 2f deg", కోణం); LCD_DISPLAY (కోణ విలువ);
ట్యుటోరియల్ యొక్క పూర్తి కోడ్ మరియు వీడియో వివరణ క్రింద ఇవ్వబడ్డాయి