我在使用pi控制器时发现pi0和pi1的输出不符合预期,可以做以下的一个测试来验证:
pi公式为U(k) = U(k-1) + Kp*(E(k) – E(k-1)) + Ki*E(k)
设置PIx_KP=1,PIx_KI= 0,PIx_EK保持不变,这种情况下,输出ePIx_UK应该是一个恒定值,但是pi0和pi1的输出会增加,同样的输入(另外PIx_KD=0),PID控制器(pi2,pi3)符合预期。
DEBUG结果如下
测试代码基于pi/pid例程https://bbs.elecfans.com/jishu_2013947_1_1.html修改,只更改了main函数
void main(void)
{
int32 ePI0_Result[5];
int32 ePID2_Result[5];
uint8 eTempNum;
/* -----选择PID2并初始化----- */
//PI0_Init_Parameter(eKP_0, eKI_0, eEK1_0, eUKMAX_0, eUKMIN_0, eUK1_0);
PI0_Init_Parameter(1, 0, 1, 4096, -4096, 0);
//PID2_Init_Parameter(eKP_2, eKI_2, eKD_2, eEK1_2, eEK2_2, eUKMAX_2, eUKMIN_2, eUK1_2);
PID2_Init_Parameter(1, 0, 0, 1, 1, 4096, -4096, 0);
while (1)
{
for(eTempNum=0;eTempNum<5;eTempNum++)
{
/* -----用PID2进行PID运算并赋值给PID_Result[i]----- */
ePI0_Result[eTempNum] = PI0_Arithmetic(1);
ePID2_Result[eTempNum] = PID2_Arithmetic(1);
}
_nop_();
}
}
希望峰岹的大哥有空能解答疑问。
更多回帖