【CANopen】CANopen总线讲解

2023-05-16

CANopen总线

  • 一、前言
  • 二、CANopen概述
    • 2.1 CANopen网络模型
    • 2.2 CANopen常见规范
  • 三、CANopen对象字典
  • 四、CANopen通讯标识符
  • 五、CANopen协议概述
    • 5.1 CANOpen协议报文分类
    • 5.2 CANopen状态机
    • 5.3 CANopen数据帧格式
  • 六、NMT管理报文
  • 七、NODE GUARDING 节点保护报文
  • 八、HeartBeat 心跳报文
  • 九、BOOT-UP 节点启动报文
  • 十、EMCY 紧急报文
  • 十一、SDO 服务数据对象报文
  • 十二、PDO 过程数据对象报文
    • 12.1 PDO参数
    • 12.2 PDO的COB-ID
    • 12.3 PDO的传输类型
    • 12.4 PDO映射
    • 12.5 PDO报文
  • 十三、SYNC 同步报文


一、前言

前面讲解了CAN总线的一些基础内容,这里来讲解一些在CAN总线的基础上提供的CANopen协议

CAN总线协议讲解与应用:【STM32】标准库与HAL库对照学习教程十四–CAN总线


二、CANopen概述

CANopen 是在 CAL 基础上开发的,使用了 CAL 通讯和服务协议子集,提供了分布式控制系统的
一种实现方案。CANopen是CAN的一种应用层协议
CANopen 的核心概念是设备对象字典(OD:Object Dictionary),在其它现场总线(Profibus,Interbus-S)系统中也使用这种设备描述形式。

注:对象字典不是 CAL 的一部分,而是在 CANopen 中实现的。

CANopen协议是免许可证的,任何组织和个人都可以开发支持CANopen协议的设备而不用支付版税

2.1 CANopen网络模型

在这里插入图片描述

2.2 CANopen常见规范

  • CANopen协议是CAN-in-Automation(CiA)定义的标准之一,在欧洲,CANopen协议被认为
    是在基于CAN的工业系统中占领导地位的标准。大多数重要的设备类型,例如数字和模拟的输入输出模块、驱动设备、操作设备、控制器、可编程控制器或编码器,都在称为“设备描述”的协议中进行描述;“设备描述”定义了不同类型的标准设备及其相应的功能。
  • 依靠CANopen协议的支持,可以对不同厂商的设备通过总线进行配置。
    在这里插入图片描述

三、CANopen对象字典

对象字典(OD)英文名Object Dictionary,你可以理解为C语言中的数据地址,或者设备的地址,CANopen网络中每个节点都有一个对象字典。对象字典包含了描述这个设备和它的网络行为的所有参数。
所有的参数、参数值和功能都是通过16位索引值(index)和8位子索引(sub-index)组成的地址来访问和存取。如下表所示。

名称IndexSub_IndexBits属性含义
Controlword60400010RW设备状态控制字
Modes of Operation60600008RW工作模式
Target_position607A0020W目标位置

每个CANopen设备都有一个对象字典,使用电子数据文档(EDS:Electronic Data Sheet文件)来记录这些参数,而不需要把这些参数记录在纸上。

对象字典中描述通讯参数部分对所有CANopen设备都是一样的。其通用结构如下图所示。
在这里插入图片描述


四、CANopen通讯标识符

在我们学CAN通信的时候,知道我们靠设备ID识别不同种类的设备,CANopen里对ID进行了细化与规定,CANopen中的通信标识符(ID)叫做CAN-ID,通常把 CAN-ID 称为 COB-ID(通信对象编号)。

  • 每个CANopen帧都以COB-ID开头,COB-ID是数据帧的唯一标识符。

  • COB_ID越小报文优先级别越高。CANopen的COB_ID范围从0-77F。

  • COB_ID包括功能段(FUNCTION)地址段(NODE-ID)

如下图所示:
在这里插入图片描述

Node-ID由系统集成商定义。Node-ID范围是1~127(0不允许被使用)


五、CANopen协议概述

5.1 CANOpen协议报文分类

  • NMT 网络管理报文,作用是管理网络,切换节点的状态。一般由主站发送NMT网络管理报文。
  • SDO 服务数据对象报文,作用是设置设备参数,或者是一些关键数据的传输。一般由主站发起SDO报文,从站应答SDO报文。从站也可以发起SDO,主站响应,比如关键数据的传输。
  • PDO 过程数据对象报文,作用是传输一些设备的过程数据,比如传输温度,速度等等。主站和从站都会发送。
  • EMCY 紧急报文,作用是传输设备的故障信息。主站和从站都会发送。
  • SYNC 同步报文,作用是同步数据,用来同步从站的TPDO数据。一般由主站发送。比如从站的TPDO传输类型是在同步模式下,当从站收到设定次数的SYNC报文后,从站会发送TPDO。这个在后续的文章中详细阐述。
  • NODE GUARDING 节点保护报文,作用是主站请求从站的状态,主站询问,从站应答。这种模式逐渐已被淘汰,因为太占CAN总线网络带宽。
  • HeartBeat 心跳报文,作用是设备主动发送心跳,表示自己在线。主站和从站都可以发送。

