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

微分先行的PID控制

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。   A" h, T( N0 T. a. L+ [" g

7 K" A4 O% a& Q8 [9 M6 j%清除变量,关闭其它窗口* T  N6 M0 z1 M
clear all;
( n, C6 G. ~! P% a- W% }$ L' n%close all;
6 @! ]  X0 N: G2 p%定义对象与取样时间! H/ A" a) @( k( n  g" k
ts=1;                               %定义取样时间
: N; a7 r1 Z2 Z6 F! @8 j2 k! E7 msys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2);    %被控对象模型
8 Z. M# j* A0 I* x, g0 _( c+ D8 ?dsys=c2d(sys,ts,'zoh');             %离散化
0 v4 K: X" ]+ j0 P0 h& A( p[num,den]=tfdata(dsys,'v');         %取出对象的模型参数
! c: p+ d3 E& e& i& m5 Z  B%初始化变量
; i* v5 _8 w6 V" Qu_1=0;u_2=0;u_3=0;u_4=0;
# }5 u& s0 {' K* K7 _, N5 A& K* tu_5=0;u_6=0;u_7=0;; G- ]- f0 j% d! [7 W7 {- y
ud_1=0;2 Y# S% ]0 h  F* u* S* r
y_1=0;y_2=0;
6 B; y8 w& j# e- p" a5 {sum_err=0;& x! k% r6 O6 p7 i8 V+ A2 ]1 A) e
rin=0.98;1 R- C2 S0 f2 a& t0 H
%参数给定7 X! e# H- b* q0 q+ L5 \$ n3 b
km=5.29;wm=17;1 \4 a: ]( X9 P
kp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm;    %此处由于超调较大,把ki减小了0 J9 E! K9 Q/ J+ j+ P
%进入仿真/ d7 r2 Q. {- k/ h+ |: T+ T7 }
for k=1:1:400" q$ g1 T% K; n" y" ?4 j- c
    time(k)=k*ts;
3 I6 T2 j: ~4 y    yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;2 T- @. a7 ?0 `3 Z) u7 s! w
    error(k)=rin-yout(k);
" D0 t& J* c: K, q8 h    sum_err=sum_err+error(k)*ts;# ^# J' X7 V. {
   
1 {; n( E- P( u%计算控制器输出值u. ]7 ~" d7 c  e8 o) _$ v' d
    ud(k)=kd*(yout(k)-y_1)/ts;                            %计算D作用输出后的输出
0 n- ?- n, z1 \9 o    u(k)=kp*error(k)+ki*sum_err-ud(k);. B; b- u, U/ U% n' i
%限制控制器的输出值% f4 o) f+ ~6 r/ b0 ]/ {
    if u(k)>=110
: @6 [* j& u3 ^) H, A' L$ v0 d        u(k)=110;1 E; R' P/ g! w7 F2 v) l( G
    end- y9 c9 n3 I4 H- w7 e
    if u(k)<=-1103 a9 z) g- x- S6 r5 ~% x% Q
        u(k)=-110;
8 t7 [8 ~0 m/ X! p6 a  B( y( m    end
- `) ~& F1 c( x7 u# K   
7 R5 k/ S) R" E6 W& h6 \/ H%更新参数, j% b0 K% [# ?+ u
y_2=y_1;y_1=yout(k);
. B4 [0 w' K- k- N. O) Lu_7=u_6;u_6=u_5;u_5=u_4;6 Q. `/ h/ a/ z5 M
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);9 Q6 K4 w: W/ L! q
end
9 Y' f6 l( O/ y3 Y/ efigure(1);
& C4 `* _8 W4 J$ z; Pplot(time,rin,'r',time,yout,'b');! ^! ?, l: d" Y7 E5 M( l+ U
xlabel('时间');ylabel('设定值,输出值');
) A: @, ]: |: S/ n

该用户从未签到

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( z( w4 [* p9 M, p$ ~' q
微分先行pid参数难道要重新整定?我的也是,普通pid参数用到微分先行上就完全乱了……
# D$ b) Q7 g; ]4 l
还是不知道怎么解决
! `2 L+ e$ p6 r+ I8 B

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-21 23:33 , Processed in 0.078125 second(s), 27 queries , Gzip On.

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

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

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