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

微分先行的PID控制

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用matlab编了一个微分先行的PID控制,我理解是PI对偏差作用,D只对输出起作用,PID的参数整定,我使用ZN整定4:1得到PID参数,结果得到的控制效果比普通的PID控制差。而且将输入延时时间由2改为5后,效果也是相当差,鲁棒性很差。
. f$ t4 d0 |- F# \! A
2 @3 }3 G7 \' R2 |, A%清除变量,关闭其它窗口6 B: }$ C% N. r& @
clear all;. C6 }$ E4 l% X2 R0 A6 ~
%close all;9 `, O! S% A3 M& F) W- N
%定义对象与取样时间2 z. c! ^" E$ W8 i- Y
ts=1;                               %定义取样时间
. y9 K8 n! m4 ]2 |* N6 {3 O  zsys=tf(4*[2.6,1],conv([34.3,1],[6.5,1]),'inputdelay',2);    %被控对象模型
  }$ L% ~# L  I4 E1 Xdsys=c2d(sys,ts,'zoh');             %离散化
3 s. ^$ w( i& C8 r: l' ]6 _5 }[num,den]=tfdata(dsys,'v');         %取出对象的模型参数# K- Y# y2 n0 y  P. }% O
%初始化变量5 q. Q6 o% d& T- D' z* ^
u_1=0;u_2=0;u_3=0;u_4=0;8 i. q1 p7 W& O( Z# M' X% v
u_5=0;u_6=0;u_7=0;' G1 O& ^/ O3 I- a# y; i" x4 |
ud_1=0;$ V+ s8 {0 Z( n9 ~* K
y_1=0;y_2=0;# e, O# ?5 m/ O1 C: I
sum_err=0;, R4 J1 e& `8 @
rin=0.98;
7 Z, S1 |' p* \7 H' B$ O% p* d%参数给定
) F' U5 h- a/ Ikm=5.29;wm=17;; u1 C; I+ I& ^7 b) Q# `; u
kp=km/1.7;ki=2*kp/wm-0.22;kd=kp*0.13*wm;    %此处由于超调较大,把ki减小了
( h0 Q% h6 j" E3 k) O4 T%进入仿真0 d* `( L! E8 p: F. W7 y! r1 |- o
for k=1:1:400
* F1 b: R/ K8 w, c* ]% P    time(k)=k*ts;
- S4 o7 {9 `! B8 u+ F    yout(k)=-den(3)*y_2-den(2)*y_1+num(2)*u_3+num(3)*u_4;
, Q3 D% \+ U# G: Z% Y8 J! m% r0 @3 b    error(k)=rin-yout(k);
/ ]) z1 K2 {1 b6 \# t  H    sum_err=sum_err+error(k)*ts;
) `2 v! a- q9 F' @, k- Y8 l   + K8 g% n/ k' c7 y1 y+ c
%计算控制器输出值u
+ D- s7 u: y4 }/ [, m' y    ud(k)=kd*(yout(k)-y_1)/ts;                            %计算D作用输出后的输出9 y3 h  K8 S: g1 w: [+ W( O/ |* o
    u(k)=kp*error(k)+ki*sum_err-ud(k);
: J7 w! D; Q$ C%限制控制器的输出值
* \9 L# U' x3 }  |5 v    if u(k)>=110% [8 r' f' S6 }2 h( ]- i$ ^
        u(k)=110;$ v8 e0 K/ E& _' J' ~3 F+ X
    end5 V: i1 g' D+ `, k: z
    if u(k)<=-110
9 I, z% U! m% X' u2 o, s        u(k)=-110;
% Y" X7 a( V4 Z6 T, x/ A    end* a6 N3 q- v* ?; v( H
   
$ t' f* \1 G( `$ `" Q% b; @+ _%更新参数
6 a- D5 U$ L8 J1 p5 ^1 `: K2 O+ Vy_2=y_1;y_1=yout(k);  |  n& b7 V4 L/ w9 A: o
u_7=u_6;u_6=u_5;u_5=u_4;& I6 q& F3 c) }5 B, u- U7 y' V
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
; m' h0 G3 e7 v# {end
2 K- q, N! n( c6 \2 [4 A9 H/ Cfigure(1);
7 t7 q5 T" c; u, ]5 Tplot(time,rin,'r',time,yout,'b');
1 {5 L' t8 S# `2 ]$ U/ Zxlabel('时间');ylabel('设定值,输出值');0 V" ~# f. f7 V& _$ C2 [

该用户从未签到

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 o  M! Q" n8 S$ A/ r
微分先行pid参数难道要重新整定?我的也是,普通pid参数用到微分先行上就完全乱了……

' k7 F/ X; u6 G6 w5 q+ X+ m( [还是不知道怎么解决( n3 J" {8 Y! b! R2 H4 a

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 07:14 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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