PID公式的部署与选择

连续形式PID:

Out_{t} = K_{P} *Error_{t} + K_{I} * \int_{0}^{t}Error_{t}d_{t} +K_{D} * \frac{\mathrm{d} Error}{\mathrm{d} t}

离散形式PID:

Out(k) = K_{P} * Error(k) + K_{I} * T *\sum Error(k)+ K_{D} *\frac{Error(k)-Error(k-1)}{T}

若将T并入K_i 和K_d ,则: 

Out(k) = K_{P} * Error(k) + K_{I}*\sum Error(k)+ K_{D} ( Error(k)-Error(k-1) )

位置式PID由连续形式PID直接离散得到,每次计算得到的是全量的输出值,可以直接给被控对象

增量式PID由位置式PID推导得到,每次计算得到的是输出值的增量,如果直接给被控对象,则需要被控对象内部有积分功能 增量式PID也可在控制器内进行积分,然后输出积分后的结果,此时增量式PID与位置式PID整体功能没有区别 位置式PID和增量式PID计算时产生的中间变量不同,如果对这些变量加以调节,可以实现不同的特性

float Target,Actual,Out;
float K_P = 0,K_I = 0,K_D = 0;
float Error0,Error1,ErrorInt;

Actual = Encoder_Get();
Error1 = Error0;
Error0 = Target - Actual;

if(K_I != 0){ErrorInt += Error0;}
else{ErrorInt = 0;}

Out = K_P * Error0 + K_I * ErrorInt + K_D * (Error0 - Error1);

if(Out > 100){Out = 100;}
else if(Out < -100){Out = -100;}

posted @ 2025-10-08 17:27  mc12356  阅读(7)  评论(0)    收藏  举报  来源