Vous êtes sur la page 1sur 17

UNIVERSIDAD NACIONAL DEL CALLAO

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRÓNICA

CURSO: CONTROL DIGITAL

LABORATORIO N° 3 (parte A)

CONTROL DE VELOCIDAD DE UN MOTOR DC EN LAZO


ABIERTO

Profesor: Ing. Jacob Astocondor Villar


Alumno: Alipio Ponce Gutierrez Villar

CALLAO, 7 de febrero del 2011


Control digital

CONTROL DE VELOCIDAD DE UN MOTOR DC EN LAZO ABIERTO

OBJETIVOS:

a) Obtener el modelo matemático en tiempo continuo y discreto de un motor DC


controlado por armadura y obtener su respuesta en lazo abierto, usando MATLAB.
b) Dado un esquema en hardware de un control de velocidad en lazo abierto, de un
motor DC, implementarlo y haciendo uso del computador, programe en C/C++ el
control de velocidad solicitado.

PLANTEAMIENTO DEL PROBLEMA:

Se tiene el esquema de un motor DC controlado por armadura, según se puede apreciar en


la figura 1, así como un esquema de control de velocidad de un motor DC en lazo abierto,
que se muestra en la figura 2. Previamente se desea modelar y simular la respuesta de dicho
motor que se muestra en la figura 1, que servirá para implementar por software (Matlab), el
algoritmo de Control Optimo Cuadrático en el Laboratorio 4. Posteriormente, deberá
implementar el esquema indicado (figura 2) y efectuar el control de velocidad en lazo
abierto, mediante códigos binarios, de una longitud de 8 bits.

PROCEDIMIENTO DE LABORATORIO:

PARTE A:

MODELAR UN MOTOR DC EN TIEMPO CONTINUO Y DISCRETO , Y


SIMULAR SU RESPUESTA ANTE UNA ENTRADA ESCALON

Se tiene un motor D.C. controlado por armadura, mostrado en la figura 1. Considere


constante la corriente de campo. Seleccione previamente un motor DC con codificador
óptico incorporado, y use los valores de los parámetros de dicho motor, así como la
ganancia del amplificador. Se sugiere que la señal ei no debe superar los 5 V. Sólo como
ejemplo, los parámetros de un determinado motor pueden ser: J = 0.01 Kg-m2/s2, b = 0.1
N-s/m, k = kb = 0.01N-m/A, Ra = 1 ohmio, La = 0.1H. El motor que usted elija lo usará en
el laboratorio 4.

2
FIEE-UNAC
Control digital

PROCEDIMIENTO DE LABORATORIO:

1. Determinar una representación en el espacio de estado para dicho sistema. Considerar


que las siguientes variables de estado están disponibles: x1 = ia , x 2 = θ , x3 = ωm .
a) Considerando como salida a la posición angular.
b) Considerando como salida a la velocidad angular.
c) Mediante Matlab obtenga las respuestas gráficas correspondientes,
considerando una excitación escalón unitario.

SOLUCION: sabemos de las ecuaciones del circuito, son las siguientes:


di (t )
ea (t ) = Ra ia (t ) + La a + K b wm
dt
T = Ki a
dw m
T =J + Bw m
dt

3
FIEE-UNAC
Control digital

 Ra K b   1 
− −   
 X1′   La 0 La   X1  La
 X′  =  0 0 1   X  +  0  e
2  2  a
      
X 3′   K 0 B   X3  0 

 J J   

4
FIEE-UNAC
Control digital

 X1 

y = [ 0 1 0]  X 2  
 X 3 

 X1 

y = [ 0 0 1]  X 2 
 X3 
De lo cual tenemos la representación en el espacio de estado:

a) Considerando como salida a la posición angular.


−10 0 − 0.1 10 
   
A = 0 0 1  B = 0 
 1 0 −10  0
   

Cc = ( 0 1 0) D = ( 0)

b) Considerando como salida a la velocidad angular.


−10 0 − 0.1
 
A = 0 0 1 
 1 0 −10 
 
10 
 
B = 0 
0
 
Cc = ( 0 0 1)
D = ( 0)

5
FIEE-UNAC
Control digital

c) Mediante Matlab obtenga las respuestas gráficas


correspondientes, considerando una excitación escalón
unitario.

Considerando como salida ala posición angular

A=[-10 0 -0.1;0 0 1;1 0 -10];


B=[10;0;0];
Cc=[0 1 0];
Dc=[0];
%Utilizando el comando en matlab:
step(A,B,Cc,Dc)
grid

Step Response
4

3.5

2.5
Amplitude

1.5

0.5

0
0 5 10 15 20 25 30 35 40
Time (sec)

Considerando como salida ala velocidad angular


A=[-10 0 -0.1;0 0 1;1 0 -10];
B=[10;0;0];
Cc=[0 0 1];
Dc=[0];
%Utilizando el comando en matlab:
step(A,B,Cc,Dc)
grid