5.2 CANopen状态机

CANOpen节点共包括:初始化、预操作、操作、停止这四个状态。状态机可以通过NMT服务相互切换,如下图所示。
在这里插入图片描述
在这里插入图片描述

5.3 CANopen数据帧格式

CANopen的数据帧格式如下图所示。
在这里插入图片描述
每个CANopen帧都以COB-ID开头,COB-ID是数据帧的唯一标识符,DLC表示传输多少个字节数据,Data表示传输的数据,最多8个字节。


六、NMT管理报文

  • 只有 NMT-Master 节点能够传送 NMT Module Control 报文。所有从节点必须支持 NMT 模块控制服务。
  • NMT Module Control 报文不需要应答。NMT 报文格式如下:
    在这里插入图片描述
    当Node-ID=0x0000时,则所有的NMT从站设备被寻址。CS是命令字,取值及含义如下:
    在这里插入图片描述

七、NODE GUARDING 节点保护报文

通过节点保护报文,NMT主节点可以监视每个从节点的当前状态

  • 主节点周期性的发送报文去询问从节点的状态,从节点收到主节点的问询后将自己的状态回复给主节点,在设定的时间内如果主节点没有收到从节点的信息或信息错误都会判断从节点通讯故障。
  • 主节点发送远程帧(只有COB-ID,无数据)
    在这里插入图片描述
    Bit7为触发位,在每次节点保护应答中交替“0”和“1”,在第一次节点保护时置0。
    在这里插入图片描述

注意:带*号的需要支持扩展BOOT-UP的节点才提供,状态0从不在节点保护中出现,因
为从节点在初始化状态中是不会应答报文的


八、HeartBeat 心跳报文

一个节点还可被配置为产生周期性的被称作心跳报文(Heartbeat)的报文,从节点周期将该报文发送给消费者,消费者可以通过报文中的状态值得知从节点的状态。结构如下图所示。
在这里插入图片描述
注:
1、心跳报文(HeartBeat)的消费者通常是主节点,它为每一个心跳节点设置一个超时时间,当超时是采取相应的动作。
2、一个节点不能同时使用节点保护报文和心跳报文。


九、BOOT-UP 节点启动报文

从节点(NMT-slave)发布Boot-UP报文通知主节点(NMT-Master)它已经从初始化状态(initialising)进入预准备(pre-operational)状态。如下图所示。
在这里插入图片描述


十、EMCY 紧急报文

紧急报文当设备内部出现的致命错误触发,以最高优先级发送到其它设备。适用于中断类型
的错误报警信号。一个紧急报文包含8个字节,报文格式如下:
在这里插入图片描述
Byte0-1,16 进制的应急错误代码如下表所示。应急错误代码中‘xx’部分由相应的设备子协议定义。
在这里插入图片描述
Byte2 错误寄存器:错误寄存器(Error Register)在设备的对象字典(索引 0x1001)中,下表说明了错误寄存器的位定义。设备可以将内部错误映射到这个状态字节中,并可以快速查看当前错误。

BitIndex
0通用的(generic)
1电流(current )
2电压(voltage)
3温度(temperature)
4通信(communication)
5设备配置文件特性(device profile specific)
6Reserved(=0)
7制造商特性(manufacturer specific )

十一、SDO 服务数据对象报文

  • 主要用来在设备之间传输低优先级的对象,典型是用来对从设备进行配置、管理,比如用来修改速度环、位置环的PID参数,PDO配置参数等。
  • 通过使用索引和子索引SDO使客户机能够访问设备对象字典中的对象。
  • 通常情况下传输的数据长度不超过4个字节,当数据长度超过4个字节是分拆成几个报文。
  • 议是确认服务类型:每个消息生成一个应答。SDO请求和应答报文总是包含8个字节。

SDO中的COB-ID定义规则如下:
在这里插入图片描述

SDO读报文如下:
在这里插入图片描述
命令字:0x40
在这里插入图片描述
在这里插入图片描述
SDO写报文如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SDO通讯失败,从站回复报文如下:
在这里插入图片描述
后4个字节是被称为是中止代码,通过中止代码能得知出错的原因。中止代码如下:
在这里插入图片描述


