- Što je servo motor?
- Povezivanje servo motora s mikrokontrolerima:
- Programiranje servo motora s PICF877A PIC mikrokontrolerom:
- Kružni dijagram:
- Simulacija i postavljanje hardvera:
Ovo je naš 11. vodič za učenje PIC mikrokontrolera pomoću MPLAB-a i XC8. U ovom uputstvu naučit ćemo kako upravljati servo motorom pomoću PIC mikrokontrolera. Ako ste već radili sa servo motorima, možete preskočiti prvu polovicu ovog vodiča, ali ako ste novi u samom servo motoru, nastavite čitati.
Do sada smo pokrili mnoge osnovne vodiče poput LED-a koji trepće s PIC-om, mjerači vremena u PIC-u, povezivanje LCD-a, povezivanje 7-segmenta, ADC-a pomoću PIC-a itd. Ako ste apsolutni početnik, posjetite cijeli popis PIC tutorijala ovdje i počnite učiti.
U našem prethodnom vodiču naučili smo kako generirati PWM signale pomoću PIC mikrokontrolera, signali su generirani na temelju vrijednosti očitane s potenciometra. Ako ste tada razumjeli sve programe, čestitamo, već ste kodirali i za servo motor. DA, Servo motori reagiraju na PWM signale (koje ovdje stvaramo pomoću odbrojavanja) naučit ćemo zašto i kako u ovom vodiču. Simulirat ćemo i izraditi postavke hardvera za ovaj projekt, a detaljan video možete pronaći na kraju ovog vodiča.
Što je servo motor?
Servo motor je vrsta aktuatora (uglavnom kružnog) koji omogućuje kutnu kontrolu. Dostupne su mnoge vrste servo motora, ali u ovom uputstvu usredotočimo se na hobi servo motore prikazane u nastavku.

Servisi za hobi su popularni jer su jeftina metoda kontrole pokreta. Pružaju gotova rješenja za većinu potreba za R / C i robotskim hobistima. Oni također uklanjaju potrebu za prilagođenim dizajniranjem kontrolnog sustava za svaku aplikaciju.
Većina hobi servo motora ima rotacijski anđeo od 0-180 °, ali također možete dobiti i servo motor od 360 ° ako ste zainteresirani. Ovaj se vodič koristi servo motorom od 0 do 180 °. Postoje dvije vrste servo motora koji se temelje na zupčanicima, jedan je servo motor od plastičnog zupčanika, a drugi je servo motor od metala. Metalni zupčanik koristi se na mjestima gdje je motor izložen većem trošenju, ali dolazi samo po visokoj cijeni.
Servo motori su ocijenjeni u kg / cm (kilogram po centimetru) većina hobi servo motora je ocijenjeno na 3 kg / cm ili 6 kg / cm ili 12 kg / cm. Ovaj kg / cm govori vam koliko težine vaš servo motor može podići na određenoj udaljenosti. Na primjer: Servo motor od 6 kg / cm trebao bi moći podići 6 kg ako je teret ovješen 1 cm od osovine motora, što je veća udaljenost to je manja nosivost tereta. Ovdje naučite Osnove servo motora.
Povezivanje servo motora s mikrokontrolerima:
Povezivanje hobi servo motora s MCU-om vrlo je jednostavno. Servo ima tri žice koje izlaze iz njih. Od kojih će se dva koristiti za opskrbu (pozitivna i negativna), a jedan za signal koji se šalje s MCU-a. U ovom uputstvu koristit ćemo servo motor MG995 Metal Gear Servo Motor koji se najčešće koristi za humanoidne botove RC automobila itd. Slika MG995 prikazana je dolje:


Oznake boja vašeg servo motora mogu se razlikovati, pa provjerite da li imate odgovarajuće podatke.
Svi servo motori rade izravno s vašim opskrbnim vodilicama + 5V, ali moramo paziti na količinu struje koju bi motor trošio, ako planirate koristiti više od dva servo motora, trebao bi biti dizajniran odgovarajući servo štit. U ovom uputstvu jednostavno ćemo koristiti jedan servo motor da pokažemo kako programirati naš PIC MCU za upravljanje motorom. Provjerite donje poveznice za povezivanje servo motora s drugim mikrokontrolerom:
- Povezivanje servo motora s mikrokontrolerom 8051
- Upravljanje servo motorom pomoću Arduina
- Vodič za servo motore Raspberry Pi
- Servo motor s AVR mikrokontrolerom
Programiranje servo motora s PICF877A PIC mikrokontrolerom:
Prije nego što započnemo programiranje servo motora, trebali bismo znati koju vrstu signala treba poslati za upravljanje servo motorom. Trebali bismo programirati MCU da šalje PWM signale na signalnu žicu servo motora. Unutar servo motora nalazi se upravljački krug koji očitava radni ciklus PWM signala i postavlja osovinu servo motora na odgovarajuće mjesto kao što je prikazano na donjoj slici

