Servo motori su vrlo korisni u elektronici i ugrađenim sustavima. Službu servo motora možete pronaći svugdje oko sebe, koriste se u igračkama, robotima, ladici za CD računala, automobila, aviona itd. Razlog ovog širokog opsega je taj što je servo motor vrlo pouzdan i precizan. Možemo ga okretati pod bilo kojim određenim kutom. Dostupni su u širokom rasponu, od motora s velikim okretnim momentom do motora s malim okretnim momentom. U ovom uputstvu povezat ćemo servo motor s mikrokontrolerom 8051 (AT89S52).
Prvo moramo razumjeti princip rada servo motora. Servo motor radi na principu PWM (modulacija širine impulsa), što znači da se njegov kut rotacije kontrolira trajanjem primijenjenog impulsa na njegov kontrolni PIN. U osnovi se servo motor sastoji od istosmjernog motora kojim se upravlja promjenjivim otpornikom (potenciometar) i nekim zupčanicima. Sila velike brzine istosmjernog motora Gears pretvara u okretni moment. Znamo da je RAD = SILA X UDALJENOST, kod istosmjernog motora sila je manja, a udaljenost (brzina) velika, a kod serva sila velika, a udaljenost manja. Potenciometar je povezan s izlaznom osovinom servo-uređaja, kako bi izračunao kut i zaustavio istosmjerni motor na traženom kutu.
Servo motor se može okretati od 0 do 180 stupnjeva, ali može ići i do 210 stupnjeva, ovisno o proizvodnom prstenu. Ovaj stupanj rotacije može se kontrolirati primjenom impulsa LOGIC razine 1 u trajanju od 1 ms do 2 ms. 1 ms može okretati servo na 0 stupnjeva, 1,5 ms može okretati na 90 stupnjeva, a puls od 2 ms može ga okretati na 180 stupnjeva. Trajanje između 1 do 2 ms može okretati servo motor pod bilo kojim kutom od 0 do 180 stupnjeva.

Kružni dijagram i radno objašnjenje

Servo motor ima tri žice crvenu za Vcc (napajanje), smeđu za masu, a narančasta je upravljačka žica. Upravljačka žica može se spojiti na 8051, mi smo je spojili na pin 2.1 od 8051. Sada moramo zadržati ovaj pin na Logic 1 za 1 ms da bismo ga okrenuli za 0 stupnjeva, 1,5 ms za 90 stupnjeva, 2 ms za 180 stupnjeva. Koristili smo odbrojavanje čipova od 8051 za stvaranje kašnjenja. Stvorili smo kašnjenje od 50us kroz funkciju "servo_delay" i koristili petlju "for" za stvaranje kašnjenja u višestrukom od 50us.
Koristimo Timer 0 i u načinu 1, pa smo stavili 01H u TMOD registar. Način 1 je 16-bitni način odbrojavanja, a TH0 sadrži veliki bajt, a TL0 sadrži bajt od 16 bita. Stavili smo FFD2 u 16-bitni registar timera, FF u TH0 i D2 u TL0. Stavljanjem FFD2 stvorit će se kašnjenje od približno 50 us s kristalom od 11.0592MHz. TR0 i TF0 su bitovi TCON registra, TR pina koji se koristi za pokretanje mjerača vremena kada se postavi i zaustavljanje nakon resetiranja (0). TF je zastavica preljeva, koju hardver postavlja prilikom prelijevanja i mora je resetirati softverom. U osnovi TF govori o završetku odbrojavanja, a postavlja ga hardver kada 16 odbrojavanja pređe s FFFFH na 0000H. Možete pročitati o “8051 timerima” da biste razumjeli izračun vrijednosti u registrima tajmera, kako biste stvorili kašnjenje od 50 us.
Sada kada se mjeri iz CRO, 13 petlji funkcije servo_delay dat će kašnjenje od 1 ms, pa smo krenuli od 1 ms (13 petlji) i prešli na 2 ms (26 petlji) da bismo okretali servo od 0 do 180 stupnjeva. Ali polako smo povećavali kašnjenje s 1 ms, podijelili smo prozor od 1 ms do 2 ms na 7 dijelova poput 1,14 ms, 1,28 ms, 1,42 ms i tako dalje, tako da će se servo okretati u višestrukim intervalima od približno. 26 stupnjeva (180/7). Nakon 180 automatski će se vratiti na 0 stupnjeva.
