Los servomotores son muy útiles en electrónica y sistemas integrados. Puede encontrar el uso de servomotores en todas partes a su alrededor, se utilizan en juguetes, robots, bandeja de CD de computadoras, automóviles, aviones, etc. La razón de este amplio alcance es que el servomotor es muy confiable y preciso. Podemos rotarlo en cualquier ángulo en particular. Están disponibles en una amplia gama, desde motores de alto par hasta motores de bajo par. En este tutorial vamos a conectar un servomotor al microcontrolador 8051 (AT89S52).
Primero, debemos comprender el principio de funcionamiento de los servomotores. El servomotor funciona con el principio PWM (modulación de ancho de pulso), lo que significa que su ángulo de rotación está controlado por la duración del pulso aplicado a su PIN de control. Básicamente, el servomotor está compuesto por un motor de CC que está controlado por una resistencia variable (potenciómetro) y algunos engranajes. Gears convierte la fuerza de alta velocidad del motor de CC en par. Sabemos que TRABAJO = FUERZA X DISTANCIA, en el motor de CC la Fuerza es menor y la distancia (velocidad) es alta y en Servo, la fuerza es Alta y la distancia es menor. El potenciómetro está conectado al eje de salida del Servo, para calcular el ángulo y detener el motor de CC en el ángulo requerido.
El servomotor se puede girar de 0 a 180 grados, pero puede subir hasta 210 grados, dependiendo del fabricante. Este grado de rotación se puede controlar aplicando un pulso de nivel LÓGICO 1 con una duración de entre 1 ms y 2 ms. Un 1 ms puede girar el servo a 0 grados, 1,5 ms puede girar a 90 grados y un pulso de 2 ms puede girarlo a 180 grados. La duración entre 1 y 2 ms puede girar el servomotor en cualquier ángulo entre 0 y 180 grados.
Diagrama de circuito y explicación de trabajo
El servomotor tiene tres cables: rojo para Vcc (fuente de alimentación), marrón para tierra y naranja para el cable de control. El cable de control se puede conectar al 8051, lo hemos conectado al Pin 2.1 de 8051. Ahora tenemos que mantener este pin en Logic 1 durante 1ms para rotarlo 0 grados, 1.5ms para 90 grados, 2 ms para 180 grados. Hemos utilizado temporizadores en chip de 8051 para crear demoras. Hemos creado un retardo de 50us a través de la función “servo_delay” y usamos el bucle “for” para crear un retardo en múltiplos de 50us.
Estamos usando el temporizador 0 y en el modo 1, por lo que hemos puesto 01H en el registro TMOD. El modo 1 es el modo de temporizador de 16 bits y TH0 contiene un byte alto y TL0 contiene un byte bajo de un temporizador de 16 bits. Hemos puesto FFD2 en el registro de temporizador de 16 bits, FF en TH0 y D2 en TL0. Poner FFD2 creará un retraso de aprox. 50 us con el cristal de 11.0592MHz. TR0 y TF0 son los bits del registro TCON, el pin TR se usa para iniciar el temporizador cuando se establece y detener cuando se restablece (0). TF es una bandera de desbordamiento, establecida por hardware cuando se desborda y necesita restablecerla por software. Básicamente, TF indica la finalización del temporizador y lo establece el hardware cuando el temporizador 16 pasa de FFFFH a 0000H. Puede leer sobre los “Temporizadores 8051” para comprender el cálculo del valor en los registros de temporizadores, para crear el retardo de 50 us.
Ahora, cuando se mide desde CRO, 13 bucles de la función servo_delay darán un retraso de 1 ms, por lo que hemos comenzado desde 1 ms (13 bucles) y hemos pasado a 2 ms (26 bucles) para rotar el servo de 0 a 180 grados. Pero hemos incrementado lentamente el retardo de 1 ms, hemos dividido la ventana de 1 ms a 2 ms en 7 partes como 1,14 ms, 1,28 ms, 1,42 ms y así sucesivamente, por lo que el servo girará en múltiplos de aprox. 26 grados (180/7). Después de 180, volverá automáticamente a 0 grados.