Svaki servo motor radi na različitim PWM frekvencijama (najčešća frekvencija je 50 HZ koja se koristi u ovom vodiču), zato uzmite tablicu podataka svog motora kako biste provjerili u kojem PWM razdoblju vaš servo motor radi.
Pojedinosti o PWM signalu za naš Tower pro MG995 prikazani su u nastavku.

Iz ovoga možemo zaključiti da naš motor radi s PWM razdobljem od 20 ms (50Hz). Tako bi frekvencija našeg PWM signala trebala biti postavljena na 50Hz. Frekvencija PWM-a koju smo postavili u prethodnom vodiču bila je 5 KHz, a korištenje iste neće nam pomoći ovdje.
Ali, ovdje imamo problem. PIC16F877A ne može generirati niske frekvencije PWM signala pomoću CCP modul. Prema tehničkom listu, najniža moguća vrijednost koja se može postaviti za PWM frekvenciju je 1,2 KHz. Stoga moramo odustati od ideje o korištenju CCP modula i pronaći način za stvaranje vlastitih PWM signala.
Stoga ćemo u ovom uputstvu koristiti modul za mjerenje vremena za generiranje PWM signala s frekvencijom od 50 Hz i mijenjati njihov radni ciklus za upravljanje anđelom servo motora. Ako ste novi u timerima ili ADC-u s PIC-om, vratite se ovom vodiču, jer ću preskočiti većinu stvari jer smo ih tamo već pokrili.
Inicijaliziramo naš modul Timer s prescalerom od 32 i učinimo ga preljevnim za svaki 1us. Prema našem tehničkom listu, PWM bi trebao imati razdoblje od samo 20 ms. Dakle, naše zajedničko vrijeme i slobodno vrijeme trebali bi biti točno jednaki 20 ms.
OPTION_REG = 0b00000100; // Timer0 s vanjskom frekvencijom i 32 kao uređaj za predskaliranje TMR0 = 251; // Učitavanje vrijednosti vremena za 1us delayValue može biti između 0-256 samo TMR0IE = 1; // Omogući bit prekida timera u PIE1 registru GIE = 1; // Omogući globalni prekid PEIE = 1; // Omogući periferni prekid
Dakle, unutar naše rutinske funkcije prekida, uključujemo pin RB0 na određeno vrijeme i isključujemo ga za vrijeme razvrtavanja (20 ms - on_time). Vrijednost uključenosti može se odrediti pomoću potenciometra i ADC modula. Prekid je prikazan u nastavku.
oid interrupt timer_isr () {if (TMR0IF == 1) // Odbrojavanje je preletjelo {TMR0 = 252; / * Učitajte vrijednost timera, (Napomena: Timervalue je 101 postavljena na 100, jer TImer0 treba dva ciklusa uputa da bi počeo povećavati TMR0 * / TMR0IF = 0; // Obriši broj zastavica prekida tajmera ++;} if (count> = on_time) { RB0 = 1; // dopunjujemo vrijednost za treptanje LED dioda} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Unutar naše while petlje samo očitamo vrijednost potenciometra pomoću ADC modula i ažuriramo vrijeme uključivanja PWM koristeći očitanu vrijednost.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Na taj smo način stvorili PWM signal čiji je period 20 ms i ima promjenjivi radni ciklus koji se može postaviti pomoću potenciometra. Kompletni kôd naveden je u nastavku odjeljka koda.
Sada, provjerimo izlaz koristeći simulaciju proteusa i prijeđimo na naš hardver.
Kružni dijagram:
Ako ste već naišli na PWM vodič, sheme ovog vodiča bit će iste, osim za koje ćemo dodati LED servo motor umjesto LED svjetla.

Simulacija i postavljanje hardvera:
Uz pomoć Proteusove simulacije možemo provjeriti PWM signal pomoću osciloskopa, a također i rotirajućeg anđela servo motora. U nastavku je prikazano nekoliko snimaka simulacije, gdje se može primijetiti da se rotirajući anđeo servo motora i radni ciklus PWM mijenjaju na temelju potenciometra. Dalje na kraju provjerite Full Video, rotacije pri različitim PWM-ima.


Kao što vidimo, anđeo rotacije servoa mijenja se na temelju vrijednosti potenciometra. Sada nastavimo s našim postavljanjem hardvera.
U postavkama hardvera upravo smo uklonili LED ploču i dodali servo motor kao što je prikazano u gornjim shemama.
Hardver je prikazan na donjoj slici:

Video u nastavku pokazuje kako se servo motor reagira na raznim položajima potenciometra.
To je to!! Povezali smo servo motor s PIC mikrokontrolerom, sada možete koristiti svoju kreativnost i pronaći aplikacije za to. Postoji puno projekata koji koriste servo motor.
