80 lines
1.9 KiB
C
80 lines
1.9 KiB
C
#ifndef DMMOTOR_H
|
|
#define DMMOTOR_H
|
|
#include <stdint.h>
|
|
#include "bsp_can.h"
|
|
#include "controller.h"
|
|
#include "motor_def.h"
|
|
#include "daemon.h"
|
|
|
|
#define DM_MOTOR_CNT 4
|
|
|
|
#define DM_P_MIN (-12.56637f)
|
|
#define DM_P_MAX 12.56637f
|
|
#define DM_V_MIN (-45.0f)
|
|
#define DM_V_MAX 45.0f
|
|
#define DM_T_MIN (-18.0f)
|
|
#define DM_T_MAX 18.0f
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t id;
|
|
uint8_t state;
|
|
float velocity;
|
|
float last_position;
|
|
float position;
|
|
float torque;
|
|
float T_Mos;
|
|
float T_Rotor;
|
|
int32_t total_round;
|
|
float total_angle;
|
|
}DM_Motor_Measure_s;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t position_des;
|
|
uint16_t velocity_des;
|
|
uint16_t torque_des;
|
|
uint16_t Kp;
|
|
uint16_t Kd;
|
|
}DMMotor_Send_s;
|
|
typedef struct
|
|
{
|
|
DM_Motor_Measure_s measure;
|
|
Motor_Control_Setting_s motor_settings;
|
|
PIDInstance current_PID;
|
|
PIDInstance speed_PID;
|
|
PIDInstance angle_PID;
|
|
float *other_angle_feedback_ptr;
|
|
float *other_speed_feedback_ptr;
|
|
float *speed_feedforward_ptr;
|
|
float *current_feedforward_ptr;
|
|
float pid_ref;
|
|
Motor_Working_Type_e stop_flag;
|
|
CANInstance *motor_can_instace;
|
|
DaemonInstance* motor_daemon;
|
|
uint32_t lost_cnt;
|
|
uint8_t lost_status;
|
|
uint8_t last_lost_status;
|
|
}DMMotorInstance;
|
|
|
|
typedef enum
|
|
{
|
|
DM_CMD_MOTOR_MODE = 0xfc, // 使能,会响应指令
|
|
DM_CMD_RESET_MODE = 0xfd, // 停止
|
|
DM_CMD_ZERO_POSITION = 0xfe, // 将当前的位置设置为编码器零位
|
|
DM_CMD_CLEAR_ERROR = 0xfb // 清除电机过热错误
|
|
}DMMotor_Mode_e;
|
|
|
|
DMMotorInstance *DMMotorInit(Motor_Init_Config_s *config);
|
|
|
|
void DMMotorSetRef(DMMotorInstance *motor, float ref);
|
|
|
|
void DMMotorOuterLoop(DMMotorInstance *motor,Closeloop_Type_e closeloop_type);
|
|
|
|
void DMMotorEnable(DMMotorInstance *motor);
|
|
|
|
void DMMotorStop(DMMotorInstance *motor);
|
|
void DMMotorCaliEncoder(DMMotorInstance *motor);
|
|
void DMMotorControlInit();
|
|
void DMMotorSetMode(DMMotor_Mode_e mode, DMMotorInstance *motor);
|
|
#endif // !DMMOTOR
|