专家、您好!
我正在设计用于电感器电流控制的3类控制器。 得到的典型3补偿器如下所示。
COMP =
333.9s^2 + 1.498e06 s + 4.428e09
-------------------------------------------------------
S^3 + 1.098e04 s^2 + 1.088e06 s
采样时间为20e-s 的数字时
0.003148 z^3 - 0.002862 z^2 - 0.003132 z + 0.002878
-------------------------------------------------------
z^3 - 2.802 z^2 + 2.604 z - 0.8021
我通过以下方式实现了上述内容。
#include
#定义 A1 2.802.
#define A2 - 2.604.
#define A3 0.8021.
#define B0 0.003148.
#define b1-0.002862.
#define b2-0.003132.
这是一个很好的例子
***** 某些随机代码*****
void inner_Loop_Control()
{
Cntrl3P3Z.set = 0;
Cntrl3P3Z.FBK =(float) IL_filtered;
E[0]= Cntrl3P3Z.set - Cntrl3P3Z.FBK;
Y[0]= B0*E[0]+
B1*E[1]+
B2*E[2]+
B3*E[3]+
A1*Y[1]+
A2*Y[2]以上
A3*Y[3];
Y[0]=限制器(Y[0]、1000、0);//饱和 UL 1000和 LL -0
//存储先前的值
Y[3]=Y[2];
Y[2]=Y[1];
Y[1]=Y[0];
E[3]=E[2];
E[2]=E[1];
E[1]=E[0];
DacbRegs.DACVALS.all = 4*Y[0];
DacaRegs.DACVALS.all = Cntrl3P3Z.set;
}
首先、我将参考值设置为0、并在反馈中标记了一些偏移集、这会产生一些-ve 错误。 因此、我的控制器输出应该趋稳在较低的饱和值。 即0。 但我在一个周期后重复了一些值

因此、我将设定值设置为4000、FBK 具有一些小的偏移、从而产生巨大的+ve 误差。 因此、我希望我的控制器能够稳定在+ve 饱和限值、即1000、但在输出端仍显示相同的图形。

我的控制器实现是否正确? 有人能帮我找出我犯了错的地方吗?
