|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于离散PID的大量程序中的P,I,D,参数初始值不明白怎么来的。求助大神!3 O6 z1 o- d: U
clear all;
4 @: f) W8 l- yclose all;
; |' q3 B( E- v0 J. v# H) f8 K# Wts=0.001;4 Y! n9 L, I/ f# q6 v% N p+ P
sys=tf(400,[1,50,0]);
1 [" |1 x0 ]5 z0 ^dsys=c2d(sys,ts,'z');
- {% Y7 x7 W& g! r! A4 M[num,den]=tfdata(dsys,'v');
1 z/ ?% j" H' v% [2 zu_1=0.0;u_2=0.0;u_3=0.0;2 i2 Y) h, @- y5 ~# q5 M) [1 V
y_1=0;y_2=0;y_3=0;0 B+ `0 l2 J' d7 t3 o* n8 o! W# @
x=[0,0,0]';
4 D( j+ [& n7 C/ z+ N* o2 berror_1=0;
+ S, ?- ]% D! U- [$ W$ e6 j7 N$ X; terror_2=0;# O6 Q% }; {& D$ c m( d. o# b
for k=1:1:10004 _0 i" b' p3 L
time(k)=k*ts;
2 c; e d* j) t6 o, v$ y
4 r% H0 l1 a B% w# }) S0 G& g6 J: a' N yd(k)=1.0;
7 U1 W6 t% F1 F E' o5 N+ W( l* j2 j8 l kp=8;1 d) E F) V& e& R g
ki=0.10;(请问这三个参数的初始值怎么确定的)
" R% L( Y I4 X& q6 a kd=10; h, w; F, X4 ^5 e4 t4 ~( z6 W
. e0 `3 W& ?% {7 L0 L4 F
du(k)=kp*x(1)+kd*x(2)+ki*x(3);1 Y# B; c# N9 k- {5 ^
u(k)=u_1+du(k);
. \2 g% Z$ ~1 m8 N/ d/ p. b+ B if u(k)>=10: W$ z+ P9 x: R& G7 z
u(k)=10;
0 d( m1 P8 P. I9 w end
+ e2 [* y2 R1 g& ^ if u(k)<=-10
6 B3 s0 b6 u6 x4 i# X2 u/ Q5 V0 ? u(k)=-10;
4 ^1 i4 y0 k l9 |6 l* E% T- ]8 N end ' C- F2 O: \6 N2 w& c
y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;) o2 s7 B+ _9 V/ p, O# |& [
" U2 L. N3 f( B0 o* ]- m6 ~
error=yd(k)-y(k);
% ]0 C- j. r7 G. C% {% E2 M u_3=u_2;u_2=u_1;u_1=u(k);0 T; ~, z/ s+ E% e( r# L* E
y_3=y_2;y_2=y_1;y_1=y(k);
& P& Q8 P. Z% j. {" N, \
9 @$ ?$ v3 z( K3 e$ j. i x(1)=error-error_1; %Calculating P
# m6 b. s" i4 Q3 E; J) x* j% ^9 B x(2)=error-2*error_1+error_2; %Calculating D& e( B5 M& S# r1 f% N' o! h7 T" s
x(3)=error; %Calculating I7 C4 _/ S. m7 G, I
+ d7 }! K9 V2 s/ f/ f, L error_2=error_1;
; |/ G! y7 D0 @. E+ q3 V8 c2 j error_1=error;) C4 U+ J( g4 J
end
4 x5 n; m2 ?. {3 D* U$ a) v0 V, A! Dfigure(1);
) Y. N; t! W) E& ^) Yplot(time,yd,'r',time,y,'k:','linewidth',2);
, U) r2 _$ t3 zxlabel('time(s)');ylabel('yd,y');
! q4 R0 O) @' _legend('Ideal position signal','Position tracking')4 L6 h, H' n9 ?1 D' a
|
|