Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El controlador debe cumplir con las siguientes especificaciones: Anule el error en estado
estacionario, Sobredisparo menor del 10%, Tiempo de asentamiento menor a un tercio del
Ts en lazo abierto.
Ante una entrada escalón unitario simule la salida y(k), el error e(k) y la señal de control
u(k) del sistema controlado. Establezca análisis de los resultados para e(k) y para u(k).
Lo primero que se debe tomar en cuenta a la hora del diseño de un controlado PID con
asignación de polos es definir las especiaciones de diseño, para ello primero analizaremos
la información de nuestro sistema en lazo abierto.
En nuestro caso nuestra planta es de tercer orden, se debe saber que la técnica de
asignación de polos en discreta no funciona para sistemas de tercer orden o mayor, por lo
tanto eliminaremos el polo menos dominante del sistema, para llevarle a segundo orden y
que conserve su dinámica original.
>> sys3
sys3 =
s+1
------------------------
s^3 + 13 s^2 + 42 s + 10
Continuous-time transfer function.
>> pole(sys3)
ans =
-7.7417
-5.0000
-0.2583
El polo menos dominante es -7.7417, se elimina y se construye el nuevo sistema con los
dos polos restantes:
To = 0.8
Reescribimos el sistema con potencias negativas:
Gp(z) es la planta en discreto, ahora debemos hallar el controlador PID Gc(z) para realizar
el control.
El primer paso es hallar nuestro sistema deseado, para a partir de allí diseñar el
controlador.
Teniendo en cuenta que se necesita que el sistema controlado cumpla con:
Calculamos las especificaciones del sistema en lazo abierto con el comando stepinfo():
RiseTime: 8
SettlingTime: 15.2000
SettlingMin: 1.2972
SettlingMax: 1.3514
Overshoot: 0
Undershoot: 0
Peak: 1.3514
PeakTime: 63.2000
El Ts en lazo abierto es 15.2 segundos, por lo que para el diseño del PID se requeire un Ts
<5.066 segundos.
Procedemos a diseñar el sistema deseado, teniendo en cuenta la forma del sistema de
segundo orden:
fa=sqrt(((log(Mp/100))^2)/(pi^2+((log(Mp/100))^2)))
Wn=3/(fa*ts)
num=[Wn^2];
den=[1 2*fa*Wn Wn^2];
tau=1/(abs(max(roots(den))));
sys=tf(num,den)
sysd=c2d(sys,0.8,'impulse');%sistema deseado discreto
Gs = tf([0 0.495],[1 -0.52 0.09],0.8,'variable','z^-1')
Obteniendo:
Donde,
>
>
>
>
>
>
>
>
>
Donde se obtiene
>
Ahora se procede a hace Pc(z) = Pd(z) para hallar los coeficientes q0,q1 y q2:
>
>
>
>
>
Usando MATLAB:
Gc = tf([1.196370858 1.502077978 0.02778631894],[1 -
1],0.8,'variable','z^-1'); %Controlador pid
aa=Gc*Gp;
Gcon=feedback(aa,1)
stepinfo(Gcon)
figure(1)
subplot(3,1,1)
step(Gcon)
title('Sistema controlado con PID - Señal y(k)')
grid on
La señal y(k) es la salida del sistema, o el sistema controlado con el controlador PID, con
el comando stepinfo() verificamos si el sistema cumple con lo requerido:
>> stepinfo(Gcon)
ans =
RiseTime: 0
SettlingTime: 4.8000
SettlingMin: 1.0000
SettlingMax: 1.0883
Overshoot: 8.8258
Undershoot: 0
Peak: 1.0883
PeakTime: 0.8000
El sistema controlado presenta un Ts de 4.8 segundos el cual es menor al tercio de Ts en
lazo abierto (5.066 segundos), con un sobredisparo 8.83 % < 10 % tambien cumple esa
especificación, en la gráfica se observa como el sistema llega al valor de referencia
definido como 1 (escalón unitario), por lo que se elimina el error de estado estacionario.
Usando MATLAB:
num2=[1];
den2=[1];
ref=tf(num2,den2);
e=ref-Gcon;
subplot(3,1,2)
step(e)
grid on
title('Señal de error e(k)- Control PID')
Se obtiene:
subplot(3,1,3)
U=feedback(Gc,Gp)
u=e*U
step(u)
grid on
title('Señal de Control - Señal u(k)')
Se obtiene:
El controlador PID logra que el sistema alcance las especificaciones definidas, el sistema
controlado es mucho más rápido logrando llegar al estado estacionario en 4.8 segundos,
cuando en lazo abierto tardaba más de 15 segundos.
La señal de error e(k) en nuestro sistema de control PID es la señal actuante que llega al
controlador PID para luego ejercer la señal de control sobre la planta, como se sabe el
error dinámico es la diferencia entre el valor de referencia (escalón unitario r(k)) menos la
salida (sistema controlado y(k))
Luego de que la señal de error e(k) llega a nuestro controlador PID, se genera la señal
u(k), que es la salida del PID, es la señal de control que llega a la planta.
Parte 2: Control con PID con retardo
En este caso al añadir retardo al controlador también añadimos un grado de libertad más,
por lo que para este control utilizaremos la planta original de tercer orden.
>> sys3
sys3 =
s+1
------------------------
s^3 + 13 s^2 + 42 s + 10
num3=[1 1];
den3=[1 13 42 10];
sys3=tf(num3,den3);
sysd3=c2d(sys3,0.8,'impulse'); %planta en discreto
1∗10−15 ∗𝑧 −3
Por comodidad modificaremos la planta multiplicándole:
1∗10−15 ∗𝑧 −3
Esto para representar el sistema con potencias negativas, y lograr en Pc(z) = Pd(z) un
sistema de ecuaciones con # incógnitas = # ecuaciones. La constante 1 ∗ 10−15 que se
añade es para hacer los términos independientes tanto del numerador como del
denominador valores muy cercanos a cero.
La función de transferencia de la planta nos queda:
Como se puede observar los términos de z-3 tanto del numerador son valores muy
cercanos a cero, por lo que no los consideraremos parte del sistema y se maneja el
sistema en segundo orden para poder resolver el sistema de ecuaciones previo.
Gp2 =
>> step(Gp2)
>> stepinfo(Gp2)
ans =
RiseTime: 8
SettlingTime: 15.2000
SettlingMin: 0.0694
SettlingMax: 0.0769
Overshoot: 0
Undershoot: 0
Peak: 0.0769
PeakTime: 63.2000
Al igual que la planta modificada de la parte 1, el sistema en lazo abierto sigue sin
sobredisparo y con el tiempo de asentamiento en 15.20 segundos.
El controlador PID con retraso tiene la siguiente configuración:
Ahora se procede a hallar Pc(z) = A.P + B.Q y el sistema deseado Pd(z) partiendo de las
especificaciones ya definidas.
Como el sistema es de cuarto orden, se añaden dos polos no dominantes:
>
>
>
>
>
>
>
>
>
Así:
𝑃𝑐(𝑧)
1 ∗ 10−15
=
1.659 ∗ 10−17 𝛾 − 3.5060 ∗ 10−18 𝑞2
−1.8336 ∗ 10−15 − 1 ∗ 10−15 𝛾 + 1.7570 ∗ 10−17 𝑞𝑜 −1
+( )𝑧
1.659 ∗ 10−17 𝛾 − 3.5060 ∗ 10−18 𝑞2
8.5019 ∗ 10−16 + 1.8336 ∗ 10−15 𝛾 − 3.5060 ∗ 10−18 𝑞𝑜 + 1.7570 ∗ 10−17 𝑞1 −2
+( )𝑧
1.6590 ∗ 10−17 𝛾 − 3.5060 ∗ 10−18 𝑞2
1.6590 ∗ 10−17 − 8.5019 ∗ 10−16 𝛾 − 3.5060 ∗ 10−18 𝑞1 + 1.7570 ∗ 10−17 𝑞2 −3
+( ) 𝑧 + 𝑧 −4
1.6590 ∗ 10−17 𝛾 − 3.5060 ∗ 10−18 𝑞2
>
>
Finalmente,
𝑃𝑑(𝑧) = 330.09 − 431.93𝑧 −1 + 167.21𝑧 −2 − 16.45𝑧 −3 + 𝑧 −4
Ahora se iguala Pc(z) = Pd(z), se resuelve el sistema de ecuaciones para hallar q0, q1, q2
yγ:
>
>
>
>
>
Gcon2=feedback(bb,1);
figure(3)
subplot(3,1,1)
step(Gcon2)
grid on
title('Sistema controlado con PID con retardo - Señal y(k)')
ans =
RiseTime: 0
SettlingTime: 5.6000
SettlingMin: 1.0000
SettlingMax: 1.0685
Overshoot: 6.8526
Undershoot: 0
Peak: 1.0685
PeakTime: 1.6000
Donde se observa que el sistema con este controlador llega al estado estacionario a los
5.6 segundos, más lento que el PID sin retardo, pero mantiene el sobredisparo por debajo
del 10%, con un sobredisparo de 6.85%
b) Simulación de la señal de error e(k) ante una entrada escalón:
num2=[1];
den2=[1];
ref=tf(num2,den2);
e2=ref-Gcon2;
subplot(3,1,2)
step(e2)
grid on
title('Señal de error e(k)- PID con retardo')
subplot(3,1,3)
U=feedback(Gc2l,Gp2)
u=e2*U
step(u)
grid on
title('Controlador PID con retardo - Señal u(k)')
El controlador PID con retardo logra reducir el sobredisparo aunque resultó más lento que
el PID sin retardo, las señales de error y de control son acordes a la respuesta del
sistema.
Las tres señales graficadas:
Parte 3: Control con PID modificado (Realización 1)
Donde,
Tu = Retardo
To = Período de muestreo
k = por definir
Para hallar el retardo podemos usar la salida del sistema en lazo abierto ante un escalón
y con el cursor de MATLAB marcar el valor del retardo:
Ya teniendo Tu, procedemos a hallar m=To/Ti , se calcula Sz y se cierra el lazo según el
diagrama de bloques:
k=-13;
Tu=0.8; %Retraso de la planta en discreto
To=0.8 ; % Periodo de muestreo
m = (0.6*tau*To)/k*((Tu+(To/2)))^2;
s0 = k;
s1=-k*(1-m);
bbb=uz*Gp;
Gcon3=feedback(bbb,1);
figure(5)
subplot(3,1,1)
step(Gcon3)
grid on
title('Sistema controlado con PID modificado - Señal y(k)')
stepinfo(Gcon3);
A partir del código anterior obtiene la señal y(k), el sistema controlado con PID
modificado:
RiseTime: 0
SettlingTime: 4.8000
SettlingMin: 0.9853
SettlingMax: 1.0000
Overshoot: 5.2712
Undershoot: 0
Peak: 1.0527
PeakTime: 0
Donde se puede observar que con el PID modificado el sistema cumple todas las
especificaciones requeridas:
y3=step(Gcon3);
e3=u2-y3;
subplot(3,1,2)
plot(e3)
grid on
title('Señal de error e(k)- PID modificado')
c) Simulación de la señal u(k) ante una entrada escalón:
subplot(3,1,3)
U=feedback(uz,Gp);
u=e3*U;
step(u)
grid on
title('Señal de control del PID modificado - Señal u(k) ')
El controlador PID modificado logra mantener el sistema controlado bajo las
especificaciones determinadas, incluso reduce un poco el sobredisparo, y mantiene el
tiempo de asentamiento en 4.8 segundos, por supuesto como todo controlador PID
elimina el error en estado estacionario, las señales e(k) y u(k) concuerdan con el sistema
controlado.
Graficando las tres señales juntas:
Parte 4: Control con compensador Model Matching
Para el diseño de controladores digitales por Model Matching se deben tener en cuenta
las siguientes reglas.
1) Todos los compensadores usados deben ser funciones de transferencias razonables.
2) El sistema resultante debe ser causal
3) El sistema resultante debe ser estable
4) No se puede diseñar un compensador en paralelo a la planta
En este caso Glc(z) es nuestro sistema deseado en lazo cerrado:
sys=tf(num,den);
sysd=c2d(sys,0.8,'impulse');%sistema deseado discreto
Gs = tf([0 0.5203],[1 -0.1439 0.00823],0.8,'variable','z^-1'); %sistema
deseado discreto z^-1
Gf=feedback(Gs,1); %sistema
deseado lazo cerrado
Glz= tf(5*[0.8 -0.55],[1 0.3963 0.00823],0.8,'variable','z^-1');%sistema
deseado lazo cerrado con numerador modificado
Además el numerador de Glz lo modificamos por objetivos de diseño para que cumpla con
la condición número 2, la condición se comprueba al observar que tanto nuestro sistema
deseado y la planta ambos tienen primer orden en el numerador y segundo orden en el
denominador.
La condición se comprueba con el comando pole():
>> pole(Glz)
ans =
-0.3743
-0.0220
Donde los polos -0.3743 y -0.0220 se encuentran dentro del círculo unitario.
C=(1/Gp)*(Glz/(1-Glz));
mm=C*Gp;
Gcon4=feedback(mm,1);
figure(2)
step(1.04493*Gcon4)
grid on
hold on
step(Gp)
title('Comparacion: Sistema controlado vs Planta')
legend('Sistema controlado con M.M','Planta lazo abierto')
stepinfo(Gcon4)
b) Simulación de la señal de error e(k) ante una entrada escalón:
num2=[1];
den2=[1];
ref=tf(num2,den2);
e4=ref-1.04493*Gcon4;
subplot(3,1,2)
step(e4)
grid on
title('Error con Model Matching - Señal e(k)')
stepinfo(Gcon4);
c) Simulación de error e(k) ante una entrada escalón:
subplot(3,1,3)
U=feedback(C1,Gp);
u=e4*U;
step(u)
grid on
title('Señal de control por Model Matching - Señal u(k)')
Las tres señales comparadas: