- Kaj je servo motor?
- Povezava servo motorjev z mikrokrmilniki:
- Programiranje servo motorja z mikrokrmilnikom PICF877A PIC:
- Shema vezja:
- Simulacija in namestitev strojne opreme:
To je naša 11. vadnica učenja mikrokrmilnikov PIC z uporabo MPLAB in XC8. V tej vadnici bomo izvedeli, kako upravljati servo motor z mikrokrmilnikom PIC. Če ste že delali s servo motorji, lahko preskočite prvo polovico te vadnice, če pa ste nov v servo motorju, nadaljujte z branjem.
Do zdaj smo obravnavali številne osnovne vaje, kot je utripanje LED s PIC, merilniki časa v PIC, povezovanje LCD-jev, povezovanje 7-segmentnih, ADC z uporabo PIC itd. Če ste absolutni začetnik, obiščite celoten seznam vadnic PIC tukaj in začnite se učiti.
V prejšnji vadnici smo se naučili, kako generirati PWM signale z mikrokrmilnikom PIC, signali pa so bili ustvarjeni na podlagi vrednosti, odčitane s potenciometra. Če ste takrat razumeli vse programe, čestitamo, že ste kodirali tudi servo motor. DA, Servo motorji se odzivajo na signale PWM (ki jih tu ustvarimo s pomočjo časovnikov), v tej vadnici bomo izvedeli, zakaj in kako. Za ta projekt bomo simulirali in izdelali nastavitve strojne opreme, podroben video pa najdete na koncu te vadnice.
Kaj je servo motor?
Servo motor je vrsta pogona (večinoma krožnega), ki omogoča kotni nadzor. Na voljo je veliko vrst servo motorjev, vendar se v tej vadnici osredotočimo na hobi servo motorje, prikazane spodaj.
Servisi za hobi so priljubljeni, saj so poceni metoda nadzora gibanja. Ponujajo gotovo rešitev za večino potreb po R / C in robotskem hobiju. Prav tako odpravljajo potrebo po načrtovanju nadzornega sistema po meri za vsako aplikacijo.
Večina hobi servo motorjev ima rotacijski angel 0-180 °, lahko pa dobite tudi 360 ° servo motor, če vas zanima. Ta vadnica uporablja servo motor od 0 do 180 °. Obstajata dve vrsti servo motorjev, ki temeljita na prestavi, eden je servo motor Plastic Gear, drugi pa Metal Gear Servo Motor. Kovinsko orodje se uporablja tam, kjer je motor izpostavljen večji obrabi, vendar je na voljo le po visoki ceni.
Servo motorji so ocenjeni v kg / cm (kilogram na centimeter). Večina hobi servo motorjev je ocenjena na 3 kg / cm ali 6 kg / cm ali 12 kg / cm. Ta kg / cm vam pove, koliko teže lahko vaš servo motor dvigne na določeni razdalji. Na primer: 6 kg / cm servo motorja mora biti sposoben dvigniti 6 kg, če je tovor obešen 1 cm stran od gredi motorja, večja kot je razdalja, manjša je nosilnost teže. Tukaj preberite Osnove servo motorja.
Povezava servo motorjev z mikrokrmilniki:
Povezava hobi servo motorjev z MCU je zelo enostavna. Servo imajo tri žice, ki izhajajo iz njih. Od tega bosta dva uporabljena za napajanje (pozitivna in negativna), ena pa za signal, ki ga bo poslal iz MCU. V tej vadnici bomo uporabili servo motor MG995 Metal Gear, ki se najpogosteje uporablja za humanoidne bote RC avtomobilov itd. Slika MG995 je prikazana spodaj:
Barvno kodiranje vašega servo motorja se lahko razlikuje, zato preverite ustrezen podatkovni list.
Vsi servo motorji delujejo neposredno z vašimi napajalnimi tirnicami + 5V, vendar moramo biti previdni pri količini toka, ki bi ga porabil motor, če nameravate uporabiti več kot dva servo motorja, mora biti zasnovan ustrezen servo ščit. V tej vadnici bomo preprosto uporabili en servo motor, da pokažemo, kako programirati naš PIC MCU za nadzor motorja. Preverite spodnje povezave za povezavo servo motorja z drugim mikrokrmilnikom:
- Vmesnik servo motorja z mikrokrmilnikom 8051
- Krmiljenje servo motorja z uporabo Arduina
- Vadnica za servo motorje Raspberry Pi
- Servo motor z AVR mikrokrmilnikom
Programiranje servo motorja z mikrokrmilnikom PICF877A PIC:
Preden začnemo programirati servo motor, moramo vedeti, kateri tip signala je treba poslati za upravljanje servo motorja. MCU bi morali programirati za pošiljanje PWM signalov na signalno žico servo motorja. V servo motorju je krmilno vezje, ki bere delovni cikel signala PWM in postavi gred servo motorjev na ustrezno mesto, kot je prikazano na spodnji sliki
Vsak servo motor deluje na različnih frekvencah PWM (najpogostejša frekvenca je 50 HZ, ki je uporabljena v tej vadnici), zato poiščite podatkovni list vašega motorja, da preverite, v katerem obdobju PWM deluje vaš servo motor.
Podrobnosti o signalu PWM za naš stolp pro MG995 so prikazane spodaj.
Iz tega lahko sklepamo, da naš motor deluje s PWM obdobjem 20 ms (50 Hz). Torej bi morala biti frekvenca našega PWM signala nastavljena na 50 Hz. Frekvenca PWM, ki smo jo nastavili v prejšnji vadnici, je bila 5 KHz, pri čemer nam uporaba istega tukaj ne bo pomagala.
Vendar imamo tukaj težavo. PIC16F877A ne more ustvarjati nizke frekvence PWM signale, s pomočjo modula CCP. Glede na podatkovni list je najnižja možna vrednost, ki jo lahko nastavimo za frekvenco PWM, 1,2 KHz. Zato moramo opustiti zamisel o uporabi modula CCP in najti način, kako ustvariti lastne PWM signale.
Zato bomo v tej vadnici uporabili modul časovnika za generiranje PWM signalov s frekvenco 50 Hz in spreminjanje njihovega delovnega cikla za nadzor angela servo motorja. Če še ne poznate merilnikov časa ali ADC-ja s PIC-om, se vrnite na to vadnico, ker bom večino stvari preskočil, saj smo jih tam že pokrili.
Naš modul Timer inicializiramo s prescalerjem 32 in ga prelivamo za vsakih 1us. Glede na naš podatkovni list bi moral imeti PWM obdobje samo 20 ms. Torej najin skupni čas in čas prostega časa mora biti enak 20ms.
OPTION_REG = 0b00000100; // Timer0 z zunanjo frekvenco in 32 kot prescaler TMR0 = 251; // Naloži časovno vrednost za 1us delayValue je lahko med 0-256 TMR0IE = 1; // Omogoči bit prekinitve časovnika v registru PIE1 GIE = 1; // Omogoči globalno prekinitev PEIE = 1; // Omogoči periferno prekinitev
Torej znotraj naše rutinske funkcije prekinitve vklopimo zatič RB0 za določen čas in ga izklopimo za čas vpenjanja (20 ms - on_time). Vrednost vklopljenega časa lahko določite z uporabo potenciometra in modula ADC. Prekinitev je prikazana spodaj.
oid interrupt timer_isr () {if (TMR0IF == 1) // Časovnik je preletel {TMR0 = 252; / * Naložite vrednost časovnika, (Opomba: Timervalue je 101 nameščena na 100, saj TImer0 potrebuje dva cikla navodil, da začne povečevati TMR0 * / TMR0IF = 0; // Počisti število zastavic prekinitve časovnika ++;} if (count> = on_time) { RB0 = 1; // dopolnimo vrednost za utripanje LED}, če (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Znotraj naše zanke while smo z uporabo modula ADC pravkar prebrali vrednost potenciometra in s pomočjo odčitane vrednosti posodobili čas vklopa PWM.
medtem ko (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_vrednost); }
Na ta način smo ustvarili signal PWM, katerega obdobje je 20 ms in ima spremenljiv delovni cikel, ki ga lahko nastavimo s potenciometrom. Popolna koda je navedena spodaj v odseku kode.
Zdaj preverimo izhod s simulacijo proteusa in nadaljujmo s svojo strojno opremo.
Shema vezja:
Če ste že naleteli na vajo PWM, bodo sheme te vaje enake, razen če bomo namesto LED luči dodali servo motor.
Simulacija in namestitev strojne opreme:
S pomočjo Proteusove simulacije lahko z osciloskopom preverimo signal PWM in preverimo tudi vrtljivi angel servo motorja. Spodaj je prikazano nekaj posnetkov simulacije, kjer je mogoče opaziti, da se na podlagi potenciometra spremeni vrtljivi angel servo motorja in delovni cikel PWM. Nadalje na koncu preverite celoten video, vrtenja pri različnih PWM.
Kot lahko vidimo, se servo rotacijski angel spremeni glede na vrednost potenciometra. Zdaj pa nadaljujmo z nastavitvijo strojne opreme.
Pri nastavitvi strojne opreme smo pravkar odstranili LED ploščo in dodali servo motor, kot je prikazano v zgornjih shemah.
Strojna oprema je prikazana na spodnji sliki:
Spodnji video prikazuje, kako se servo motor odziva na različne položaje potenciometra.
To je to !! Imamo vmesniki servo motor z mikrokontrolerja, sedaj lahko uporabite svojo kreativnost in ugotovite, aplikacije za to. Obstaja veliko projektov, ki uporabljajo servo motor.