Está en la página 1de 6

Ejemplo: Control Digital de Velocidad

del Motor de CC con Control PID


Conversión de Continuo a Discreto
Controlador PID

En esta página, consideremos la versión digital del problema de control de velocidad de un motor de
CC . Puede obtenerse un modelo digital del motor de CC a partir de la conversión del modelo
analógico , como describiremos. El controlador para este ejemplo se diseñará por un método PID.

De la página Modelación: un Motor de CC, la función de transferencia a lazo abierto para la velocidad
del motor se derivó como:

Donde:
*resistencia eléctrica (R) = 1 ohm
*inductancia eléctrica (L) = 0.5 H
*constante de fuerza electromotriz (Ke=Kt) = 0.01 Nm/Amp
*momento de inercia del rotor (J) = 0.01 kg*m^2/s^2
*coeficiente de amortiguamiento del sistema mecánico (b) = 0.1 Nms
*entrada (V): Fuente de Tensión
*salida (theta punto): Velocidad de rotación
*Se asume que el rotor y el eje son rígidos

Los requerimientos de diseño para entrada escalón de 1 rad/seg. son

 Tiempo de establecimiento: Menor que 2 segundos


 Sobrepico: Menor que el 5%
 Error de estado estacionario: Menor que el 1%

Conversión de Continuo a Discreto


El primer paso en el diseño de un sistema de control discreto es convertir la función de transferencia
continua a una función de transferencia discreta. El comando Matlab c2dm lo hará para ud.. c2dm
requiere los siguiente cuatro argumentos: el polinomio numerador (num), el polinomio denominador
(den), el tiempo de muestreo (Ts) y el tipo de mantenedor. En este ejemplo, usaremos el mantenedor de
orden cero ('zoh').

Del requerimiento de diseño, hagamos el tiempo de muestreo, Ts igual a 0.12 segundos, lo cual es 1/10
de la constante de tiempo de un sistema con un tiempo de establecimiento de 2 segundos. Creemos un
nuevo archivo-m e ingrese los siguientes comandos:

R=1;
L=0.5;
Kt=0.01;
J=0.01;
b=0.1;

num = Kt;
den = [(J*L) (J*R)+(L*b) (R*b)+(Kt^2)];

Ts = 0.12;
[numz,denz] = c2dm(num,den,Ts,'zoh')

Luego de ejecutado este archivo-m debe devolver lo siguiente:

numz =

0 0.0092 0.0057

denz =

1.0000 -1.0877 0.2369


De estas matrices, la función de transferencia discreta puede escribirse como:

Primero, nos gustaría vea cómo se ve la respuesta del sistema a lazo cerrado sin ningún control. Si
aprecia la matriz numz arriba, ésta tiene un cero adicional al principio, tenemos que librarnos de él
antes de cerrar el lazo con el comando Matlab cloop. Agregue el siguiente código al final de su
archivo-m:

numz = [numz(2) numz(3)];


[numz_cl,denz_cl] = cloop(numz,denz);

Luego de hacerlo, observemos cómo se ve la respuesta a lazo cerrado al escalón . El comando dstep
generará el vector de señales de salida discreto y el comando stairs las conectará . Pinche aquí para más
información. Agregue el siguiente código de Matlab al final del archivo-m anterior y ejecútelo
nuevamente.

[x1] = dstep(numz_cl,denz_cl,101);
t=0:0.12:12;
stairs(t,x1)
xlabel('Tiempo (segundos)')
ylabel('Velocidad (rad/s)')
title('Respuesta tipo escalera :Original')
Debería verse la figura siguiente:
Controlador PID
Recordemos que la función de transferencia de tiempo continuo para un controlador PID es:

Existen varias maneras para el mapeo del plano s al plano z . La más precisa es . No podemos
obtener la función de transferencia del filtro PID de este modo porque la función de transferencia de
tiempo discreto tendría más ceros que polos, lo cual no es realizable. En su lugar usaremos la
transformación bilineal , definida como sigue:

