#ifndef PID_H #define PID_H /* 位置式/增量式 PID,自 legacy 工程 Control/PID 原样移植 */ typedef struct { float Need_Value; // 预期值 float Now_Value; // 当前值 float Ek; // 本次误差 float Ek_1; // 上一次误差 float Sum_Ek; // 误差积分 float Del_Ek; // 误差差分 float Ek_low; // 误差为0阈值下限 float Ek_up; // 误差为0阈值上限 float Kp; // Kp float Ki; // Ki float Kd; // Kd float P_OUT; // 比例输出 float I_OUT; // 积分输出 float D_OUT; // 微分输出 float OUT; // 总输出 float OUT_low; // 输出限幅下限 float OUT_up; // 输出限幅上限 } PID_PositionTypeDef; // 位置式PID参数结构体 typedef struct { float Need_Value; // 预期值 float Now_Value; // 当前值 float Ek; // 本次误差 float Ek_1; // 上一次误差 float Ek_2; // 上两次误差 float Ek_low; // 误差为0阈值下限 float Ek_up; // 误差为0阈值上限 float Kp; // Kp float Ki; // Ki float Kd; // Kd float P_OUT; // 比例输出 float I_OUT; // 积分输出 float D_OUT; // 微分输出 float OUT; // 总输出 float OUT_low; // 输出限幅下限 float OUT_up; // 输出限幅上限 } PID_IncrementalTypeDef; // 增量式PID参数结构体 void PID_PositionStructureInit(PID_PositionTypeDef * pid, float need_value); void PID_PositionSetParameter(PID_PositionTypeDef * pid, float kp, float ki, float kd); void PID_PositionSetEkRange(PID_PositionTypeDef * pid, float ek_low, float ek_up); void PID_PositionSetOUTRange(PID_PositionTypeDef * pid, float out_low, float out_up); void PID_PositionClean(PID_PositionTypeDef * pid); void PID_PositionCalc(PID_PositionTypeDef * pid, float now_value); void PID_IncrementalStructureInit(PID_IncrementalTypeDef * pid, float need_value); void PID_IncrementalSetParameter(PID_IncrementalTypeDef * pid, float kp, float ki, float kd); void PID_IncrementalSetEkRange(PID_IncrementalTypeDef * pid, float ek_low, float ek_up); void PID_IncrementalSetOUTRange(PID_IncrementalTypeDef * pid, float out_low, float out_up); void PID_IncrementalCalc(PID_IncrementalTypeDef * pid, float now_value); #endif