|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。 . c' ]: m5 b5 M" e$ ~
4 S. f! v( s, | o' e: C9 C4 W1 q%清除变量,关闭其它窗口0 _" F6 p; |6 t/ v4 w
clear all;" q& B$ L: n& F; s4 j0 P6 b- q- e# v
%close all;9 k' e& A; K+ _4 K8 h- ?
%定义对象与取样时间
* J) Z) w6 H4 I" P+ |8 s' uts=1; %定义取样时间
* d( L) p C7 Q: @sys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2); %被控对象模型
* D, R/ G& h) o4 G3 s9 `, wdsys=c2d(sys,ts,'zoh'); %离散化
6 D8 @+ |( b+ O5 R. E6 f[num,den]=tfdata(dsys,'v'); %取出对象的模型参数& p4 @- K0 U p& P
%初始化变量
5 u3 Y0 w6 d8 ]9 p, p/ F1 ~u_1=0;u_2=0;u_3=0;u_4=0;
( w) U5 W C9 d- @6 P# C5 yu_5=0;u_6=0;u_7=0;
# A/ U5 T6 E9 ~; U5 Y# V5 Eud_1=0;: Y- X# k% b, o/ r! g! E9 j
y_1=0;y_2=0;
8 k+ j. d) I8 h! Y o1 s1 A& Z9 B7 vsum_err=0;; i* A# _3 \2 {6 \; v7 h8 n
rin=0.98;
; f7 b$ l6 E. U" r%参数给定) N# H+ r8 v8 ?; p. b. [3 e
km=5.29;wm=17;1 S( P8 L' F8 w5 ^8 b
kp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm; %此处由于超调较大,把ki减小了
: |6 p) G$ D7 ]5 Z8 t2 X) i%进入仿真
! [% p6 V0 t; e* k3 a' q4 s: ffor k=1:1:4007 W. s+ T/ x: K: H" i
time(k)=k*ts;: a2 M; f9 J/ W5 f8 M5 h
yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;
* K2 V# L& q# F3 I error(k)=rin-yout(k);
; `0 _: {& g0 k6 W4 ~7 K$ s; B sum_err=sum_err+error(k)*ts;
, W) ~4 {, U7 y$ \* j/ |
8 ^6 B* N+ n9 m* j5 x%计算控制器输出值u
; C4 L2 o: s1 ^5 ~4 Y# n5 m9 U: [: S# U ud(k)=kd*(yout(k)-y_1)/ts; %计算D作用输出后的输出6 [0 m" e0 f% l, n
u(k)=kp*error(k)+ki*sum_err-ud(k);( W) b( U9 J5 Y, D, D
%限制控制器的输出值
! C/ L1 F8 \7 f* \ if u(k)>=110
* s# i2 ~: I I0 {# U5 \& T u(k)=110;8 U6 j* I9 r( M/ ^$ t2 k, D1 ^
end
$ C4 O8 {+ M. m0 J if u(k)<=-1100 u8 o$ j) P% [' W5 W
u(k)=-110;
% u5 @5 w) A: ~( c/ i2 Z8 Z' F( ~ end
8 s! ~- p, b6 M9 I1 R: v! b ! W% |: V _2 v* j0 L }
%更新参数
, O" x$ H# [* o" U; W r3 My_2=y_1;y_1=yout(k);1 v0 ^$ x9 _/ P/ v6 s9 U1 @
u_7=u_6;u_6=u_5;u_5=u_4;
F5 g: h3 Q4 l( Wu_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);$ C2 L a4 Y1 [5 \% @& y/ Q7 R% v1 X
end
W6 |1 }2 ~/ P& x4 u, ?) Jfigure(1);
# X( h0 |7 Q7 ]: w) l) cplot(time,rin,'r',time,yout,'b');8 J/ u! P5 K5 Q' ~+ U" v. X3 u9 D; A
xlabel('时间');ylabel('设定值,输出值');4 N- J+ V3 y. [5 ^5 Y' J4 Z! l0 ~* k
|
|