20775689 control de motores servo desde la pc usando matlab

4
CONTROL DE MOTORES SERVO DESDE LA PC USANDO MATLAB 7.4 Y UN PIC16F628A. APLICACIÓN A UN BRAZO ROBOT Jefferson Camacho*, Jhonder Calva*, Christian Macas*, Diego Barragán** http://www. matpic.com *Bachilleres del Colegio La Dolorosa **Estudiante de pregrado de electrónica Resumen: el presente artículo contiene información acerca de motores servo HS-311, PIC 16F628A, Max 232 y configuración del puerto serial desde Matlab para controlar la posición de motores servo. Aplicación al control de un brazo robot. INTRODUCCIÓN Teoría 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 posición dentro de su intervalo de operación. Para ello, el servomotor espera un tren de pulsos que se corresponde con el movimiento a realizar. Están generalmente formados por un amplificador, un motor, un sistema reductor formado por ruedas dentadas y un circuito de realimentación, todo en una misma caja de pequeñas dimensiones. El resultado es un servo de posición con un margen de operación de 180° aproximadamente. Funcionamiento del servo. Control PWM La modulación por anchura de pulso, PWM (Pulse Width Modulation), es una de los sistemas más empleados para el control de servos. Este sistema consiste en generar una onda cuadrada en la que se varía el tiempo que el pulso está a nivel alto, manteniendo el mismo período (normalmente), con el objetivo de modificar la posición del servo según se desee. El sistema de control de un servo se limita a indicar en que posición se debe situar. Esto se lleva a cabo mediante una serie de pulsos tal que la duración del pulso indica el ángulo de giro del motor. Cada servo tiene sus márgenes de operación, que se corresponden con el ancho del pulso máximo y mínimo que el servo entiende. Los valores más generales se corresponden con pulsos de entre 1 ms y 2 ms de anchura, que dejarían al motor en ambos extremos (0º y 180º). El valor 1.5 ms indicaría la posición 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, pudiéndose conseguir ángulos mayores de 180°. Si se sobrepasan los límites 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 potenciómetro y los límites mecánicos constructivos. Pulsos de control del motor servo y frecuencia de envió de datos Cableado del motor servo HS-311 PIC 16F628A Descripción de pines del PIC 16F628A

Upload: ricardo-trujillo

Post on 05-Aug-2015

85 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 20775689 Control de Motores Servo Desde La Pc Usando Matlab

CONTROL DE MOTORES SERVO DESDE LA PC USANDO MATLAB 7.4 Y UN PIC16F628A. APLICACIÓN A UN BRAZO ROBOT

Jefferson Camacho*, Jhonder Calva*, Christian Macas*, Diego Barragán**

http://www. matpic.com *Bachilleres del Colegio La Dolorosa **Estudiante de pregrado de electrónica

Resumen: el presente artículo contiene información acerca de motores servo HS-311, PIC 16F628A, Max 232 y configuración del puerto serial desde Matlab para controlar la posición de motores servo. Aplicación al control de un brazo robot.

INTRODUCCIÓN

Teoría 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 posición dentro de su intervalo de operación. Para ello, el servomotor espera un tren de pulsos que se corresponde con el movimiento a realizar. Están generalmente formados por un amplificador, un motor, un sistema reductor formado por ruedas dentadas y un circuito de realimentación, todo en una misma caja de pequeñas dimensiones. El resultado es un servo de posición con un margen de operación de 180° aproximadamente.

Funcionamiento del servo. Control PWM

La modulación por anchura de pulso, PWM (Pulse Width Modulation), es una de los sistemas más empleados para el control de servos. Este sistema consiste en generar una onda cuadrada en la que se varía el tiempo que el pulso está a nivel alto, manteniendo el mismo período (normalmente), con el objetivo de modificar la posición del servo según se desee.

El sistema de control de un servo se limita a indicar en que posición se debe situar. Esto se lleva a cabo mediante una serie de pulsos tal que la duración del pulso indica el ángulo de giro del motor. Cada servo tiene sus márgenes de operación, que se corresponden con el ancho del pulso máximo y mínimo que el servo entiende. Los valores más generales se corresponden con pulsos de entre 1 ms y 2 ms de anchura, que dejarían al motor en ambos extremos (0º y 180º). El valor 1.5 ms indicaría la posición 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, pudiéndose conseguir ángulos mayores de 180°. Si se sobrepasan los límites 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 potenciómetro y los límites mecánicos constructivos.

