- సర్క్యూట్ రేఖాచిత్రం
- సర్వో మోటార్ కంట్రోల్ కోసం GPIO పిన్పై PWM సిగ్నల్లను ఉత్పత్తి చేస్తుంది
- రోబోటిక్ ఆర్మ్ కోసం ప్రోగ్రామింగ్ PIC16F8771A
- PIC రోబోటిక్ ఆర్మ్ కోడ్ యొక్క అనుకరణ
- ఈజీఇడిఎ ఉపయోగించి పిసిబి డిజైన్
- నమూనాలను ఆన్లైన్లో లెక్కిస్తోంది మరియు క్రమం చేస్తుంది
- పిఐసి రోబోటిక్ ఆర్మ్ యొక్క పని
ఆటోమొబైల్ తయారీ పరిశ్రమల అసెంబ్లీ లైన్ నుండి అంతరిక్షంలోని టెలిసర్జరీ రోబోట్ల వరకు, రోబోటిక్ ఆయుధాలు ప్రతిచోటా కనుగొనబడతాయి. ఈ రోబోట్ల యొక్క యంత్రాంగాలు మానవుడితో సమానంగా ఉంటాయి, ఇవి సారూప్య పనితీరు మరియు పెరిగిన సామర్థ్యాలకు ప్రోగ్రామ్ చేయబడతాయి. మనుషులకన్నా వేగంగా మరియు ఖచ్చితమైన పునరావృత చర్యలను చేయడానికి వీటిని ఉపయోగించవచ్చు లేదా మానవ ప్రాణాలను పణంగా పెట్టకుండా కఠినమైన వాతావరణంలో ఉపయోగించవచ్చు. ఆర్డ్యునోను ఉపయోగించి మేము ఇప్పటికే రికార్డ్ మరియు ప్లే రోబోటిక్ ఆర్మ్ను నిర్మించాము, ఇది ఒక నిర్దిష్ట పనిని చేయడానికి శిక్షణ పొందింది మరియు ఎప్పటికీ పునరావృతమయ్యేలా చేస్తుంది.
ఈ ట్యుటోరియల్లో అదే రోబోటిక్ చేయిని పొటెన్షియోమీటర్లతో నియంత్రించడానికి పరిశ్రమ ప్రామాణిక PIC16F877A 8-బిట్ మైక్రోకంట్రోలర్ను ఉపయోగిస్తాము. ఈ ప్రాజెక్ట్తో ఉన్న సవాలు ఏమిటంటే, PIC16F877A లో రెండు PWN సామర్థ్యం గల పిన్లు మాత్రమే ఉన్నాయి, కాని మన రోబోట్ కోసం 5 వ్యక్తిగత PWM పిన్లు అవసరమయ్యే 5 సర్వో మోటార్లు నియంత్రించాల్సిన అవసరం ఉంది. కాబట్టి మేము GPIO పిన్లను ఉపయోగించుకోవాలి మరియు టైమర్ అంతరాయాలను ఉపయోగించి PIC GPIO పిన్లపై PWM సిగ్నల్లను ఉత్పత్తి చేయాలి. ఇప్పుడు, మనం మంచి మైక్రోకంట్రోలర్కు అప్గ్రేడ్ చేయవచ్చు లేదా ఇక్కడ విషయాలు చాలా సులభతరం చేయడానికి డి-మల్టీప్లెక్సర్ ఐసిని ఉపయోగించవచ్చు. కానీ ఇప్పటికీ, ఈ ప్రాజెక్ట్ అభ్యాస అనుభవానికి ఒకసారి ప్రయత్నించడం విలువ.
ఈ ప్రాజెక్ట్లో నేను ఉపయోగిస్తున్న రోబోటిక్ ఆర్మ్ యొక్క యాంత్రిక నిర్మాణం నా మునుపటి ప్రాజెక్ట్ కోసం పూర్తిగా 3D ముద్రించబడింది; మీరు పూర్తి డిజైన్ ఫైళ్ళను మరియు సమీకరించే విధానాన్ని ఇక్కడ కనుగొనవచ్చు. ప్రత్యామ్నాయంగా, మీకు 3 డి ప్రింటర్ లేకపోతే, మీరు లింక్లో చూపిన విధంగా కార్డ్బోర్డ్లను ఉపయోగించి సాధారణ రోబోటిక్ ఆర్మ్ను కూడా నిర్మించవచ్చు. మీరు మీ రోబోటిక్ ఆర్మ్ను ఎలాగైనా పట్టుకున్నారని uming హిస్తే ప్రాజెక్ట్లోకి వెళ్లడానికి అనుమతిస్తుంది.
సర్క్యూట్ రేఖాచిత్రం
ఈ PIC మైక్రోకంట్రోలర్ ఆధారిత రోబోటిక్ ఆర్మ్ కోసం పూర్తి సర్క్యూట్ రేఖాచిత్రం క్రింద చూపబడింది. ఈజీఇడిఎ ఉపయోగించి స్కీమాటిక్స్ డ్రా చేయబడింది.
సర్క్యూట్ రేఖాచిత్రం చాలా సులభం; పూర్తి ప్రాజెక్ట్ 12V అడాప్టర్ ద్వారా శక్తిని పొందుతుంది. ఈ 12V రెండు 7805 వోల్టేజ్ రెగ్యులేటర్లను ఉపయోగించి + 5V గా మార్చబడుతుంది. ఒకటి + 5 వి అని, మరొకటి + 5 వి (2) గా లేబుల్ చేయబడింది. రెండు రెగ్యులేటర్లను కలిగి ఉండటానికి కారణం ఏమిటంటే, సర్వో తిరిగేటప్పుడు అది చాలా కరెంట్లోకి లాగుతుంది, ఇది వోల్టేజ్ డ్రాప్ను సృష్టిస్తుంది. ఈ వోల్టేజ్ డ్రాప్ PIC ను పున art ప్రారంభించమని బలవంతం చేస్తుంది, అందువల్ల మేము PIC మరియు సర్వో మోటార్లు రెండింటినీ ఒకే + 5V రైలులో ఆపరేట్ చేయలేము. కాబట్టి + 5 వి అని లేబుల్ చేయబడినది పిఐసి మైక్రోకంట్రోలర్, ఎల్సిడి మరియు పొటెన్టోమీటర్లకు శక్తినివ్వడానికి ఉపయోగించబడుతుంది మరియు సర్వో మోటారులకు శక్తినిచ్చేందుకు + 5 వి (2) గా లేబుల్ చేయబడిన ప్రత్యేక రెగ్యులేటర్ అవుట్పుట్ ఉపయోగించబడుతుంది.
0V నుండి 5V వరకు వేరియబుల్ వోల్టేజ్ను అందించే పొటెన్టోమీటర్ల ఐదు అవుట్పుట్ పిన్లు PIC యొక్క అనలాగ్ పిన్లు An0 నుండి AN4 వరకు అనుసంధానించబడి ఉన్నాయి. మేము PWM ను ఉత్పత్తి చేయడానికి టైమర్లను ఉపయోగించాలని యోచిస్తున్నందున, సర్వో మోటార్లు ఏదైనా GPIO పిన్తో అనుసంధానించబడతాయి. నేను సర్వో మోటారుల కోసం పిన్లను RD2 నుండి RD6 వరకు ఎంచుకున్నాను, కానీ ఇది మీకు నచ్చిన GPIO కావచ్చు.
ఈ ప్రోగ్రామ్లో చాలా డీబగ్గింగ్ ఉంటుంది కాబట్టి, 16x2 LCD డిస్ప్లే కూడా PIC యొక్క పోర్ట్బికి ఇంటర్ఫేస్ చేయబడుతుంది. ఇది నియంత్రించబడుతున్న సర్వో మోటార్లు యొక్క విధి చక్రం ప్రదర్శిస్తుంది. ఇది కాకుండా నేను అన్ని GPIO మరియు అనలాగ్ పిన్ల కోసం కనెక్షన్లను కూడా విస్తరించాను, భవిష్యత్తులో ఏదైనా సెన్సార్లను ఇంటర్ఫేస్ చేయాల్సిన అవసరం ఉంటే. చివరగా నేను ICSP ప్రోగ్రామింగ్ ఎంపికను ఉపయోగించి PIC ని నేరుగా పికెట్ 3 తో ప్రోగ్రామ్ చేయడానికి ప్రోగ్రామర్ పిన్ H1 ని కనెక్ట్ చేసాను.
సర్వో మోటార్ కంట్రోల్ కోసం GPIO పిన్పై PWM సిగ్నల్లను ఉత్పత్తి చేస్తుంది
సర్క్యూట్ సిద్ధమైన తర్వాత, సర్వో మోటారును నియంత్రించడానికి పిఐసి యొక్క జిపిఐఓ పిన్పై పిడబ్ల్యుఎన్ సిగ్నల్లను ఎలా ఉత్పత్తి చేయాలో మనం గుర్తించాలి. టైమర్ అంతరాయ పద్ధతిని ఉపయోగించి మేము ఇప్పటికే ఇలాంటిదే అలసిపోయాము మరియు విజయవంతం అయ్యాము. ఇక్కడ మేము దాని పైన నిర్మించబోతున్నాము, కాబట్టి మీరు ఇక్కడ కొత్తగా ఉంటే, మరింత ముందుకు వెళ్ళే ముందు ఈ మునుపటి ట్యుటోరియల్ చదవమని నేను మీకు గట్టిగా సిఫార్సు చేస్తున్నాను.
అన్ని అభిరుచి గల సర్వో మోటార్లు 50Hz పౌన frequency పున్యంతో పనిచేస్తాయి. సర్వో మోటారు కోసం ఒక పూర్తి పల్స్ చక్రం అంటే 1/50 (F = 1 / T) అంటే 20ms. ఈ పూర్తి 20ms లో కంట్రోల్ సిగ్నల్ 0 నుండి 2ms వరకు మాత్రమే ఉంటుంది, మిగిలిన సిగ్నల్ ఎల్లప్పుడూ ఆఫ్లో ఉంటుంది. మొత్తం 20ms వ్యవధిలో మోటారును 0 డిగ్రీ నుండి 180 డిగ్రీల వరకు తిప్పడానికి ON సమయం 0 నుండి 2ms వరకు ఎలా మారుతుందో ఈ క్రింది బొమ్మ చూపిస్తుంది.
దీన్ని దృష్టిలో పెట్టుకుని పిఐసి పొటెన్షియోమీటర్ నుండి 0 నుండి 1204 వరకు చదివి 0 నుండి 100 వరకు మ్యాప్ చేసే విధంగా ప్రోగ్రామ్ను వ్రాయాలి, ఇది సర్వో మోటార్ యొక్క విధి చక్రం అవుతుంది. ఈ విధి చక్రం ఉపయోగించి మేము సర్వో మోటర్ యొక్క ON సమయాన్ని లెక్కించవచ్చు. అప్పుడు మేము టైమర్ అంతరాయాన్ని క్రమం తప్పకుండా ఓవర్ఫ్లో ప్రారంభించవచ్చు, ఇది ఆర్డునోలోని మిల్లీస్ () ఫంక్షన్కు సమానంగా పనిచేస్తుంది. దానితో, మేము కోరుకున్న వ్యవధికి స్థితి GPIO పిన్ను ఎక్కువగా టోగుల్ చేసి, 20ms (ఒక పూర్తి చక్రం) తర్వాత ఆపివేసి, ఆపై అదే విధానాన్ని పునరావృతం చేయవచ్చు. ఇప్పుడు, మేము తర్కాన్ని అర్థం చేసుకున్నాము, ప్రోగ్రామ్లోకి వెళ్దాం.
రోబోటిక్ ఆర్మ్ కోసం ప్రోగ్రామింగ్ PIC16F8771A
ఈ పేజీ చివరలో వీడియోతో పూర్తి ప్రోగ్రామ్ను ఎప్పటిలాగే చూడవచ్చు, అవసరమైన అన్ని ఫైల్లతో కోడ్ను ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు. ఈ విభాగంలో మేము ప్రోగ్రామ్ వెనుక ఉన్న తర్కాన్ని చర్చిస్తాము. రోబోటిక్ ఆర్మ్ను నియంత్రించడానికి ప్రోగ్రామ్ ADC మాడ్యూల్, టైమర్ మాడ్యూల్ మరియు LCD మాడ్యూల్లను ఉపయోగిస్తుంది. ADC ఫీచర్లు లేదా టైమర్ లక్షణాలను ఎలా ఉపయోగించాలో మీకు తెలియకపోతే లేదా PIC తో ఒక LCD ని ఇంటర్ఫేస్ చేయాలి, అప్పుడు మీరు వాటిని తెలుసుకోవడానికి సంబంధిత లింక్లకు తిరిగి వస్తారు. ఈ భావనలతో పాఠకుడికి సుపరిచితమని భావించి ఈ క్రింది వివరణ ఇవ్వబడింది.
టైమర్ 0 పోర్ట్ కాన్ఫిగరేషన్
ప్రతి నిర్దిష్ట ఆలస్యం కోసం టైమర్ 0 ను ఓవర్ ఫ్లోకు సెట్ చేయడం కోడ్లోని అతి ముఖ్యమైన విభాగం. ఈ ఆలస్యాన్ని లెక్కించడానికి సూత్రాలను ఇలా ఇవ్వవచ్చు
ఆలస్యం = ((256-REG_val) * (ప్రెస్కాల్ * 4)) / ఫోస్క్
OPTION_REG మరియు TMR0 రిజిస్టర్ను ఉపయోగించడం ద్వారా మేము టైమర్ 0 ను ప్రీస్కాలర్ విలువ 32 తో పనిచేయడానికి సెట్ చేసాము మరియు REG వాల్ 248 కు సెట్ చేయబడింది. మా హార్డ్వేర్లో ఉపయోగించే క్రిస్టల్ ఫ్రీక్వెన్సీ (ఫాస్క్) 20Mhz. ఈ విలువలతో ఆలస్యాన్ని ఇలా లెక్కించవచ్చు
ఆలస్యం = ((256-248) * (32 * 4)) / (20000000) = 0.0000512 సెకన్లు (లేదా) = 0.05 msec
కాబట్టి ఇప్పుడు మేము ప్రతి 0.05ms వద్ద టైమర్ను పొంగిపోయేలా సెట్ చేసాము. అదే చేయవలసిన కోడ్ క్రింద ఇవ్వబడింది
/ ***** టైమర్ కోసం పోర్ట్ కాన్ఫిగరేషన్ ****** / OPTION_REG = 0b00000100; // బాహ్య ఫ్రీక్తో టైమర్ 0 మరియు ప్రెస్కాలర్గా 32 / PULL UP లను కూడా ప్రారంభిస్తుంది TMR0 = 248; // 0.0001 లకు సమయ విలువను లోడ్ చేయండి; delayValue 0-256 మధ్య మాత్రమే ఉంటుంది TMR0IE = 1; // PIE1 రిజిస్టర్ GIE = 1 లో టైమర్ అంతరాయ బిట్ను ప్రారంభించండి ; // గ్లోబల్ ఇంటరప్ట్ PEIE = 1 ను ప్రారంభించండి; // పరిధీయ అంతరాయాన్ని ప్రారంభించండి / *********** ______ *********** /
సర్వో మోటర్ యొక్క మొత్తం 0ms నుండి 2ms కంట్రోల్ విండోలో మనం 0.05msec రిజల్యూషన్తో నియంత్రించవచ్చు, ఇది 0 డిగ్రీ నుండి 180 డిగ్రీల మధ్య మోటారుకు (2 / 0.05) 40 వేర్వేరు స్థానాలను కలిగి ఉండటానికి అనుమతిస్తుంది. మీ MCU మరిన్ని స్థానాలు మరియు ఖచ్చితమైన నియంత్రణను పొందటానికి మద్దతు ఇస్తే మీరు ఈ విలువను మరింత తగ్గించవచ్చు.
ఇంటరప్ట్ సర్వీస్ రొటీన్ (ISR)
ఇప్పుడు మేము ప్రతి 0.05ms కోసం టైమర్ 0 సెట్ ఓవర్ ఓవర్ ప్రవాహాన్ని కలిగి ఉన్నాము, మనకు 0.05ms కొరకు TMR0IF ఇంటరప్ట్ ఫ్లాగ్ సెట్ ఉంటుంది. కాబట్టి ISR ఫంక్షన్ లోపల మేము ఆ జెండా రీసెట్ మరియు ఒక వేరియబుల్ అని లెక్కింపు పెంచడం చేయవచ్చు ద్వారా ఒకటి. కాబట్టి ఇప్పుడు ఈ వేరియబుల్ ప్రతి 0.05ms కు 1 చొప్పున పెరుగుతుంది.
void interrupt timer_isr () { if (TMR0IF == 1) // టైమర్ ఓవర్ఫ్లో కారణంగా టైమర్ ఫ్లాగ్ ప్రారంభించబడింది -> ప్రతి 0.05ms ఓవర్ఫ్లోకు సెట్ చేయబడింది { TMR0 = 248; // టైమర్ విలువను లోడ్ చేయండి TMR0IF = 0; // క్లియర్ టైమర్ ఇంటరప్ట్ ఫ్లాగ్ కౌంట్ ++; // ప్రతి 0.05 మి.లకు ఇంక్రిమెంట్ 1 గా లెక్కించండి }
డ్యూటీ సైకిల్ మరియు సమయానికి లెక్కిస్తోంది
తరువాత మనం డ్యూటీ సైకిల్ను లెక్కించాలి మరియు మొత్తం ఐదు సర్వో మోటారులకు సమయం కేటాయించాలి. మాకు ఐదు సర్వో మోటార్లు ఉన్నాయి, వీటిలో ప్రతి ఒక్కటి చేయి యొక్క వ్యక్తిగత విభాగాన్ని నియంత్రించడానికి ఉపయోగిస్తారు. కాబట్టి మనం మొత్తం ఐదు యొక్క ADC విలువను చదివి విధి చక్రం మరియు ప్రతి సమయానికి లెక్కించాలి.
ADC విలువ 0 నుండి 1024 పరిధిలో ఉంటుంది, ఇది పొందిన విలువకు 0.0976 (100/1024 = 0.0976) ను గుణించడం ద్వారా 0% నుండి 100% విధి చక్రంగా మార్చవచ్చు. ఈ 0 నుండి 100% విధి చక్రం ON సమయానికి మార్చాలి. 100% విధి చక్రంలో ON సమయం 2ms (180 డిగ్రీల కోసం) ఉండాలి కాబట్టి 0.02 (2/100 = 0.02) గుణించడం 0 నుండి 100 విధి చక్రం 0 నుండి 2ms వరకు మారుస్తుందని మాకు తెలుసు. కానీ అప్పుడు మన టైమర్ వేరియబుల్ కౌంట్ ప్రతి 0.05 ఎంఎంలకు ఒకసారి పెరుగుతుంది. అంటే ప్రతి 1ms కు కౌంట్ విలువ 20 (1 / 0.05 = 20) అవుతుంది. కాబట్టి మన ప్రోగ్రామ్ కోసం ఖచ్చితమైన సమయాన్ని లెక్కించడానికి 20 ను 0.02 తో గుణించాలి, ఇది మాకు 0.4 విలువను ఇస్తుంది (0.02 * 20 = 0.4). దాని కోసం కోడ్ క్రింద చూపబడింది, మీరు ఒక 5 లూప్ కోసం 5 సార్లు 5 సార్లు పునరావృతం చేయడాన్ని చూడవచ్చు. ఫలిత విలువలు T_ON శ్రేణిలో నిల్వ చేయబడతాయి.
(int pot_num = 0; pot_num <= 3; pot_num ++) { int Pev_val = T_ON; POT_val = (ADC_Read (pot_num)); // ADC డ్యూటీ_సైకిల్ = (POT_val * 0.0976) ఉపయోగించి POT విలువను చదవండి ; // మ్యాప్ 0 నుండి 1024 నుండి 0 నుండి 100 T_ON = డ్యూటీ_సైకిల్ * 0.4; // 20 * 0.02
ఏ మోటారును తిప్పాలో ఎంచుకోవడం
మేము మొత్తం ఐదు మోటారులను కలిసి నియంత్రించలేము ఎందుకంటే ఇది ISR కోడ్ మొత్తం మైక్రోకంట్రోలర్ను మందగించేలా చేస్తుంది. కాబట్టి మనం ఒకేసారి ఒక సర్వో మోటారును మాత్రమే తిప్పాలి. మైక్రోకంట్రోలర్ను తిప్పడానికి ఏ సర్వోను ఎంచుకోవాలో మొత్తం ఐదు సర్వో మోటారుల యొక్క ON సమయాన్ని పర్యవేక్షిస్తుంది మరియు సమయానికి మునుపటి దానితో పోలుస్తుంది. ఆన్ టైమ్లో మార్పు ఉంటే, నిర్దిష్ట సర్వోను తరలించాల్సి ఉంటుందని మేము నిర్ధారించగలము. దాని కోసం కోడ్ క్రింద చూపబడింది.
if (T_ON! = Pev_val) { Lcd_Clear (); servo = pot_num; ఎల్సిడి_సెట్_ కర్సర్ (2,11); Lcd_Print_String ("S:"); Lcd_Print_Char (servo + '0'); if (pot_num == 0) {Lcd_Set_Cursor (1,1); Lcd_Print_String ("A:");} else if (pot_num == 1) {Lcd_Set_Cursor (1,6); Lcd_Print_String ("B:");} else if (pot_num == 2) {Lcd_Set_Cursor (1,11); Lcd_Print_String ("C:");} else if (pot_num == 3) {Lcd_Set_Cursor (2,1); Lcd_Print_String ("D:");} else if (pot_num == 4) {Lcd_Set_Cursor (2,6); Lcd_Print_String ("E:");} char d2 = (డ్యూటీ_సైకిల్)% 10; చార్ d1 = (డ్యూటీ_సైకిల్ / 10)% 10; Lcd_Print_Char (d1 + '0'); Lcd_Print_Char (d2 + '0');
మేము ఎల్సిడి స్క్రీన్పై సర్వో డ్యూటీ సైకిల్ను కూడా ప్రింట్ చేస్తాము, తద్వారా వినియోగదారు ప్రస్తుత స్థితి గురించి తెలుసుకోవచ్చు. ON సమయం మార్పు ఆధారంగా వేరియబుల్ సర్వో 0 నుండి 4 వరకు సంఖ్యలతో నవీకరించబడుతుంది, ఒక్కొక్కటి వ్యక్తిగత మోటార్లు.
ISR లోపల సర్వో మోటార్ను నియంత్రించడం
ISR లోపల మనకు ప్రతి 0.05ms కు వేరియబుల్ కౌంట్ పెరుగుతుంది, దీని అర్థం ప్రతి 1ms కోసం వేరియబుల్ 20 ద్వారా పెరుగుతుంది. దీన్ని ఉపయోగించి PWM సిగ్నల్ ఉత్పత్తి చేయడానికి పిన్లను నియంత్రించాలి. కౌంట్ విలువ సమయం కంటే తక్కువగా ఉంటే, ఆ మోటారు యొక్క GPIO కింది పంక్తిని ఉపయోగించి ఆన్ చేయబడుతుంది
PORTD = PORTD - సర్వో_కోడ్;
ఇక్కడ అర్రే సర్వో_కోడ్ మొత్తం ఐదు సర్వో మోటారు యొక్క పిన్ వివరాలను కలిగి ఉంది మరియు వేరియబుల్ సర్వోలోని విలువ ఆధారంగా, నిర్దిష్ట సర్వో మోటర్ కోసం కోడ్ ఉపయోగించబడుతుంది. ఇది ఇతర PORTD బిట్లతో తార్కికంగా OR (-) గా ఉంటుంది, తద్వారా మేము ఇతర మోటారు విలువలకు భంగం కలిగించకుండా మరియు ఈ ప్రత్యేకమైన మోటారును మాత్రమే నవీకరించండి. అదేవిధంగా పిన్ను ఆపివేయడానికి
PORTD = PORTD & ~ (servo_code);
మేము లాజిక్ విలోమ (~) ఆపరేటర్ను ఉపయోగించి బిట్ విలువను రివర్స్ చేసాము మరియు ఇతర పిన్లను వారి మునుపటి స్థితిలో వదిలివేసేటప్పుడు కావలసిన పిన్ను మాత్రమే ఆపివేయడానికి PORTD లో AND (&) ఆపరేషన్ చేసాము. పూర్తి కోడ్ స్నిప్పెట్ క్రింద చూపబడింది.
void interrupt timer_isr () { if (TMR0IF == 1) // టైమర్ ఓవర్ఫ్లో కారణంగా టైమర్ ఫ్లాగ్ ప్రారంభించబడింది -> ప్రతి 0.05ms ఓవర్ఫ్లోకు సెట్ చేయబడింది { TMR0 = 248; // టైమర్ విలువను లోడ్ చేయండి TMR0IF = 0; // క్లియర్ టైమర్ ఇంటరప్ట్ ఫ్లాగ్ కౌంట్ ++; // ప్రతి 0.05 మి.లకు 1 చొప్పున ఇంక్రిమెంట్ లెక్కించండి -> కౌంట్ ప్రతి 1 మి.లకు 20 ఉంటుంది (0.05 / 1 = 20 శాతం) } int servo_code = {0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000100}; if (కౌంట్> = 20 * 20) కౌంట్ = 0; if (కౌంట్ <= (T_ON)) PORTD = PORTD - servo_code; else PORTD = PORTD & ~ (servo_code); }
GPIO పిన్ మళ్లీ ప్రారంభించబడటానికి ముందు మొత్తం చక్రం 20ms వరకు ఉంటుందని మాకు తెలుసు. కాబట్టి కౌంట్ విలువను 400 (పైన చర్చించిన అదే లెక్క) తో పోల్చడం ద్వారా కౌంట్ 20 ఎంఎస్ దాటిందో లేదో మేము తనిఖీ చేస్తాము మరియు అవును అయితే మనం మళ్ళీ సున్నాగా ఉండటానికి కౌంట్ ప్రారంభించాలి.
PIC రోబోటిక్ ఆర్మ్ కోడ్ యొక్క అనుకరణ
నిజమైన హార్డ్వేర్కు తీసుకెళ్లేముందు కోడ్ను అనుకరించడం ఎల్లప్పుడూ మంచిది. కాబట్టి నేను నా కోడ్ను అనుకరించటానికి ప్రోటీస్ను ఉపయోగించాను మరియు సరిగ్గా పని చేయడానికి దాన్ని ధృవీకరించాను. అనుకరణ కోసం ఉపయోగించే సర్క్యూట్ క్రింద చూపబడింది, పిడబ్ల్యుఎం సిగ్నల్స్ అవసరమైన విధంగా ఉత్పత్తి అవుతున్నాయో లేదో తనిఖీ చేయడానికి మేము ఓసిల్లోస్కోప్ను ఉపయోగించాము. ఎల్సిడి మరియు సర్వో మోటార్లు.హించిన విధంగా తిరుగుతున్నాయా అని కూడా మేము ధృవీకరించవచ్చు.
మీరు చూడగలిగినట్లుగా, 3 వ మోటారు అయిన కుండ విలువ ఆధారంగా మోటారు D యొక్క విధి చక్రం 07 గా LCD ప్రదర్శిస్తుంది. మరొక కుండ ఆ కుండ యొక్క విధి చక్రం కదిలితే మరియు దాని మోటారు సంఖ్య LCD లో ప్రదర్శించబడుతుంది. ఓసిల్లోస్కోప్లో చూపిన పిడబ్ల్యుఎం సిగ్నల్ క్రింద చూపబడింది.
ఓసిల్లోస్కోప్లోని కర్సర్ ఎంపికను ఉపయోగించి మొత్తం చక్రం వ్యవధి 22.2 మీలుగా కొలుస్తారు, ఇది కావలసిన 20 ఎంఎమ్లకు చాలా దగ్గరగా ఉంటుంది. చివరగా మేము కోడ్ పనిచేస్తుందని ఖచ్చితంగా అనుకుంటున్నాము, కాబట్టి సర్క్యూట్తో కొనసాగడానికి మనం దానిని పెర్ఫ్ బోర్డులో టంకము వేయవచ్చు లేదా పిసిబిని ఉపయోగించవచ్చు. ఇది బ్రెడ్బోర్డ్లో సులభంగా పనిచేయదు ఎందుకంటే POT ఎల్లప్పుడూ కనెక్షన్ల కారణంగా కొన్ని సమస్యలను ఇస్తుంది.
ఈజీఇడిఎ ఉపయోగించి పిసిబి డిజైన్
ఈ PIC రోబోటిక్ ఆర్మ్ రూపకల్పన కోసం, మేము EasyEDA అనే ఆన్లైన్ EDA సాధనాన్ని ఎంచుకున్నాము. నేను చాలా కాలం నుండి దీనిని ఉపయోగిస్తున్నాను మరియు దాని పాదముద్ర యొక్క విస్తారమైన లభ్యత మరియు ప్రకృతిని ఉపయోగించడం సులభం కనుక ఇది చాలా సౌకర్యవంతంగా ఉంది. పిసిబిని రూపకల్పన చేసిన తరువాత, పిసిబి నమూనాలను వాటి తక్కువ ఖర్చుతో పిసిబి ఫాబ్రికేషన్ సేవల ద్వారా ఆర్డర్ చేయవచ్చు. వారు ఎలక్ట్రానిక్ భాగాల యొక్క పెద్ద స్టాక్ ఉన్న కాంపోనెంట్ సోర్సింగ్ సేవను కూడా అందిస్తారు మరియు వినియోగదారులు పిసిబి ఆర్డర్తో పాటు వారి అవసరమైన భాగాలను ఆర్డర్ చేయవచ్చు.
మీ సర్క్యూట్లు మరియు పిసిబిలను రూపకల్పన చేసేటప్పుడు, మీరు మీ సర్క్యూట్ మరియు పిసిబి డిజైన్లను కూడా పబ్లిక్ చేయవచ్చు, తద్వారా ఇతర వినియోగదారులు వాటిని కాపీ చేయవచ్చు లేదా సవరించవచ్చు మరియు మీ పని నుండి ప్రయోజనం పొందవచ్చు, మేము ఈ సర్క్యూట్ కోసం మా మొత్తం సర్క్యూట్ మరియు పిసిబి లేఅవుట్లను కూడా పబ్లిక్ చేసాము, తనిఖీ చేయండి క్రింది లింక్:
easyeda.com/circuitdigest/pic-development-board-for-robotic-arm
ఈ లింక్ను ఉపయోగించి మీరు ఈ ప్రాజెక్ట్లో ఉపయోగిస్తున్న అదే పిసిబిని నేరుగా ఆర్డర్ చేయవచ్చు మరియు దాన్ని ఉపయోగించవచ్చు. డిజైన్ పూర్తయిన తర్వాత బోర్డును 3 డి మోడల్గా చూడవచ్చు, ఇది కల్పన తర్వాత బోర్డు ఎలా కనబడుతుందో visual హించడంలో చాలా సహాయపడుతుంది. మేము ఉపయోగిస్తున్న బోర్డు యొక్క 3D మోడల్ క్రింద చూపబడింది. ఇది కాకుండా మీరు వివేక స్క్రీన్.హించినట్లుగా ఉందో లేదో తనిఖీ చేయడానికి బోర్డు ఎగువ మరియు దిగువ పొరను కూడా చూడవచ్చు.
నమూనాలను ఆన్లైన్లో లెక్కిస్తోంది మరియు క్రమం చేస్తుంది
ఈ పిఐసి రోబోట్ పిసిబి రూపకల్పన పూర్తి చేసిన తరువాత, మీరు పిసిబిని జెఎల్సిపిసిబి.కామ్ ద్వారా ఆర్డర్ చేయవచ్చు. JLCPCB నుండి PCB ని ఆర్డర్ చేయడానికి, మీకు గెర్బర్ ఫైల్ అవసరం. మీ పిసిబి యొక్క గెర్బెర్ ఫైళ్ళను డౌన్లోడ్ చేయడానికి ఈజీఇడిఎ ఎడిటర్ పేజీలోని జెనరేట్ ఫ్యాబ్రికేషన్ ఫైల్ బటన్ను క్లిక్ చేసి, అక్కడ నుండి గెర్బెర్ ఫైల్ను డౌన్లోడ్ చేసుకోండి లేదా క్రింద ఉన్న చిత్రంలో చూపిన విధంగా మీరు జెఎల్సిపిసిబి వద్ద ఆర్డర్ పై క్లిక్ చేయవచ్చు. ఇది మిమ్మల్ని JLCPCB.com కు మళ్ళిస్తుంది, ఇక్కడ మీరు ఆర్డర్ చేయదలిచిన పిసిబిల సంఖ్య, మీకు ఎన్ని రాగి పొరలు కావాలి, పిసిబి మందం, రాగి బరువు మరియు పిసిబి రంగు కూడా క్రింద చూపిన స్నాప్షాట్ వంటివి ఎంచుకోవచ్చు:
మీరు అన్ని ఎంపికలను ఎంచుకున్న తరువాత, “కార్ట్కు సేవ్ చేయి” క్లిక్ చేసి, ఆపై మీరు ఈజీఇడిఎ నుండి డౌన్లోడ్ చేసిన మీ గెర్బెర్ ఫైల్ను అప్లోడ్ చేయగల పేజీకి తీసుకెళ్లబడతారు. మీ గెర్బెర్ ఫైల్ను అప్లోడ్ చేసి, “కార్ట్కు సేవ్ చేయి” క్లిక్ చేయండి. చివరకు మీ ఆర్డర్ను పూర్తి చేయడానికి చెక్అవుట్ సెక్యూర్లీపై క్లిక్ చేయండి, ఆపై మీరు కొన్ని రోజుల తరువాత మీ పిసిబిలను పొందుతారు. వారు PCB ను చాలా తక్కువ రేటుతో తయారు చేస్తున్నారు. వారి నిర్మాణ సమయం కూడా చాలా తక్కువ, ఇది 3-5 రోజుల DHL డెలివరీతో 48 గంటలు, ప్రాథమికంగా మీరు ఆర్డరింగ్ చేసిన వారంలోనే మీ PCB లను పొందుతారు.
పిసిబిని ఆర్డర్ చేసిన తరువాత, మీరు మీ పిసిబి యొక్క ఉత్పత్తి పురోగతిని తేదీ మరియు సమయంతో తనిఖీ చేయవచ్చు. మీరు ఖాతా పేజీకి వెళ్లి దాన్ని తనిఖీ చేసి, "ఉత్పత్తి పురోగతి" పై క్లిక్ చేయండి.
పిసిబి యొక్క ఆర్డరింగ్ చేసిన కొన్ని రోజుల తరువాత, పిసిబి నమూనాలను మంచి ప్యాకేజింగ్లో పొందాను.
మరియు ఈ ముక్కలు పొందిన తరువాత నేను పిసిబి ద్వారా అవసరమైన అన్ని భాగాలను కరిగించాను. కనెక్ట్ చేసే వైర్లను ఉపయోగించటానికి బదులుగా నేను నేరుగా POT ను నేరుగా కరిగించాను, ఎందుకంటే ఆడపిల్లలకు ఆడ వైర్లకు నేను మొదట్లో ఉపయోగించిన చోట విచిత్రమైన అనలాగ్ అవుట్పుట్ వోల్టేజ్లను ఇవ్వడం వల్ల వదులుగా ఉన్న పరిచయాల వల్ల. అన్ని భాగాలు సమావేశమైన తర్వాత నా పిసిబి ఇలాగే ఉంది.
ఈ బోర్డులో కేవలం 7805 మాత్రమే ఉందని మీరు గమనించి ఉండవచ్చు. ఎందుకంటే మొదట్లో నేను పిఐసి మరియు సర్వో మోటారు రెండింటినీ శక్తివంతం చేయటానికి కేవలం రెగ్యులేటర్తో బయటపడగలనని అనుకున్నాను మరియు తరువాత నాకు రెండు అవసరమని గ్రహించాను. కాబట్టి మీరు ఇక్కడ చూసే ఆకుపచ్చ వైర్ల ద్వారా సర్వో మోటారులను శక్తివంతం చేయడానికి నేను బాహ్య సర్క్యూట్ను ఉపయోగించాను.
అయినప్పటికీ మీరు దాని గురించి పెద్దగా ఆందోళన చెందాల్సిన అవసరం లేదు; నేను ఇప్పుడు పిసిబిలో మార్పులు చేసాను. మీరు సవరించిన పిసిబి మరియు టంకము రెండింటినీ రెగ్యులేటర్లను బోర్డులోనే ఉపయోగించుకోవచ్చు.
పిఐసి రోబోటిక్ ఆర్మ్ యొక్క పని
అన్ని అలసిపోయిన పని తర్వాత అది చెల్లించాల్సిన సమయం. బోర్డులోని అన్ని భాగాలను టంకం చేసి, ప్రోగ్రామ్ను పిఐసి కంట్రోలర్కు అప్లోడ్ చేయండి. పూర్తి కోడ్ క్రింద ఇవ్వబడింది లేదా ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు. బోర్డులో అందించిన ప్రోగ్రామింగ్ కనెక్టర్ చాలా ఇబ్బంది లేకుండా నేరుగా పికిట్ 3 ను ఉపయోగించి ప్రోగ్రామ్ను అప్లోడ్ చేయడంలో మీకు సహాయపడుతుంది. ప్రోగ్రామ్ అప్లోడ్ అయిన తర్వాత మీరు ప్రస్తుతం నియంత్రించబడుతున్న సర్వోను ప్రదర్శించే LCD ని చూడాలి. PIC మైక్రోకంట్రోలర్ ప్రోగ్రామింగ్ గురించి మరింత తెలుసుకోవడానికి, మునుపటి ట్యుటోరియల్ని అనుసరించండి.
అక్కడ నుండి మీరు కుండను తిప్పవచ్చు మరియు సర్వో మోటార్లు ప్రతి పొటెన్షియోమీటర్కు ఎలా స్పందిస్తాయో తనిఖీ చేయవచ్చు. మీరు ఆకృతిని అర్థం చేసుకున్న తర్వాత, రోబోటిక్ చేయిని నియంత్రించటానికి మీకు అవసరమైన ఏ చర్యనైనా నిర్వహించడానికి మరియు ఆనందించండి. దిగువ లింక్ చేయబడిన వీడియోలో మీరు ప్రాజెక్ట్ యొక్క పూర్తి పనిని కనుగొనవచ్చు.
మీరు ప్రాజెక్ట్ను అర్థం చేసుకున్నారని మరియు దాని నుండి క్రొత్తదాన్ని నేర్చుకున్నారని అబ్బాయిలు ఆశిస్తున్నారు. మీకు ఏవైనా ప్రశ్నలు ఉంటే వాటిని వ్యాఖ్య విభాగంలో ఉంచండి లేదా ఇతర సాంకేతిక చర్చల కోసం ఫోరమ్లను ఉపయోగించండి.