/* * msp_steering_engine_new.h * * Created on: 2025年10月14日 * Author: 13752 */ #ifndef BASE_INC_MSP_MSP_STEERING_ENGINE_NEW_H_ #define BASE_INC_MSP_MSP_STEERING_ENGINE_NEW_H_ #include #include #include "bsp_MB_host.h" #include "stdio.h" #include "bsp_UART.h" #include "usart.h" #include "gpio.h" #include #include // -------------------------- 1. 协议宏定义 -------------------------- // 帧头定义(协议文档4. 数据包格式) #define SERVO_REQ_HEADER_0 0x12 // 请求包帧头第1字节 #define SERVO_REQ_HEADER_1 0x4C // 请求包帧头第2字节 // 指令ID定义(协议文档3. 舵机控制指令) #define CMD_MULTI_SPEED_CTRL 0x0F // 多圈速度控制指令 #define CMD_STOP_CTRL 0x18 // 停止控制指令 #define CMD_CLEAR_CURRENT_LAPS 0x11 // 清除当前圈数指令ID #define CMD_SINGLE_TURN_ANGLE_SET 0x08 //舵机控制指令:单圈角度控制 // 固定参数定义 #define PARAM_FIXED_00 0x00 // 通用固定值0x00 #define PARAM_CW_40 0x40 // 顺时针指令转动圈数低字节 #define PARAM_CW_38 0x38 // 顺时针指令转动圈数高字节,00 38 40 00,舵机角度,数值范围:-3686400~3686400 #define PARAM_CCW_C0 0xC0 // 逆时针指令 #define PARAM_CCW_C7 0xC7 // 逆时针指令 #define PARAM_CCW_FF 0xFF // 逆时针指令 #define PARAM_STOP_MODE_LOCK 0x11 //停止模式:锁力状态 #define PARAM_STOP_MODE_DAMP 0x12 // 停止模式:阻尼状态 #define DEFAULT_ACCEL_DECEL 100 // 加减速时间默认值 #define LOCK_POWER_LOW 0x70 // 锁力功率低字节 #define LOCK_POWER_HIGH 0x17 // 锁力功率高字节 #define ANGLE_UNIT_SCALE 10 // 角度单位转换(协议文档6.3.8:0.1°=1协议单位,实际角度=协议值/10) // 配置参数:可根据需求调整轮询周期和舵机ID列表 // 清除圈数控制配置参数(集中管理,便于修改) #define CLEAR_LAPS_PERIOD 5 // 清除圈数的周期计数(原10次) #define MAX_STEERING_NUM 2 // 参与轮询的舵机数量 #define DEFAULT_MOVE_INTERVAL 1000 // 默认运动时间(ms,默认1秒到达目标角度) #define DEFAULT_EXEC_POWER 0 // 默认执行功率(mW,0=使用舵机默认功率) // 指令长度定义 #define CMD_LEN_SPEED_CTRL 18 // 速度控制指令总长度(含校验和) #define CMD_LEN_STOP_CTRL 9 // 停止指令总长度(含校验和) #define CMD_LEN_CLEAR_LAPS 6 // 清除圈数指令总长度(含校验和) #define CMD_LEN_SINGLE_TURN_SET 12 //单圈角度控制指令总长度(含校验和) #define MAX_CMD_BUF_LEN 32 // 指令缓冲区最大长度(预留冗余) // 符合ISO 13849功能安全标准的舵机控制模式定义 typedef enum { STEERING_MODE_DAMPING = 0U, // 阻尼模式 STEERING_MODE_LOCKING, // 锁力模式 STEERING_MODE_MAX // 模式数量边界值(用于参数校验) } SteeringModeType; // 符合AUTOSAR规范的舵机配置结构体 typedef struct { uint8_t id; // 舵机唯一标识符 const int32_t* speed_ref; // 速度参考值指针(指向校准后的参数) const int32_t* damping_power_ref; // 阻尼功率参考值指针(阻尼模式专用) SteeringModeType mode; // 工作模式 uint16_t accel_time_ms; // 加速时间(毫秒,符合IEC 61131-6时间规范) uint16_t decel_time_ms; // 减速时间(毫秒) } SteeringConfigType; // 回零状态枚举(符合MISRA C:2012规则,避免魔法数字) typedef enum { HOMING_STATE_STEERING2 = 0U, // 舵机2回零状态 HOMING_STATE_STEERING3, // 舵机3回零状态 HOMING_STATE_MAX // 状态数量边界(用于参数校验) } HomingStateType; // 回零配置结构体(集中管理参数,符合AUTOSAR数据封装规范) typedef struct { uint8_t steering_id; // 目标舵机ID const float* target_angle_ptr; // 回零目标角度指针 uint8_t required_exec_count; // 要求执行次数(冗余设计) } HomingConfigType; extern int32_t* steeringSetSpeed1; extern int32_t* steeringSetSpeed2; extern int32_t* steeringSetSpeed3; extern int32_t* steeringSetSpeed4; extern int32_t* steeringInitAngle3; extern int32_t* steeringInitAngle4; extern int32_t* steeringRealAngle3; extern int32_t* steeringRealAngle4; extern int32_t* steeringSetDampingPower1; extern int32_t* steeringSetDampingPower2; extern int32_t* steeringSetDampingPower3; extern int32_t* steeringSetDampingPower4; void Clear_current_laps(); void update_steering_state(); void steering_engine_intialize(struct UARTHandler *Handler); void read_steering_Angle(); //void steering_homing_control(); void read_steering_current(); #endif /* BASE_INC_MSP_MSP_STEERING_ENGINE_NEW_H_ */