6
FIEE-UNAC
Control digital
Step Response
0.1

0.09

0.08

0.07

0.06
Amplitude

0.05

0.04

0.03

0.02

0.01

0
0 0.5 1 1.5
Time (sec)

2. Determinar el modelo discreto (método aproximado) a partir del modelo en tiempo


continuo obtenido en la parte (a). Utilice un periodo de muestreo T = 0.01 segundos.
Es decir obtenga el modelo discreto considerando:
a) Como salida a la posición angular.
b) Como salida a la velocidad angular.

7
FIEE-UNAC
Control digital

SOLUCION:
Sabemos que X ( K +1) = (l +TA ) X ( K ) + BTe a ( K )

a) como salida a la posición angular


0.9048 0 − 0.009 
 
G = 0 1 0.0095 
 0.009 0 0.9048 
 
0.0952 
 
H = 0 
0.0005 
 
Cc = ( 0 1 0)
D = ( 0)

b) Como salida a la velocidad angular

0.9048 0 − 0.009 
 
G = 0 1 0.0095 
 0.009 0 0.9048 
 
0.0952 
 
H = 0 
0.0005 
 
Cc = ( 0 0 1)
D = ( 0)

3. Determinar la Controlabilidad y Observabilidad del modelo discreto del motor


D.C.

SOLUCION:

M = [B A*B A^2*B]
N = [Cc' A'*Cc' A'^2*Cc']

8
FIEE-UNAC
Control digital

10 −100 999 


 
M = 0 0 10 
0 10 − 200 
 
0 0 1 
 
N = 1 0 0 
0 1 −10 
 

rango(M) = rango(N) = n = 3 ; y puesto que la determinante de M y N son diferentes de


cero => completamente controlable y completamente observable.

4. Determinar mediante Matlab la respuesta gráfica del sistema discreto ante una
entrada escalón unitario, tanto para:
a) Posición.
G=[0.9048 0 -0.009;0 1 0.0095;0.009 0 0.9048];
H=[0.0952;0;0.0005];
Cc=[0 1 0];
Dc=[0];
%Utilizando el comando en matlab:
dstep(G,H,Cc,Dc)
grid

b) Velocidad.

G=[0.9048 0 -0.009;0 1 0.0095;0.009 0 0.9048];


H=[0.0952;0;0.0005];
Cc=[0 0 1];
Dc=[0];
%Utilizando el comando en matlab:
dstep(G,H,Cc,Dc)
grid

a) Posición

9
FIEE-UNAC
Control digital

Step Response
0.05

0.045

0.04

0.035

0.03
Amplitude

0.025

0.02

0.015

0.01

0.005

0
0 10 20 30 40 50 60 70
Time (sec)

b) Velocidad
Step Response
0.1

0.09

0.08

0.07

0.06
Amplitude

0.05

0.04

0.03

0.02

0.01

0
0 10 20 30 40 50 60 70 80
Time (sec)

5) Determinar la función de transferencia pulso del sistema, considerando:

10
FIEE-UNAC
Control digital

SOLUCION:
θ( Z )
a)
E a ( Z)

θ( Z)
=C(zl −G) −1H +D
Ea( Z)

Transfer function:
-0.8088
-----------------------------------------
z^2 + (0.9048-0.009i) z + (0.9048+0.009i)

w( Z)
b) E
a( Z)

w( Z)
=C(zl −G) −1H+D
Ea( Z)

Transfer function:
z - 0.8088
-----------------------------------------
z^2 + (0.9048-0.009i) z + (0.9048+0.009i)

6) Determinar mediante Matlab las respuestas gráficas del modelo del


sistema obtenido en (5).

SOLUCION:
a) Posición angular
11
FIEE-UNAC
Control digital

P os ición V s Núm ero de m ues tras


0.08

0.07

0.06

0.05
Posición angular

0.04

0.03

0.02

0.01

-0.01
0 10 20 30 40 50 60 70 80 90 100
Núm ero de m uetras

b) Velocidad angular
V eloc idad V s Núm ero de m ues tras
0.1

0.08

0.06
Velocidad angular

0.04

0.02

-0.02
0 10 20 30 40 50 60 70 80 90 100
Núm ero de m uetras

7) ¿Las respuestas obtenidas en (4) y (6) son las mismas?

SOLUCION:
Las respuestas obtenidas en (4) y (6) son iguales

12
FIEE-UNAC
Control digital

8) ¿Las respuestas gráficas en tiempo continuo y tiempo discreto son las


mismas? Si no lo son, entonces haga una reformulación en la tarea de
discretizacion hasta obtener resultados idénticos.

SOLUCION:
De acuerdo a los pasos que siguen en la formulación del laboratorio se llega a obtener
graficas iguales tanto para continuo como para discreto, por lo tanto no es necesario hacer
una reformulación.

