studio_pid_c.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. ******************************************************************************
  3. * @file : studio_pid_c.h
  4. * @author : wangyingjie
  5. * @brief : None
  6. * @attention : None
  7. * @date : 2025/5/23
  8. ******************************************************************************
  9. */
  10. #ifndef STUDIO_PID_C_H
  11. #define STUDIO_PID_C_H
  12. #include <stdint.h>
  13. typedef struct
  14. {
  15. double initval; // 初始值
  16. double goal; // 目标值
  17. double error; // 当前误差(目标值 - 当前值)
  18. double Kp; // 比例常数
  19. double Ki; // 积分常数
  20. double Kd; // 微分常数
  21. double prev_error; // 前一个误差
  22. double inte_error; // 积分误差
  23. double dif_error; // 微分误差
  24. double integral_limit; // 积分项限幅值
  25. double output_limit; // 输出限幅值
  26. } studio_pid;
  27. // 初始化PID结构体
  28. void init_pid(studio_pid *pid, double init_v, double goal_v, double p, double i, double d,
  29. double integral_limit_val, double output_limit_val);
  30. // 计算PID输出
  31. double compute_pid(studio_pid *pid, double current_value);
  32. // 设置PID参数
  33. void set_pid_params(studio_pid *pid, double p, double i, double d);
  34. // 设置积分限幅
  35. void set_integral_limit(studio_pid *pid, double limit);
  36. // 设置输出限幅
  37. void set_output_limit(studio_pid *pid, double limit);
  38. // 获取目标值
  39. double get_goal(const studio_pid *pid);
  40. // 重置PID状态
  41. void reset_pid(studio_pid *pid);
  42. // 设置目标值并重置PID状态
  43. void set_goal(studio_pid *pid, double goal_v);
  44. #endif