从零开始:探索RoboMaster RM电机的CAN通信原理与电调通信协议

硬件以及软件环境:

STM32Cube_FW_F4_V1.26.2

MDK-ARM 5.29.0.0

大疆RoboMaster开发板A型开发板(STM32F427IIHx)/C型开发板(STM32F407IGTx)

源码:

RM_ctrl

本系列文章目录:
【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议

【RoboMaster】从零开始控制RM电机(3)- 建立与电调的通信

【RoboMaster】从零开始控制RM电机(4)-单环PID控制

注:本系列文章同步更新RoboMaster电控学习的相关知识、分享开源代码以及对代码的部分解释到这一个专栏中。

本文目录

  • 一、CAN通信原理
  • 1. CAN是什么
  • 1.1 CAN的基础知识
  • 1.2  CAN通信的特点
  • 2. CAN通信协议(必看)
  • 2.1 CAN通信-帧的种类
  • 2.2 CAN通信-数据帧
  • (1)仲裁场
  • (2)控制场
  • (3)数据场
  • 二、电调通信协议
  • 1. M3508&M2006电机
  • 1.1 单片机发送数据给电调
  • 1.2 单片机接收电调数据
  • 2. GM6020电机
  • 2.1 单片机发送数据给电调
  • 2.2 单片机接收电调数据
  • 参考资料
  • 一、CAN通信原理

      第一步首先了解一下CAN通信的背景以及基础知识,避免啥都不懂的情况下上来直接看代码然后直接懵逼。

    1. CAN是什么

    1.1 CAN的基础知识

      CAN 是 Controller Area Network 的缩写,最初是汽车行业为了减少车身上的线束,而且还能进行大量数据的高速通信,由德国电气商博世公司在1986 年开发出的面向汽车的通信协议。现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。RM的电机(3508、2006、6020)的控制也采用了CAN协议进行通信。
    CAN 总线由 CAN_H 和 CAN_L 两根线构成,各个设备一起挂载在总线上。

      下图为C板的CAN通信硬件原理图,两条CAN总线各使用了一颗TJA1044作为CAN收发处理。

    1.2  CAN通信的特点

      下面列出了CAN通信的一部分优点(不是全部)。
    1) 多主控制
      在总线空闲时,所有的单元都可开始发送消息(多主控制)。
      最先访问总线的单元可获得发送权(CSMA/CA 方式)。
      多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权。
    2) 消息的发送
      在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
    3) 通信速度
      根据整个网络的规模,可设定适合的通信速度。
      在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。
    4) 可连接数量多
      CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
      控制RM电机时,虽然手册上注明每条总线最多可以连接8个电机,但是我们使用时一般每条总线上最多连接7个电机,多于这个数量后可能会导致控制频率低而无法达到精准控制甚至失控。

    2. CAN通信协议(必看)

    2.1 CAN通信-帧的种类

      CAN通信由下面五个帧组成:

      其中数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier: 以下称 ID),扩展格式有 29 个位的 ID。在控制RM电机时用的是标准的11位ID。

    2.2 CAN通信-数据帧

      由于CAN协议比较复杂,而且在代码上主要也是只处理数据帧接收到的数据,所以在这里先了解数据帧的构成。数据帧由以下几个场构成:

    1) 帧起始
      表示数据帧开始的段。
    2) 仲裁场
      表示该帧优先级的段。
    3) 控制场
      表示数据的字节数及保留位的段。
    4) 数据场
      数据的内容,可发送 0~8 个字节的数据。
    5) CRC 场
      检查帧的传输错误的段。
    6) 应答场
      表示确认正常接收的段。
    7) 帧结尾
      表示数据帧结束的段。

    (1)仲裁场

      这里主要了解一下仲裁场的内容,从前面介绍的部分可以了解到CAN总线上的每个设备都有自己独有的ID,即仲裁场的数据。每当一个设备发送一帧数据时,总线其他设备会检查这个 ID 是否是自己需要接收数据的对象,如果是则接收本帧数据,如果不是则忽略。
      CAN 的 ID 分为标准 ID 和 拓展 ID 两类,标准 ID 长度为 11 位。如果设备过多,标准 ID 不够用的情况下,可以使用拓展 ID,拓展 ID 的长度有 29位。我们使用的是标准的11位ID。

    (2)控制场

      通过仲裁场判断完设备的标识符后,设备可以接收到需要处理的数据并且过滤掉与自己无关的数据。然后就可以通过控制场获取到数据场的数据长度,和仲裁场一样的,控制场也分为标准格式和扩展格式,因为我们确定是标准格式的仲裁场(ID),所以只了解标准格式的控制场。
      控制场由 6 个位构成,表示数据段的字节数。数据场的数据有效长度就是由其中的DLC段控制的,由电调通信协议(后文会解释)可得数据帧数据大小为8Byte。

      由下面的数据长度码和字节数对应关系可以得到,DLC的四位应该设置为R-D-D-D。

    (3)数据场

      由控制场确定完数据长的数据长度后,就开始了解使用CAN通信控制电机的核心部分— 数据场。由控制场可得数据长度为8Byte,所以CAN 总线的一个数据帧中所需要传输的有效数据实际上就是这 8Byte。这8字节的排列顺序为从高到低。

    二、电调通信协议

      在上一部分了解完CAN通信协议后,只能够让我们通过CAN协议接收或发送数据,并不能让电机转起来。而需要控制电机转动还需要了解电机电调自身的通信协议,清楚每个字节对应数据的含义是什么,这样才能成功建立起与电机电调的通信。
      接下来就结合官网的电机配套电调的数据手册了解分析电调的通信协议,用到的文档都可以在官网上下载。

    1. M3508&M2006电机

      由于3508和2006的控制是相同的,所以将3508和2006放在一起了解,同一份代码对3508和2006都是通用的。3508使用C620电调,2006使用C610电调。

    1.1 单片机发送数据给电调

      单片机向电调发送控制指控制电调的电流输出,控制电流范围为 -16384 ~ 16384 ,对应电调输出转矩电流范围为 -20 ~ 20A 。因为CAN通信的数据帧只有8Byte,又每个电机的电流值对应需要2Byte,所以一个数据帧只能给四个电机发送数据,那么超过四个电机的话就需要两个数据帧来给电机发送数据,两帧数据就需要不同的标识符用做区分。
      下面的表格是电调接收报文格式,也就是单片机发送报文格式。当我们控制前四个电机时将ID设为 0x200 并依次将电流数据填入数据帧中发送就可以。同理,控制后四个电机时只需要将ID改为0x1FF后填入数据发送。

    1.2 单片机接收电调数据

      为了实现闭环控制,单片机需要接收电调的反馈报文得到电机的转速、机械转子角度、实时电流数据。
      首先根据接收到的ID判断接收到的数据对应的是哪一个电调,电调反馈报文ID规定为 0x200+电调ID(1-8),如0x201(电调ID为1)。
      数据帧内数据域与内容对应关系如下表。只要对接收到的数据按下表解码就可以得到我们需要的数据了。

    2. GM6020电机

      与3508和2006不同,6020是电压控制而且标识符与3508不同,所以单独列出来。

    2.1 单片机发送数据给电调

      控制6020电机时,单片机向电机发送的控制指令控制的是电压输出,电压给定值范围为-30000 ~ 30000 。同样的是每帧也只能同时控制4个电机,所以超过四个电机时就需要两个数据帧来给电机发送数据,两帧数据需要不同的标识符用做区分,前四个:0x1FF , 后三个:0x2FF。具体的格式如下表。

    2.2 单片机接收电调数据

      6020反馈的报文数据和3508电机类似,只需要将标识符修改为0x204+电调ID即可。

    参考资料

    1.RoboMaster开发板C型嵌入式软件教程文档–RoboMaster官网
    2.RoboMaster C620无刷电机调速器使用说明(中英日)V1.01–RoboMaster官网
    3.RoboMaster GM6020直流无刷电机使用说明–RoboMaster官网
    4.can入门教程–瑞萨电子
    ** 参考资料可以在源码链接内下载,源码链接在文章开头说明

    物联沃分享整理
    物联沃-IOTWORD物联网 » 从零开始:探索RoboMaster RM电机的CAN通信原理与电调通信协议

    发表评论