You are on page 1of 10

CONTROL DE MOTORES SERVOS USANDO MATLAB Y UN

PIC16F628A


INTRODUCCIN

Teora sobre motor servo
Los servos son un tipo especial de motor de c.c. que se caracterizan por su
capacidad para posicionarse de forma inmediata en cualquier posicin dentro
de su intervalo de operacin. Para ello, el servomotor espera un tren de pulsos
que se corresponde con el movimiento a realizar. Estn generalmente
formados por un amplificador, un motor, un sistema reductor formado por
ruedas dentadas y un circuito de realimentacin, todo en una misma caja de
pequeas dimensiones. El resultado es un servo de posicin con un margen de
operacin de 180 aproximadamente.


Funcionamiento del servo. Control PWM
La modulacin por anchura de pulso, PWM (Pulse Width Modulation), es una
de los sistemas ms empleados para el control de servos. Este sistema
consiste en generar una onda cuadrada en la que se vara el tiempo que el
pulso est a nivel alto, manteniendo el mismo perodo (normalmente), con el
objetivo de modificar la posicin del servo segn se desee.
El sistema de control de un servo se limita a indicar en que posicin se debe
situar. Esto se lleva a cabo mediante una serie de pulsos tal que la duracin del
pulso indica el ngulo de giro del motor. Cada servo tiene sus mrgenes de
operacin, que se corresponden con el ancho del pulso mximo y mnimo que
el servo entiende. Los valores ms generales se corresponden con pulsos de
entre 1 ms y 2 ms de anchura, que dejaran al motor en ambos extremos (0 y
180). El valor 1.5 ms indicara la posicin central o neutra (90), mientras que
otros valores del pulso lo dejan en posiciones intermedias. Estos valores suelen
ser los recomendados, sin embargo, es posible emplear pulsos menores de 1
ms o mayores de 2 ms, pudindose conseguir ngulos mayores de 180. Si se
sobrepasan los lmites de movimiento del servo, ste comenzar a emitir un
zumbido, indicando que se debe cambiar la longitud del pulso. El factor
limitante es el tope del potencimetro y los lmites mecnicos constructivos.


PROGRAMAS

Microcontrolador
El programa del micro 16F628A se muestra a continuacin:
include "modedefs.bas"motor var
byte
'Declaracin de variables
pos var byte
cont var byte
'Seteo de puertos
trisb =%00000001
portb =%00000000
'Programa principal
inicio:
serin portb.0,T2400,motor,pos
for cont= 1 to 20 step 1
pulsout motor,pos
pause 25 '10
next
goto inicio
Como es bien sabido, cuando deseamos establecer una comunicacin serial es
necesario incluir la librera"modedefs.bas" . Para el control de los motores
servos usando la funcin pulsout, es indispensable establecer el valor de los
pines de salida como 0, ya que esta funcin lo que hace es invertir el valor que
se encuentra el pin.
La funcin serin detiene el programa hasta recibir los datos va comunicacin
serial. En nuestro programa espera hasta que llegue desde MATLAB el nmero
del motor y la posicin. Con estos datos la funcin pulsout genera el ancho de
pulso necesario en el pin del motor que elegimos, enviando estos pulsos a la
frecuencia establecida por el ciclo for y el retardo (funcin pause) .
Matlab
Desde Matlab es necesario establecer en el puerto serial los mismos valores
que se establecieron el el micro.
%Programa de ensayo de movimiento de
%los motores servos HS-311
%ABRIR el puerto COM1
clc; disp('BEGIN')
SerPIC = serial('COM1');
set(SerPIC,'BaudRate',2400);
set(SerPIC,'DataBits',8);
set(SerPIC,'Parity','none');
set(SerPIC,'StopBits',1);
set(SerPIC,'FlowControl','none');
fopen(SerPIC);
%*-*-*-*-*-*-
Una vez seteados los valores con los que va a trabajar el puerto serial, es
momento de enviar los datos al microcontrolador.
%*-*-*-Posicin inicial
fprintf(SerPIC,'%c',[char(1) char(180)]);pause(0.8)
fprintf(SerPIC,'%c',[char(2) char(135)]);pause(0.8)
fprintf(SerPIC,'%c',[char(3) char(150)]);pause(0.8)
%*-*-*-FIN Posicin inicial

for s=1:1:4
%*-*-*-Posicin inicial
fprintf(SerPIC,'%c',[char(3) char(190)]);pause(0.8)
fprintf(SerPIC,'%c',[char(1) char(214)]);pause(0.8)
fprintf(SerPIC,'%c',[char(2) char(135)]);pause(0.8)
%*-*-*-FIN Posicin inicial
fprintf(SerPIC,'%c',[char(1) char(180)]);pause(0.8)
%*-*-*-Posicin final
fprintf(SerPIC,'%c',[char(3) char(70)]);pause(0.8)
fprintf(SerPIC,'%c',[char(1) char(208)]);pause(0.8)
fprintf(SerPIC,'%c',[char(2) char(154)]);pause(0.8)
%*-*-*-FIN Posicin final
fprintf(SerPIC,'%c',[char(1) char(180)]);pause(0.8)
end

