Consultar ensayos de calidad


Modelamiento de un motor



Velocidad del Motor de CC : Modelación

El motor de CC es un actuador común en control sistemas. Provee movimiento rotatorio directamente y, acoplado con ruedas dentadas o poleas y cables, puede proveer movimiento transicional. El circuito eléctrico de la armadura y el diagrama de cuerpo libre del rotor se muestran en la siguiente figura:

Para este ejemplo, asumimos los valores siguientes para los parametros físicos. Estos valores se derivaron experimentalmente de un motor real del laboratorio de control para alumnos de grado del Carnegie Mellon.
* momento de inercia del rotor (J) = 0.01 kg.m^2/s^2
* coeficiente de amortiguamiento del sistema mecanico (b) = 0.1 Nms
* constante de fuerza electromotriz (K=Ke=Kt) = 0.01 Nm/Amp
* resistencia eléctrica (R) = 1 ohm


* inductancia eléctrica (L) = 0.5 H
* entrada (V): Fuente de Tensión
* salida (theta): posición del eje
* el rotor y eje se consideran rígidos
El torque del motor, T, se relaciona con la corriente de armadura, i, por un factor constante Kt. La fuerza contraelectromotriz (emf), e, se relaciona con la velocidad de rotación mediante las siguientes ecuaciones

En unidades del sistema internacional SI (las que usaremos), la Kt (constante de armadura) es igual a Ke (constante del motor).
De la figura de arriba podemos escribir las siguientes ecuaciones basadas en la ley de Newton combinado con la ley de Kirchhoff:
:

1. Función de Transferencia
Usando Transformadas deLaplace, las ecuaciones del modelo de arriba pueden expresarse en términos de s.

Eliminando I(s) podemos obtener la siguiente función de transferencia a lazo abierto , donde la velocidad de rotación es la salida y el voltaje es la entrada.

2. Espacio de Estado
En la forma espacio de estado, las ecuaciones de arriba pueden expresarse escogiendo la velocidad de rotación y corriente eléctrica como las variables de estado y la tensión como una entrada. La salida se elige que sea la velocidad de rotación.

Requerimientos de diseño
Primero, el motor sin compensar puede rotar solo a 0.1 rad/seg. con una tensión de entrada de 1 Volt (esto se demostrara luego cuando se simule la respuesta a lazo abierto). Como el requerimiento mas basico de un motor es que debe rotar a la velocidad deseada, el error de estado estacionario de la velocidad del motor debe ser menor que 1%. El otro requerimiento de performance es que el motor debe acelerarse hasta su velocidad de estado estacionario apenas se encienda. En este caso, queremos tener un tiempo de establecimiento de 2 segundos. Como una velocidad mayor que la referencia podría dañar el equipo, queremos tener un sobrepico menor que 5%.
Si simulamos la entrada de referencia (r) con una entrada escalón unitario, entonces la salida velocidad del motor debería tener:
* Tiempo de establecimiento menor que 2 segundos
* Sobrepico menor que 5%
* error de estado estacionario menor que 1%
Representación en Matlab y respuesta a lazo abierto
1. Función de Transferencia
Podemos representar lafunción de transferencia anterior en Matlab definiendo las matrices numerador y denominador como sigue:

Cree un nuevo archivo-m e ingrese los siguientes comandos:
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
Ahora veamos qué hace el sistema original a lazo abierto. Agregue los siguientes comandos al final del archivo-m y ejecútelo en la ventana de comandos del Matlab:
step(num,den,0:0.1:3)
title('Respuesta al Escalón del sistema a lazo abierto')
Debería obtenerse la figura siguiente:

De la figura vemos que cuando se aplica 1 volt al sistema, el motor puede lograr solo una velocidad maxima de 0.1 rad/seg., diez veces menor que la velocidad deseada. Ademas, el motor tiene 3 segundos para alcanzar su velocidad de estado estacionario; esto no satisface los 2 segundos del criterio de tiempo de establecimiento.
2. Espacio de Estado
Podemos también representar el sistema usando las ecuaciones de espacio de estado. Pruebe los siguientes comandos en un nuevo archivo-m.
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
A=[-b/J K/J
-K/L -R/L];
B=[0
1/L];
C=[1 0];
D=0;

