View
70
Download
0
Category
Preview:
Citation preview
5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
1/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 sucapacidad para posicionarse de forma inmediata en cualquier posicin dentrode su intervalo de operacin. Para ello, el servomotor espera un tren de pulsosque se corresponde con el movimiento a realizar. Estn generalmenteformados por un amplificador, un motor, un sistema reductor formado porruedas dentadas y un circuito de realimentacin, todo en una misma caja depequeas 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 unade los sistemas ms empleados para el control de servos. Este sistemaconsiste en generar una onda cuadrada en la que se vara el tiempo que elpulso est a nivel alto, manteniendo el mismo perodo (normalmente), con elobjetivo de modificar la posicin del servo segn se desee.
El sistema de control de un servo se limita a indicar en que posicin se debesituar. 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 deoperacin, que se corresponden con el ancho del pulso mximo y mnimo queel servo entiende. Los valores ms generales se corresponden con pulsos deentre 1 ms y 2 ms de anchura, que dejaran al motor en ambos extremos (0 y180). El valor 1.5 ms indicara la posicin central o neutra (90), mientras queotros valores del pulso lo dejan en posiciones intermedias. Estos valores suelenser los recomendados, sin embargo, es posible emplear pulsos menores de 1ms o mayores de 2 ms, pudindose conseguir ngulos mayores de 180. Si sesobrepasan los lmites de movimiento del servo, ste comenzar a emitir unzumbido, indicando que se debe cambiar la longitud del pulso. El factorlimitante es el tope del potencimetro y los lmites mecnicos constructivos.
5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
2/10
PROGRAMAS
Microcontrolador
El programa del micro 16F628A se muestra a continuacin:
include "modedefs.bas"motor varbyte
'Declaracin de variablespos var bytecont var byte
'Seteo de puertostrisb =%00000001
portb =%00000000'Programa principal
inicio:serin portb.0,T2400,motor,pos
for cont= 1 to 20 step 1pulsout motor,pos
pause 25 '10next
goto inicio
Como es bien sabido, cuando deseamos establecer una comunicacin serial esnecesario incluir la librera"modedefs.bas". Para el control de los motores
5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
3/10
servos usando la funcin pulsout, es indispensable establecer el valor de lospines de salida como 0, ya que esta funcin lo que hace es invertir el valor quese encuentra el pin.
La funcin serindetiene el programa hasta recibir los datos va comunicacin
serial. En nuestro programa espera hasta que llegue desde MATLAB el nmerodel motor y la posicin. Con estos datos la funcin pulsoutgenera el ancho depulso necesario en el pin del motor que elegimos, enviando estos pulsos a lafrecuencia establecida por el ciclo fory el retardo (funcin pause) .
Matlab
Desde Matlab es necesario establecer en el puerto serial los mismos valoresque 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
fors=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
5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
4/10
Este script se vale de la funcin fprintfpara enviar los datos y de lafuncin charpara convertir tanto el nmero del motor como la posicin delmismo a cdigo ASCII, que es lo que entiende el micro. (Por esta razn esta enla 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:
5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
5/10
Clic en el botn de descarga para bajar el programa:
5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
6/10
BRAZO ROBOTICO CON MATLAB
INSTITUTO TECNOLGICO DE HERMOSILLO(ITH)POR: IVAN ORLANDO SALAZAR MONTAO
ESTUDIANTE DE: ING. MECATRNICAwww.ith.mx
http://1.bp.blogspot.com/_UaI-Xpusd3s/TNnCjG81qvI/AAAAAAAAADA/jmPY_02Qzb8/s1600/parallel.jpghttp://3.bp.blogspot.com/_UaI-Xpusd3s/TNm_shm9WOI/AAAAAAAAACo/A8cZM2jtRFc/s1600/programa.jpghttp://1.bp.blogspot.com/_UaI-Xpusd3s/TNnCjG81qvI/AAAAAAAAADA/jmPY_02Qzb8/s1600/parallel.jpghttp://3.bp.blogspot.com/_UaI-Xpusd3s/TNm_shm9WOI/AAAAAAAAACo/A8cZM2jtRFc/s1600/programa.jpghttp://1.bp.blogspot.com/_UaI-Xpusd3s/TNnCjG81qvI/AAAAAAAAADA/jmPY_02Qzb8/s1600/parallel.jpghttp://3.bp.blogspot.com/_UaI-Xpusd3s/TNm_shm9WOI/AAAAAAAAACo/A8cZM2jtRFc/s1600/programa.jpghttp://1.bp.blogspot.com/_UaI-Xpusd3s/TNnCjG81qvI/AAAAAAAAADA/jmPY_02Qzb8/s1600/parallel.jpghttp://3.bp.blogspot.com/_UaI-Xpusd3s/TNm_shm9WOI/AAAAAAAAACo/A8cZM2jtRFc/s1600/programa.jpghttp://1.bp.blogspot.com/_UaI-Xpusd3s/TNnCjG81qvI/AAAAAAAAADA/jmPY_02Qzb8/s1600/parallel.jpghttp://3.bp.blogspot.com/_UaI-Xpusd3s/TNm_shm9WOI/AAAAAAAAACo/A8cZM2jtRFc/s1600/programa.jpg5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
7/10
PIDE LOS PROGRAMAS EN LA
PAGINAhttp: / /www.not iproyect.b logspot.com/DEJANDO
COMENTARIO EN LA ENTRADA QUE CORRESPONDE A ESTO.
Este brazo roborico lo contru para la materia de robotica, es un braso de tresgrados 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
http://www.notiproyect.blogspot.com/http://www.notiproyect.blogspot.com/http://2.bp.blogspot.com/_UaI-Xpusd3s/TNnB9BFCyZI/AAAAAAAAAC4/DHCHtVu66kk/s1600/parallel.jpghttp://www.notiproyect.blogspot.com/5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
8/10
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
5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
9/10
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 laentrada dela seal (color amarillo) y esas tres salidas corresponden a un diferente
http://notipory.blogspot.com/http://3.bp.blogspot.com/_UaI-Xpusd3s/TNnDk6d8z6I/AAAAAAAAADI/65uVpYqm9bg/s1600/parallel.jpghttp://2.bp.blogspot.com/_UaI-Xpusd3s/TNnA_8CrHxI/AAAAAAAAACw/18lfHL8QA4M/s1600/parallel.jpghttp://3.bp.blogspot.com/_UaI-Xpusd3s/TNnDk6d8z6I/AAAAAAAAADI/65uVpYqm9bg/s1600/parallel.jpghttp://2.bp.blogspot.com/_UaI-Xpusd3s/TNnA_8CrHxI/AAAAAAAAACw/18lfHL8QA4M/s1600/parallel.jpghttp://notipory.blogspot.com/5/20/2018 Control de Motores Servos Usando Matlab y Un Pic16f628a
10/10
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
Recommended