硬件以及软件环境:

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入门教程–瑞萨电子
** 参考资料可以在源码链接内下载,源码链接在文章开头说明

【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议相关推荐

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

    硬件以及软件环境: STM32Cube_FW_F4_V1.26.2 MDK-ARM 5.29.0.0 大疆RoboMaster开发板A型开发板(STM32F427IIHx)/C型开发板(STM32F4 ...

  2. 从零开始,用CubeMX让M2006电机转起来,大疆C板控制M2006电机

    发现网上很少有关于这个的文章,到处找,搜索引擎试了个遍,还在Robomaster的论坛里找了找,最终也是没有找到类似的文章.还好在B站上找到了一个视频教程,帮助很多,致敬前辈!,视频链接在文末.但是这 ...

  3. 瑞萨单片机解调好盈电调控制无刷电机

    最近刚接触四旋翼,主控用的是瑞萨的RX23T系列,表示以前从来没有接触过瑞萨的单片机,所以拿到手一脸的懵逼.在我好不容易搞懂了开发环境的使用,把在某宝上寻得的资料烧写到单片机上,期待电机嗡嗡转起来,可 ...

  4. 基于FPGA:如何通过电调控制无刷电机(包含FPGA及Arduino程序)

    日常·唠嗑: 2020已经过去,回首这一年,真的经历了很多,申报项目.集创赛.电赛.机械创新赛.挑战杯.写博客.遇见她--一路走来磕磕碰碰,也成长了许多.在2021伊始,写下这篇博客博客,希望能不忘初 ...

  5. 航模基础知识之电机,电调,电池的选择

    在设计一款小型无人车,无人船,多旋翼,固定翼的时候.一定会面对的一个问题是怎么选择合适的电机,电池,电调.这三者配合的好,机器才可以发挥优秀的性能,否则会有烧坏设备的可能.所以接下来介绍如何设计电机, ...

  6. ESP32:蓝牙BLE控制M3508电机

    ESP32:蓝牙BLE控制M3508电机 先给各位朋友拜个年,祝大家新春快乐,事事顺利,身体健康啊! 还是熟悉的3508,内容概述: ESP32主控 蓝牙BLE通信 使用实时系统(FreeRTOS) ...

  7. stm32f103c8t6控制ESP8266与手机APP通信

    stm32f103c8t6控制ESP8266与手机APP通信 之前已经发表过利用stm32控制蓝牙模块与手机APP通信的文章,那么现在我就来说说用WIFI模块来控制与手机APP的通信 首先需要的器件如 ...

  8. STM32应用(九)编码器及其测速原理、L298N电机驱动控制编码器电机

    文章目录 1.L298N电机驱动 1.1 产品参数 1.2 实物图和接线 2.编码器 2.1 编码器简介 2.2 常用编码器分类 2.3 霍尔编码器实物图接线!!!! 2.4 编码器倍频原理 3.控制 ...

  9. 串口控制小车电机转动+蓝牙长按控制

    串口控制小车电机转动+蓝牙长按控制 程序 1.main.c:调用串口初始化函数,循环里调用Stop函数让小车停止 2.Motor.c:小车前进.后退.左转.右转和停止的函数 3.Delay.c:延时函 ...

最新文章

  1. java中参数存储_Java中函数参数传递和数据存储
  2. Scala入门到精通——第五节 函数、高阶函数与闭包
  3. javascript --- 函数的柯里化 Vue 2.x中柯里化的使用
  4. leetcode113. 路径总和 II
  5. 数据库中的模式分解与无损连接性
  6. 调查显示:被黑过的公司难以找到投资
  7. Unity2018新功能抢鲜 | C# Job System Ⅱ
  8. redis cluster以及master-slave在windows下环境搭建
  9. 博客搬家到CSDN:http://blog.csdn.net/yeweiouyang
  10. markdown 流程图js_如何在Markdown中画流程图
  11. ffmpeg文档8:软件缩放
  12. 作为测试人员,不要说有错误,要说有什么错误
  13. c语言实现61850协议,C语言实现61850库实现代码
  14. win10系统QQ音乐安装包无法打开解决方法!
  15. wamp mysql使用方法_wamp使用方法【总】
  16. Service Temporarily Unavailable
  17. 圆点横线圆点 html,目录的点怎么打(目录中小圆点横线上的点要一个个打上去?)...
  18. 将图片资源添加到VS中,并在代码中引用
  19. SpringBoot 请求参数包含 [] 特殊符号
  20. 小猫踢足球-第14届蓝桥杯STEMA测评Scratch真题精选

热门文章

  1. 计算机中丢失mfc100.dll处理方法
  2. 英文经典情歌《right here waiting》此情可待
  3. 知识变现~在抖音月销百万是种怎样的体验?实操仅需2步,快来学!
  4. 计算机室解说词云课堂,微机室解说词
  5. 内部招聘系统开发心得
  6. Java Socket实现简易多人聊天室传输聊天内容或文件
  7. 分布式文件系统之NFS
  8. 新的Android恶意软件可以窃取用户密码,用这些APP的要小心了
  9. Rhythmbox乱码
  10. 中国矿业大学算法概论作业二 D、汽车费用