|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。 # y/ M* e8 Q$ n3 ^+ q% V
" e2 _1 |" I& ], c%清除变量,关闭其它窗口
+ t" _. S6 l+ k0 x* O% U! |clear all;) `. G: j" d. U$ U) Q1 b
%close all;9 @" m( m7 m) B. j! R6 \
%定义对象与取样时间) z/ w/ f$ M2 m- m( q: P& L( Z
ts=1; %定义取样时间
7 e& Z! w; ~8 V+ ~( n* qsys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2); %被控对象模型
- C) D2 H! c( R6 j+ ]dsys=c2d(sys,ts,'zoh'); %离散化
" }' H5 q- i0 ?4 ]/ E5 p4 G[num,den]=tfdata(dsys,'v'); %取出对象的模型参数" A, A8 N; S! T6 ^6 J
%初始化变量9 P# _* n o' d( N) ?
u_1=0;u_2=0;u_3=0;u_4=0;
: F! |' O7 `5 E! `) lu_5=0;u_6=0;u_7=0;
- K' ^1 o# [2 C1 F6 n& h: v5 Rud_1=0;/ m' Q( y( z: f4 X7 k0 O6 g+ f
y_1=0;y_2=0;/ w# w9 I4 r7 p0 q6 O
sum_err=0;
: W; F# h4 Y( ~/ J+ W% I& J, P: krin=0.98;7 c7 d5 G1 r( X: C
%参数给定
1 A3 s! w ]# h" t; e/ dkm=5.29;wm=17;
( H. s8 a4 A v" u1 v0 E8 Qkp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm; %此处由于超调较大,把ki减小了
, A- w) s" o6 d8 `4 } b4 R3 {%进入仿真* y" V, X7 L+ f
for k=1:1:4001 j( x4 d# a2 F5 z, r, y# Z
time(k)=k*ts;6 o, V1 L) b; P, B0 ]0 {' k) t+ K
yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;
! y0 S. n0 K& A+ b/ m- ^0 v error(k)=rin-yout(k);- h0 ^+ V5 F% d0 B L. \" Z: X
sum_err=sum_err+error(k)*ts;
1 G8 k( H; Y5 }7 ?3 ^4 S5 B$ ^
+ \" k! a7 v; q%计算控制器输出值u, I% \4 e+ T7 \* u
ud(k)=kd*(yout(k)-y_1)/ts; %计算D作用输出后的输出
# p6 f/ y6 M; _" b' j. K u(k)=kp*error(k)+ki*sum_err-ud(k);
7 Q* o9 \' V" i O/ R# `9 W7 A%限制控制器的输出值
: U% r! c+ o( e5 K( a/ S if u(k)>=110
5 I( b9 T6 L. R9 j4 q6 B u(k)=110;7 \2 Z6 @: ?0 ]. o; N( X) a1 `
end
9 e* W# U( U' }9 z4 s, Q if u(k)<=-1103 |( R) C& }; v# C* X2 r
u(k)=-110; O0 C4 h3 W. x- n
end
$ M. y4 H* A2 M6 }$ {, g
8 a4 I4 Q, c& a1 _: K" Z$ C2 a& F%更新参数
7 X8 z) ?9 a9 P g0 cy_2=y_1;y_1=yout(k);& L9 W" \* h; |6 \3 h
u_7=u_6;u_6=u_5;u_5=u_4;4 k1 _+ B6 ?8 a, w
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);# g+ v& @* z+ N" i9 D* r, q4 v- N
end( |" B* `5 T" |" ]
figure(1);0 P+ ?) y* m1 z6 Z- I9 z
plot(time,rin,'r',time,yout,'b');, X' R4 B5 l* q0 F+ j" q5 }0 S
xlabel('时间');ylabel('设定值,输出值');
! o% d. Y6 X: a. f& p0 {" j6 S |
|