/****************************************************************************** 版权所有 (C), 2018-2099, Radkil ****************************************************************************** 文 件 名 : motor_manager.h 版 本 号 : 初稿 作 者 : radkil 生成日期 : 2026年7月13日 最近修改 : 功能描述 : 电机管理模块(多实例管理,协议无关) 修改历史 : 1.日 期 : 2026年7月13日 作 者 : radkil 修改内容 : 创建文件 ******************************************************************************/ #ifndef __MOTOR_MANAGER_H__ #define __MOTOR_MANAGER_H__ #ifdef __cplusplus #if __cplusplus extern "C"{ #endif #endif /* __cplusplus */ /*==============================================* * include header files * *----------------------------------------------*/ #include "motor_protocol.h" /*==============================================* * constants or macros define * *----------------------------------------------*/ #define MOTOR_INSTANCE_MAX 8 //支持最大电机实例数 /*==============================================* * data structures * *----------------------------------------------*/ /*==============================================* * project-wide global variables * *----------------------------------------------*/ /*==============================================* * routines' or functions' implementations * *----------------------------------------------*/ /** * @brief 初始化电机管理模块 */ void MotorMgr_Init(void); /** * @brief 创建电机实例 * @param pstConfig 电机配置 * @param ptCAN 绑定的CAN控制器 * @param pstProtocol 协议操作函数表 * @param pstPrivData 协议私有数据(可为NULL) * @return 电机实例指针,失败返回NULL */ Motor_Instance_t* MotorMgr_Create(const Motor_Config_t *pstConfig, TComCtrl *ptCAN, const Motor_Protocol_t *pstProtocol, void *pstPrivData); /** * @brief 销毁电机实例 * @param pstMotor 电机实例 * @return 0成功,非0失败 */ int MotorMgr_Destroy(Motor_Instance_t *pstMotor); /** * @brief 通过名称查找电机实例 * @param pszName 实例名称 * @return 电机实例指针,未找到返回NULL */ Motor_Instance_t* MotorMgr_FindByName(const char *pszName); /** * @brief 通过ID查找电机实例 * @param ucMotorID 电机节点ID * @return 电机实例指针,未找到返回NULL */ Motor_Instance_t* MotorMgr_FindByID(uint8_t ucMotorID); /** * @brief 复位所有节点 */ int MotorMgr_ResetAll(Motor_Instance_t *pstMotor); /** * @brief 激活所有节点 */ int MotorMgr_ActivateAll(Motor_Instance_t *pstMotor); /** * @brief 设置当前位置为零点 */ int MotorMgr_SetHome(Motor_Instance_t *pstMotor); /** * @brief 设置看门狗时间 */ int MotorMgr_SetWatchdog(Motor_Instance_t *pstMotor, uint32_t uiTimeMs); /** * @brief 读取电机位置 */ int MotorMgr_RequestPosition(Motor_Instance_t *pstMotor); /** * @brief 读取电机速度 */ int MotorMgr_RequestVelocity(Motor_Instance_t *pstMotor); /** * @brief 读取电机电流/转矩 */ int MotorMgr_RequestTorque(Motor_Instance_t *pstMotor); /** * @brief 读取故障码 */ int MotorMgr_RequestFault(Motor_Instance_t *pstMotor); /** * @brief 速度模式初始化 */ int MotorMgr_SpeedModeInit(Motor_Instance_t *pstMotor); /** * @brief 设置目标速度 */ int MotorMgr_SetTargetSpeed(Motor_Instance_t *pstMotor, int32_t iTargetSpeed); /** * @brief 位置模式初始化 */ int MotorMgr_PositionModeInit(Motor_Instance_t *pstMotor, int32_t iAccel, int32_t iDecel, int32_t iTargetSpeed); /** * @brief 设置目标位置(相对运动) */ int MotorMgr_SetTargetPosition(Motor_Instance_t *pstMotor, int32_t iTargetPos); /** * @brief 设置数字输出 */ int MotorMgr_SetDO(Motor_Instance_t *pstMotor, uint8_t ucDoIndex, uint8_t ucState); /** * @brief 解析CAN响应数据(遍历所有电机实例尝试解析) * @param ucMotorID 电机节点ID * @param pucData 数据指针 * @param uiLen 数据长度 */ void MotorMgr_ParseResponse(uint8_t ucMotorID, const uint8_t *pucData, uint32_t uiLen); /** * @brief 速度单位转换 */ int32_t MotorMgr_SpeedConvert(Motor_Instance_t *pstMotor, int32_t iSpeedUserUnit); /** * @brief 获取电机数据 */ const Motor_Data_t* MotorMgr_GetData(Motor_Instance_t *pstMotor); /** * @brief 获取电机状态 */ Motor_State_e MotorMgr_GetState(Motor_Instance_t *pstMotor); #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* __MOTOR_MANAGER_H__ */