Els servomotors són molt útils en electrònica i sistemes incrustats. Podeu trobar l’ús de servomotors a tot el vostre entorn, s’utilitzen en joguines, robots, safata de CD d’ordinadors, cotxes, avions, etc. La raó d’aquest ampli abast és que el servomotor és molt fiable i precís. El podem girar a qualsevol angle concret. Estan disponibles en una àmplia gamma, des de motors d’alt parell fins a motors de baix parell. En aquest tutorial farem una interfície d'un servomotor amb el microcontrolador 8051 (AT89S52).
En primer lloc, hem d’entendre el principi de funcionament dels servomotors. El servomotor funciona al principal PWM (modulació de l'amplada de pols), significa que el seu angle de rotació està controlat per la durada del pols aplicat al seu PIN de control. Bàsicament, el servomotor està format per un motor de corrent continu que es controla mitjançant una resistència variable (potenciòmetre) i alguns engranatges. La força d’alta velocitat del motor de corrent continu es converteix en parell motor mitjançant Gears. Sabem que TREBALL = FORÇA X DISTÀNCIA, en el motor de corrent continu la força és menor i la distància (velocitat) és alta i en Servo, la força és alta i la distància és menor. El potenciòmetre està connectat a l’eix de sortida del Servo, per calcular l’angle i aturar el motor de corrent continu en l’angle requerit.
El servomotor es pot girar de 0 a 180 graus, però pot arribar a 210 graus, segons el fabricant. Aquest grau de rotació es pot controlar aplicant un pols de nivell 1 LOGIC durant una durada d'entre 1 ms i 2 ms. Un 1 ms pot girar el servo a 0 graus, 1,5 ms pot girar a 90 graus i el pols de 2 ms el pot girar a 180 graus. La durada entre 1 i 2 ms pot girar el servomotor a qualsevol angle entre 0 i 180 graus.

Diagrama de circuits i explicació de treball

El servomotor té tres cables vermell per a Vcc (font d'alimentació), marró per a terra i taronja per cable de control. El cable de control es pot connectar a 8051, l’hem connectat al pin 2.1 de 8051. Ara hem de mantenir aquest pin a Logic 1 durant 1 ms per girar-lo 0 graus, 1,5 ms per 90 graus, 2 ms per 180 graus. Hem utilitzat temporitzadors de xips de 8051 per crear un retard. Hem creat un retard de 50us mitjançant la funció "servo_delay" i hem utilitzat un bucle "per" per crear un retard en múltiples de 50us.
Estem utilitzant el temporitzador 0 i en mode 1, de manera que hem posat 01H al registre TMOD. El mode 1 és el mode temporitzador de 16 bits i el TH0 conté byte alt i el TL0 conté temporitzador baix de 16 bits. Hem posat FFD2 al registre del temporitzador de 16 bits, FF a TH0 i D2 a TL0. Posant FFD2 es crearà un retard d'aprox. 50 us amb el vidre d'11.0592MHz. TR0 i TF0 són els bits del registre TCON, pin TR que s'utilitza per iniciar el temporitzador quan s'estableix i aturar-se quan es reinicia (0). TF és el senyal de desbordament, definit pel maquinari quan es desborda i ha de restablir-lo pel programari. Bàsicament, TF indica la finalització del temporitzador i es configura mitjançant el maquinari quan el temporitzador 16 passa de FFFFH a 0000H. Podeu llegir sobre els "Temporitzadors 8051" per entendre el càlcul del valor als registres de temporitzadors, per crear el retard de 50 us.
Ara, quan es mesura des de CRO, 13 bucles de la funció servo_delay donaran un retard d'1 ms, de manera que hem començat des d'1 ms (13 bucles) i hem passat a 2 ms (26 bucles) per girar el servo de 0 a 180 graus. Però hem augmentat lentament el retard d’1 ms, hem dividit la finestra d’1 ms a 2 ms en 7 parts com 1,14 ms, 1,28 ms, 1,42 ms, etc., de manera que el servo girarà en múltiples d’aprox. 26 graus (180/7). Després de 180 tornarà automàticament a 0 graus.
