APLICATIVOS ELECTRONICOS II -2009 PROYECTO FINAL DEL CURSO TITULO CONTROL DE MOTOR PASO A PASO USANDO MATLAB

OBJETIVO El presente LABORATORIO contiene una breve introducción sobre los motores paso a paso así como el código de un programa desarrollado en Matlab 7.1 para controlar su velocidad y dirección de giro. El programa es una función y una GUI, donde se puede controlar los pasos del motor, velocidad y dirección de giro. 1.- INTRODUCCIÓN Los motores paso a paso son ideales para la construcción de mecanismos en donde se requieren movimientos muy precisos. La característica de estos motores es poder moverlos un paso a la vez por cada pulso que se le aplique. 2.- DESARROLLO DEL PROGRAMA 2.1 Matlab posee comandos sencillos para el control del puerto paralelo. Basta con crear la entrada digital del puerto y asignar que pines son de entrada y cuales de salida. ent= digitalio('parallel','LPT1'); dato= addline(ent,0:4,'out'); putvalue(dato,2); El código anterior crea la entrada digital del puerto paralelo, asigna los pines 2 a 5 como salidas y escribe el valor decimal 2 (Matlab realiza automáticamente la conversión a binario) en el puerto. Las condiciones iniciales del programa colocan a cero los pines de puerto paralelo: diego= digitalio('parallel','LPT1'); dato= addline(diego,0:3,'out'); putvalue(dato,0); 2.2 Desarrollo de la interfaz gráfica con el usuario Como se puede ver en la figura 1, lo único que se debe programar en la interfaz gráfica es la captura del retardo, la dirección de giro y el encendido-apagado del motor.

Fig. 1. Entorno del programa motor.

La mayor parte del código se programa en el toggle button ON-OFF, cuyo campo Tag es state. Sin embargo, es necesario un código adicional para el texto del botón-interruptor de la dirección:
f=get(handles.direction,'Value'); if f==1 set(handles.direction,'String','DIRECTION ''L'''); else set(handles.direction,'String','DIRECTION ''R'''); end

1

if d==1 set(handles.direction. dato=addline(diego. if e==0 mov=[3 6 12 9].'Value').'OFF').state.'String'. while g e=get(handles. end else set(handles. pause(delay). if get(hObject.Esquema Para la conexión del motor se puede usar el siguiente esquema: 2 .'String'. end 3.state.'ON').2. set(handles.mov(3)). pause(delay).'String'))*1e-3.mov(2)).'OFF'). end delay=str2double(get(handles.'ERROR'). pause(delay).mov(1)). diego=digitalio('parallel'.'String'. if get(hObject.0:3.'LPT1').mov(4))..3 La secuencia que se envía al motor es: La programación del botón de encendido es: d=get(hObject.state.'Value')==0 break end putvalue(dato.'out'). set(handles.speed.state.'Value')==0 break end putvalue(dato. break.'Value')==0 break end putvalue(dato. delay=500.'String'.500).'Value'. end if get(hObject.'Value'). g=1. if get(hObject. else mov=[9 12 6 3]. if delay<0 ||isnan(delay) errordlg('Time out of range'.speed.0). pause(delay). set(handles.'Value')==0 break end putvalue(dato.

Fig. 4.direction=1. Esquema para conexión del motor.3. elseif nargin==2 direction=1. end if isnan(step)||step<0 error('Step value must be positive integer').delay. %delay is in seconds. elseif direction~=1 && direction~=2 error('Direction options: 1 or 2') elseif isnan(delay)||delay<0 error('Delay value must be positive integer') end step=ceil(step).com warning off if nargin==1 delay=1.direction) %Controlling a stepper motor %step must be integer. %direction: 1 or 2. 3 .rutina de control del motor la siguiente función controla el número de pasos del motor. 2. Circuito final. %Author: Diego Orlando Barragán Guerrero %diegokillemall@yahoo.. La siguiente figura muestra el modelo ensayado y funcionando: Fig. velocidad y dirección de giro: function motor(step.

inout=digitalio('parallel'. if direction ==1 sent=[3 6 12 9]. else sent=[9 12 6 3]..'out'). for n=1:step putvalue(dato.Implementar el sistema y realizar pruebas 4 . m=m+1. end m=1. dato=addline(inout.0:3. if m>4 m=1. pause(delay). end end 5.'LPT1').sent(m)).

Sign up to vote on this title
UsefulNot useful