RK4 中PID 算法的初值问题

考虑一个问题:当系统开始运行时PID 控制器的输出应该是0,还是其他值呢?

在状态空间方程中,方程的左边都是变量的微分,所以这就要求我们需要用微分的形式表示各种运算,包括算术方程。而将算术方程转化为微分方程时最重要的部分就是初始值的处理。例如:

  • 常数cc:微分为00,初始值是cc
  • 线性函数kt+bkt+b:微分是kk,初始值是bb
  • 二次函数at2+bt+cat^2+bt+c:微分是2at+b2at+b,初始值是cc

理想的控制器包含有:比例环节、积分环节和微分环节,其中:

  • 比例环节是一个线性函数kpek_pe,似乎初始值应当为00
  • 积分环节的初始值应当为00
  • 微分环节的初始值也应该为00

但是,因为比例环节kpe(t)=kp(ru)k_pe(t)=k_p(r-u)的输入会立即反映到输出端,所以在系统初始化时,比例环节的初始值应当是kpe0=kprk_pe_0=k_pr,之后再以kpe˙(t)k_p\dot{e}(t) 的速率变化。否则的话,则不能正确反映比例环节的变化情况。而积分环节是对于误差的积分,初始值为00 是显而易见的。最后对于微分环节kde˙(t)=kdu˙k_d\dot{e}(t)=-k_d\dot{u},其微分是kdu¨-k_d\ddot{u},可见其初始值至于系统的输出的变化率有关,而系统的输出的变化率在t0t_0 时一般也为00

综上,在自己建立状态方程式,控制器的初始值,其中的比例部分应当设置为kpe0=kprk_pe_0=k_pr

一个直流电机的例子

目前对于此类问题的认知还不够全面,需要在后续的实践中再加以总结。然而在建立微分方程时应当时刻考虑初始值的问题,尤其是对于方程中包含算术方程反馈运算的时候需要尤其注意。


2023-04-26 Aachen