inline void PID_run(PID_Handle pidHandle,const float32_t refValue,const float32_t fbackValue,float32_t *pOutValue)
{
PID_Obj *pid = (PID_Obj *)pidHandle;
float32_t Error; // PID internal variables
float32_t Up;
float32_t Ui;
uint32_t index; // Index value returned by arm min/max f32 functions
uint32_t blocksize = 2; // Block size for min/max value calculation
float32_t minArg[2]; // Arguments for min function
float32_t maxArg[2]; // Arguments for max function
float32_t maxValue; // Output of min function
float32_t minValue; // output of max function
// Update proportional output
Error = refValue - fbackValue;
Ui = pid->Ui; // load the previous integral output
Up = (pid->Kp * Error); // Compute the proportional output
// Compute the integral output with saturation
// Handle saturation minimum bound condition
minArg[0] = (Ui + (pid->Ki * Up));
minArg[1] = pid->outMax;
arm_min_f32(minArg,blocksize,&minValue,&index);
// Handle saturation maximum bound condition
maxArg[0] = minValue;
maxArg[1] = pid->outMin;
arm_max_f32 (maxArg,blocksize,&maxValue,&index);
Ui = maxValue;
pid->Ui = Ui; // store the intetral output
pid->refValue = refValue;
pid->fbackValue = fbackValue;
// Saturate the output
// Handle saturation minimum bound condition
minArg[0] = Up + Ui;
minArg[1] = pid->outMax;
arm_min_f32(minArg,blocksize,&minValue,&index);
// Handle saturation maximum bound condition
maxArg[0] = minValue;
maxArg[1] = pid->outMin;
arm_max_f32 (maxArg,blocksize,&maxValue,&index);
*pOutValue = maxValue;
return;
} // end of PID_run() function
这段PID程序云行结束后输出的,是与refValue的偏值差还是,计算后应该设置的值