DRV8837D.h 2.3 KB

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