找回密码
 注册
关于网站域名变更的通知
查看: 657|回复: 4
打印 上一主题 下一主题

微分先行的PID控制

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-9 17:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。 0 o% H2 j3 ?5 r/ \" x& ]
2 J7 d2 l) W# u# h# q
%清除变量,关闭其它窗口
0 M/ C2 |' B. c8 B5 U) Bclear all;( ~0 \9 O; R- h" I
%close all;: o, L* k5 W  X! o
%定义对象与取样时间, m6 d( V5 J0 u3 K6 j7 P
ts=1;                               %定义取样时间: Y/ W& m* ~9 F! o+ ?; C8 ~$ ?+ d
sys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2);    %被控对象模型5 H% y* e9 l: N
dsys=c2d(sys,ts,'zoh');             %离散化
, T% z* k  b/ `5 y8 c0 y, i[num,den]=tfdata(dsys,'v');         %取出对象的模型参数, F$ q# }0 R: D3 n) l% \
%初始化变量. z3 c% }* |) n, U8 H8 p8 I
u_1=0;u_2=0;u_3=0;u_4=0;
* M0 A, q# A2 L; \5 U  Lu_5=0;u_6=0;u_7=0;$ @, b8 M- w" v
ud_1=0;
6 i3 p& r1 c. L# D7 S: }y_1=0;y_2=0;
0 F$ ~% B  M/ c7 J- E+ _, lsum_err=0;& a" n" e8 O3 p3 `  r5 g  k' z
rin=0.98;
' o9 i0 w. P( W, p* i% B%参数给定# h7 T% A8 M9 h# I; b
km=5.29;wm=17;
7 X6 r7 ~. g6 h  Y& B% L( n+ zkp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm;    %此处由于超调较大,把ki减小了! Y8 j% v" r, x" Y
%进入仿真" [# t0 a+ u. n2 s
for k=1:1:4000 x. @, q' d* t- z, T# ]
    time(k)=k*ts;3 ^5 x! ^- F) p1 Q
    yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;6 ~4 r1 x3 @! _0 b! G& p' v' e
    error(k)=rin-yout(k);
0 ?  ~3 O: x; l8 a8 Y    sum_err=sum_err+error(k)*ts;
+ q% V6 g  C3 m# a' x   
3 R1 u. c1 U# k7 [4 I+ c%计算控制器输出值u
* U$ Z/ n3 v0 j6 M    ud(k)=kd*(yout(k)-y_1)/ts;                            %计算D作用输出后的输出$ ]1 _4 q$ |! q  r  [
    u(k)=kp*error(k)+ki*sum_err-ud(k);% L% q) Z( f. G& [# d
%限制控制器的输出值
# s5 w( h0 H: ?8 U  `# H1 H; ~& E    if u(k)>=110
; m* m/ @1 y9 l5 e& a        u(k)=110;
0 q: n) X5 n# Y) S1 w5 [7 U    end
) `1 G/ s6 c& S$ ]- o% T2 ^& H    if u(k)<=-110
- @8 V- c" h$ s# i% [        u(k)=-110;# I2 ?) Y. Q9 k& r6 ?
    end
: }  \& ?' c& J6 M5 k   
* y) p' Q" d6 e" E  R%更新参数
# w5 t  s& j& [y_2=y_1;y_1=yout(k);6 ^8 a3 K. N! d5 B9 k
u_7=u_6;u_6=u_5;u_5=u_4;; ?9 J" P# O7 _; ]5 L
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);3 _' ]5 d9 g( Y6 J3 W
end. K. D( b; D3 y3 z1 @+ H2 F1 L
figure(1);0 k$ o2 r( `8 o: x# c
plot(time,rin,'r',time,yout,'b');+ S( g+ j1 W- B0 P; D) e# I" o8 }
xlabel('时间');ylabel('设定值,输出值');  M$ d: N9 ]( u: h% q9 H

该用户从未签到

2#
发表于 2020-10-9 17:46 | 只看该作者
帮你顶一下

该用户从未签到

3#
发表于 2020-10-9 18:30 | 只看该作者
微分先行pid参数难道要重新整定?我的也是,普通pid参数用到微分先行上就完全乱了……

点评

还是不知道怎么解决  详情 回复 发表于 2020-10-10 13:54

该用户从未签到

4#
 楼主| 发表于 2020-10-10 13:54 | 只看该作者
nkkopd 发表于 2020-10-9 18:30
7 D5 }7 a; f5 v( P; w. ^4 j1 Z微分先行pid参数难道要重新整定?我的也是,普通pid参数用到微分先行上就完全乱了……
. n5 u) W: h. e1 V: H
还是不知道怎么解决
7 G2 O, }" t! u; d

该用户从未签到

5#
发表于 2020-10-10 14:30 | 只看该作者
我也遇到了这个问题,我是用的simulink实现的微分先行PID,但是一直没有调节好合适的参数导致效果很差。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 10:47 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表