資源簡介
最近在學習PID的一些知識,只是matlab的PID控制程序代碼

代碼片段和文件信息
%PID?Controller
clear?all;
close?all;
ts=0.001;%采樣時間=0.001s?
sys=tf(5.235e005[186.351.047e0040]);????%建立被控對象傳遞函數G(s)=523500/(s^2+86.35*s^2+10470*s+0)
dsys=c2d(systs‘z‘);???%連續的時間系統轉化為離散的時間系統即離散化.‘ts‘表示雙線性變換法?‘z‘表示帶零階保持器的Z變換法可缺省
[numden]=tfdata(dsys‘v‘);???%離散化后提取分子、分母?
u_1=0.0;u_2=0.0;u_3=0.0;??%只有U_1是初始狀態值,而U_2是用來傳遞U(k)的,所以U_2是U_1在下一個ts時間內的值?
y_1=0.0;y_2=0.0;y_3=0.0;
x=[000]‘;?????????%PID的3個參數Kp?Ki?Kd組成的數組?
error_1=0;?????????%初始誤差
for?k=1:1:500???%500是仿真時間
time(k)=k*ts;
???
S=3;
if?S==1
????kp=0.50;ki=0.001;kd=0.001;??????????
????rin(k)=1;???????????????????????%Step?Signal,輸入為階躍信號
elseif?S==2
????kp=0.50;ki=0.001;kd=0.001;??????????
????rin(k)=sign(sin(2*2*pi*k*ts));??%Square?Wave?Signal,輸入為方波信號
elseif?S==3
????kp=1.5;ki=1.0;kd=0.01;??????????%Sine?Signal,輸入為正弦信號
????rin(k)=0.5*sin(2*2*pi*k*ts);???????????
end
u(k)=kp*x(1)+kd*x(2)+ki*x(3);???%PID?Controller
%Restricting?the?output?of?controller
if?u(k)>=10???????%輸入輸出的限幅
???u(k)=10;
end
if?u(k)<=-10
???u(k)=-10;
end
%Linear?model
yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3;
error(k)=rin(k)-yout(k);????????????%相對誤差
%Return?of?parameters
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
???
x(1)=error(k);????????????????%Calculating?P
x(2)=(error(k)-error_1)/ts;???%Calculating?D
x(3)=x(3)+error(k)*ts;????????%Calculating?I
error_1=error(k);
end
figure(1);
plot(timerin‘b‘timeyout‘r‘);
xlabel(‘time(s)‘)ylabel(‘rinyout‘);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1663??2017-09-27?14:53??PID控制程序.m
-----------?---------??----------?-----??----
?????????????????1663????????????????????1
- 上一篇:Matlab高階統計量工具箱
- 下一篇:simuli
nk逆變器
評論
共有 條評論