68 lines
2.7 KiB
C
68 lines
2.7 KiB
C
#ifndef __PID_H__
|
|
#define __PID_H__
|
|
|
|
typedef struct
|
|
{
|
|
float Need_Value;//预期值
|
|
float Now_Value;//当前值
|
|
float OUT;//总输出
|
|
float OUT_Min;//输出限幅下限
|
|
float OUT_Max;//输出限幅上限
|
|
|
|
float Ek;//本次误差
|
|
float Ek_Last;//上一次误差
|
|
float Ek_Sum;//误差积分
|
|
|
|
float Kp;//Kp
|
|
float Ki;//Ki
|
|
float Kd;//Kd
|
|
|
|
float Ek_Del;//误差差分
|
|
float Ek_Min;//误差为0阈值下限
|
|
float Ek_Max;//误差为0阈值上限
|
|
|
|
float P_OUT;//比例输出
|
|
float I_OUT;//积分输出
|
|
float D_OUT;//微分输出
|
|
}PID_PositionInitTypedef;//位置式PID参数结构体
|
|
|
|
typedef struct
|
|
{
|
|
float Need_Value;//预期值
|
|
float Now_Value;//当前值
|
|
|
|
float Ek;//本次误差
|
|
float Ek_Last;//上一次误差
|
|
float Ek_Last2;//上两次误差
|
|
float Ek_Min;//误差为0阈值下限
|
|
float Ek_Max;//误差为0阈值上限
|
|
|
|
float Kp;//Kp
|
|
float Ki;//Ki
|
|
float Kd;//Kd
|
|
|
|
float P_OUT;//比例输出
|
|
float I_OUT;//积分输出
|
|
float D_OUT;//微分输出
|
|
float OUT;//总输出
|
|
float OUT_Min;//输出限幅下限
|
|
float OUT_Max;//输出限幅上限
|
|
}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_PositionSetNeedValue (PID_PositionInitTypedef* PID_InitStructure,float NeedValue);
|
|
void PID_PositionClean (PID_PositionInitTypedef* PID_InitStructure); //位置式PID清理
|
|
void PID_PositionCalc (PID_PositionInitTypedef* PID_InitStructure,float NowValue); //位置式PID计算
|
|
void PID_PositionCalc_Motor (PID_PositionInitTypedef* PID_InitStructure,float NowValue);
|
|
|
|
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
|