STM32全部教程
:【STM32】标准库与HAL库对照学习系列教程大全
一、前言
前面讲解了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)组成的地址来访问和存取。如下表所示。
名称 | Index | Sub_Index | Bits | 属性 | 含义 |
---|---|---|---|---|---|
Controlword | 6040 | 00 | 10 | RW | 设备状态控制字 |
Modes of Operation | 6060 | 00 | 08 | RW | 工作模式 |
Target_position | 607A | 00 | 20 | W | 目标位置 |
每个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)中,下表说明了错误寄存器的位定义。设备可以将内部错误映射到这个状态字节中,并可以快速查看当前错误。
Bit | Index |
---|---|
0 | 通用的(generic) |
1 | 电流(current ) |
2 | 电压(voltage) |
3 | 温度(temperature) |
4 | 通信(communication) |
5 | 设备配置文件特性(device profile specific) |
6 | Reserved(=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(如目标位置)的激活;
- 同步报文用于同步各个节点的时钟。
传输类型:文章来源:https://www.toymoban.com/news/detail-403613.html
- 0非循环
- 1-240的传输类型就是指经过多少个同步报文后,发送TPDO
伺服周期性同步位置模式(CSP)原理: - 伺服工作在7号插补模式,上位控制器完成位置指令规划,然后将规划好的目标位置607A以周期性同步的方式发送给伺服驱动器。控制器发送目标位置的周期必须是伺服驱动器位置环周期的整数倍。
- 控制器周期性的发送同步报文,比如1mS,2mS或者4mS等,驱动器主动通过微调自身控制环频率将控制环(电流环、速度环、位置环)和同步信号同步,从而实现多个驱动器同步工作。
- 控制器发送RPDO给各个驱动器,比如目标位置,在下一个同步报文到来后,驱动器将指令激活,所有的驱动器同时更新指令,从而实现同步。
- 在运行同步工作模式的时候,SDO和TPDO也是允许的,但是发送的时机是需要检测的。因为RPDO是最重要的数据,必须优先保证RPDO的接收,然后在空闲时间才可以发送SDO和TPDO。一个比较合理的排列是:同步周期里面,前半时间用于SDO以及TPDO的发送,后半时间用于RPDO的接收。
- 驱动器接收到设定位置后与当前位置比较,并依据控制器的周期与伺服位置环周期的倍数进行线性或非线性插值,将插值作为每个位置环周期的“设定位置”。
文章来源地址https://www.toymoban.com/news/detail-403613.html
到了这里,关于【CANopen】CANopen总线讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!