更新dmmotor驱动文件

This commit is contained in:
zcj 2024-12-20 19:41:18 +08:00
parent b476bd0aa6
commit 89edcd9e90
5 changed files with 40 additions and 37 deletions

View File

@ -212,7 +212,20 @@ void MatInit(mat *m, uint8_t row, uint8_t col)
m->numRows = row; m->numRows = row;
m->pData = (float *)zmalloc(row * col * sizeof(float)); m->pData = (float *)zmalloc(row * col * sizeof(float));
} }
/* 两个用于将uint值和float值进行映射的函数,在设定发送值和解析反馈值时使用 */
uint16_t float_to_uint(float x, float x_min, float x_max, uint8_t bits)
{
float span = x_max - x_min;
float offset = x_min;
return (uint16_t)((x - offset) * ((float)((1 << bits) - 1)) / span);
}
float uint_to_float(int x_int, float x_min, float x_max, int bits)
{
float span = x_max - x_min;
float offset = x_min;
return ((float)x_int) * span / ((float)((1 << bits) - 1)) + offset;
}
/** /**
* @brief * @brief
* @author RM * @author RM

View File

@ -53,7 +53,7 @@ void MatInit(mat *m, uint8_t row, uint8_t col);
#ifndef PI #ifndef PI
#define PI 3.14159265354f #define PI 3.14159265354f
#endif #endif
typedef struct typedef struct
{ {
float input; //输入数据 float input; //输入数据
float out; //滤波输出的数据 float out; //滤波输出的数据
@ -61,6 +61,15 @@ typedef struct
float frame_period; //滤波的时间间隔 单位 s float frame_period; //滤波的时间间隔 单位 s
} first_order_filter_type_t; } first_order_filter_type_t;
typedef struct
{
float input; //输入数据
float out; //输出数据
float min_value; //限幅最小值
float max_value; //限幅最大值
float frame_period; //时间间隔
} ramp_function_source_t;
#define VAL_LIMIT(val, min, max) \ #define VAL_LIMIT(val, min, max) \
do \ do \
{ \ { \
@ -127,6 +136,8 @@ void Cross3d(float *v1, float *v2, float *res);
float Dot3d(float *v1, float *v2); float Dot3d(float *v1, float *v2);
float AverageFilter(float new_data, float *buf, uint8_t len); float AverageFilter(float new_data, float *buf, uint8_t len);
float uint_to_float(int x_int, float x_min, float x_max, int bits);
uint16_t float_to_uint(float x, float x_min, float x_max, uint8_t bits);
//一阶低通滤波初始化 //一阶低通滤波初始化
void first_order_filter_init(first_order_filter_type_t *first_order_filter_type, float frame_period, const float num[1]); void first_order_filter_init(first_order_filter_type_t *first_order_filter_type, float frame_period, const float num[1]);
//一阶低通滤波计算 //一阶低通滤波计算

View File

@ -12,18 +12,7 @@ static uint8_t idx;
static DMMotorInstance *dm_motor_instance[DM_MOTOR_CNT]; static DMMotorInstance *dm_motor_instance[DM_MOTOR_CNT];
static osThreadId dm_task_handle[DM_MOTOR_CNT]; static osThreadId dm_task_handle[DM_MOTOR_CNT];
/* 两个用于将uint值和float值进行映射的函数,在设定发送值和解析反馈值时使用 */ /* 两个用于将uint值和float值进行映射的函数,在设定发送值和解析反馈值时使用 */
static uint16_t float_to_uint(float x, float x_min, float x_max, uint8_t bits)
{
float span = x_max - x_min;
float offset = x_min;
return (uint16_t)((x - offset) * ((float)((1 << bits) - 1)) / span);
}
static float uint_to_float(int x_int, float x_min, float x_max, int bits)
{
float span = x_max - x_min;
float offset = x_min;
return ((float)x_int) * span / ((float)((1 << bits) - 1)) + offset;
}
void DMMotorSetMode(DMMotor_Mode_e cmd, DMMotorInstance *motor) void DMMotorSetMode(DMMotor_Mode_e cmd, DMMotorInstance *motor)
{ {

View File

@ -26,19 +26,8 @@ static void HTMotorSetMode(HTMotor_Mode_t cmd, HTMotorInstance *motor)
CANTransmit(motor->motor_can_instace, 1); CANTransmit(motor->motor_can_instace, 1);
memcpy(motor->motor_can_instace->tx_buff, zero_buff, 6); memcpy(motor->motor_can_instace->tx_buff, zero_buff, 6);
} }
/* 两个用于将uint值和float值进行映射的函数,在设定发送值和解析反馈值时使用 */
static uint16_t float_to_uint(float x, float x_min, float x_max, uint8_t bits)
{
float span = x_max - x_min;
float offset = x_min;
return (uint16_t)((x - offset) * ((float)((1 << bits) - 1)) / span);
}
static float uint_to_float(int x_int, float x_min, float x_max, int bits)
{
float span = x_max - x_min;
float offset = x_min;
return ((float)x_int) * span / ((float)((1 << bits) - 1)) + offset;
}
/** /**
* @brief * @brief

View File

@ -73,6 +73,7 @@ typedef enum
NO_POWER_LIMIT = 0, NO_POWER_LIMIT = 0,
POWER_LIMIT_ON = 1, POWER_LIMIT_ON = 1,
} Power_Limit_Type_e; } Power_Limit_Type_e;
/* 电机控制设置,包括闭环类型,反转标志和反馈来源 */ /* 电机控制设置,包括闭环类型,反转标志和反馈来源 */
typedef struct typedef struct
{ {
@ -83,11 +84,19 @@ typedef struct
Feedback_Source_e angle_feedback_source; // 角度反馈类型 Feedback_Source_e angle_feedback_source; // 角度反馈类型
Feedback_Source_e speed_feedback_source; // 速度反馈类型 Feedback_Source_e speed_feedback_source; // 速度反馈类型
Feedfoward_Type_e feedforward_flag; // 前馈标志 Feedfoward_Type_e feedforward_flag; // 前馈标志
Power_Limit_Type_e power_limit_flag; //功率限制标志 Power_Limit_Type_e power_limit_flag; //功率限制标志
} Motor_Control_Setting_s; } Motor_Control_Setting_s;
/* 电机控制方式枚举 */
typedef enum
{
CONTROL_TYPE_NONE = 0,
CURRENT_CONTROL,
VOLTAGE_CONTROL,
} Motor_Control_Type_e;
/* 电机控制器,包括其他来源的反馈数据指针,3环控制器和电机的参考输入*/ /* 电机控制器,包括其他来源的反馈数据指针,3环控制器和电机的参考输入*/
// 后续增加前馈数据指针 // 后续增加前馈数据指针
typedef struct typedef struct
@ -117,17 +126,10 @@ typedef enum
M2006, M2006,
LK9025, LK9025,
HT04, HT04,
ECA8210, DM4310,
DM6006,
} Motor_Type_e; } Motor_Type_e;
/* 电机控制方式枚举 */
typedef enum
{
CONTROL_TYPE_NONE = 0,
CURRENT_CONTROL,
VOLTAGE_CONTROL,
} Motor_Control_Type_e;
/** /**
* @brief ,PID的配置以及两个反馈数据来源指针 * @brief ,PID的配置以及两个反馈数据来源指针
* ,pid config * ,pid config
@ -154,7 +156,6 @@ typedef struct
Motor_Type_e motor_type; Motor_Type_e motor_type;
CAN_Init_Config_s can_init_config; CAN_Init_Config_s can_init_config;
Motor_Control_Type_e motor_control_type; Motor_Control_Type_e motor_control_type;
} Motor_Init_Config_s; } Motor_Init_Config_s;
#endif // !MOTOR_DEF_H #endif // !MOTOR_DEF_H