typedef struct
{
float Kp; //比例系数Proportional
float Ki; //积分系数Integral
float Kd; //微分系数Derivative
float Ek; //当前误差
float Ek1; //前一次误差 e(k-1)
float Ek2; //再前一次误差 e(k-2)
float Sum; //累计积分位置
}PID;
PID pid;
static float PID_Calc(float TargetPLoad, float PowerPresent, PID *PID)
{
float PID_Calc; //位置
PID->Ek = TargetPLoad - PowerPresent;
PID->Sum += PID->Ek; //累计误差
PID_Calc = PID->Kp * PID->Ek + (PID->Ki * PID->Sum) + PID->Kd * (PID->Ek1 - PID->Ek);
PID->Ek1 = PID->Ek;
return PID_Calc;
}
//uint32_t ActualValue,SetValue;
1.你想要 5v 电压,但是现在实际电压是2v.
2.这样就知道 差值 =设置5v-实际电压2v=3v
3,把3放入PID,这样PID就自动输出PWM值,自动自加到5V
这只是PID其中一个优势