%*-*-*-Posicin final
fprintf(SerPIC,'%c',[char(1) char(180)]);pause(0.8)
fprintf(SerPIC,'%c',[char(2) char(135)]);pause(0.8)
fprintf(SerPIC,'%c',[char(3) char(150)]);pause(0.8)
%*-*-*-FIN Posicin final
Este script se vale de la funcin fprintf para enviar los datos y de la
funcin char para convertir tanto el nmero del motor como la posicin del
mismo a cdigo ASCII, que es lo que entiende el micro. (Por esta razn esta en
la funcin fprintf '%c', lo que significa que se enva un caracter.)
La lgica como envia los datos fprintf es:
fprintf(SerPIC,'%c',[char(motor) char(posicion)]);pause(0.8)
Aqu debajo les dejo dos fotos del proyecto:



Clic en el botn de descarga para bajar el programa:




























BRAZO ROBOTICO CON MATLAB
INSTITUTO TECNOLGICO DE HERMOSILLO
(ITH)
POR: IVAN ORLANDO SALAZAR MONTAO
ESTUDIANTE DE: ING. MECATRNICA
www.ith.mx




PIDE LOS PROGRAMAS EN LA
PAGINAhttp://www.notiproyect.blogspot.com/ DEJANDO
COMENTARIO EN LA ENTRADA QUE CORRESPONDE A ESTO.

Este brazo roborico lo contru para la materia de robotica, es un braso de tres
grados de libertad. los calculos en este robot estan realizados con formulas
sacadas del libro de barrientos, usando matrizes de rotacin y el criterio
de Denavit-hartenberg.


el programa es realizado en matlab para la otencion de su cinematica, tambien
mediante matlab se manda informacion a un pic 16f84A el cual interpretara los
datos enviados por matlab mediante un puerto paralelo y movera nuestros
servomotores.

los motores usados en este proyecto fueron servomotores los hi-tec HS 311 los
cuales
tienen el siguiente funcionamiento o periodo de operacion.


.6mS se posiciona en 0 grados

2.4 se posiciona en 180 grados


el periodo entonces es de 1.8

si lo queremos controlar con 60 posiciones

es 1.8/60 = 0.03

ese 0.03 se le suma desde el .6 para que nustro servo valla avanzando

de tres grados en tres grados

ya que

180/60 = 3

si quisieramos que nuestro servo avanzara de grado en grado

seria 1.8/180 =0.01

por lo que para que nuestro servo hi tech hs-311

se posisione en 0 grados mandariamos un estado en alto de .6 y un

estado en bajo de 19.4

para que este en 1 grado mandariamos el estado en alto de .61

y un estado en bajo de 19.39

y asi sucesivamente

y cno el calculo para que avanze de 3 grados en 3

seria mandar el estado en alto .63 y el estado en bajo 19.37 para que

avanze 3 grados

esta seria la operacion de nuestro servomotor cabe recalcar que cada servomotor
tiene periodos diferentes los futaba, hi-tech, etc cada uno se controla de diferentes
maneras.

En el link de acontinuacion pondre en excel el pulso en alto y en bajo que calcule
para que se le mande la seal al servomotor y se posisione en los grados k ahi
describe.

http://dl.dropbox.com/u/424705/tiempos%20en%20alto%20y%20bajo%20y%20gra
dos%20de%20los%20servos.xls

En el programa de matlab se le podra introducir cuanto queremos que gire grado
por grado cada eslabon, y moverlo de forma independiente a cada eslabon o
mover todoautomaticamente con el boton de movimiento completo.

ademas se le da la libertad para que definas la medida de cada eslabon y asi
obtener la posicion a la que estara el efector final del robot y la orientacion.

La interfaz del puerto paralelo es la que e realizado en entradas anteriores como
en la de domotica y la de control de motores a pasos en esta misma
paginahttp://notipory.blogspot.com/



interfaz puerto paralelo

el circuito para controlar nuestro brazo robotico es el siguiente:


El valor de resistencia de la patita 4 (MCLR) es de 1K ohm ... las resistencias del
rbc ... rb5 no son necesarias si emplean el circuito del puerto paralelo descrito en
entradas anteriores...

el valor de cristal es de 4MHz con capacitores de 22nF


En la parte marron son las salidas a los servomotres. los servomotres tienen tres
cables el de entrada de voltaje(color rojo) ...el de tierra(color negro) y el de la
entrada dela seal (color amarillo) y esas tres salidas corresponden a un diferente
servomotor cada salida va a la conexion amarilla de cada servomotor.

En la parte roja vemos las entradas del puerto, las cuales se pondran en forma
consecutiva del menor al mayor.

ejemplo rb0 del pic con el d0 del puerto paralelo
rb1 del pic con el d1 del puerto paralelo

y asi consecutivamente.


Con esto concluye la realizacion del brazo robotico alguna duda sugerencia
comentario o mejora favor de hacerlo por este medio.

GRACIAS