十二、PDO 过程数据对象报文

  • 用来传输实时数据,数据从一个生产者传到一个或多个消费者。1个PDO1次最多传输8个字节的数据
  • 每个PDO在对象字典中用2个对象描述:
    • PDO通讯参数:包含COB_ID,传输类型,禁止时间,定时器周期。
    • PDO映射参数:包含对象字典中对象列表,这些对象映射到PDO里,包含数据长度。生产者和消费者根据映射的地址解释PDO内容。
  • 报文内容是预定义的(或者在网络启动时由主配置)

12.1 PDO参数

  • 发送PDO通讯参数(1800h-19FFh)和接收PDO通讯参数(1400h-15FFh)
  • PDO通讯参数说明了PDO的基本特性,如COB-ID、传输类型、禁止时间和事件定时器等,它决定了PDO是以何种方式发送和接收数据
  • PDO禁止时间:两个连续PDO传输的最小间隔时间,避免由于高优先级信息的数据量太大,始终占据总线,而使其它优先级较低的数据无力竞争总线的问题。禁止时间由16位无符号整数定义,单位为1ms
  • PDO定时周期:当超过定时时间后一个PDO可以被触发,周期有16位无符号数定义,单位1ms

12.2 PDO的COB-ID

在这里插入图片描述

12.3 PDO的传输类型

  • 同步(通过接收SYNC对象实现同步)
    • 非周期:由远程帧预触发传送,或者由设备子协议规定中的对象特定事件预触发传送
    • 周期:传送在每1到240个SYNC消息后触发。
  • 异步
    由设备协议中规定的对象特定事件触发传送。

图表如下:
在这里插入图片描述

12.4 PDO映射

  • 说明了PDO中所包含的通讯对象,决定了发送或接收的数据内容
  • 传输映射(1A00h-1BFFh)
  • 接收映射(1600h-17FFh)

12.5 PDO报文

在这里插入图片描述


十三、SYNC 同步报文

同步报文的CAN-ID固定是0x80,数据长度是0或1。同步报文是生产者消费者模型,由主站发出,同步从站的TPDO。
在这里插入图片描述

  • 通讯循环周期:索引1006h,规定了同步帧的循环周期
  • 同步窗口时间:索引1007h,约束了同步帧发送后从节点发送PDO的时效,即在这个时间内发送的PDO才有效超过时间的PDO将被丢弃

同步报文的数据帧如下:
在这里插入图片描述
同步报文的作用:

  • 同步报文用于控制TPDO(如实际位置,状态字)的发送;
  • 同步报文用于控制RPDO(如目标位置)的激活;
  • 同步报文用于同步各个节点的时钟。

传输类型:

  • 0非循环
  • 1-240的传输类型就是指经过多少个同步报文后,发送TPDO
    在这里插入图片描述
    伺服周期性同步位置模式(CSP)原理:
  • 伺服工作在7号插补模式,上位控制器完成位置指令规划,然后将规划好的目标位置607A以周期性同步的方式发送给伺服驱动器。控制器发送目标位置的周期必须是伺服驱动器位置环周期的整数倍。
  • 控制器周期性的发送同步报文,比如1mS,2mS或者4mS等,驱动器主动通过微调自身控制环频率将控制环(电流环、速度环、位置环)和同步信号同步,从而实现多个驱动器同步工作。
  • 控制器发送RPDO给各个驱动器,比如目标位置,在下一个同步报文到来后,驱动器将指令
    激活,所有的驱动器同时更新指令,从而实现同步。
  • 在运行同步工作模式的时候,SDO和TPDO也是允许的,但是发送的时机是需要检测的。因
    为RPDO是最重要的数据,必须优先保证RPDO的接收,然后在空闲时间才可以发送SDO和
    TPDO。一个比较合理的排列是:同步周期里面,前半时间用于SDO以及TPDO的发送,后
    半时间用于RPDO的接收。
  • 驱动器接收到设定位置后与当前位置比较,并依据控制器的周期与伺服位置环周期的倍数进行线性或非线性插值,将插值作为每个位置环周期的“设定位置”。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【CANopen】CANopen总线讲解 的相关文章