step(A, B, C, D)

Método de Diseño PID for Velocidad del Motor de CCControl
Control proporcional
control PID
Sintonización de ganancias
A partir del problema principal, las ecuaciones dinamicas y la función transferencia a lazo abierto del Motor de CC son:

y el esquema del sistema se ve:

Para las condiciones originales del problema y la derivación de las ecuaciones de arriba, refiérase por favor a Modelación de un Motor de CC .
Los criterios de diseño con una entrada escalón de 1 rad/seg. son:
* Tiempo de establecimiento menor que 2 segundos
* Sobrepico menor que 5%
* Steady-stage error menor que 1%
Diseñemos ahora un controlador PID adicionémoslo al sistema. Cree primero un archivo-m nuevo y tipee los siguientes comandos (pinche en Modelación del motor de cc por detalles sobre estos comandos).
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
Recordemos que la función de transferencia para un controlador PID es:

Control proporcional
Tratemos de usar primero un controlador proporcional con una ganancia de 100. Agregue el siguiente código al final de su archivo-m:
Kp=100;
numa=Kp*num;
dena=den;
Para hallar la función de transferencia a lazo cerrado , usamos el comando cloop . Agregue la siguiente línea a su archivo-m:
[numac,denac]=cloop(numa,dena);
Note que numac y denac son el numerador y el denominador de la función de transferencia a lazo cerrado general.Ahora veamos cómo se ve la respuesta al escalón, agregue lo siguiente al final de su archivo-m, y ejecútelo en la ventana de comandos:
t=0:0.01:5;
step(numac,denac,t)
title('Respuesta al escalón con Control Proporcional')
Debería obtenerse la figura siguiente:

control PID
De la figura de arriba vemos que tanto el error de estado estacionario cuanto el sobrepico son muy grandes. Recordemos del tutorial PID que incorporando un término integral se eliminara el error de estado estacionario y un término derivativo reducira el sobrepico. Probemos un controlador PID con Ki y Kd pequeños. Modifique su archivo-m de manera que se sea ve lo siguiente. Luego de correr este nuevo archivo-m se da la figura siguiente.

J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];

Kp=100;
Ki=1;
Kd=1;
numc=[Kd, Kp, Ki];
denc=[1 0];
numa=conv(num,numc);
dena=conv(den,denc);
[numac,denac]=cloop(numa,dena);
step(numac,denac)
title('Control PID con pequeño Ki and Kd')

Sintonización de ganancias
Ahora el tiempo de establecimiento es muy largo. Incrementemos Ki para reducir el tiempo de establecimiento. Regrese a su archivo-m y cambie Ki a 200. Vuelva a ejecutar elarchivo y debería obtenerse un grafico com éste:

Ahora vemos que la respuesta es mucho mas rapida que antes, pero el Ki grande ha empeorado la respuesta transitoria (gran sobrepico). Incrementemos Kd para reducir el sobrepico. Vuelva al archivo-m y cambie Kd a 10. Vuelva a correrlo para obtener este grafico:

Entonces sabemos que si usamos un controlador PID con
Kp=100,
Ki=200,
Kd=10,
todos nuestros requerimientos de diseño seran satisfechos.
Método de Diseño por Lugar de Raíces para Control de Velocidad del Motor de CC
Dibujo del lugar de raíces a lazo abierto
Calculo de la ganancia mediante el comando rlocfind
Adición de un controlador en atraso
Dibujo de la respuesta a lazo cerrado
A partir del problema principal, las ecuaciones dinamicas y la función de transferencia a lazo abierto de la Velocidad del Motor de CC son:

y el esquema del sistema se ve:

