Browse Source

遥控器上线才使能电机

paint_robot_new-v1.5
Lizongdi 2 weeks ago
parent
commit
1884d3870a
  1. 1
      RBcore/include/BHBF.h
  2. 1
      project/paint_robot_new/paint_robot_new.c
  3. 25
      project/paint_robot_new/paint_robot_new_motors.c

1
RBcore/include/BHBF.h

@ -78,6 +78,7 @@ typedef enum {
COMMON_CMD_STOP_ALL, // 机器人停止(建议各个控制硬件的模块都要实现) COMMON_CMD_STOP_ALL, // 机器人停止(建议各个控制硬件的模块都要实现)
MOTOR_START = 0x0100, // *电机命令开始* MOTOR_START = 0x0100, // *电机命令开始*
MOTOR_SET_SPEED, // 设置速度 MOTOR_SET_SPEED, // 设置速度
MOTOR_POWER_ENABLE, // 电机上电
MOTOR_POWER_DISABLE, // 电机失电 MOTOR_POWER_DISABLE, // 电机失电
RBCORE_START = 0x0200, // *机器人共性命令开始* RBCORE_START = 0x0200, // *机器人共性命令开始*

1
project/paint_robot_new/paint_robot_new.c

@ -268,6 +268,7 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
if (g_stMK32.CH4_SA == 0 && g_stMK32.CH5_SB == 0 && g_stMK32.CH6_SC == 0 if (g_stMK32.CH4_SA == 0 && g_stMK32.CH5_SB == 0 && g_stMK32.CH6_SC == 0
&& g_stMK32.CH7_SD == 0 && g_stMK32.IsOnline == 1) && g_stMK32.CH7_SD == 0 && g_stMK32.IsOnline == 1)
{ {
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_POWER_ENABLE, NULL, 0);
g_Is_All_Button_Reset = 1; g_Is_All_Button_Reset = 1;
} }
} }

25
project/paint_robot_new/paint_robot_new_motors.c

@ -43,6 +43,7 @@
static Motor_Instance_t *g_apstMotors[MOTOR_INSTANCE_MAX] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static Motor_Instance_t *g_apstMotors[MOTOR_INSTANCE_MAX] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
static uint32_t g_uiMotorModuleID = 0; static uint32_t g_uiMotorModuleID = 0;
static int g_aiMotorSpeed[MOTOR_INSTANCE_MAX] = {0}; static int g_aiMotorSpeed[MOTOR_INSTANCE_MAX] = {0};
static int g_isMotorInit = -1; // -1表示还在等待遥控器初始化完毕,0表示可以进行电机初始化,1表示电机初始化完毕,运行电机主循环
/*----------------------------------------------* /*----------------------------------------------*
* 常量定义 * * 常量定义 *
@ -72,6 +73,11 @@ static void Motor_ModuleHandler(const Msg_t *pstMsg)
g_aiMotorSpeed[1] = MotorMgr_SpeedConvert(g_apstMotors[1], aiMotorSpeed[1]); g_aiMotorSpeed[1] = MotorMgr_SpeedConvert(g_apstMotors[1], aiMotorSpeed[1]);
break; break;
} }
case MOTOR_POWER_ENABLE:
{
g_isMotorInit = 0;
break;
}
case MOTOR_POWER_DISABLE: case MOTOR_POWER_DISABLE:
{ {
HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, 1); HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, 1);
@ -125,7 +131,14 @@ static void decode_LeiSaiMotor(const char *_pBuffer, uint32_t _iSize)
void MotorTask(void *argument) void MotorTask(void *argument)
{ {
// 此时消息中心还未就绪,直接调用HAL库接口给电机上电 g_uiMotorModuleID = MsgCenter_Register(MODULE_NAME_MOTOR, Motor_ModuleHandler);
while(1)
{
// 处理消息
MsgCenter_ProcessWait(g_uiMotorModuleID, 2);
if (0 == g_isMotorInit)
{
HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, 0); HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, 0);
// 初始化FDCAN1,使用雷赛电机的回调 // 初始化FDCAN1,使用雷赛电机的回调
TCANUserData *ptCANUserData = CAN_userdata_init(&hfdcan1, 32, 0); TCANUserData *ptCANUserData = CAN_userdata_init(&hfdcan1, 32, 0);
@ -153,8 +166,6 @@ void MotorTask(void *argument)
}; };
g_apstMotors[1] = MotorMgr_Create(&stRightMotorConfig, g_ptCAN1, LeiSai_GetProtocol(), NULL); g_apstMotors[1] = MotorMgr_Create(&stRightMotorConfig, g_ptCAN1, LeiSai_GetProtocol(), NULL);
g_uiMotorModuleID = MsgCenter_Register(MODULE_NAME_MOTOR, Motor_ModuleHandler);
MotorMgr_ResetAll(g_apstMotors[0]); MotorMgr_ResetAll(g_apstMotors[0]);
Rd_Delay(500); Rd_Delay(500);
MotorMgr_ResetAll(g_apstMotors[1]); MotorMgr_ResetAll(g_apstMotors[1]);
@ -173,8 +184,9 @@ void MotorTask(void *argument)
MotorMgr_SetHome(g_apstMotors[1]); MotorMgr_SetHome(g_apstMotors[1]);
MotorMgr_SpeedModeInit(g_apstMotors[0]); MotorMgr_SpeedModeInit(g_apstMotors[0]);
MotorMgr_SpeedModeInit(g_apstMotors[1]); MotorMgr_SpeedModeInit(g_apstMotors[1]);
g_isMotorInit = 1;
while(1) }
else if (g_isMotorInit > 0)
{ {
static int LS_Motor_Config_Count = 0; static int LS_Motor_Config_Count = 0;
if (LS_Motor_Config_Count <= 200) if (LS_Motor_Config_Count <= 200)
@ -185,8 +197,6 @@ void MotorTask(void *argument)
MotorMgr_SetWatchdog(g_apstMotors[1], 1000); MotorMgr_SetWatchdog(g_apstMotors[1], 1000);
Rd_Delay(4); Rd_Delay(4);
} }
// 处理消息
MsgCenter_ProcessWait(g_uiMotorModuleID, 2);
MotorMgr_RequestPosition(g_apstMotors[0]); MotorMgr_RequestPosition(g_apstMotors[0]);
Rd_Delay(4); Rd_Delay(4);
MotorMgr_RequestPosition(g_apstMotors[1]); MotorMgr_RequestPosition(g_apstMotors[1]);
@ -204,4 +214,5 @@ void MotorTask(void *argument)
MotorMgr_SetTargetSpeed(g_apstMotors[1], g_aiMotorSpeed[1]); MotorMgr_SetTargetSpeed(g_apstMotors[1], g_aiMotorSpeed[1]);
Rd_Delay(4); Rd_Delay(4);
} }
}
} }

Loading…
Cancel
Save