|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。
~9 O4 z/ G, [# _
' L u5 r: U6 K6 w%清除变量,关闭其它窗口, G" r. @! F- F; T m
clear all;
1 U1 y7 K: ?! z; b) p%close all;
5 D2 Y3 `7 c3 G6 S! t%定义对象与取样时间
( w2 A; h5 u: r; t. W" ?. |/ Rts=1; %定义取样时间
# E8 A |0 O9 V9 j( U* U5 f" Lsys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2); %被控对象模型+ q. S4 w s! \0 C+ s% ~
dsys=c2d(sys,ts,'zoh'); %离散化
: N. a2 }: H: i8 [1 R[num,den]=tfdata(dsys,'v'); %取出对象的模型参数5 h/ |) R7 X4 ]
%初始化变量: u6 V% M' r+ j( ^
u_1=0;u_2=0;u_3=0;u_4=0;) X! ]" E; g& s
u_5=0;u_6=0;u_7=0;/ O9 j# y! S+ @& x7 i
ud_1=0;. G4 u$ Y6 O9 z# Y$ H( ]! A
y_1=0;y_2=0;
8 a" }! N/ }& l/ M9 Q- S6 W- |& Zsum_err=0;' s- l( \0 B' B8 H; S
rin=0.98;% c- u( `$ I0 V9 j
%参数给定/ `) T- m" P" P9 W7 I) y V# ^
km=5.29;wm=17;
/ S) ~ y9 z( b0 d2 |" x$ F Nkp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm; %此处由于超调较大,把ki减小了
; S* [$ I, {8 W7 f- u& v5 _8 k' t%进入仿真
7 E3 ~: o' q& D8 g, S( Jfor k=1:1:400
- H7 a& }/ e: i$ I time(k)=k*ts;1 }# ~4 g, k, h$ P D2 `: }& ~
yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;
/ d) w% q& E' E5 z: | error(k)=rin-yout(k);
# p4 G# G z' O sum_err=sum_err+error(k)*ts;$ n+ T" C$ t. |/ J+ c- X0 x
* U/ N2 k6 Q# K1 j- R' i% y, \. H%计算控制器输出值u
3 @, j8 A3 g8 u: h o) r ud(k)=kd*(yout(k)-y_1)/ts; %计算D作用输出后的输出
, x& i( {. |! S4 a* E( ] u(k)=kp*error(k)+ki*sum_err-ud(k);( k+ ?/ Z; N5 _/ f) f
%限制控制器的输出值+ H0 D/ T) ]( ~( v1 G
if u(k)>=110& ]9 J& b: B# m' u
u(k)=110;
$ N e h. W! N7 H ?4 h: w7 ~ end* I. z6 G5 j4 l( P0 k
if u(k)<=-110( D b/ a4 L# s
u(k)=-110;, x! X- `& t# h2 Y/ y$ ]( T. k2 d
end
7 X6 E |& o3 t( D ( y$ e5 W4 m' f7 H f
%更新参数
! u4 i$ d, o3 J' Ry_2=y_1;y_1=yout(k);* u3 r' K1 N5 ]+ K1 L
u_7=u_6;u_6=u_5;u_5=u_4;, t0 _% }! ^" b- W
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);; H3 i- c, b# o2 K
end
' Y7 T$ Y, q- u& Mfigure(1);+ P: c+ {5 S2 c+ r& {
plot(time,rin,'r',time,yout,'b');
1 R( D) c. t. @, W3 Uxlabel('时间');ylabel('设定值,输出值');) S8 O& y2 v1 |! _3 `5 K
|
|