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

微分先行的PID控制

[复制链接]

该用户从未签到

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

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

该用户从未签到

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$ x( q& u; Y/ v0 B4 [0 H# P+ L$ m
微分先行pid参数难道要重新整定?我的也是,普通pid参数用到微分先行上就完全乱了……
' o# z$ M" n1 a. c) N! u" j
还是不知道怎么解决
2 {" ^$ _' \7 u6 ]2 e! M. g; Y% Q, T7 V

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-29 13:21 , Processed in 0.109375 second(s), 27 queries , Gzip On.

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

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

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