DRV8837D.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef DRV8837D_H
  2. #define DRV8837D_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include "main.h"
  7. #include "gpio.h"
  8. extern uint8_t use_pid_control; // 是否启用PID调节
  9. extern float Kp, Ki, Kd;
  10. extern float error;
  11. extern float target_angle_deg;
  12. extern float diff_Angle;
  13. typedef enum { SPEED_MODE, ANGLE_MODE } ControlMode;
  14. extern ControlMode mode;
  15. typedef enum {
  16. MOTOR_STOPPED = 0, // 不转
  17. MOTOR_FORWARD, // 正转
  18. MOTOR_REVERSE, // 反转
  19. MOTOR_OVERCURRENT // 过流
  20. } MotorDirection;
  21. extern MotorDirection Motormode;
  22. typedef struct
  23. {
  24. float target_val; // 目标值
  25. float actual_val; // 实际测量值
  26. float target_speed; // 目标速度
  27. float err; // 当前误差
  28. float err_last; // 上一次误差
  29. float err_sum; // 累积误差(积分项)
  30. float PrevError; // Error[-2]
  31. float Kp; // 比例系数
  32. float Ki; // 积分系数
  33. float Kd; // 微分系数
  34. float output; // PID输出值
  35. float output_max; // 输出最大值(限幅)
  36. float output_min; // 输出最小值(限幅)
  37. float integral_max; // 最大积分量(防积分饱和)
  38. } tPid;
  39. extern tPid pidMotor1Speed;
  40. void PID_init(void);
  41. float P_realize(tPid * pid, float actual_val); // 比例P调节
  42. float PI_realize(tPid * pid, float actual_val);// 比例P 积分I 控制函数
  43. float PID_Realize(tPid *pid, float actual_val, float dt);// PID控制函数
  44. float PID_Incremental_Calc(tPid *pid, float target_speed, float Motor_spe);
  45. void Motor_PID_Control(void);
  46. void Motor_Control(float control);// 控制输出到电机
  47. void motor_forward(void); // 电机正转
  48. void motor_rollback(void); // 电机反转
  49. void Auto_Tune_PID(float error, float derivative, float dt);
  50. float get_shortest_angle_error(float target, float actual);
  51. void Set_Speed_Mode(float speed_dps);
  52. void Set_Angle_Mode(float angle);
  53. void Motor_Angle_Current_PID_Control(void);
  54. void motor_stop(void); // 电机停转
  55. void Motor_PID_Control(void);
  56. void Motor_ZF(void);
  57. void Motor_control_ZF(uint16_t forward_speed ,uint16_t reverse_speed);
  58. void Motor_Forward(uint16_t speed);
  59. void Motor_Reverse(uint16_t speed);
  60. void Motor_control(uint16_t forward_speed,uint16_t reverse_speed);
  61. #ifdef __cplusplus
  62. }
  63. #endif
  64. #endif // DRV8837D_H