|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于离散PID的大量程序中的P,I,D,参数初始值不明白怎么来的。求助大神!4 Z* k0 _ L6 Y, p0 B
clear all; B% }6 d7 \' o! |- u
close all;& g; T' L* \- x6 n6 J4 v, L
ts=0.001;
: F7 ^ p4 a9 F' p* S! i0 }sys=tf(400,[1,50,0]);
( Q1 G+ f4 [+ j- K1 E U; m; O8 Ndsys=c2d(sys,ts,'z');7 q4 S( t0 S7 E) A) A
[num,den]=tfdata(dsys,'v');+ N; p( Y9 g7 P, {0 A
u_1=0.0;u_2=0.0;u_3=0.0;1 `+ d+ a9 `4 y" o1 i
y_1=0;y_2=0;y_3=0;; g& H* f; y4 s9 [4 `; I; F u1 N
x=[0,0,0]';
) ]6 L" ~- M9 b: p# j3 Verror_1=0;
7 Y, `* N& ]# k# D6 D% C g& Oerror_2=0;
! b! D% S7 y0 |& kfor k=1:1:1000% w3 O. K3 ?; V) S6 w# S
time(k)=k*ts;
& T# y c( |4 K, X
% e$ c: o O' J5 i$ j5 A8 T yd(k)=1.0;5 f. v$ Y' K; y
kp=8;
" S7 t5 y8 u3 t4 `" d ki=0.10;(请问这三个参数的初始值怎么确定的)
+ Q0 J* i/ w( `" { kd=10;
% S% O4 J( o. | ; q# M& D) B8 s4 q
du(k)=kp*x(1)+kd*x(2)+ki*x(3);" v: J6 z* m& Y$ U9 {
u(k)=u_1+du(k);# j; |( s J" q0 {! A8 q' {
if u(k)>=104 A+ W+ M: [4 O8 ^& J) G
u(k)=10;
3 v( v4 ]; B; U" [* x! s end4 S" g; C5 w0 e) `/ B r
if u(k)<=-10
: b: A( _2 A/ Y( u% u u(k)=-10;
" d6 |# o6 s8 T6 _ end ) B, U$ D0 r5 C. p% E7 |& i& R
y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;& _ m4 t! n/ t% [& S6 R) ?
/ e! H. O% {: q& g6 N& @" W" \
error=yd(k)-y(k);# C3 Z: S# L6 I, T- i
u_3=u_2;u_2=u_1;u_1=u(k);
3 w. B% f2 j; s% ~4 i y_3=y_2;y_2=y_1;y_1=y(k);
9 N: n: r0 D; m5 I! r% O% D: m
. J4 o% w }- P$ K0 l( i x(1)=error-error_1; %Calculating P z) x A$ X' `
x(2)=error-2*error_1+error_2; %Calculating D- V3 L* k5 {6 }8 N3 W0 N
x(3)=error; %Calculating I/ Q1 ^! M) o! ~0 }- D) Q P
/ Z+ d0 L1 f: v- o
error_2=error_1;
7 T8 ?5 R8 a0 _ Q4 |# E4 G error_1=error;. a8 H+ C) y! G* i4 Y1 K8 d
end
+ l# Z% Y) j: Yfigure(1);
; `7 N# c2 i' H3 ?plot(time,yd,'r',time,y,'k:','linewidth',2);9 K t7 P9 s- A. v# z* b
xlabel('time(s)');ylabel('yd,y');! Y* a6 x3 h4 y; {4 L- c
legend('Ideal position signal','Position tracking')
0 Z) d S* p* K i* l |
|