Para las condiciones originales del problema y la derivación de las ecuaciones de arriba, refiérase por favor a Modelación de un Motor de CC.
Con una referencia escalón de 1 rad/seg., los criterios de diseño son:
* Tiempo de establecimiento menor que 2 segundos
* Sobrepico menor que 5%
* error de estado estacionario menor que 1%
Diseñemos ahora un controlador mediante el método del lugar de raíces.
Cree un nuevo archivo-m y tipee los siguientes comandos (refiérase a problema original para detalles de cómo obtener estos comandos).
J=0.01;
b=0.1;
K=0.01;
R=1;L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
Dibujo del lugar de raíces a lazo abierto
La idea principal del diseño por lugar de raíces es para hallar la respuesta a lazo cerrado a partir del diagrama del lugar de raíces a lazo abierto. Entonces agregando ceros y/o polos a la planta original, puede modificarse la respuesta a lazo cerrado. Veamos primero el lugar de raíces de la planta. Agregue los siguientes comandos al final de su archivo-m.
rlocus(num,den)
sgrid(.8,0)
sigrid(2.3)
title('Lugar de Raíces sin a controlador')
El comando sigrid es la función definida por el usuario. Debe copiar el archivo sigrid.m a su directorio para poder usarlo. Para mas información sobre cómo usar las funciones, refiérase a funciones.
Los dos argumentos en el comando sgrid son el coeficiente de amortiguamiento (zeta) (0.8 corresponde a un sobrepico del 5%), y la frecuencia natural (Wn) (= 0 corresponde a no tiempo de subida ) respectivamente. El único argumento en el comando sigrid es el término sigma (4.6/2 segundos = 2.3). Luego de salvar el archivo sigma.m en su directorio, corra el archivo-m de arriba en la ventana de comandos. Debería obtener el diagrama del lugar de raíces que se muestra abajo:

Calculo de la ganancia mediante el comando rlocfind
Si recuerda, necesitamos que el tiempo de establecimiento y el sobrepico sean lo mas pequeño posible. Amortiguamientos grandes se corresponden con puntos cercanos al eje real en el lugar de raíces.Una respuesta rapida se corresponde con puntos muy a la izquierda del eje imaginario en el lugar de raíces. Para hallar la ganancia correspondiente a un punto en el lugar de raíces, podemos usar el comando rlocfind . Podemos hallar la ganancia y dibujar la respuesta al escalón usando esta ganancia todo al mismo tiempo. Para hacerlo, entre los siguientes comandos al final de su archivo-m y ejecútelo nuevamente.
[k,poles] = rlocfind(num,den)
[numc,denc]=cloop(k*num,den,-1);
t=0:0.01:3;
step(numc,denc,t)
title('Respuesta al escalón con ganancia')
Vaya a la figura y elija un punto en el lugar de raíces a medio camino entre el eje real y el requerimiento de amortiguamiento , digamos en -6+2.5i. Matlab debería devolver la salida similar la siguiente.

selected_point =
-5.9596 + 2.0513i

k =
10.0934

poles =
-6.0000 + 2.0511i
-6.0000 - 2.0511i
Note que los valores devueltos en la ventana de comandos del Matlab podrían no ser exactamente los mismos, pero debería al menos tener el mismo orden de magnitud. Debería obtener también la figura siguiente:

como puede ver, el sistema esta sobreamortiguado y el tiempo de establecimiento es alrededor de un segundo, Así que se satisfacen los requerimientos de sobrepico y tiempo de establecimiento. El único problema que podemos ver en esta figuraes el error de estado estacionario de acerca de 50%. Si incrementamos la ganancia para reducir el error de estado estacionario, el sobrepico se vuelve muy grande (pruébelo). Necesitamos agregar un controlador en atraso para reducir el error de estado estacionario.
Adición de un controlador en atraso
De la figura vemos que tenemos un lugar de raíces muy simple. Los criterios de amortiguamiento y tiempo de establecimiento se han logrado con el controlador proporcional. El error de estado estacionario es el único criterio no satisfecho con el controlador proporcional. Un compensador en atraso puede reducir el error de estado estacionario. Mediante esto, podríamos sin embargo incrementar el tiempo de establecimiento. Primero pruebe el siguiente controlador en atraso:

Esto puede hacerse cambiando su archivo-m al siguiente:
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];

z1=1;
p1=0.01;
numa = [1 z1];
dena = [1 p1];
numb=conv(num,numa);
denb=conv(den,dena);

