Вы находитесь на странице: 1из 5

PRUEBA DEL PROGRAMA PARA HALLAR LOS PARAMETROS DEL

CONTROLADOR PID
Vamos usar una tabla en la cual tenemos el tiempo y el porcentaje
de agua en el tanque.
Tiempo (s)
Nivel de agua
(%)

0
0

10
10

15
35

Pasos a seguir:
Interpolacin Polinomial

Polinomio de Lagrange

Modelo matemtico

Pendiente a la tangente del


Primer punto de inflexin

30
89

Calcular parmetros L y T

Usar la tabla para encontrar


valores de PID

Cdigo completo para matlab


function calcular_Callback(hObject, eventdata, handles)
%obtenemos las dimensiones
g=get(handles.dimension,'Value');
%obtenemos los valores de la tabla
t=(get(handles.tabla,'data'));
%convertimos los valores de tabla a numeros
t=str2double(t);
%guardamos los valores de X
X=t(:,1);
%guardamos los valores de Y
Y=t(:,2);
%calculamos el tamao de X
d=length(X);
%aplicamos el algoritmo de lagran para obtener el polinomio
for k=1:d
V=1;
for j=1:d
if k~=j
V=conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
end
C=Y'*L;
%convertimos los vectores en un polinomio
Q=poly2sym(C);
pol=inline(Q);
%convertimos el polinomio en caracteres
Q=char(Q);
%enviamos los caracteres obtenidos en string para el modelo matematico
set(handles.lagra,'String',Q);
%enviamos la grafica
fplot(handles.cuadro,pol,[min(X) max(X)]);
grid on;
zoom on;
hold on;
%Pasos para calcular un valor en el rango de valores segun el modelo
%matermatico hallado
vx=(get(handles.valor,'string'));
vx=str2double(vx);
if vx<min(X)
set(handles.error,'string','Ingrese el valor de t dentro del intervalo
de valores ');

end
if vx>max(X)
set(handles.error,'string','Ingrese el valor de t dentro del intervalo
de valores ');
end
%para mostrar el valor dentro de la grafica
s=pol(vx);
s=num2str(s);
set(handles.solucion,'string',s);
s=str2double(s);
plot(vx,s,'ko');
hold on
%HALLANDO LOS VALORES DE T Y L
%Primer punto de inflexin
R=poly2sym(C);
%Usaremos el metodo de biseccin para el valor del punto de inflexin
A=diff(diff(R));
A=inline(A);
a=min(X);
b=max(X);
n=ceil(log((b-a)/(1e-3))/log(2));
for i=1:n
xb=(a+b)/2;
if A(a)*A(xb)<0
b=xb;
else
a=xb;
end
end
%Hallando la recta tangente al punto de inflexin
syms xt;
f1x=diff(R);
f1x=inline(f1x);
yt=pol(xb)+f1x(xb)*(xt-xb);
%ecuacin de la recta tangente
yt=inline(yt);
%graficamos la recta tangente
fplot(yt,[min(X),max(X),min(Y),max(Y)],'g');
plot(max(Y),[min(X),max(X)],'g');
hold off
%Hallando el valor de L con metodo de bisceccin
al=min(X);
bl=max(X);
n=ceil(log((bl-al)/(1e-3))/log(2));
for i=1:n
L=(al+bl)/2;
if yt(al)*yt(L)<0
bl=L;
else
al=L;
end
end
set(handles.valorl,'String',L);

%Hallando el valor de T con metodo de biseccin


yT=pol(xb)+f1x(xb)*(xt-xb)-max(Y);
yT=inline(yT);
alT=min(X);
blT=max(X);
n=ceil(log((blT-alT)/(1e-3))/log(2));
for i=1:n
T=(alT+blT)/2;
if yT(alT)*yT(T)<0
blT=T;
else
alT=T;
end
end
set(handles.valort,'String',T);
%Hallando los valores de Kp, Ti, Tp
set(handles.kpp,'String',T/L);
set(handles.kppi,'String',T*0.9/L);
set(handles.kpid,'String',T*1.2/L);
set(handles.tipi,'String',L/0.3);
set(handles.tipid,'String',2*L);
set(handles.tdpid,'String',0.5*L);

Ingreso de valores y salidas en el programa

Вам также может понравиться