Pulsos de control del motor servo y frecuencia de envió de datos

Cableado del motor servo HS-311

PIC 16F628A

Descripción de pines del PIC 16F628A

Page 2: 20775689 Control de Motores Servo Desde La Pc Usando Matlab

El PIC 16F628A incorpora tres características importantes que son:

• Procesador tipo RISC (Procesador con un Conjunto Reducido de Instrucciones). • Procesador segmentado. • Arquitectura HARVARD.

Con estos recursos el PIC es capaz de ejecutar instrucciones solamente en un ciclo de instrucción. Con la estructura segmentada se pueden realizar simultáneamente las dos fases en que se descompone cada instrucción, ejecución de la instrucción y búsqueda de la siguiente.

La separación de los dos tipos de memoria son los pilares de la arquitectura Harvard, esto permite acceder en forma simultánea e independiente a la memoria de datos y a la de instrucciones. El tener memorias separadas permite que cada una tenga el ancho y tamaño más adecuado. Así en el PIC 16F628A el ancho de los datos es de un byte, mientras que la de las instrucciones es de 14 bits.

MAX 232

Esquema de conexión del integrado MAX 232

El mAX 232 es un dispositivo que permite la traducción de niveles de onda, del estándar 232 a los niveles de voltaje del microcontrolador.

De configuración sencilla, permite obtener transmisiones sin pérdidas de datos usando cables de más de 2 metros de longitud y con velocidades superiores a los 9600 baudios.

Sin embargo, este dispositivo puede ser reemplazado por el siguiente circuito.

Diseño alternativo al MAX 232

DESARROLLO DEL PROGRAMA

Microcontrolador

El programa del micro 16F628A se muestra a continuación:

include "modedefs.bas"motor var byte'Declaración de variablespos var bytecont var byte'Seteo de puertostrisb =%00000001portb =%00000000'Programa principalinicio: serin portb.0,T2400,motor,pos for cont= 1 to 20 step 1 pulsout motor,pos pause 25 '10 nextgoto inicio

Cuando deseamos establecer una comunicación serial es necesario incluir la librería "modedefs.bas". Para el control de los motores servos usando la función pulsout, es indispensable establecer el valor de los pines de salida como 0, ya que esta función lo que hace es invertir el valor que se encuentra el pin.

La función serin detiene el programa hasta recibir los datos vía comunicación serial. En nuestro programa espera hasta que llegue desde MATLAB el número del motor y la posición. Con estos datos la función 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 (función pause).

Matlab

Page 3: 20775689 Control de Motores Servo Desde La Pc Usando Matlab

Desde Matlab es necesario establecer en el puerto serial los mismos valores que se establecieron en 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 establecidos los valores con los que va a trabajar el puerto serial, es momento de enviar los datos al microcontrolador.

%*-*-*-Posición 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 Posición inicial for s=1:1:4 %*-*-*-Posición 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 Posición inicial fprintf(SerPIC,'%c',[char(1) char(180)]);pause(0.8) %*-*-*-Posición 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 Posición final fprintf(SerPIC,'%c',[char(1) char(180)]);pause(0.8) end %*-*-*-Posición 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 Posición final

Este script se vale de la función fprintf para enviar los datos y de la función char para convertir tanto el número del motor como la posición del mismo a código ASCII, que es lo que entiende el micro. (Por esta razón esta en la función fprintf '%c', lo que significa que se envía un caracter.)

La lógica como envía los datos fprintf es:

fprintf(SerPIC,'%c',[char(motor) char(posicion)]);pause(0.8)

Aquí un par de fotos del proyecto en proto board:

Diseño de la tarjeta controladora en ARES.

APLICACIÓN

Este diseño se implementó en el control de un brazo robot, que fue presentado como proyecto de grado de bachiller de los autores de este artículo, obteniendo la más alta calificación en la exposición del trabajo.

Page 4: 20775689 Control de Motores Servo Desde La Pc Usando Matlab

Para comodidad de control y programación, se desarrollaron las siguientes interfaces gráficas, cuyo código se encuentra en www.matpic.com:

Interfaces gráficas de control del brazo robot.

Aquí unas fotos del proyecto:

Para mayor información y descarga de recursos de este proyecto, visita www.matpic.com.