发现网上很少有关于这个的文章,到处找,搜索引擎试了个遍,还在Robomaster的论坛里找了找,最终也是没有找到类似的文章。还好在B站上找到了一个视频教程,帮助很多,致敬前辈!,视频链接在文末。但是这个视频有些长,一个多小时,想看完还是要有点耐心的,所以想着写个文章。官方虽然给的有例程,但是对于新手来说又略显复杂,而且C板的教程里忽略了一个细节,直接按照C板教程里做会发现电机不转,我就是卡在了这里,搞了两三天也没搞定,还好前辈的视频里说了这个问题,具体在视频1:08:20提及,这个问题搞定后我的2006电机终于转了起来,随后写下这篇文章。

硬件环境

Robomaster 开发板C型

STLink V2

XT30电源

M2006电机+C610电调

我是通过SWD把C板和STLinkV2连接起来的, 四根线对应连接就可以了,STLinkV2的电路板上能看到引脚名称。

《ROBOMASTER开发板C型用户手册》

CubeMX配置

基本的配置请参考《RoboMaster开发板C型嵌入式软件教程文档》中第0章和第14章。

https://github.com/RoboMaster/Development-Board-C-Examples/blob/master/RoboMaster%E5%BC%80%E5%8F%91%E6%9D%BFC%E5%9E%8B%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E6%95%99%E7%A8%8B%E6%96%87%E6%A1%A3.pdficon-default.png?t=N7T8https://github.com/RoboMaster/Development-Board-C-Examples/blob/master/RoboMaster%E5%BC%80%E5%8F%91%E6%9D%BFC%E5%9E%8B%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E6%95%99%E7%A8%8B%E6%96%87%E6%A1%A3.pdf需要注意的是,配置完成后,CAN1_RX和CAN1_TX是这样的,

 但在开发板原理图中CAN1_RX和CAN1_TX分别对应的是PD0和PD1,

 所以要在Pinout view中修改到正确的位置,否则电机不转。

 程序代码

while循环里的代码,为什么这样请参考《Robomaster C610无刷电机调速器使用说明》中CAN通信协议部分。

while (1)
  {
		CAN_TxHeaderTypeDef pHeader1;
		pHeader1.StdId = 0x200;       //标识符:0x200
		pHeader1.IDE = CAN_ID_STD;    //帧类型:标准帧
		pHeader1.RTR = CAN_RTR_DATA;  //帧格式:DATA
		pHeader1.DLC = 0x08;          //DLC:8字节
		
		uint8_t aData[8];
		aData[0] = 200 >> 8;          //电调ID:1,控制电流值高8位
		aData[1] = 200;               //电调ID:1,控制电流低8位
		
		HAL_CAN_AddTxMessage(&hcan1, &pHeader1, aData, 0);
  }

还要搞一个函数,还没搞懂这个函数是干嘛的,但是必须要用,否则电机不转。

void can_filter_init(void)
{
    CAN_FilterTypeDef can_filter_st;
    can_filter_st.FilterActivation = ENABLE;
    can_filter_st.FilterMode = CAN_FILTERMODE_IDMASK;
    can_filter_st.FilterScale = CAN_FILTERSCALE_32BIT;
    can_filter_st.FilterIdHigh = 0x0000;
    can_filter_st.FilterIdLow = 0x0000;
    can_filter_st.FilterMaskIdHigh = 0x0000;
    can_filter_st.FilterMaskIdLow = 0x0000;
    can_filter_st.FilterBank = 0;
    can_filter_st.FilterFIFOAssignment = CAN_RX_FIFO0;
    HAL_CAN_ConfigFilter(&hcan1, &can_filter_st);
    HAL_CAN_Start(&hcan1);
    HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);

    can_filter_st.SlaveStartFilterBank = 14;
    can_filter_st.FilterBank = 14;
    HAL_CAN_ConfigFilter(&hcan2, &can_filter_st);
    HAL_CAN_Start(&hcan2);
    HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING);
};

致敬:

从零开始,用cube MX让2006电机转起来,CAN通信协议(RoboMaster战队培训日常)_哔哩哔哩_bilibili

ChatGPT4

用ChatGPT4理解上述代码:

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