1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #ifndef DRV8837D_H
- #define DRV8837D_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "main.h"
- #include "tim.h"
- #include "gpio.h"
- extern uint8_t use_pid_control; // 是否启用PID调节
-
- extern float Kp, Ki, Kd;
- extern float error;
- extern float target_angle_deg;
- extern float diff_Angle;
-
- typedef enum { SPEED_MODE, ANGLE_MODE } ControlMode;
- extern ControlMode mode;
- typedef enum {
- MOTOR_STOPPED = 0, // 不转
- MOTOR_FORWARD, // 正转
- MOTOR_REVERSE, // 反转
- MOTOR_OVERCURRENT // 过流
- } MotorDirection;
- extern MotorDirection Motormode;
- typedef struct
- {
- float target_val; // 目标值
- float actual_val; // 实际测量值
- float target_speed; // 目标速度
-
- float err; // 当前误差
- float err_last; // 上一次误差
- float err_sum; // 累积误差(积分项)
- float PrevError; // Error[-2]
- float Kp; // 比例系数
- float Ki; // 积分系数
- float Kd; // 微分系数
- float output; // PID输出值
- float output_max; // 输出最大值(限幅)
- float output_min; // 输出最小值(限幅)
- float integral_max; // 最大积分量(防积分饱和)
- } tPid;
- extern tPid pidMotor1Speed;
- void PID_init(void);
- float P_realize(tPid * pid, float actual_val); // 比例P调节
- float PI_realize(tPid * pid, float actual_val);// 比例P 积分I 控制函数
- float PID_Realize(tPid *pid, float actual_val, float dt);// PID控制函数
- float PID_Incremental_Calc(tPid *pid, float target_speed, float Motor_spe);
- void Motor_PID_Control(void);
- void Motor_Control(float control);// 控制输出到电机
- void motor_forward(void); // 电机正转
- void motor_rollback(void); // 电机反转
- void Auto_Tune_PID(float error, float derivative, float dt);
- float get_shortest_angle_error(float target, float actual);
- void Set_Speed_Mode(float speed_dps);
- void Set_Angle_Mode(float angle);
- void Motor_Angle_Current_PID_Control(void);
- void motor_stop(void); // 电机停转
- void Motor_PID_Control(void);
- void Motor_ZF(void);
- void Motor_control_ZF(uint16_t forward_speed ,uint16_t reverse_speed);
- void Motor_Forward(uint16_t speed);
- void Motor_Reverse(uint16_t speed);
- void Motor_control(uint16_t forward_speed,uint16_t reverse_speed);
- #ifdef __cplusplus
- }
- #endif
- #endif // DRV8837D_H
|