Por lo que podemos derivar el controlador PID discreto con el mapeo por la transformación bilineal.
Para una derivación más detallada de un controlador PID discreto , vea Controlador PID Discreto .
Equivalentemente, el comando c2dm del Matlab le ayudará para convertir el compensador PID de
tiempo continuo al compensador PID de tiempo discreto usando el método "tustin" en este caso. El
método "tustin" usará la aproximación bilineal para la conversión a tiempo discreto de la derivada. De
acuerdo con la página Método de Diseño del PID para el Motor de CC , Kp = 100, Ki = 200 y Kd = 10
satisfacen el requerimiento de diseño. Se usará todas las ganancias en este ejemplo. Ahora agregue los
siguientes comandos Matlab a su archivo-m anterior y ejecútelo nuevamente en la ventana del Matlab.

% Controlador PID Discreto con aproximación bilineal


Kp = 100;
Ki = 200;
Kd = 10;

[dencz,numcz]=c2dm([1 0],[Kd Kp Ki],Ts,'tustin');


Note que el numerador y el denominador en el comando c2dm se invirtieron arriba. La razón es porque
función de transferencia PID no es propia. Matlab no permite esto. Intercambiando el numerador y el
denominador el comando c2dm puede ser engañado para devolver la respuesta correcta. Veamos si la
performance de la respuesta a lazo cerrado con el compensador PID satisface los requerimientos de
diseño. Agregue ahora el código siguiente al final de su archivo-m y ejecútelo nuevamente. Debería
obtenerse la siguiente respuesta tipo escalera a lazo cerrado.

numaz = conv(numz,numcz);
denaz = conv(denz,dencz);
[numaz_cl,denaz_cl] = cloop(numaz,denaz);

[x2] = dstep(numaz_cl,denaz_cl,101);
t=0:0.12:12;
stairs(t,x2)
xlabel('Tiempo (segundos)')
ylabel('Velocidad (rad/s)')
title('Respuesta tipo escalera: con controlador PID ')

como puede ver de la figura de arriba, la respuesta del sistema a lazo cerrado es inestable. Por lo tanto
debe haber algo mal en el sistema compensado. Así que echemos un vistazo al root locus del sistema
compensado. Agreguemos los siguientes comandos Matlab al final de su archivo-m y ejecútelo
nuevamente.

rlocus(numaz,denaz)
title('Lugar de Raíces del Sistema Compensado')
De este gráfico del lugar de raíces, vemos que el denominador del controlador PID tiene un polo en -1
en el plano z . Sabemos que si un polo de un sistema está fuera del círculo unitario, el sistema será
inestable. Este sistema compensado siempre será instable para cualquier ganancia positiva porque
habrá un número par de polos y ceros a la derecha del polo en -1. Por lo tanto ese polo siempre se
moverá a la izquierda y afuera del círculo unitario. El polo en -1 viene del compensador, y podemos
cambiar su ubicación cambiando el diseño del compensador. Lo elegimos para cancelar el cero en
-0.62. Esto hará el sistema estable para al menos algunas ganancias. Además podemos elegir una
ganancia apropiada del diagrama del lugar de raíces para satisfacer los requerimientos de diseño usando

rlocfind.Ingrese el siguiente código de Matlab a su archivo-m.

dencz = conv([1 -1],[1.6 1])


numaz = conv(numz,numcz);
denaz = conv(denz,dencz);

rlocus(numaz,denaz)
title('Lugar de Raíces del Sistema Compensado');
[K,polos] = rlocfind(numaz,denaz)
[numaz_cl,denaz_cl] = cloop(K*numaz,denaz);

[x3] = dstep(numaz_cl,denaz_cl,101);
t=0:0.12:12;
stairs(t,x3)
xlabel('Tiempo (segundos)')
ylabel('Velocidad (rad/s)')
title('Respuesta tipo escalera:con controlador PID ')
El nuevo dencz tendrá un polo en -0.625 en lugar de -1, que casi cancela al cero del sistema no
compensado. En la ventana del Matlab, debería ver el comando que le solicita elegir el punto en el
gráfico de lugar de raíces. Debe pinchar en el gráfico como sigue:

Entonces Matlab devolverá la ganancia apropiada y los polos compensados correspondientes, y se


ploteará la respuesta a lazo cerrado compensada como sigue.

La figura muestra que el tiempo de establecimiento es menor que 2 segundos y el sobrepico porcentual
es alrededor del 3%. Además, el error de estado estacionario es cero. Y también, la ganancia, K, del
lugar de raíces es 0.2425 lo cual es razonable. Por lo tanto esta respuesta satisface todos los
requerimientos de diseño.

También podría gustarte