Pid
-
Upload
alejandro-hincapie-correa -
Category
Documents
-
view
213 -
download
1
description
Transcript of Pid
-
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
Congreso 2010, Pgina 1
DISEO E IMPLEMENTACION DE UN CONTROL PID
DIGITAL PARA MOTOR DC, USANDO DISPOSITIVOS
EMBEBIDOS PSOC CY8C29466-24PVXi.
Autores: Alexander Ramrez Montenegro, Carlos Alberto Fernndez Perdomo
UNIVERSIDAD DEL CAUCA
COLOMBIA
[email protected], [email protected]
Resumen: En este proyecto se trata de realizar un control de velocidad de un motor DC para la dosificacin de
unos polvos, para ello se usa un encoder para medir la velocidad y un PSOC donde ira implementada la ley de
control que regir la velocidad del motor, este trabajo se hace con fines acadmicos, es decir es de carcter de
experiencia institucional.
1. INTRODUCCION
En el presente trabajo se desarrolla un Control de
velocidad en lazo cerrado de un motor DC de imn
permanente aplicando el conocido algoritmo de
control PID.
El objetivo es mantener constante la velocidad ante
variaciones de la carga (perturbaciones), de manera
automtica.
El sistema se realiz usando un motor DC
HITACHI de imn permanente de 24 voltios
extrado de una fotocopiadora, el cual es controlado
por un H-bridge basado en un chip L298N que
permite usando la tcnica PWM variar la velocidad
del motor y su sentido de giro.
Como unidad de realimentacin, se utiliza un encoder
de velocidad GP1A30R de la empresa SHARP y
todo el sistema es controlado por un PSOC
CY8C29466-PVXI y usando comunicacin USB
para enviar datos al PC con el CY7C64215.
2. MODELAMIENTO DE LA
PLANTA
Considerando que nuestro motor tiene un eje rgido,
por medio de sus ecuaciones elctricas y mecnicas,
al relacionarlas, podemos obtener el modelo del
motor en el cul la entrada es el voltaje aplicado y la
salida es la velocidad rotacional del eje, para esto es
necesario conocer los diferentes parmetros de los
que se encuentra compuesto:
Momento de inercia del rotor J.
Coeficiente de amortiguamiento del sistema
mecnico (b).
Constante de fuerza electromotriz K=Ke=Kt.
Resistencia elctrica (Ra).
Inductancia elctrica (La).
Entrada (V): Fuente de Tensin.
Salida (W): velocidad rotacional del eje.
En la figura 1 se muestra es esquema base para el
modelamiento del motor DC.
Figura 1. Esquema base de modelamiento.
Las ecuaciones diferenciales de este sistema son:
mailto:[email protected]:[email protected] -
2
= + +
1
= 2
= (3)
= 4
Como se desconoce el valor del torque de la carga
que se va usar, se tomar que = 0, y la funcin de
transferencia haciendo la transformada de Laplace y
el ordenamiento de las ecuaciones es:
WM(t)
v(t)=
Kt
La*J
s2+s Ra*J+La*b
La*J +
KmKt+Ra*b
La*J
(5)
3. MEDICION DE
PARAMETROS
Para la medicin de los parmetros que se muestran
en la ecuacin 5, se procede a medir voltaje y
corriente en el motor as como el nmero de vueltas
realizadas en un cierto tiempo, tambin se midi la
inductancia usando un inductometro conectado a las
dos borneras del motor DC. Los datos medidos se
muestran en la tabla 1.
Tabla 1
Datos medidos del motor DC
Voltaje
armadura
(V)
Corriente
armadura
(A)
Vueltas/20seg Inductancia
armadura
(mH)
5 8,00E-02 283 3,75
8 9,00E-02 452 4,02
10 9,03E-02 577 3,83
12 1,00E-01 688 3,78
15 1,01E-01 864 3,79
18 1,10E-01 1055 3,79
20 1,11E-01 1193 3,78
22 1,20E-01 1296 4,03
24 1,21E-01 1386 3,75
Cabe destacar que la inductancia no se midi con el
motor DC encendido, si no que se giraba el eje del
motor manualmente y se miraba el valor de la
inductancia. No se puede realizar la medida de la
inductancia mientras esta encendida porque est
afectando la corriente a la inductancia.
Tambin se realizaron otras medidas de masa y radio
del motor para estimar el momento de inercia, dichos
datos se muestran en la tabla 2.
Tabla 2.
Mediciones de masa y dimetro del motor
Masa del motor
(gr)
Dimetro del
motor (cm)
Radio motor
(cm)
450 3.7 1.85
Para medir la resistencia de armadura, , se aplic
un voltaje fijo y se bloque el eje del motor, de tal
forma que el eje no rotara y se midi la corriente que
estaba circulando es en instante, de esta manera la
para el motor usado fue de = , .
Usando los datos de la tabla 1, se puede realizar una
estimacin de K=Km=Kt, considerando que en
estado estable, es decir sin cargas en el eje del motor,
se puede estimar usando las ecuaciones:
(6)
(7)
As,
(8)
Donde el voltaje armadura, la corriente
armadura y es la velocidad angular. Usando los
datos de la tabla 1 se estima, promediando, que K=
3.84E-3 voltios/RPM.
Para estimar el momento de inercia se considera que
el motor es un cilindro, y calcular el momento de
inercia de un cilindro es muy fcil, y est dado por la
siguiente ecuacin:
=2
2 (9)
Donde M es la masa del motor, R el radio estimado
del motor.
El valor del momento de inercia para el motor DC a
usar es de = . .
Para estimar el coeficiente de amortiguamiento se
busc informacin de otros motores que tenan
caractersticas parecidas al motor DC que se iba a
usar y tomar como valor de amortiguamiento el de
esos motores, pues no se pudo medir este parmetro,
como referencia se tom que = /
.
-
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
Congreso 2010, Pgina 3
De forma resumida los parmetros para el motor DC
son los siguientes:
Tabla 3
Parmetros del motor DC
Volts(V) 24
Potencia(Watt) 21
Ra(Ohmios) 5,25
La(Henrios) 3,84E-03
Km(V.Seg/rad) 5,45E-02
Kt(N.m/A) 5,45E-02
Jrot(Kg.m2) 8.205E-05
b(N.m.Seg) 5E-07
4. SIMULACION EN MATLAB
Y DISEO DE CONTROL
PID.
El algoritmo de un control PID en tiempo continuo es
de la siguiente forma:
(9)
En el dominio de S, el control PID se puede escribir
de la siguiente forma:
(10)
La ecuacin 10 representa un control PID de
posicion, pero tambin existe otrol control PID
denominado PID de velocidad, donde su estructura es
la siguiente:
= 1 +1
+
1 +
(11)
Como ya se obtuvieron los parmetros del motor, se
puede hacer uso de la ecuacin (5) para
implementarla en MATLAB y mirar que parmetros
del control PID se ajustan mejor para obtener una
buena ley de control.
Escogiendo los siguientes valores para el control PID
de velocidad:
Kp=9 Ti=5 Td=0.001 N=10
La respuesta del sistema con un control PID con los
parmetros elegidos anteriormente se muestra en la
figura 2, se puede observar que con esos parmetros
el control ms la planta se ajusta muy bien ante una
entrada escaln.
Figura 2. Respuesta al escaln del sistema con
control PID.
Por tanto los parmetro de Kp, Ti y Td del control
PID sern los que se usaran para controlar el motor.
5. PID DIGITAL
Para poder realizar un control a nivel digital se debe
discretizar la ley de control, en nuestro caso se debe
discretizar la ley de control PID.
Aplicando la transformada Z a la ecuacin 10, se
obtiene:
U(z)
E(z)=Kp+
Kp*T
Ti(1-Z-1)+Kp*Td*
1-z-1
T (12)
La ecuacin (11) representa la discretizacion de un
control PID de posicin, el inters nuestro es en
realizar un control PID digital de velocidad, entonces
aplicando la transformada Z a la ecuacin 11, se
obtiene:
U(z)
E(z)=Kp+
Kp*T
Ti(1-Z-1)+
+(1 1)
1
+ 1
(13)
Donde T es el periodo de muestreo elegido.
-
4
Ahora el paso siguiente es transformar las ecuaciones
que estn en transformada Z en ecuaciones en
diferencias para que podamos implementar la ley de
control en el PSOC.
Para ello se realiza la transformada Z inversa de la
ecuacin 13, se obtiene:
= _1 + + _1 + _2 14
= . .
= +
+
= +2
=
Ahora ya se tiene la ley de control U en ecuaciones
en diferencias y lo que ahora toca es implementar la
ecuacin 14 en el PSOC, ya que se tiene los
parmetros de KP, Ti y Td. Lo que se debe elegir es
el tiempo de muestreo T con el que se va a trabajar.
6. SISTEMA DE LAZO
CERRADO.
Tal como se muestra en la figura 3, el sistema consta
de un pequeo motor DC, cuya seccin de potencia la
constituye un H-Bridge que permite, por un lado,
definir la direccin de giro y por otro, controlar la
velocidad con la aplicacin de una seal PWM. El
lazo de control es cerrado usando un encoder de
velocidad GP1A30R de la empresa SHARP colocado
en el eje del motor. El encoder cuenta con un disco
ranurado (100 ranuras en el disco)para producir as
pulsos cuya cantidad por unidad de tiempo es
proporcional a la velocidad de giro del motor.
Figura 3. Sistema de lazo cerrado de control
7. MODULACION DE ANCHO
DE PULSO.
Es el mecanismo utilizado para variar la velocidad de
un motor DC. Consiste en variar la anchura de pulso
o el dutycycle en un ciclo de PWM de manera de
variar el average de la tensin DC aplicada al motor,
tal como muestra la figura 4.
Figura 4. PWM
PWM es una manera eficiente, para simular un rango
de valores anlogos usando circuitos digitales.
Cambiando rpidamente entre cero voltios y el
voltaje nominal del motor, se obtiene un valor
promedio comprendido entre esos dos lmites. Tres
seales son presentadas en la figura arriba, todas
tienen la misma frecuencia, pero el ancho de los
pulsos son diferentes.
Variando la duracin del tiempo on, el motor puede
ver un promedio de cualquier valor entre 0V y +V.
Para ajustar el valor del ancho de pulso de acuerdo a
los valores entregados por la ley de control se debe
establecer un rango mnimo y mximo de trabaja para
poder ajustar los valores de la ley de control a los
valores del PWM.
Para este proyecto se trabaj con un rango de 0 a 12
voltios el motor, es decir que como valor mximo de
RPM se obtendra 2064 RPM aproximadamente. El
factor que me reajustaba los valores entregados por la
ley de control para ya llevarlos al PWM de 8 bits,
fue de 0.00392, el valor fue calculado sacando los
valores mximos y mnimos que entregaba la ley de
control y de acuerdo a ello buscaba un valor que se
ajustar a ellos de acuerdo al PWM elegido, en este
caso un PWM de 8 bits (255).
8. IMPLEMENTACION EN
PSOC DESIGNER.
Usando la herramienta software entregada por
CYPRESS SEMICONDUCTOR en su pgina web,
se us PSOC DESIGNER 5.0 SP6.
-
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
Congreso 2010, Pgina 5
Los parmetros globales que gobiernan el PSOC
CY8C29466-24PVXi se muestran en la figura 5.
Figura 5. Parmetros globales
Para garantizar que la seal que llegaba del encoder
GP1A30R, que son pulsos de 0v y 5v, no llevara
ruido, se implemento un comparador de ventana
usando los mdulos de comparadores de ventana
programables en el PSOC denominados CMPPRG
(Programmable Threshold Comparator), el esquema lgico para el comparador de ventana se
muestra en la figura 6.
Figura 6. Esquema lgico de comparador de ventana.
Donde,
(15)
La ecuacin 15, representa la salida lgica booleana
de lo que se muestran en la figura 6.
La implementacin de esta lgica en el PSOC, se
muestra en la figura 7, donde se usas dos mdulos
CMPPRG, donde uno maneja una referencia alta y
otro una referencia baja, CMPPRG_HIGH y
CMPPRG_LOW.
Figura 7. Mdulos de comparador para comparador
de ventana.
Los parmetros de configuracin se muestran en la
figura 8.
Figura 8. Parmetros de configuracin de los
mdulos CMPPRG
Ahora, se requiere implementar la lgica digital de la
ecuacin 15, para ellos se usa los mdulos DIGBUF
estos permiten acceder a los buffers de los
comparadores y a acceder a lo que estos estn
sacando.
Figura 7. Implementacin lgica digital para
comparador de ventana.
-
6
Figura 8. Configuracin de parmetros de los
mdulos DIGBUF
En las figuras 7 y 8 se muestra la realizacin de la
lgica para realizar el comparador de ventana de
acuerdo a la ecuacin 15, la salida lgica se manda
por el GOE 6 para que sea leda por el contador de
pulsos en GIE 6. En la figura 9 se muestra mejor
esto.
Figura 9. GIE y GOE
Ahora, la seal que llega por el
Figura 10. Resto de mdulos
Figura 11. Configuracin de parmetros de los otros
mdulos.
En las figuras 10 y 11 se muestra la implementacin
de los otros mdulos. Se usa un contador,
CONTARPULSOS, como contador de pulsos que le
llegan por el bus de datos GIE 6, cada vez que haya
un cambio de un estado de bajo a alto, el periodo del
contador se decremento en uno (1), period.
Se usa tambin un temporizador, TIMERms, que va
temporizar hasta 100 ms, esto es para que cada
-
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
Congreso 2010, Pgina 7
100ms recoge el valor de period en el modulo
CONTARPULSOS para saber cuntos pulsos han
entrado por all, y as obtener el valor de las RPM del
motor cada 100ms.
El modulo I2CHW_ESCLAVO es para comunicar
el PSOC CY8C29466-24PVXI con el PSOC
CY764215 que es el que posee la comunicacin
USB. As, se manda el valor de las RPM va I2C al
CY764215 y este enva la informacin por USB al
computador.
En los anexos se muestra el cdigo en C del
algoritmo de la ley de control y de inicializacin de
los mdulos usados en PSOC DESIGNER.
Para mayor informacin de lo que hace cada modulo,
en PSOC DESIGNER estn los DATASHEET de
cada modulo, antes de usar un modulo se recomienda
leer los DATASHEET.
9. RESULTADOS
OBTENIDOS.
Como se expres anteriormente, la ley de control
digital implementada fue la que se muestra en la
ecuacin 14, usando como periodo de muestreo
T=100 ms, esta ley ya discretizada se implement en
el PSOC CY8C29466-24PVXi.
Los datos de la revoluciones se enviaban mediante
comunicacin I2C al PSOC CY764215 y este era el
encargado de enviar los datos por el puerto USB al
computador.
Ya en el computador se obtenan los datos de las
RPM y se guardaban en un archivo de texto, .txt, y
estos se graficaban con una herramienta de grafico de
datos denominada KST.
La respuesta del sistema con la ley de control digital
ya implementada se muestra en la figura 12.
Figura 12. Respuesta del sistema con control PID
digital
El cdigo de la ley de control fue realizado en C y se
pone todo el cdigo en los anexos.
10. CONCLUSIONES.
Se obtuvo una respuesta muy buena con el sistema de
control PID digital implementada en el PSOC pues su
valor estaba oscilando alrededor del valor de
referencia entre 4 y 6 RPM por encima y por debajo
de la referencia.
Se debe mejorar un poco usando un observador para
tener una mayor precisin de la medida y de la ley de
control.
11. BIBLIOGRAFIA
Landau Ioan, ZitoGianluca. Digital Control Systems.
Edicion del 2005,
KasuhikoOgata, Sistemas de control en tiempo
discreto.
Dogan Ibrahim, Microcontroller Based Applied
Digital Control.Edicion 2006.
Ess van Dave, Analog-Comparator with
independently programmable hysteresis Thresholds.
-
8
ANEXOS.
#include // part specific constants and macros
#include
#include
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler TIMER_ISR
voidmandarDATO(void);
voidconvertir(void);
voidLeyControl(void);
intcont=0;
unsignedintval_seg=0,val_min=0;
floatval_minf=0;
unsignedintconteos=0;
charsWriteBuffer[10]; // Buffer where Master's data is deposited
charsTxBuffer[20];
charsRxBuffer[20]; // Main buffer
float ref=800.0;
floatek=0.0,ek_1=0.0,ek_2=0.0;
floatuk=0.0,uk_1=0.0,uk_rescalado=0;
float a=9.27,b=9.18,c=0.090; //Para un periodo de muestreo de 100ms
unsigned int uk_int=0;
charsRxBufferLeyControl[15];
void main(void)
{
CMPPRG_HIGH_Start(CMPPRG_HIGH_HIGHPOWER);
CMPPRG_LOW_Start(CMPPRG_LOW_HIGHPOWER);
CONTARPULSOS_EnableInt(); /* Habilito interrupcion para el contador */
CONTARPULSOS_Start(); /* Inicio el contador */
TIMERms_Start();
TIMERms_EnableInt();
PWM8_1_EnableInt();
PWM8_1_Start();
M8C_EnableGInt;
//Start I2CHW user module
I2CHW_ESCLAVO_Start();
// Enable I2C Slave Operation
I2CHW_ESCLAVO_EnableSlave();
// Enable I2C Interrupt
I2CHW_ESCLAVO_EnableInt();
// Initialize I2C Read Buffer
I2CHW_ESCLAVO_InitRamRead(sRxBuffer,10);
// Initialize I2C Write Buffer
I2CHW_ESCLAVO_InitWrite(sWriteBuffer,10);
while(1)
{
mandarDATO();
}
}
void TIMER_ISR(void)
{
cont++;
if(cont==1)
{
CONTARPULSOS_Stop();
-
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones
Congreso 2010, Pgina 9
conteos=CONTARPULSOS_wReadCounter();
val_seg=65535-conteos;
val_minf=((((float)val_seg/(float)100)/(float)0.1)*(float)60); //calculo de RPM
LeyControl();
val_min=(unsignedint)val_minf;//Para mandar por la USB
convertir();
cont=0;
CONTARPULSOS_WritePeriod(65535);
CONTARPULSOS_Start();
}
}
Void mandarDATO(void) //Rutina para mandar por el I2C al dispositivo USB CY764215
{
M8C_ClearWDT;
if (I2CHW_ESCLAVO_bReadI2CStatus() & I2CHW_RD_COMPLETE)
{
I2CHW_ESCLAVO_InitRamRead(sRxBuffer,10);
//ReInitialize Read Buffer
I2CHW_ESCLAVO_ClrRdStatus();
}
}
Void convertir(void)
{
utoa(sRxBuffer,val_min,10);//sRxBuffer es por donde yo voy a mandar el dato
}
Void LeyControl(void)
{
ek=ref-val_minf; //Calculo el error
uk=uk_1+(a*ek)+(b*ek_1)+(c*ek_2); //LEY DE CONTROL
uk_rescalado=uk*0.00392;
uk_int=(unsignedint)uk_rescalado;//Le paso a uk_int la parte entera de uk_rescalado
if(uk_rescalado