SOLUCION DE LA PARTE B :
Programa para controlar un motor 12Vdc con el programa visual C++

#include "stdafx.h"
13
FIEE-UNAC
Control digital

#include <windows.h>
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctype.h>
#define base 0x378 //esta es la direccion del puerto pararelo.

void menu();

#include "c:\puerto\io.h"

// --------------------------------------------------------------------programa para habilitar Puerto


paralelo en PC
PORTOUT PortOut;
PORTWORDOUT PortWordOut;
PORTDWORDOUT PortDWordOut;
PORTIN PortIn;
PORTWORDIN PortWordIn;
PORTDWORDIN PortDWordIn;
SETPORTBIT SetPortBit;
CLRPORTBIT ClrPortBit;
NOTPORTBIT NotPortBit;
GETPORTBIT GetPortBit;
RIGHTPORTSHIFT RightPortShift;
LEFTPORTSHIFT LeftPortShift;
ISDRIVERINSTALLED IsDriverInstalled;

HMODULE hio;

void UnloadIODLL()
{
FreeLibrary(hio);
}

int LoadIODLL() {
hio = LoadLibrary("io");
if (hio == NULL) return 1;

PortOut = (PORTOUT)GetProcAddress(hio, "PortOut");


PortWordOut = (PORTWORDOUT)GetProcAddress(hio, "PortWordOut");
PortDWordOut = (PORTDWORDOUT)GetProcAddress(hio, "PortDWordOut");
PortIn = (PORTIN)GetProcAddress(hio, "PortIn");
PortWordIn = (PORTWORDIN)GetProcAddress(hio, "PortWordIn");
PortDWordIn = (PORTDWORDIN)GetProcAddress(hio, "PortDWordIn");
SetPortBit = (SETPORTBIT)GetProcAddress(hio, "SetPortBit");
14
FIEE-UNAC
Control digital

ClrPortBit = (CLRPORTBIT)GetProcAddress(hio, "ClrPortBit");


NotPortBit = (NOTPORTBIT)GetProcAddress(hio, "NotPortBit");
GetPortBit = (GETPORTBIT)GetProcAddress(hio, "GetPortBit");
RightPortShift = (RIGHTPORTSHIFT)GetProcAddress(hio, "RightPortShift");
LeftPortShift = (LEFTPORTSHIFT)GetProcAddress(hio, "LeftPortShift");
IsDriverInstalled = (ISDRIVERINSTALLED)GetProcAddress(hio,
"IsDriverInstalled");

atexit(UnloadIODLL);

return 0;
}
void main()
{

LoadIODLL(); //inicia puertos


char op,key;
PortOut(base,0);
int x=0;
again:

menu();

op=(getch());

switch(op)
{
case '+' :
if(x<5)
{ x=x+1;
PortOut(base,x);
}
else
{
cout<<'\t'<<'\t'<<"velocidad maxima";
}
break;

case '-':
{
if(1<x)
x=x-1;
{
if(x==1)
{
15
FIEE-UNAC
Control digital

cout<<'\t'<<'\t'<<"velocidad minima";
cout<<x;

}
Else
{

PortOut(base,x);
}
}
}
break;

case'p':
{
cout<<'\t'<<'\t'<<"motor apagado";
PortOut(base,0);
// x=0;
}
break;

case 's':
goto salir;

default:
cout<<'\t'<<'\t'<<"esta opcion no esta permitida";
break;
}

cout<<x; // para comprobar el valor de salida del puerto


goto again;
salir:;

}
//--------------------------------------------------------------------------------despliega el menú de
opciones
void menu (void)
{{
system ("CLS");

cout<<endl<<endl<<endl<<endl<<endl;
cout<<'\t'<<'\t'<<"=======Control de velocidad en lazo abierto=======" <<endl;
cout<<'\t'<<'\t'<<"pulsar boton + para incrementar velocidad"<<endl;
cout<<'\t'<<'\t'<<"pulsar boton - para decrementar velocidad"<<endl;
cout<<'\t'<<'\t'<<"pulsar p para detener motor "<<endl;
16
FIEE-UNAC
Control digital

cout<<'\t'<<'\t'<<"pulsar S si desea salir"<<endl;


}
}

Comentarios:
La conversion se puede realizar del mismo modo con el DAC incorporado en el pic16f877a
El programa de control fue diseñado de tal manera que presionando la tecla + se
incrementa en 1 la salida del puerto en bianrio y esto se refleja con un aumento de
velocidad y si se presiona la tecla – se decrementa en 1 la salida del puerto en binario , esta
salida digital ingresa al DAC en donde es convertido a una seña analogica de 0- 1.2 V y a
medida que la la entrada analogica aumenta la salida del PWM disminuye ,reduciendo asi
la velocidad el motor.
Con el programa diseñado es posible deterner el motor con tan solo
presionar la tecla p .

17
FIEE-UNAC