image thumbnail

Control PID Motor Universal

by

 

Control PID Motor Universal, codigo, IEEE y archivos xslx y CSV

motor.m
%% toma de seales 
close all
data = xlsread('PlantaElectiva.xlsx')
var1 = data(:,1);
var2 = data(:,2);
var3 = data(:,4);
var4 = data(:,5);

% grafica de Rpm en funcion del voltaje de entrada de la planta 
plot(var3,var4)
title('Relacion Vin VS rpm')
xlabel('Voltaje De Entrada (v)')
ylabel('Revoluciones Por Minuto (rpm)')
grid

% grafica de Voltaje de entrda VS Voltaje de salida del sensor 
plot(var1,var2,'-r')
title('Relacion Vin VS Vout')
xlabel('Voltaje De Entrada (v)')
ylabel('Voltaje De Salida (v)')
% axis([1.9 5 .3 5.3])
grid


% Curva 1 del motor con escalon unitrio 1.8V a 2.8V 
data = csvread('CH1.CSV',9,2)
data2 = csvread('CH2.CSV',9,2)
var1 = data2(:,3);
var2 = data(:,2);
var3 = data(:,3);

close all
hold on

a=plot(var2-0.65,var3,'g')
b=plot(var2-0.63,var1,'b')
title('Curva De Reaccion Frente A Un Escalon Unitario (1.2v-2.2v)')
xlabel('Tiempo [Seg]')
ylabel('Voltaje De Salida (v)')
axis([-.1 3 0.5 5])
grid

% Curva de reaccion filtrada 

% Perform wavelet decomposition of the signal. 
n = 6; w = 'db3'; 
[c,l] = wavedec(var3,n,w);
% Compress using a fixed threshold. 
thr = 35; 
keepapp = 1;
[xd,cxd,lxd,perf0,perfl2] = ...
   wdencmp('gbl',c,l,w,n,thr,'h',keepapp);
curva1=(wdencmp('gbl',c,l,w,n,thr,'h',keepapp));

plot(var2-0.65,curva1-0.735)
axis([0 3 0 4])
grid

%% funcion de transferencia 

% TF sintonizada
num=3.839;
den=[0.004 0.33 1];
t=0:.1:5;
Graf=step(num,den,t);
%hold on
plot(t,Graf+.68,'r')
grid


% TF hallada matematicamente
num=3.839;
den=[0.0304 0.387 1];
t=0:.1:5;
Graf=step(num,den,t);
%hold on
plot(t,Graf+.68,'r')
grid

%% control 
% PID parametros de inicio 
hold on
H=tf(num,den)
PID=feedback(H, 1) 
step(PID,PID) % comportamiento del sistema ante un escalon
title('Comportamiento Del Sistema En Lazo Cerrado Sin control')
xlabel('Tiempo')
ylabel('Voltaje De Salida (v)')
axis([0 0.45 0 1.2])

% PID sintonizado 
hold off
num=3.839;
den=[0.004 0.33 1];
H=tf(num,den);
KPid=2; % Kp sintonizado
KId=2/.32; % Ki sintonizado
KD=2*0.005; % Kd sintonizado
FPID=tf([KD KPid KId],[1 0]); % bloque PID
PID=feedback(FPID*H, 1) % control PID sintonizado
step(PID,PID) % comportamiento del sistema ante un escalon
title('Curva Del sistema con el Control PID sintonizado')
xlabel('Tiempo')
ylabel('Salida (v)')
axis([0 0.3 0 1.2])


%% resultados

data = csvread('okCH1.CSV',9,2)
data2 = csvread('okCH2.CSV',9,2)
var1 = data2(:,3);
var2 = data(:,2);
var3 = data(:,3);
hold on
a=plot(var2-.6,var3,'g')
b=plot(var2-.6,var1,'b')
title('Vout Frente A Un Escalon Unitario (1.2v-2.2v)')
xlabel('Tiempo [Seg]')
ylabel('Voltaje In/Out (v)')
axis([0 9 0 3])
grid


% perturbaciones

data = csvread('FCH1.CSV',9,2)
data2 = csvread('FCH2.CSV',9,2)
var1 = data2(:,3);
var2 = data(:,2);
var3 = data(:,3);
hold on
a=plot(var2-.6,var3,'g')
b=plot(var2-.6,var1,'b')
title('Vout Frente A Una Perturbacion En El Rotor')
xlabel('Tiempo [Seg]')
ylabel('Voltaje In/Out (v)')
axis([0 3.5 0 3])
grid

Contact us