随机推荐

  • 【C++】STL应用(详解)

    一 泛型程序与STL1 泛型程序设计的基本概念2 STL简介 二 迭代器1 输入流迭代器2 输出流迭代器 三 STL应用1 撰写自己的算法和函数 xff0c 结合容器和迭代器解决序列变换 xff08 如取反 平方 立方 xff09 xff0
  • 模块学习(二)——MPU6050

    去年电赛备赛期间 xff0c 学的STM32标准库 xff0c 那一整个繁琐直接给我劝退了 xff0c 当时学习MPU6050时就非常痛苦 xff0c 代码也看不懂 xff0c 无非抄来抄去 xff0c 然后就是编译 xff0c 改错 xf
  • 【嵌入式面试题】常见的面试题梳理一

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 使用Python+openpyxl实现导出自定义样式的Excel文件

    之前项目中的导出Excel文件操作都是在前端完成的 xff0c 项目是由vue 43 vite构建的 xff0c 效果还不错的 xff0c 所需依赖包如下所示 npm i xlsx 64 0 18 5 npm i xlsx style vi
  • 【嵌入式面试题】常见面试题梳理二

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理三

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理四

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理五

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 【嵌入式面试题】常见面试题梳理六

    注 xff1a 看面试题时 xff0c 主要应该以学习为主 xff0c 面试题有些基本上是我们编程时会遇上的问题 xff0c 通过学习面试题会提升我们的编程意识和解决一些日常我们编程所遇到的问题 xff0c 看完这篇面试题后 xff0c 希
  • 我的创作一周年纪念日--收获与成长与展望

    机缘 2022年10月11日 xff0c 是我创作的一周年纪念日 xff0c 1年前 xff0c 刚到大三的我开启了我的创作之旅 xff0c 那个时候 xff0c 我选择重新学习C语言和数据结构 xff0c 将我的基础在进行巩固 在那个时候
  • 【Linux】特别篇--SMBus 协议

    Linux 特别篇 SMBus 协议 一 SMBus 简介二 SMBus 与 I2C 区别三 SMBus协议分析3 1 符号含义3 2 SMBus Quick Command3 3 SMBus Receive Byte3 4 SMBus S
  • 【Linux】特别篇--GNU C编译器扩展语法

    前言 xff1a 本章是我参考 嵌入式C语言自我修养 的GUN C编译器扩展语法这一章 xff0c 对其中的内容进行了摘录 总结与归纳 xff0c 并写了一些关于自己的理解 xff0c 这边还是推荐大家去购买原作的 xff0c 因为里面用通
  • 【ROS】机械人开发一--树莓派安装ubuntu18.04

    前言 xff1a 安装了一天的树莓派系统 xff0c 遇到了很多坑 xff0c 这里将教程详细分享一下 xff0c 方便大家快速的安装系统 目录 一 操作环境硬件软件 二 资源下载链接三 具体步骤烧入修改镜像文件问题修改重启时间PC端使用x
  • 【ROS】机械人开发二--ROS环境安装

    机械人开发二 ROS环境安装 一 运行环境二 ROS melodic安装2 1 设置软件源2 2 设置密钥2 3 安装ROS2 4 环境设置2 5 安装ROS的依赖环境2 6 初始化rosdep 三 建立工作空间测试 一 运行环境 树莓派4
  • Android应用程序开发期末大作业(1)

    一 简答题 每小题5分 xff0c 4小题 xff0c 共20分 1 1 android大众常用的五种布局 xff08 5分 xff09 答 xff1a FrameLayout 框架布局 xff0c LinearLayout 线性布局 xf
  • 【ROS】机械人开发三--ROS工作空间与功能包

    机械人开发三 ROS工作空间与功能包 一 ROS工作空间1 1 概念1 2 创建工作空间1 3 编译工作空间1 4 设置环境变量1 5 添加环境变量 二 功能包2 1 概念2 2 功能包的内容2 3 创建功能包 三 CMakeLists t
  • 【ROS】机械人开发四--ROS常用概念与Launch文件

    机械人开发四 ROS常用概念与Launch文件 一 ROS常用概念1 1 ROS 的结构1 2 ROS 话题通信1 3 海龟仿真器 仿真 例程 二 Launch文件2 1 功能2 2 文件语法2 3 参数服务器2 4 节点分组与重命名标签
  • 【ROS】机械人开发五--ROS基本概念的程序实现

    机械人开发五 ROS基本概念的程序实现 一 开发工具二 RoboWare Studio的基本使用2 1 软件启动2 2 修改界面语言2 3 使用2 4 编译文件2 5 卸载 三 话题通信四 话题的代码编写4 1 发布端4 2 接收端4 3
  • 【STM32】标准库与HAL库对照学习教程十四--CAN总线

    STM32 标准库与HAL库对照学习教程十四 CAN总线 一 前言二 准备工作三 CAN协议3 1 简介3 2 CAN物理层3 2 1 闭环总线网络3 2 2 开环总线网络 3 3 差分信号3 3 1 简介3 3 2 CAN总线上的差分信号
  • 【CANopen】CANopen总线讲解

    CANopen总线 一 前言二 CANopen概述2 1 CANopen网络模型2 2 CANopen常见规范 三 CANopen对象字典四 CANopen通讯标识符五 CANopen协议概述5 1 CANOpen协议报文分类5 2 CAN