rlocus(numb,denb)
sgrid(.8,0)
sigrid(2.3)
title('Lugar de Raíces con un controlador en atraso')
numa y dena son el numerador y denominador del controlador, y numb y denb son el numerador y denominador de la función de transferencia a lazoabierto entrada-salida .
Debería obtenerse el siguiente lugar de raíces, el cual luce muy parecido al original:

Dibujo de la respuesta a lazo cerrado
Cerremos ahora el lazo y veamos la respuesta al escalón a lazo cerrado. Entre el siguiente código al final de su archivo-m:
[k,poles]=rlocfind(numb,denb)
[numc,denc]=cloop(k*numb,denb,-1);
t=0:0.01:3;
step(numc,denc,t)
title('Respuesta al escalón con un controlador en atraso')
Vuelva a ejecutar este archivo-m en la ventana de comandos del Matlab. Cuando se le pida elegir un punto, escoja uno que esté cerca del requerimiento de amortiguamiento (línea puntedada diagonal). Debería obtenerse una figura similar a la siguiente:

Su ganancia debería ser cercana a 20. Como puede ver la respuesta no es muy satisfactoria. Debería notarse también que a pesar que se seleccionó la ganancia correlacionada con una posición cerca del criterio de amortiguamiento, el sobrepico no se acerca al 5%. Esto se debe al efecto del controlador en atraso . (su polo es mas lento). Lo que significa que podemos ir fuera de las líneas punteadas que representan el límite, y obtener las mas altas ganancias sin preocuparnos por el sobrepico . Vuelva a ejecutar su archivo-m, ponga la ganancia apenas por encima de la línea blanca punteada. Siga intentando hasta que obtenga una respuesta satisfactoria. Debería verse similar al siguiente (usamos una ganancia de aproximadamente 50):

El error de estado estacionario es menor que el 1%, ylos requerimientos de tiempo de establecimiento y sobrepico se han satisfecho. Como puede ver, los procesos de diseño por lugar de raíces tienen mucho de procedimientos de prueba y error. Esto es porque es facil dibujar el lugar de raíces, escoger la ganancia, y dibujar la respuesta en un sólo paso. Si no fuéramos capaces de obtener una respuesta satisfactoria eligiendo las ganancias, hubiésemos podido probar un controlador en atraso diferente, o aún adicionado a un controlador en adelanto.
Diseño Frecuencial para el Control de Velocidad del Motor de CC
Dibujo del diagrama de Bode original
Agregado de ganancia proporcional
Dibujo de la respuesta a lazo cerrado
Adición de un controlador en atraso
A partir del problema principal, las ecuaciones dinamicas y la función de transferencia a lazo abierto de la Velocidad del Motor de CC son:

y el esquema del sistema se ve:

Para las condiciones originales del problema y la derivación de las ecuaciones anteriores, refiérase por favor a Modelación de un Motor de CC .
Los criterios de diseño con una entrada escalón de 1 rad/seg., son:
* Tiempo de establecimiento menor que 2 segundos
* Sobrepico menor que 5%
* Error de estado estacionario menor que 1%
Cree un nuevo archivo-m y tipee los siguientes comandos (pinche en problema original para detalles de cómo obtener estos comandos).
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b))((b*R)+K^2)];
Dibujo del diagrama de Bode original
La idea principal del diseño basado en la frecuencia es usar el diagrama de Bode del función de transferencia a lazo abierto para estimar la respuesta a lazo cerrado. Agregando un controlador al sistema se cambia el diagrama de Bode a lazo abierto, por lo tanto también se cambia la respuesta a lazo cerrado. Primero grafiquemos el Diagrama de Bode para la función de transferencia a lazo abierto original . Agregue el siguiente código al final de su archivo-m, y entonces ejecútelo en la ventana de comandos del Matlab.
bode(num,den)
Debería obtenerse el siguiente diagrama de Bode:

Agregado de ganancia proporcional
Del diagrama de Bode anterior, vemos que el margen de fase puede ser mayor que aproximadamente 60 grados si w es menor que 10 rad/seg.. Agreguemos ganancia al sistema de modo que el ancho de banda sea 10 rad/seg., lo que nos dara un margen de fase de acerca de 60 grados. Para hallar la ganancia a 10 rad/seg., puede intentar de extraerlo del diagrama de Bode (parece ser apenas mas que -40 dB, o 0.01 en magnitud). El comando bode, invocado con argumentos a izquierda, puede también ser usado para proporcionar la magnitud exacta:
[mag,fase,w] = bode(num,den,10)
mag =

