Servo motorji so zelo uporabni v elektroniki in vgrajenih sistemih. Servo motorje lahko najdete povsod okoli sebe, uporabljajo se v igračah, robotih, pladnju za CD v računalniku, avtomobilih, letalih itd. Razlog za to je, da je servo motor zelo zanesljiv in natančen. Zavrtimo ga lahko pod katerim koli določenim kotom. Na voljo so v širokem obsegu, od motorjev z visokim navorom do motorjev z nizkim navorom. V tej vadnici bomo povezali servo motor z mikrokrmilnikom 8051 (AT89S52).
Najprej moramo razumeti načelo delovanja servo motorjev. Servo motor deluje na principu PWM (modulacija širine impulza), kar pomeni, da se njegov kot vrtenja nadzoruje s trajanjem uporabljenega impulza na nadzorni PIN. V osnovi je servo motor sestavljen iz enosmernega motorja, ki ga krmilijo spremenljivi upor (potenciometer) in nekatere prestave. Sila visoke hitrosti enosmernega motorja pretvori v navor Gears. Vemo, da je DELO = FORCE X DISTANCE, pri enosmernem motorju je sila manjša, razdalja (hitrost) pa velika, pri servo servo pa velika in razdalja manjša. Potenciometer je povezan z izhodno gredjo servo naprave za izračun kota in zaustavitev enosmernega motorja na zahtevanem kotu.
Servo motor lahko vrtite od 0 do 180 stopinj, lahko pa tudi do 210 stopinj, odvisno od proizvajalca. To stopnjo vrtenja je mogoče nadzorovati z uporabo impulza LOGIC nivo 1 za čas med 1 ms in 2 ms. 1 ms lahko zasuče servo na 0 stopinj, 1,5 ms se lahko zavrti na 90 stopinj in impulz 2 ms ga lahko zavrti na 180 stopinj. Trajanje med 1 in 2 ms lahko zavrti servo motor pod katerim koli kotom med 0 in 180 stopinjami.
Shema vezja in delovna razlaga
Servo motor ima tri žice Rdeča za Vcc (napajanje), Rjava za ozemljitev in Oranžna je krmilna žica. Krmilno žico lahko priključite na 8051, mi smo jo povezali na pin 2.1 od 8051. Zdaj moramo ta pin držati Logic 1 za 1 ms, da ga zasučemo za 0 stopinj, 1,5 ms za 90 stopinj, 2 ms za 180 stopinj. Za ustvarjanje zamude smo uporabili odštevalnike čipov 8051. S funkcijo “servo_delay” smo ustvarili zakasnitev 50us in uporabili zanko “for” za zakasnitev v večkratniku 50us.
Uporabljamo timer 0 in v načinu 1, zato smo v register TMOD postavili 01H. Način 1 je 16-bitni način časovnika, TH0 pa vsebuje visok bajt, TL0 pa nizki bajt 16-bitnega časovnika. FFD2 smo postavili v 16-bitni časovni register, FF v TH0 in D2 v TL0. Če vstavite FFD2, bo prišlo do zamika približno 50 us s kristalom 11.0592MHz. TR0 in TF0 sta bit TCON registra, zatič TR, ki se uporablja za zagon časovnika, ko je nastavljen, in ustavitev ob ponastavitvi (0). TF je zastavica prelivanja, ki jo pri prelivanju nastavi strojna oprema in jo mora ponastaviti s programsko opremo. V bistvu TF sporoča dokončanje časovnika in ga nastavi strojna oprema, ko 16 časovnikov preide s FFFFH na 0000H. Lahko si preberete o “8051 Timers”, če želite razumeti izračun vrednosti v registrih časovnikov in ustvariti zakasnitev 50 us.
Zdaj, ko merimo iz CRO, bo 13 zank funkcije servo_delay povzročilo zakasnitev 1 ms, zato smo začeli z 1 ms (13 zank) in prešli na 2 ms (26 zank), da servo zasučemo od 0 do 180 stopinj. Toda počasnost smo počasi povečevali z 1 ms, okno od 1 ms do 2 ms smo razdelili na 7 delov, kot so 1,14 ms, 1,28 ms, 1,42 ms in tako naprej, tako da se bo servo vrtel v večkratniku približno 26 stopinj (180/7). Po 180 se samodejno vrne na 0 stopinj.