Files
Simba-OmniInfantry/云台/modules/PID/pid.h
T
LSMushui a4da5ad17c chore: 导入 Simba-OmniInfantry 基线(云台/底盘双工程)
- 云台(ROBOT_TYPE_GIMBAL)与底盘(ROBOT_TYPE_CHASSIS)完整固件源码
- 新增根级 .gitignore,排除 Keil MDK-ARM 构建产物(.o/.d/.crf/.axf/.lnp/.map/.htm/.sct/.dep/.iex/.lst 等)
  与 *.uvguix.* / DebugConfig/(与机器绑定的 UI 布局)
- core.autocrlf=false,避免固件源码在检出时被改动换行符
2026-09-12 10:28:21 +08:00

67 lines
2.2 KiB
C

#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