Browse Source

【遗留问题】当前电机初始化后会导致CAN中断不触发,正在定位中

master
Lizongdi 14 hours ago
parent
commit
ae7c21cb79
  1. 23
      project/paint_robot_new/paint_robot_new.c
  2. 63
      project/paint_robot_new/paint_robot_new_motors.c

23
project/paint_robot_new/paint_robot_new.c

@ -67,6 +67,29 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
switch (pstMsg->m_uiMsgID) switch (pstMsg->m_uiMsgID)
{ {
case MOTOR_CMD_GET_FAULT_CODE:
{
uint32_t uiFailtCode[2] = {0};
if (pstMsg->m_uiDataLen >= sizeof(uiFailtCode))
{
RD_MEMCPY(uiFailtCode, pstMsg->m_aucData, sizeof(uiFailtCode));
}
break;
}
case MOTOR_CMD_GET_SPEED:
{
int32_t iCurrentSpeed[2] = {0};
if (pstMsg->m_uiDataLen >= sizeof(iCurrentSpeed))
{
RD_MEMCPY(iCurrentSpeed, pstMsg->m_aucData, sizeof(iCurrentSpeed));
if (1 == iCurrentSpeed[0])
{
g_stIV.CurrentSpeed = iCurrentSpeed[1];
log_i("g_stIV.CurrentSpeed = %d", g_stIV.CurrentSpeed);
}
}
break;
}
case CUSTOM_GET_TL720D_ROLL: case CUSTOM_GET_TL720D_ROLL:
{ {
if (pstMsg->m_uiDataLen >= sizeof(int32_t)) if (pstMsg->m_uiDataLen >= sizeof(int32_t))

63
project/paint_robot_new/paint_robot_new_motors.c

@ -81,34 +81,6 @@ static void Motor_ModuleHandler(const Msg_t *pstMsg)
memset(g_aiMotorSpeed, 0, sizeof(g_aiMotorSpeed)); memset(g_aiMotorSpeed, 0, sizeof(g_aiMotorSpeed));
break; break;
} }
case MOTOR_CMD_SET_HOME:
{
log_i("Not Support [%d]", pstMsg->m_uiMsgID);
break;
}
case MOTOR_CMD_GET_STATUS:
{
// 回复状态给请求者
Motor_StatusData_t stStatus;
for (int i = 0; i < 2; i++)
{
if (g_apstMotors[i] != NULL)
{
const Motor_Data_t *pstData = MotorMgr_GetData(g_apstMotors[i]);
if (pstData != NULL)
{
stStatus.m_ucMotorIndex = i;
stStatus.m_iPosition = pstData->m_iRealPosition;
stStatus.m_iVelocity = pstData->m_iRealVelocity;
stStatus.m_uiFaultCode = pstData->m_uiFaultCode;
// 回复给请求者
MsgCenter_SendTo(MODULE_NAME_RBCORE, 0x10, &stStatus, sizeof(stStatus));
}
}
}
break;
}
default: default:
break; break;
} }
@ -118,21 +90,12 @@ static void Motor_ModuleHandler(const Msg_t *pstMsg)
// 雷赛响应ID范围:0x581 - 0x5FF (0x580 + MotorID) // 雷赛响应ID范围:0x581 - 0x5FF (0x580 + MotorID)
static int check_LeiSaiMotor(char *_pBuffer, uint32_t _iSize) static int check_LeiSaiMotor(char *_pBuffer, uint32_t _iSize)
{ {
if (NULL == _pBuffer || _iSize < 4) TCANUserData *ptCANUserData = (TCANUserData *)g_ptCAN1->m_pUserData;
{ uint32_t iCANId = (uint32_t)ptCANUserData->m_canrx->Identifier;
return 0;
}
// 从buffer中提取CAN ID(前4字节) if (iCANId >= 0x581 && iCANId <= 0x5FF)
uint32_t uiFrameID = (uint32_t)(_pBuffer[0] & 0xFF)
| ((_pBuffer[1] & 0xFF) << 8)
| ((_pBuffer[2] & 0xFF) << 16)
| ((_pBuffer[3] & 0xFF) << 24);
// 雷赛响应ID范围:0x581 - 0x5FF
if (uiFrameID >= 0x581 && uiFrameID <= 0x5FF)
{ {
return 8 + 4; // 数据长度8 + CAN ID长度4 return _iSize;
} }
return 0; return 0;
@ -141,22 +104,14 @@ static int check_LeiSaiMotor(char *_pBuffer, uint32_t _iSize)
// 雷赛电机CAN响应解码函数 // 雷赛电机CAN响应解码函数
static void decode_LeiSaiMotor(const char *_pBuffer, uint32_t _iSize) static void decode_LeiSaiMotor(const char *_pBuffer, uint32_t _iSize)
{ {
if (NULL == _pBuffer || _iSize < 12) // 4字节CAN ID + 8字节数据 TCANUserData *ptCANUserData = (TCANUserData *)g_ptCAN1->m_pUserData;
{ uint32_t iCANId = (uint32_t)ptCANUserData->m_canrx->Identifier;
return;
}
// 从buffer中提取CAN ID
uint32_t uiFrameID = (uint32_t)(_pBuffer[0] & 0xFF)
| ((_pBuffer[1] & 0xFF) << 8)
| ((_pBuffer[2] & 0xFF) << 16)
| ((_pBuffer[3] & 0xFF) << 24);
// 提取电机ID (0x580 + MotorID) // 提取电机ID (0x580 + MotorID)
uint8_t ucMotorID = (uint8_t)(uiFrameID - 0x580); uint8_t ucMotorID = (uint8_t)(iCANId - 0x580);
// 调用电机管理模块解析响应 // 调用电机管理模块解析响应
MotorMgr_ParseResponse(ucMotorID, (const uint8_t *)&_pBuffer[4], 8); MotorMgr_ParseResponse(ucMotorID, (const uint8_t *)_pBuffer, _iSize);
} }
void MotorTask(void *argument) void MotorTask(void *argument)
@ -224,7 +179,5 @@ void MotorTask(void *argument)
MotorMgr_SetTargetSpeed(g_apstMotors[i], g_aiMotorSpeed[i]); MotorMgr_SetTargetSpeed(g_apstMotors[i], g_aiMotorSpeed[i]);
} }
} }
Rd_Delay(2); // 2ms周期
} }
} }

Loading…
Cancel
Save