64 lines
2.4 KiB
C
64 lines
2.4 KiB
C
#ifndef __PID_H__
|
|
#define __PID_H__
|
|
|
|
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_PositionInitTypedef;//位置式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_IncrementalInitTypedef;//增量式PID参数结构体
|
|
|
|
void PID_PositionStructureInit(PID_PositionInitTypedef* PID_InitStructure,float NeedValue);//位置式PID初始化结构体
|
|
void PID_PositionSetParameter(PID_PositionInitTypedef* PID_InitStructure,float kp,float ki,float kd);//位置式PID设置参数
|
|
void PID_PositionSetEkRange(PID_PositionInitTypedef* PID_InitStructure,float ek_low,float ek_up);//位置式PID设置误差为0阈值
|
|
void PID_PositionSetOUTRange(PID_PositionInitTypedef* PID_InitStructure,float out_low,float out_up);//位置式PID设置输出限幅
|
|
void PID_PositionClean(PID_PositionInitTypedef* PID_InitStructure);//位置式PID清理
|
|
void PID_PositionCalc(PID_PositionInitTypedef* PID_InitStructure,float NowValue);//位置式PID计算
|
|
void PID_IncrementalStructureInit(PID_IncrementalInitTypedef* PID_InitStructure,float NeedValue);//增量式PID初始化结构体
|
|
void PID_IncrementalSetParameter(PID_IncrementalInitTypedef* PID_InitStructure,float kp,float ki,float kd);//增量式PID设置参数
|
|
void PID_IncrementalSetEkRange(PID_IncrementalInitTypedef* PID_InitStructure,float ek_low,float ek_up);//增量式PID设置误差为0阈值
|
|
void PID_IncrementalSetOUTRange(PID_IncrementalInitTypedef* PID_InitStructure,float out_low,float out_up);//增量式PID设置输出限幅
|
|
void PID_IncrementalCalc(PID_IncrementalInitTypedef* PID_InitStructure,float NowValue);//增量式PID计算
|
|
|
|
#endif
|