Un servomotor (también conocido como servo) es un dispositivo similar a un motor de corriente continua que tiene la capacidad de rotar su eje dentro de un rango de operación (generalmente 180 grados), y mantenerse estable en dicha posición. Los servomotores se controlan por medio de un pulso de ancho variable y frecuencia constante (PWM). Se debe notar que existen diferentes modelos de servomotores con distintas capacidades de rotación pero todos ellos tienen una posición neutral que generalmente se logra con pulsos de 1,5 ms (1.500 us). El terminal de control se utiliza para el ingreso de este pulso. De acuerdo a las restricciones de rotación del servo motor, la posición neutral se define como aquella en la que el servomotor dispone del mismo ángulo de giro hacia la izquierda y hacia la derecha, es decir es una posición central a partir de la cual el eje puede girar el mismo ángulo en ambos sentidos.
El ángulo girado se determina por la duración del pulso. Esto es similar a la Modulación por Ancho de Pulso (PWM). Los servo motores generalmente trabajan con una frecuencia de 50 Hz (periodo de 20 ms). La duración del pulso determina el ángulo girado. Por ejemplo, un pulso de 1,5 ms hará que el servomotor se ubique en su posición neutral.
¡Descubre el mundo de los microcontroladores PIC y lleva tus habilidades de programación al siguiente nivel! Obtén nuestro eBook y disfruta aprendiendo paso a paso desde cero, podrás realizar proyectos prácticos, encontrar soluciones a problemas comunes y explorar una amplia cobertura de temas desde lo más básico a lo más avanzado. Incluye software y ejemplos resueltos. ¡Cómpralo ahora y libera el increíble potencial de esta poderosa tecnología hoy mismo!
Cuando el servomotor recibe un pulso específico se mueve a la posición correspondiente y permanece en ella. Si se aplica una fuerza externa el servo ofrece resistencia a salir de dicha posición. La máxima fuerza que el servo puede ejercer está relacionada con uno de sus parámetros de mayor importancia: el torque máximo. Los servos no mantendrán su posición para siempre; se debe repetir el pulso para que el servo motor permanezca en dicha posición.
Cuando el servomotor recibe un pulso menor que 1,5 ms gira hasta una nueva posición un determinado ángulo hacia la derecha a partir de su posición neutral. Cuando el pulso es mayor que 1,5 ms ocurre lo contrario. Los límites mínimo y máximo de duración del pulso dependen de cada servomotor. Diferentes marcas, e inclusive diferentes modelos de la misma marca, normalmente tienen distintos límites mínimo y máximo. De manera general el pulso mínimo está alrededor de 1 ms y el máximo aproximadamente 2 ms.
Otro parámetro que varía entre los servo motores es la velocidad de giro, que es el tiempo que le toma pasar de una posición a otra. Normalmente los fabricantes indican este parámetro para un ángulo de 60 grados, es decir, especifican la velocidad de giro de acuerdo al tiempo que le toma al servomotor girar un ángulo de 60 grados.
Temblor, oscilacion o vibracion del servomotor
Normalmente la señal de control se envia de forma continua todo el tiempo para que el servo mantenga su posicion (como en el ejemplo Servo.c de la parte inferior), sin embargo en algunos servos (especialmente los de bajo precio) esto puede ocasionar temblor (oscilacion o vibracion) del eje debido a que el sistema de control del servo esta continuamente reajustando la posicion; en tales circunstancias lo que se debe hacer es enviar la señal de control PWM unicamente durante el tiempo suficiente para que el eje se posicione y luego suspenderla, con esto se eliminara la oscilacion del eje.
Por ejemplo, si se aplican 80 ciclos de 20ms el tiempo total será de 1.6s; si el tiempo de aplicacion de la señal de control es muy pequeño el eje se moverá de forma irregular. De forma experimental se determinó que un tiempo de 1.6s permite el funcionamiento adecuado. Se puede experimentar con tiempos menores o mayores de ser necesario. Para obtener exactitud se ha tomado en cuenta el tiempo de ejecucion de las instrucciones:
for (j=1;j<=80;j++){ RA3_bit=1; //La salida RA3 pasa a ALTO al finalizar esta instruccion. Delay_us (999); //999us+ RA3_bit=0; //+1us=1000us en ALTO (RA3 pasa a BAJO al finalizar esta instruccion). Delay_us(19000); }
El Brown Out Reset BOD (Reset por caida de voltaje) debe dejarse deshabilitado para evitar el reset cuando se conectan servos de alto consumo (por ejemplo el servomotor MG995 que consume unos 500mA); de lo contrario, el reset del pic ocasiona que el servo opere irregularmente. Otra posible solucion a este problema seria usar dos fuentes de alimentacion independientes: una de baja corriente para el microcontrolador y otra de alta corriente para el servo motor.
Especificaciones del servo motor Hitec HS-311
Como ejemplo tenemos un servomotor de uso común, el Hitec HS-311. Sus especificaciones son las siguientes:
- Torque máximo: 51 onzas-pulgada
- Velocidad máxima: 0,15 s/60 grados
- Desplazamiento angular máximo: 90 grados (puede operar hasta 180 grados aplicando pulsos de 600us a 2400us).
- Sistema de Control: Analógico. Control por ancho de pulso
- Posición neutral: 1,5ms (1.500us)
- Pulso requerido: 3-5 V pico a pico, onda rectangular
- Voltaje de operación: 4,8 - 6,0V
- Temperatura de operación: -20 a 60 grados Celsius
- Velocidad (4,8V): 0,19 s/60 grados, sin carga
- Velocidad (6,0V): 0,15 s/60 grados, sin carga
- Torque (4,8V): 42 onzas-pulgada (3,0 kg-cm)
- Torque (6,0V): 51 onzas-pulgada (3,7 kg-cm)
- Consumo (4,8V): 7,4mA (reposo), 160mA en operación sin carga
- Consumo (6,0V): 7,7mA (reposo), 180mA en operación sin carga
- Angulo de operación: 45 grados con un pulso de 450 us
- Dirección: Multi-direccional
- Engranajes: Nylon
- Longitud del cable de conexión: 30 cm
- Peso: 43 gramos
-
Conector: Amarillo, Blanco ó Naranja (Señal de control), Rojo (V+), Negro ó Café (Negativo)
Dimensiones físicas (mm)
A=19,82 B=13,47 C=33,79 D=10,17 E=9,66 F=30,22
G=11,68 H=26,67 J=52,84 K=9,35 L=4,38 M=39,88
X=3,05
Ejemplo en mikroC PRO con el PIC16F628A
Servo.c: Control de giro de un servomotor HS-311 con un PIC16F628A (la señal de control se envia de forma continua todo el tiempo). Al presionar un botón conectado en el pin RA4 (pin 3) por primera vez el servo pasa a la posición neutral (centro), la segunda vez gira 45 grados a la izquierda, la tercera se ubica 45 grados a la derecha del centro y la cuarta vez se ubica 90 grados a la derecha del centro. Luego la secuencia de movimientos se repite actuando sobre el botón. Nótese, en el código fuente, que se ha tomado en cuenta el tiempo de ejecución de las instrucciones para obtener los pulsos con la duración exacta.
//servo.c //Microcontrolador: PIC16F628A //Oscilador: interno 4MHz //Servo motor: Hitec HS-311 char contador=0,estado=1; void main() { PORTB=0x00; TRISB=0x00; CMCON=0x07; while (1){ if (Button(&PORTA,4,1,0)) estado=0; //Si se pulsa. if (estado==0 && Button(&PORTA,4,1,1)){ //Si se pulsa y se libera. contador++; if (contador>4) contador=1; estado=1; } switch (contador){ case 1:RB0_bit=1; Delay_us (1499); //1.500us (neutral) RB0_bit=0; Delay_us(18500); break; case 2:RB0_bit=1; Delay_us (1949); //1.950us (-45 grados) RB0_bit=0; Delay_us(18050); break; case 3:RB0_bit=1; Delay_us (1049); //1.050us (+45 grados) RB0_bit=0; Delay_us(18950); break; case 4:RB0_bit=1; Delay_us (599); //600us (+90 grados) RB0_bit=0; Delay_us(19400); break; } } }