Está en la página 1de 9

Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

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
alexuid342@hotmail.com, carlosfp@unicauca.edu.co

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.

necesario conocer los diferentes parmetros de los


que se encuentra compuesto:
Momento de inercia del rotor J.
Coeficiente de amortiguamiento del sistema
mecnico (b).

El objetivo es mantener constante la velocidad ante


variaciones de la carga (perturbaciones), de manera
automtica.

Constante de fuerza electromotriz K=Ke=Kt.

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.

Inductancia elctrica (La).

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.

Resistencia elctrica (Ra).

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.

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

Figura 1. Esquema base de modelamiento.


Las ecuaciones diferenciales de este sistema son:

Congreso 2010, Pgina 1

= + +

Mediciones de masa y dimetro del motor

Tabla 2.

1
Masa del motor
(gr)
450

(3)

La *J

Km Kt +Ra *b

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:

Kt
La *J
Ra *J+La *b

(5)

La *J

3. MEDICION DE
PARAMETROS

(6)

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)
5
8
10
12
15
18
20
22
24

Corriente
armadura
(A)
8,00E-02
9,00E-02
9,03E-02
1,00E-01
1,01E-01
1,10E-01
1,11E-01
1,20E-01
1,21E-01

Radio motor
(cm)
1.85

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)
s2 +s

Dimetro del
motor (cm)
3.7

Vueltas/20seg

283
452
577
688
864
1055
1193
1296
1386

Inductancia
armadura
(mH)
3,75
4,02
3,83
3,78
3,79
3,79
3,78
4,03
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.

(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


De forma resumida los parmetros para el motor DC
son los siguientes:
Tabla 3
Parmetros del motor DC
Volts(V)
Potencia(Watt)
Ra(Ohmios)
La(Henrios)
Km(V.Seg/rad)
Kt(N.m/A)
Jrot(Kg.m2)
b(N.m.Seg)

24
21
5,25
3,84E-03
5,45E-02
5,45E-02
8.205E-05
5E-07

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.

4. SIMULACION EN MATLAB
Y DISEO DE CONTROL
PID.
El algoritmo de un control PID en tiempo continuo es
de la siguiente forma:
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.

(9)
En el dominio de S, el control PID se puede escribir
de la siguiente forma:

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.

(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

+
(11)

1+

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:

Aplicando la transformada Z a la ecuacin 10, se


obtiene:
U(z)
Kp*T
1-z-1
=Kp+
+Kp*Td*
E(z)
T
Ti(1-Z-1 )

(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:

(1 1 )
U(z)
Kp*T
+
=Kp+
+
E(z)
Ti(1-Z-1 ) 1 1
+

Donde T es el periodo de muestreo elegido.

Congreso 2010, Pgina 3

(13)

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.

variar el average de la tensin DC aplicada al motor,


tal como muestra la figura 4.

Para ello se realiza la transformada Z inversa de la


ecuacin 13, se obtiene:
= _1 + + _1 + _2 14
= . .
= +

= +
=

Figura 4. PWM

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

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
PSOC DESIGNER.

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

EN

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


Los parmetros globales que gobiernan el PSOC
CY8C29466-24PVXi se muestran en la figura 5.

Figura 7. Mdulos de comparador para comparador


de ventana.
Los parmetros de configuracin se muestran en la
figura 8.

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 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 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. Implementacin lgica digital para


comparador de ventana.

Congreso 2010, Pgina 5

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 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.

Figura 10. Resto de mdulos

Se usa tambin un temporizador, TIMERms, que va


temporizar hasta 100 ms, esto es para que cada

Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones


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.

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.

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.

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.

Congreso 2010, Pgina 7

ANEXOS.
#include <m8c.h>
// part specific constants and macros
#include <stdlib.h>
#include <string.h>
#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];
charsTxBuffer[20];
charsRxBuffer[20];

// Buffer where Master's data is deposited


// 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


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<255)
{
PWM8_1_Stop();
PWM8_1_WritePulseWidth(uk_int);
PWM8_1_Start();
}
else
{
PWM8_1_Stop();
PWM8_1_WritePulseWidth(255);
PWM8_1_Start();
}
uk_1=uk;
ek_2=ek_1;
ek_1=ek;
}
Copyright 2010. Alexander Ramrez M., Carlos A. Fernndez: El autor delega a la Organizacin del Segundo
Congreso Virtual de Microcontroladores la licencia para reproducir este documento para los fines del Congreso ya sea
que este artculo se publique en el sitio web del congreso, en un CD o en un documento impreso de las ponencias del
Segundo Congreso Virtual de Microcontroladores.

Congreso 2010, Pgina 9

También podría gustarte