0.0139
para tener una ganancia de 1 a 10 rad/seg., multiplique el numerador por 1/0.0139 o aproximadamente 72.
num = 70*num
y re-ejecute su archivo-m. Debería tener el siguiente diagrama de Bode:

Dibujo de larespuesta a lazo cerrado
De la figura de arriba vemos que el margen de fase ahora es bastante grande. Veamos cómo luce la respuesta a lazo cerrado. Agregue un signo % al fina de los comandos bode y también el siguiente código al final de su archivo-m:
[numc,denc]=cloop(num, den, -1);
t=0:0.01:10;
step(numc,denc,t)
Vera la figura siguiente:

El tiempo de establecimiento es bastante rapido, pero el sobrepico y el error de estado estacionario son muy altos. El sobrepico puede ser reducido bajando un poco la ganancia para obtener un margen de fase mas alto, pero esto puede causar que el error de estado estacionario se incrementara. Probablemente se necesite un controlador en atraso.
Adición de un controlador en atraso
Podemos agregar un controlador en atraso para reducir el error de estado estacionario. Al mismo tiempo, debería tratarse de achicar el sobrepico reduciendo la ganancia. Reduzcamos la ganancia a 50, y probemos un controlador en atraso de

el cual debe reducir el error de estado estacionario en un factor de 1/0.01 = 100 (pero pudiera incrementar el tiempo de establecimiento). Regrese y cambie su archivo-m de manera que se sea ve lo siguiente:
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
num=50*K;

z=1;
p=0.1;
numa=[1 z];
dena=[1 p];
numb=conv(num,numa);
denb=conv(den,dena);bode(numb,denb)
Vuelva a ejecutar el archivo y obtendra este grafico:

El margen de fase aparenta bueno. El error de estado estacionario predicho estaría cerca de 1/40dB o 1%, como era lo deseado. Cierre el lazo y observe la respuesta al escalón . Agregue las siguientes líneas de código al final de su archivo-m y vuelva a ejecutarlo.
[numc,denc]=cloop(numb, denb, -1);
t=0:0.01:10;
step(numc,denc,t)

Ahora tiene a respuesta al escalón que satisface los requerimientos de diseño. El error de estado estacionario es menor que 1%, el sobrepico es alrededor de 5%, y el tiempo de establecimiento es alrededor de 2 segundos.
Control Digital de Velocidad
del Motor de CC con Control PID
Conversión de Continuo a Discreto
Controlador PID
En esta pagina, 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ñara por un método PID.
De la pagina 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 mecanico (b) = 0.1 Nms
*entrada (V): Fuente de Tensión
*salida (theta punto): Velocidad de rotación
*Se asume queel 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 hara 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.2369De 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 generara el vector de señales de salida discreto y el comando stairs las conectara . Pinche aquí para mas 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 mas 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 mas ceros que polos, lo cual no es realizable. En su lugar usaremos la transformación bilineal , definida como sigue:

Por lo quepodemos derivar el controlador PID discreto con el mapeo por la transformación bilineal. Para una derivación mas detallada de un controlador PID discreto , vea Controlador PID Discreto . Equivalentemente, el comando c2dm del Matlab le ayudara 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' usara la aproximación bilineal para la conversión a tiempo discreto de la derivada. De acuerdo con la pagina 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 usara 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 lazocerrado.
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 grafico 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 esta fuera del círculo unitario, el sistema sera inestable. Este sistema compensado siempre sera instable para cualquier ganancia positiva porque habra un número par de polos y ceros a la derecha del polo en -1. Por lo tanto ese polo siempre se movera 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 hara el sistema estable para al menos algunas ganancias. Ademas podemos elegir una ganancia apropiadadel 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 tendra 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 grafico de lugar de raíces. Debe pinchar en el grafico como sigue:

Entonces Matlab devolvera la ganancia apropiada y los polos compensados correspondientes, y se ploteara 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%. Ademas, 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.


Política de privacidad