Un servomotor es
un dispositivo
electromecánico
capaz de rotar su eje
SERVOMOTOR CON
a una posición
específica, que es
controlado por señal
PWM
CICLOS Brayan Escobedo
Introducción a
Microcontroladores PIC
“mikrobasic”
4.0 Servomotor
Un servomotor es un dispositivo electromecánico capaz
de rotar su eje a una posición específica a lo largo de su
recorrido, inyectando un tren de pulsos controlados, a un
circuito de control que posee dentro de su caja o chasis.
Esta señal se introduce a través de un cable de control que
se distingue entre los tres cables que posee y que según la
marca del servomotor puede ser de color blanco, amarillo
o anaranjado. Los cables de alimentación se distinguen por
sus colores rojo (Positivo), y negro o marrón (Negativo).
Un servomotor estándar tiene dimensiones muy
apropiadas para realizar proyectos de robótica, y aunque
se pueden encontrar en diferentes tamaños, es importante
resaltar que la fuerza de un servo en su eje no es
directamente proporcional al tamaño del mismo. Esto
significa que su fuerza depende en gran sentido de su
diseño interior, es decir, de la mecánica y material que
componen sus engranajes.
Características técnicas importantes en un servomotor
estándar:
Control: Control por ancho de pulso (PWM).
Pulso: 3-5 Voltios Pico a Pico.
Voltaje de operación: 4.8 a 6.0 Voltios.
Torque (4.8V): 3.0 kg/cm (42 oz/in)
Torque (6.0V): 4.5 kg/cm (48.60 oz/in)
Rango de Temperatura Operacional: -20 a +60 ºC.
Velocidad (4.8V): 0.19sec/60 grados.
Velocidad (6.0V): 0.15sec/60 grados.
Corriente (4.8V): 7.4mA activo y 160mA al aplicar fuerza.
Corriente (6.0V): 7.7mA activo y 180mA al aplicar fuerza.
Para controlar la posición del eje de un servomotor,
hace falta enviar un tren de pulsos, donde el ancho de
cada pulso determina el punto en el cual el eje mantiene
su posición, siempre y cuando el tren de pulsos esté
presente. El recorrido será en la mayoría de los modelos
de 180º y los tiempos correspondientes al pulso en la
señal para las posiciones principales (0º, 90º y 180º) se
especifican en la figura 4.1. (Estos tiempos pueden
variar de acuerdo al modelo y marca del servomotor).
Figura 4.1
Entonces, si deseamos llevar el eje a 0º, se deben
introducir al servomotor pulsos de 0.6 milisegundos (T1)
aproximadamente, cada 20 milisegundos, como se
muestra en la figura 4.2. T2 corresponde por consiguiente
al tiempo que debemos esperar para enviar un nuevo
pulso, el cual mantiene actualizada la posición de eje. El
tiempo T2 puede estar dentro del rango 10 ms ≤ T2 ≤ 40
ms.
Figura 4.2
A medida que aumentamos gradualmente el tiempo T1, el
eje del servomotor se irá moviendo en sentido horario.
Cuando T1 = 1.5 ms podremos ver que el eje forma un
ángulo de 90º con respecto al punto de inicio (0º). En la
figura 4.3 se puede observar la señal correspondiente a
esta posición (90º), donde T2 se mantiene en 20
milisegundos.
Figura 4.3
La señal correspondiente a la posición máxima (180º) en
un servomotor estándar, tendría entonces valores para T1
= 2.6 ms y T2 = 20 ms.
Figura 4.4
Se puede crear un programa en mikroBasic que cumpla
con estas características, utilizando ciclos cambiando el
valor correspondiente a T1 a través de una variable
declarada, podemos modificar el ángulo de giro de un
servomotor.
Ejemplo 1:
‘ Configuración de conexión del módulo Glcd
Dim GLCD_DataPort As Byte At PORTD
Dim GLCD_CS1 As sbit At RB0_bit
Figura 4.5
program Servo1
‘ Area de declaración.
symbol Servo = PORTB.0 ' Alias del Pin RB0
main: ' Programa Principal
TRISB = %11111110 ‘Configuración del Puerto "B"
Centro:
Servo = 1 ' Activamos el pulso en la salida RB0.
Delay_Us(1500) ' Hacemos una pausa de 1500
micmicrosegundos.
Servo = 0' Desactivamos el pulso en la salida RO0.
Delay_ms(20)' Hacemos una pausa de 20 milisegundos
GoTo Centro'Repetimos el proceso indefinidamente.
End.
Al compilar, grabar y ejecutar el programa anterior en el
microcontrolador, podremos ver en un osciloscopio el tren
de pulsos presente en el pin RB0 como se muestra en la
figura 4.6.
Figura 4.6
Volt/Div: 2V Time/Div: 5ms Período: 21,55 ms
T1: 1,55 ms (Ancho de pulso positivo). T2: 20 ms
Vpp: 5,44 Voltios. Ciclo de trabajo: 8,16%
Tiempo de subida: 160,0 us Tiempo de bajada: 160,0 us
Al aplicar el tren de pulsos al servomotor, su eje rotará
hasta una posición en el punto medio de su recorrido total.
Si analizamos el programa, podremos observar que la
instrucción “Delay_Us” realiza una parada durante un
tiempo definido, cuyo valor es de 1500, es decir, se está
generando una pausa de 1500 microsegundos, o 1,5
milisegundos.
Seguidamente hacemos una pausa de 20 milisegundos
antes de enviar nuevamente el pulso al Pin RB0.
Entonces, si deseáramos modificar el ángulo de giro,
podemos cambiar el valor del tiempo en T1, siempre y
cuando el valor esté dentro del rango de tiempo permitido
(0,65 ms≤ T1 ≤2.6 ms), es decir, 650 ≤ Delay_Us ≤ 2600.
En muchos modelos de servomotores, este rango puede de
valores puede ser demasiado grande. Si este es el caso,
sucederá que cuando nos salimos de los límites soportados
por el servomotor, éste no adquiere ninguna posición
definida y posiblemente el eje principal del mismo quede
libre.
Por esto es importante que siempre verifiquemos las
especificaciones del fabricante. También podemos hacer
un programa en el cual podamos mover el motor en al
menos tres posiciones que consideramos principales:
Figura 4.7
Ejemplo 2:
Veamos el siguiente programa, en el cual el servomotor
mueve su eje a cada posición de la figura 4.7. Cada
posición se mantiene durante dos segundos.
program Servo2
‘Area de declaración.
Symbol Servo = PORTB.0' Alias del Pin RB0
Dim X As Byte' Variable para For
main: ' Programa Principal
TRISB = %11111110' Configuración del Puerto "B"
Centro:
For X = 1 To 100' For para mantener la posición
durante un tiempo determinado antes de mover el
Servo
Servo = 1' Activamos el pulso en la salida RB0.
Delay_Us(1500) ' Hacemos una pausa de 1500
microsegundos.
Servo = 0 ' Desactivamos el pulso en la salida
RO0.
Delay_ms(20) ' Hacemos una pausa de 20
milisegundos.
Next X
For X = 1 To 100' For para mantener la posición
durante un tiempo determinado antes de mover el
Servo.
Servo=1
Delay_Us(1000)
Servo=0
Delay_ms(20)
Next X
For X = 1 To 100' For para mantener la posición
durante un tiempo determinado antes de mover el
Servo.
Servo = 1'Activamos
Delay_Us(2000)
Servo = 0'
Delay_ms(20)' Hacemos una pausa de 20 milisegundos.
Next X
GoTo Centro' Repetimos el proceso indefinidamente.
End.