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

微分先行的PID控制

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。 # y/ M* e8 Q$ n3 ^+ q% V

" e2 _1 |" I& ], c%清除变量,关闭其它窗口
+ t" _. S6 l+ k0 x* O% U! |clear all;) `. G: j" d. U$ U) Q1 b
%close all;9 @" m( m7 m) B. j! R6 \
%定义对象与取样时间) z/ w/ f$ M2 m- m( q: P& L( Z
ts=1;                               %定义取样时间
7 e& Z! w; ~8 V+ ~( n* qsys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2);    %被控对象模型
- C) D2 H! c( R6 j+ ]dsys=c2d(sys,ts,'zoh');             %离散化
" }' H5 q- i0 ?4 ]/ E5 p4 G[num,den]=tfdata(dsys,'v');         %取出对象的模型参数" A, A8 N; S! T6 ^6 J
%初始化变量9 P# _* n  o' d( N) ?
u_1=0;u_2=0;u_3=0;u_4=0;
: F! |' O7 `5 E! `) lu_5=0;u_6=0;u_7=0;
- K' ^1 o# [2 C1 F6 n& h: v5 Rud_1=0;/ m' Q( y( z: f4 X7 k0 O6 g+ f
y_1=0;y_2=0;/ w# w9 I4 r7 p0 q6 O
sum_err=0;
: W; F# h4 Y( ~/ J+ W% I& J, P: krin=0.98;7 c7 d5 G1 r( X: C
%参数给定
1 A3 s! w  ]# h" t; e/ dkm=5.29;wm=17;
( H. s8 a4 A  v" u1 v0 E8 Qkp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm;    %此处由于超调较大,把ki减小了
, A- w) s" o6 d8 `4 }  b4 R3 {%进入仿真* y" V, X7 L+ f
for k=1:1:4001 j( x4 d# a2 F5 z, r, y# Z
    time(k)=k*ts;6 o, V1 L) b; P, B0 ]0 {' k) t+ K
    yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;
! y0 S. n0 K& A+ b/ m- ^0 v    error(k)=rin-yout(k);- h0 ^+ V5 F% d0 B  L. \" Z: X
    sum_err=sum_err+error(k)*ts;
1 G8 k( H; Y5 }7 ?3 ^4 S5 B$ ^   
+ \" k! a7 v; q%计算控制器输出值u, I% \4 e+ T7 \* u
    ud(k)=kd*(yout(k)-y_1)/ts;                            %计算D作用输出后的输出
# p6 f/ y6 M; _" b' j. K    u(k)=kp*error(k)+ki*sum_err-ud(k);
7 Q* o9 \' V" i  O/ R# `9 W7 A%限制控制器的输出值
: U% r! c+ o( e5 K( a/ S    if u(k)>=110
5 I( b9 T6 L. R9 j4 q6 B        u(k)=110;7 \2 Z6 @: ?0 ]. o; N( X) a1 `
    end
9 e* W# U( U' }9 z4 s, Q    if u(k)<=-1103 |( R) C& }; v# C* X2 r
        u(k)=-110;  O0 C4 h3 W. x- n
    end
$ M. y4 H* A2 M6 }$ {, g   
8 a4 I4 Q, c& a1 _: K" Z$ C2 a& F%更新参数
7 X8 z) ?9 a9 P  g0 cy_2=y_1;y_1=yout(k);& L9 W" \* h; |6 \3 h
u_7=u_6;u_6=u_5;u_5=u_4;4 k1 _+ B6 ?8 a, w
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);# g+ v& @* z+ N" i9 D* r, q4 v- N
end( |" B* `5 T" |" ]
figure(1);0 P+ ?) y* m1 z6 Z- I9 z
plot(time,rin,'r',time,yout,'b');, X' R4 B5 l* q0 F+ j" q5 }0 S
xlabel('时间');ylabel('设定值,输出值');
! o% d. Y6 X: a. f& p0 {" j6 S

该用户从未签到

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$ ?9 p/ a/ r8 w! I9 s9 O
微分先行pid参数难道要重新整定?我的也是,普通pid参数用到微分先行上就完全乱了……
, l  T7 ~9 ?0 b8 [; C
还是不知道怎么解决5 Y, b$ |; D" Y( x% o

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-22 07:02 , Processed in 0.078125 second(s), 24 queries , Gzip On.

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

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

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