由于目前笔者手中没有支持FDCAN的电机 所以先将FDCAN复用为CAN2.0使用
控制CAN电机首先要将两者通讯波特率设置一样的 然后打开中断 完成发送即可
所以我们要先设置CAN配置以及滤波器配置 让C092能够正常接收数据

设置波特率为1M 打开TX FIFO

打开中断
将电机驱动包导入工程 然后改写驱动函数 添加解析库

CAN的初始化程序
static void MX_FDCAN1_Init(void)
{
/* USER CODE BEGIN FDCAN1_Init 0 */
/* USER CODE END FDCAN1_Init 0 */
/* USER CODE BEGIN FDCAN1_Init 1 */
/* USER CODE END FDCAN1_Init 1 */
hfdcan1.Instance = FDCAN1;
hfdcan1.Init.ClockDivider = FDCAN_CLOCK_DIV1;
hfdcan1.Init.FrameFormat = FDCAN_FRAME_FD_BRS;
hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
hfdcan1.Init.AutoRetransmission = ENABLE;
hfdcan1.Init.TransmitPause = ENABLE;
hfdcan1.Init.ProtocolException = DISABLE;
hfdcan1.Init.NominalPrescaler = 1;
hfdcan1.Init.NominalSyncJumpWidth = 12;
hfdcan1.Init.NominalTimeSeg1 = 35;
hfdcan1.Init.NominalTimeSeg2 = 12;
hfdcan1.Init.DataPrescaler = 1;
hfdcan1.Init.DataSyncJumpWidth = 6;
hfdcan1.Init.DataTimeSeg1 = 17;
hfdcan1.Init.DataTimeSeg2 = 6;
hfdcan1.Init.StdFiltersNbr = 1;
hfdcan1.Init.ExtFiltersNbr = 0;
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN FDCAN1_Init 2 */
/* USER CODE END FDCAN1_Init 2 */
}
完成后即可调用驱动包中位置模式控制函数来控制电机

https://www.acfun.cn/v/ac47214100?shareUid=37477814 |