|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于离散PID的大量程序中的P,I,D,参数初始值不明白怎么来的。求助大神!! H- N+ U7 y! U
clear all;
* [/ U7 W/ y" g+ i% Dclose all;
! E! \# P7 E. I# f7 D- Yts=0.001;
% J2 f+ `$ y. l9 Dsys=tf(400,[1,50,0]);
0 }) p2 F7 @2 T: k Y+ f; mdsys=c2d(sys,ts,'z');$ t) c5 q( ?3 ~2 M1 B+ @6 f
[num,den]=tfdata(dsys,'v');
& w3 ? {, Z: L2 _. ]% {- Su_1=0.0;u_2=0.0;u_3=0.0;
" j. d; h5 N+ [+ ay_1=0;y_2=0;y_3=0;
8 {+ b3 j5 K" v( Q9 w) jx=[0,0,0]';; W0 w0 _# x8 S# h
error_1=0;6 S V& w h" ?5 d! x
error_2=0;$ \- K' v3 c7 e4 J% X4 m
for k=1:1:1000- \) q& {# [# I. a1 d
time(k)=k*ts;
$ x# a0 L5 F- o, t5 k * t* f8 d1 f7 f0 J( l7 m
yd(k)=1.0;
9 E) O% w' r# {/ O; ] kp=8;
* M, z" S. }' w7 J( R ki=0.10;(请问这三个参数的初始值怎么确定的)
' L9 ^' k5 H0 I, u2 u: i/ o' C kd=10;
c. T* @* L9 Q* G
4 `% @; \% s0 c8 x# T du(k)=kp*x(1)+kd*x(2)+ki*x(3); u7 ?1 x0 k: R
u(k)=u_1+du(k);
% `% R+ O+ D' m0 i& I if u(k)>=10. d! E; @ v7 d, O
u(k)=10;
7 Q/ V. N4 r9 ]4 t0 |& a5 B$ M% k end
- G+ V/ B, Y5 M, g: f if u(k)<=-10
8 ^) A' y: I$ d% t; I) m' U! T u(k)=-10;
& b; ?! T) E7 ?' _+ {& H end
2 Y& m4 D8 e) e+ _9 `- V ~ y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
& _, c4 [- W- X0 r' R
# y+ V2 b1 r* H; B3 m error=yd(k)-y(k);
. n, e5 V L/ z7 d/ ~$ A u_3=u_2;u_2=u_1;u_1=u(k);' i0 |: k* y$ f8 Z! k9 p
y_3=y_2;y_2=y_1;y_1=y(k);
6 `+ m( l3 e: | V- g8 T3 w
. Z9 N: e, e! j! w& } z7 r( {8 g x(1)=error-error_1; %Calculating P% l) l( M' R0 K2 C$ ]! K6 i6 t
x(2)=error-2*error_1+error_2; %Calculating D
) U8 j) ?* @; @0 m' t) W/ v c# W x(3)=error; %Calculating I. w# c+ ~; N Z9 O$ L' W1 C
5 f' Q; T. W/ b L+ Q
error_2=error_1;
8 ^* }, K* n5 ^5 F# V% D error_1=error;7 V$ Z5 m$ Z/ _3 l. z8 k
end
& i+ V7 l( R! ]# f. ?2 |figure(1);& ]8 l3 t, N5 v& M+ I2 P" z6 a' B
plot(time,yd,'r',time,y,'k:','linewidth',2);" ]7 c3 j; E" V) e
xlabel('time(s)');ylabel('yd,y');3 Y: S) l0 M( J6 B; }
legend('Ideal position signal','Position tracking')3 Q- i3 u1 I& L# M
|
|