Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROPROCESADORES II
IET-800-002
El siguiente tutorial pretende brindar los conocimientos básicos para manejar un servo
motor. Al final se realizara una práctica que será completada y entregada sobre proteus, el
desarrollo de su software en µ-keil lenguaje C.
INTRODUCCION
El servo motor ha sido por mucho tiempo utilizado en muchas aplicaciones de control, son
compactos en tamaño y torque, relativamente más eficiente en el consumo de energía, por
estas y otras razones adicionales, pueden ser utilizados en aplicaciones industriales, robots,
radiocontroles y otros.
La circuitería interna del servo motor, dispone de los siguientes elementos, motor,
potenciómetro, circuito de control y engranajes de posicionamiento. Este dispositivo es
controlado mediante una señal con determinado ancho de pulso (PWM) el cual alimenta al
circuito de control. Las señales que conectan al servo motor (GND, +5V, señal PWM). En la
figura 1, 2 y 3 se pueden apreciar los componentes que les acompañan y el dispositivo
ensamblado para utilizar.
Figura 1 Figura 2
Figura 3
MICROPROCESADORES II
IET-800-002
El servo es controlado mediante una variación de ancho de pulso o PWM sobre el cable
destinado para control. El servo se puede girar 90º en cualquier dirección hasta los 180º. La
posición neutra 0o se define como la posición en la que el servo tiene la misma cantidad de
rotación potencial en sentido horario o anti horario. El servo espera recibir un pulso de señal
cada 20milisegundos (ms) y el ancho del pulso determina que tanto el motor pueda girar.
Por ejemplo un duty cycle = 1.5ms hará que el motor gire hacia la posición de 90º, por
debajo de 1.5ms hará que el motor gire hacia 0o y cualquier modulación del pulso por
encima de 1.5ms hará que gire hacia 180º según muestra la figura 4.
Figura 4
Cuando un servo ejecuta una acción de movimiento mantendrá la posición indicada siempre
y cuando se mantenga la señal de estado. Todo el tiempo debe haber una señal de pulsos
presente en ese cable.
Los pulsos que ocurren frecuentemente en el tiempo de OFF pueden interferir con el
sincronismo interno del servo y podría escucharse un sonido de zumbido o alguna vibración
en el eje. Si el espacio del pulso es mayor de 50ms (depende del fabricante), entonces el
servo podría estar en modo SLEEP entre los pulsos. Entraría a funcionar en pasos
pequeños y el rendimiento no sería el óptimo. Para el desarrollo de la aplicación deberán ser
utilizados timers e interrupciones.
MICROPROCESADORES II
IET-800-002
PRE-LAB EJERCICIOS
IN-LAB EJERCICIOS
(1-1) Se deberá diseñar un circuito con el 8051 de Intel que permita interconectar un ADC
al puerto (P1) del micro,
micro sobre el pin P0.0 conectar un servo motor,
motor conectar al P3.0
una señal de sincronismo para la automatización de las conversiones,
conversiones Al ADC
deberá conectarse un potenciómetro a la entrada de señal VI+ que al variar el voltaje
de entrada variara la señal de control (PWM) sobre P0.0.
P0.0. El programa desarrollado
sobre keil C deberá tener la capacidad de variar el PWM en función del voltaje VI+
sobre el resistor variable de entrada, utilice como referencia la figura 1 igual tienen
disponible el código desarrollado en keil.
keil. El rango es como se presenta a
continuación:
010=>ADC <=5910 Ton= 1 ms
6110=>ADC <=15010 Ton= 1.5 ms
15310=>ADC <=25510 Ton= 2 ms
Responda las siguientes preguntas
Qué ocurre si la en declaración de esta variable unsigned char ADC quitamos la palabra
unsigned explique y justifique su respuesta?
Elimine el potenciómetro Vi+ y conecte una señal analógica AC con los valores
correspondientes explique lo acontecido?
Varíe los valores Ton de cada señal PWM de control P0.0 y explique el
comportamiento en el servo?
Ton= 1 ms------ 1.2ms
ms Ton= 1.5 ms------ 1.7ms Ton= 2 ms------ 2.2ms
MICROPROCESADORES II
IET-800-002
Figura 1
/*----------------------------------------------------------------
| Autor: Matricula: |
| Fecha: Versión: 1.0 |
|-----------------------------------------------------------------|
| Descripción del Programa: |
| |
| ----------------------------------------------------------------*/
MICROPROCESADORES II
IET-800-002
// Programa Principal
void main(){
setup_register();
TR0=1;
while(1){
CLK_ADC=!CLK_ADC;
delay(200);
//REGISTROS
//TF1:TR1:TF0:TR0:IE1:IT1:IE0:IT0
TCON=0x00;
//REGISTRO
//EA:-:ET2:ES:ET1:EX1:ET0:EX0
IE=0x83;
}
MICROPROCESADORES II
IET-800-002
PWM_out=1;
PWM_flag=0;
TR0=0;
TH0=0xFC; //SENAL DE 1ms.
TL0=0x17; //SENAL DE 1ms.
TR0=1;
}
else{
PWM_out=0;
PWM_flag=1;
TR0=0;
TH0=0xB5; //SENAL DE 19ms.
TL0=0xC7; //SENAL DE 19ms.
TR0=1;
}
}
PWM_out=1;
PWM_flag=0;
TR0=0;
TH0=0xFA; //SENAL DE 1.5ms.
TL0=0x23; //SENAL DE 1.5ms.
TR0=1;
}
else{
PWM_out=0;
PWM_flag=1;
TR0=0;
TH0=0xB7; //SENAL DE 18.5ms.
TL0=0xBB; //SENAL DE 18.5ms.
TR0=1;
}
}
MICROPROCESADORES II
IET-800-002
if(PWM_flag){
PWM_out=1;
PWM_flag=0;
TR0=0;
TH0=0xF8; //SENAL DE 2ms.
TL0=0x2F; //SENAL DE 2ms.
TR0=1;
}
else{
PWM_out=0;
PWM_flag=1;
TR0=0;
TH0=0xB9; //SENAL DE 18ms.
TL0=0xAF; //SENAL DE 18ms.
TR0=1;
}
}