pr控制C语言程序,PR控制(含代码)

更新时间:2023-07-20 17:11:30 阅读: 评论:0

pr控制C语⾔程序,PR控制(含代码)
`转csdn的‘ xx健’,原⽂链接如下:
⽐例谐振PR控制器的学习记录
和博客园⾥‘Hao的杂货店’的⽂章。原⽂链接:
⽐例谐振的⼀种实现
写的都蛮好,⾮常感谢。
再贴⼀篇百度⾥的:
⽐例谐振控制算法分析农夫乐园
下⾯贴⼀下我⾃⼰改动过的代码,哈哈哈写的⽐较乱也就我勉强看的懂了。
根据控制理论只是,我们取谐振峰增益衰减到3dB处的频率作为频带宽。也就是增益值为0.707倍。经过推导,可以得到两个频率点的计算公式:
具体可以见下⾯那张图。
因此,可以看出,频带宽只和wc有关。
从数学的⾓度来分析,PR控制器传递函数相当于在PI控制器的传递函数的jw轴上加⼊了两个闭环极点,这两个极点的频率固定,并且会在此频率上发⽣谐振,此频率处的增益也会很⼤。因此PR控制器可以⽤来跟踪正弦指令信号,从数学的本质上讲,⽐例谐振控制器中的谐振频率相当于同步旋转的⾓速度,⽽传统的PI控制则由于少利⽤了⼀个⾓速度条件,因此系统会出现静态误差。
%s = tf([1, 0], 1) ;%等效于s=tf('s');
s=tf('s');
Kp = 4 ;
Kr = 100 ;
wr = 50 * 2 * pi ;
wi = pi ;
Ki=Kr;
Kd=10
G_PI=Kp+Ki/s;%PI
金色勋章% bode(G_PI)
% hold on;
G_PR = Kp + Kr * s / (s^2 + wr^2);%谐振
% bode(G_PR)
% hold on;
G_QPR = Kp + 2*wi * Kr * s / (s^2 + 2* wi * s + wr^2);%准谐振
跳发球% bode(G_QPR)
% hold on;坚韧不拔是什么意思
G_QPRD = Kp + 2*wi * Kr * s / (s^2 + 2* wi * s + wr^2)+Kd*s;%准谐振微分% bode(G_QPRD)
% hold on;
%matlab code
%s = tf([1, 0], 1) ;%等效于s=tf('s');
s=tf('s');
Kp = 15 ;
Kr = 2000 ;
wr = 50 * 2 * pi ;
wi = pi ;
G_QPR = Kp + Kr * s / (s^2 + wr^2)
bode(G_QPR)
hold on;
G_QPR1 = Kp + wi * Kr * s / (s^2 + wi * s + wr^2)
bode(G_QPR1)
hold on;
G_QPR2 = Kp + 0.5* wi * Kr * s / (s^2 + 0.5* wi * s + wr^2)
bode(G_QPR2)
hold on;
G_QPR3 = Kp + 2 * (2*wi) * Kr * s / (s^2 + 2 * (2*wi) * s + (wr)^2)
bode(G_QPR3)
hold on;
for alpha=1:0.3:1.9
G_QPR1 = Kp + alpha* wi * Kr * s / (s^2 + alpha* wi * s + wr^2)
bode(G_QPR1)
hold on;
end
G_PR = Kp + Kr * s / (s^2 + wr^2)
巴达捷夫斯卡figure
bode(G_PR)
hold on;
分析PR控制器参数调节以及各个参数对所对控制器的影响。
Kp:谐振控制器在特定的谐振频率处可以获得很⼤的开环增益,但是在Kr=256,wi=pi的时候,不同的Kp的PR控制器的bode图:
不同Kr下的bode图:
可以看出,当其他因素不变时,Kr增⼤,系统带宽不变,但控制器的增益会随之增⼤,且与Kr成正⽐。
wc主要是控制系统带宽,当然,更⾼的带宽会降低系统增益,因此带宽不能过⼤。
总结⼀下就是:
wc值的确定,主要与系统截⽌频率的带宽需求有关;
Kr值的确定,主要是根据系统所需要的峰值增益⼤⼩来确定;
Kp的确定,主要是以对⽐例增益的要求的⼤⼩来确定;
C语⾔实现:
桔子皮记录⼀下项⽬中具体实现时的⽅法:
⾸先进⾏控制参数的初始化:
/************************************************************
** 控制系数初始化
准谐振控制 G(s)=(2*wi*Kr*s)/(s^2+2*wi*s+w0^2);
tustin离散化 G(z)= (4*Kr*Ts*wi*z^2 - 4*Kr*Ts*wi)/((Ts^2*w0^2 + 4*wi*Ts + 4)*z^2 + (2*Ts^2*w0^2 - 8)*z + Ts^2*w0^2 -4*wi*Ts + 4)
系数:
b0 = (4*Kr*Ts*wi)/(Ts^2*w0^2 + 4*wi*Ts + 4);
b2 = -b0;
a1 = (2*Ts^2*w0^2 - 8)/(Ts^2*w0^2 + 4*wi*Ts + 4);
a2 = (Ts^2*w0^2 - 4*wi*Ts + 4)/(Ts^2*w0^2 + 4*wi*Ts + 4);
其中,wi=1.5*pi;
************************************************************/
EpsVoltCon_Reg.f32VoltCoff.a1 = -1.999439;//-1.9995648;
EpsVoltCon_Reg.f32VoltCoff.a2 = 0.9996859;//0.9998115;
EpsVoltCon_Reg.f32VoltCoff.b0 = 0.06020359;//0.04020359// gain=256 wi = 1.5pi Ts= 1/20k
峰回路转EpsVoltCon_Reg.f32VoltCoff.b1 = 0;
EpsVoltCon_Reg.f32VoltCoff.b2 = -0.06020359;//-0.04020359 // 改变Kr时改变b0和b2就可以,且正⽐关系;
PR控制器:
/* 计算R控制器 */关于廉洁的名言
#define CNTL_RC_F_C(v, c, x)\
<2 = v.errn1;\
<1 = v.err;\
< = x;\
\
v.outn2 = v.outn1;\
v.outn1 = v.out;\
v.out = (c.b0 * v.err + c.b2 * v.errn2)\
- (c.a1 * v.outn1 + c.a2 * v.outn2);
具体实现:
// PR控制
CNTL_RC_F_C(EpsVoltCon_Reg.f32VoltCNTL,
EpsVoltCon_Reg.f32VoltCoff,
EpsVoltCon_Reg.f32VoltInstant_Ref - (ADValue.f32VINV));
加⽐例环节:
CNTL_RC_F_C(EpsVoltCon_Reg.f32VoltCNTL,
EpsVoltCon_Reg.f32VoltCoff,
EpsVoltCon_Reg.f32VoltInstant_Ref - (ADValue.f32VINV));
/
/EpsVoltCon_Reg.f32PIOut += (EpsVoltCon_Reg.kvp + EpsVoltCon_Reg.kvi) * EpsVoltCon_
//- EpsVoltCon_Reg.kvp * EpsVoltCon_1;
EpsVoltCon_Reg.f32PIOut = (EpsVoltCon_Reg.kvp) * EpsVoltCon_;
EpsVoltCon_Reg.f32CurrRef = EpsVoltCon_Reg.f32PIOut + EpsVoltCon_Reg.f32VoltCNTL.out;
上述是直接根据离散化的⽅法来进⾏离散化,还有⼀种⽅法是可以将⽐例谐振控制器拆分成简单的积分组合,引进中间变量,以便于算法实现:

本文发布于:2023-07-20 17:11:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1089327.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:控制器   谐振   频率   系统   增益   控制
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图