▷ #TSCLab #TCLab #ESP32 #Arduino #Control #MACI
By: Ulbio Alejandro
En el siguiente blog se presenta la décimo octava práctica del laboratorio de control de temperatura y velocidad de un motor.
Objetivo general:
- Realizar el diseño del controlar PID que permita controlar el Motor DC a un valor de referencia de RPM.
Materiales:
- Matlab
- TSC-Lab
Procedimiento:
Procedemos abrir la herramienta PID Tuner, el mismo que nos permitirá ajustar la dinámica del lazo de control al momento de implementarla. Para esto, se debe exportar el modelo matemático dando clic en Plant, para luego importar la función de transferencia antes escogida.
Ilustración 1 Importar la función de transferencia
Ilustración 2 Selección de la función de transferencia correspondiente.
Luego, es posible ajustar la dinámica del sistema variando tanto: el tiempo en estado estable, sobrenivel porcentual, tiempo pico e importante que el lazo sea estable, podemos ajustarlo con la familia de controlador PID, eso lo realizamos en la sección Type de la parte superior y la forma paralela. Una vez que la respuesta sea la deseada, se debe exportar los datos al Workspace para ser trabajados mediante código, esto lo hace mediante la tecla Export de la parte superior de la herramienta.
Ilustración 3 Exportando las constantes PID ajustadas.
Una vez obtenida en el script, se procede a implementar una simulación en Simulink, el mismo que colocamos los bloques necesarios para su funcionamiento. Es importante que en el bloque PID se ajusten los parámetros encontrados y la planta resulta la función de transferencia obtenida en la identificación de sistemas.
Ilustración 4 Simulación del controlador PID.
Ilustración 5 Exportando todos los datos obtenidos del Scope.
Finalmente, podemos obtener la respuesta de control según las características del sistema previamente ajustada en la herramienta PID Tuner.
Ilustración 6 Gráfica en lazo de control cerrado, probando las características del controlador PID.
✅ Test del controlador PID en Matlab
Finalmente, podemos obtener la respuesta de control según las características del sistema previamente ajustada en la herramienta PID Tuner.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% ****************************** TSC-Lab ******************************* | |
% ***************************** PRACTICE 18 ***************************** | |
% This practice is about DC motor system identification | |
% By: Ulbio Alejandro | |
% Reviewed: Víctor Asanza | |
% More information: https://tsc-lab.blogspot.com/ | |
% More examples: https://github.com/vasanza/TSC-Lab | |
% Dataset: http://ieee-dataport.org/4138 | |
%% Este codigo es la continuacion del ejemplo | |
%https://gist.github.com/vasanza/6224f83b5815c531bedde8bb697a9cc5 | |
%Método 1 y 2 | |
%% Parámetros Controlador PID obtenido (FT Metodo 1 y 2) | |
Kp=0.000119 | |
Ki=0.000134 | |
Kd=0 | |
%% Gráfica de la simulación PID (FT Metodo 1 y 2) | |
sim('PruebaPID') %Simulación del bloque Simulink | |
Yssn=4000; %Punto en estado estable, ajuste de la velocidad deseada | |
%Cálculo de la banda del 2% | |
banda2=0.02*(Yss-0); %Se obtiene el 2% de la variación de Yss-Yop | |
band2=banda2*ones(length(Pid(:,1)-1),1); %Un vector continuo con dimensión t de banda | |
figure() | |
plot(Pid(:,1),Pid(:,2)) | |
hold on | |
plot(Pid(:,1),Pid(:,3)) | |
hold on | |
plot(Pid(:,1),[band2+Yssn Yssn-band2],'--') %Grafica la banda del 2% | |
grid on | |
legend('Setpoint','Ajuste PID') | |
title('Simulación PID') | |
xlabel('Tiempo [s]') | |
ylabel('Velocidad [RPM]') | |
%% Este codigo es la continuacion del ejemplo | |
%https://gist.github.com/vasanza/6224f83b5815c531bedde8bb697a9cc5 | |
%Método 3 | |
TF=load('FTmotor.mat'); | |
TF=TF.FTmotor; | |
% Open Loop | |
num=cell2mat(TF.numerator); | |
den=cell2mat(TF.denominator); | |
G=tf(num,den) | |
t = 0:1e-3:100; % time vector | |
u = ones(length(t),1)*255; % unit step input vector | |
y = lsim(G,u,t); % system response | |
figure; | |
plot(t,y); | |
% Test PID control | |
%load('C.mat') | |
Tref = getPIDLoopResponse(C,G,"closed-loop"); | |
hold on; | |
y1 = lsim(Tref*mean(y),u/ADCATmega328,t); % system response | |
plot(t,y1); | |
legend("Open Loop","Closed Loop"); |
Comments
Post a Comment