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

微分先行的PID控制

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。
! c% W6 o" G% o1 l- M/ I- T$ o- N+ D% Z5 b7 W; x9 c
%清除变量,关闭其它窗口
: d5 v1 ~( f1 J8 cclear all;
6 t+ P9 L0 Z$ l1 g9 a) ?/ K%close all;. l) T1 J) T! Z9 p
%定义对象与取样时间
3 Q; ~# G5 p7 X, a. |ts=1;                               %定义取样时间
8 x' f0 P7 k4 A. tsys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2);    %被控对象模型
# b: `+ f$ ^) B% @( ~+ c! M$ Ndsys=c2d(sys,ts,'zoh');             %离散化- ?. \1 G0 D/ ^6 v- E3 Q
[num,den]=tfdata(dsys,'v');         %取出对象的模型参数) c+ B0 a; J6 g
%初始化变量) M& ?, ^  ^2 B9 w
u_1=0;u_2=0;u_3=0;u_4=0;3 _- ]7 M1 H& e4 P  @
u_5=0;u_6=0;u_7=0;6 w! P3 h" L$ K4 q9 j& J9 d* A/ v
ud_1=0;
! Q5 f2 d: f' M7 |/ Ny_1=0;y_2=0;
5 k7 x% J" ^5 t4 I  D2 \5 T, h+ T. osum_err=0;
# u. S2 u% a) m3 e' g: o! O0 a. Srin=0.98;, Q) v# _; r9 }9 U: ^6 J2 I
%参数给定" N9 q: q- L/ m+ J0 a* b
km=5.29;wm=17;
3 L0 G! q! {; V9 G1 K5 e' Q2 v. qkp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm;    %此处由于超调较大,把ki减小了4 [  |3 x: h; S0 b; R
%进入仿真! {6 b# r9 z5 }6 }0 `8 n
for k=1:1:400. Q1 \3 E! e0 H& R$ z! v" _
    time(k)=k*ts;- u$ V+ p% e( V- L  L% v
    yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;4 e1 {8 a' e1 ^
    error(k)=rin-yout(k);% k) R& e9 j5 E2 z; B/ p3 @
    sum_err=sum_err+error(k)*ts;! z! o2 T  k4 R: [9 c5 C0 b
   5 B- Z- d; a4 ^; {2 Z
%计算控制器输出值u. ^0 d- J0 C& C" |2 z0 [. `
    ud(k)=kd*(yout(k)-y_1)/ts;                            %计算D作用输出后的输出
/ P! M, C. Q% \7 V- m1 Z    u(k)=kp*error(k)+ki*sum_err-ud(k);
2 j. S6 R. z5 l+ c  E%限制控制器的输出值! B6 L! N% R  ]( w& a1 c
    if u(k)>=1101 r- {  W3 d1 r* b& n: K
        u(k)=110;
/ w% h% t+ N$ H) G( m3 S2 }    end# c$ j$ B! s* o& D$ ^. t3 o
    if u(k)<=-1105 p) a( E/ |6 S6 e
        u(k)=-110;8 M# t7 Q* t& c, }4 L
    end/ p( O* t9 T" s6 o. }8 ?
   3 A) L4 B7 P0 t" T, B
%更新参数
5 v3 z( ~3 B. B  ~. c$ U5 Ty_2=y_1;y_1=yout(k);
' Y. m4 s9 a" f& v2 Lu_7=u_6;u_6=u_5;u_5=u_4;
1 ~! d3 ^2 M" ~7 W" T" D5 Au_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
' {! _8 [4 g- P7 k2 {end
  }; c1 e' h# m6 vfigure(1);
* e; f+ p; z# Eplot(time,rin,'r',time,yout,'b');. J5 t, t: |5 j# p1 C
xlabel('时间');ylabel('设定值,输出值');
  M# l' h" s7 X( F( n( H! [) D4 }

该用户从未签到

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
8 H/ X$ S7 R) Y1 L/ Z- o! G微分先行pid参数难道要重新整定?我的也是,普通pid参数用到微分先行上就完全乱了……
8 Z6 R2 W3 p+ l" ^  B) d
还是不知道怎么解决
2 f5 n+ O9 {; o4 I

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-2 17:16 , Processed in 0.187500 second(s), 28 queries , Gzip On.

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

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

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