/** ****************************************************************************** * @file : studio_pid_c.h * @author : wangyingjie * @brief : None * @attention : None * @date : 2025/5/23 ****************************************************************************** */ #ifndef STUDIO_PID_C_H #define STUDIO_PID_C_H #include typedef struct { double initval; // 初始值 double goal; // 目标值 double error; // 当前误差(目标值 - 当前值) double Kp; // 比例常数 double Ki; // 积分常数 double Kd; // 微分常数 double prev_error; // 前一个误差 double inte_error; // 积分误差 double dif_error; // 微分误差 double integral_limit; // 积分项限幅值 double output_limit; // 输出限幅值 } studio_pid; // 初始化PID结构体 void init_pid(studio_pid *pid, double init_v, double goal_v, double p, double i, double d, double integral_limit_val, double output_limit_val); // 计算PID输出 double compute_pid(studio_pid *pid, double current_value); // 设置PID参数 void set_pid_params(studio_pid *pid, double p, double i, double d); // 设置积分限幅 void set_integral_limit(studio_pid *pid, double limit); // 设置输出限幅 void set_output_limit(studio_pid *pid, double limit); // 获取目标值 double get_goal(const studio_pid *pid); // 重置PID状态 void reset_pid(studio_pid *pid); // 设置目标值并重置PID状态 void set_goal(studio_pid *pid, double goal_v); #endif