Control de Motores Servos Usando Matlab y Un Pic16f628a

Embed Size (px)

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.jpg
  • 5/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