CAN与CANOPEN在电机控制中的应用
一,CAN总线基础知识:
总线状态总线有“显性”和“隐性”两个状态,“显性”对应逻辑“0”,“隐性”对应逻辑“1”。“显性”状态和“隐性”状态相与的结果为“显性”状态,所以两个节点同时分别发送“0”和“1”时,总线上呈现“0”。也就是说在总线上显性电平具有优先权,只有所有的单元都输出隐性电平,总线上才为隐性电平。另外在CAN总线的起止端都有一个120欧的终端电阻来做阻抗匹配,以减少回波。
CAN协议通过以下5种类型的帧进行:
数据帧
远程帧
错误帧
过载帧
间隔帧
CAN报文发送优先权抉择:
CAN 总线以报文为单位进行数据传送,报文的优先级结合在11 位标识符中,具有最低二进制数的标识符有最高的优先级。这种优先级一旦在系统设计时被确立后就不能再被更改。总线读取中的冲突可通过位仲裁解决。如图2 所示,当几个站同时发送报文时,站1 的报文标识符为011111;站2 的报文标识符为0100110;站3 的报文标识符为0100111。所有标识符都有相同的两位01,直到第3 位进行比较时,站1 的报文被丢掉,因为它的第3 位为高,而其它两个站的报文第3位为低。站2 和站3 报文的4、5、6 位相同,直到第7 位时,站3 的报文才被丢失。注意,总线中的信号持续跟踪最后获得总线读取权的站的报文。在此例中,站2 的报文被跟踪。这种非破坏性位仲裁方法的优点在于,在网络最终确定哪一个站的报文被传送以前,报文的起始部分已经在网络上传送了。所有未获得总线读取权的站都成为具有最高优先权报文的接收站,并且不会在总线再次空闲前发送报文。
CAN数据帧组成:
(1) 帧起始。 表示数据开的段帧起始。
(2) 仲裁段。 表示该帧优先级的仲裁段。
(3) 控制段。 表示数据的字节及保留位控制段。
(4) 数据段。 数据的内容,一帧可发送0~8个字节的数据段。
(5) CRC段。 检查帧的传输错误段。
(6) ACK段。 表示确认正常接收的段。
(7) 帧结束。 表示数据的段帧结束。
数据帧的构成如下图所示:图中D表示显性电平,R表示显性电平。
应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文远程帧由6 个场组成:帧起始、仲裁场、控制场、CRC 场、应答场和帧结束。远程帧不存在数据场。远程帧的RTR 位必须是隐位。DLC 的数据值是独立的,它可以是0~8 中的任何数值,为对应数据帧的数据长度。
使用PMC007电机驱动器时 只需要发送ID和数据域即可,其他位置由硬件自动完成。
二,CANOPEN协议
CANPro 协议分析平台中的 CANopen 协议分析插件有两种,一是 Block_CANopen,用于分析支持块传输的 CANopen 协议报文,二是 CANopen,用于分析不支持块传输的CANopen 协议报文。之所以作这样的区分,是因为 CANopen 协议中的块传输的报文是上下文相关的,要识别块传输报文需要知道之前传输的报文信息,但是 CANPro 协议分析平台只针对当前的 CAN 帧进行分析,因此无法识别块传输报文,而且只根据当前 CAN 帧判断可能会将块传输报文误认为是其他的 SDO 报文。因此,对于支持块传输的 CANopen 协议,在遇到 SDO 报文时,只显示它的节点 ID 和数据域,不再判断它是属于 SDO 中具体的哪种类型。不支持块传输的 CANopen 协议则会识别出 SDO 报文的具体类型。
下面对 Block_CANopen 协议中的每一类报文进行详细介绍:
1、 NMT Error Control NMT 错误控制报文
(1)、Node ID 从节点的 ID 标识
(2)、Node Status 节点状态信息
2、 Node Guarding Request 节点保护请求报文,用于获取从节点状态
(1)、Node ID 从节点的 ID 标识
3、 NMT Module Control NMT 模块控制报文
(1)、NMT Command NMT 命令标识
(2)、Node ID 从节点的 ID 标识
4、 SYNC 同步报文
5、 EMCY 紧急错误报文
(1)、Error Code 紧急报文的错误码
(2)、Error Register 紧急报文的错误寄存器
(3)、Manufacturer Specific 厂商自定义的错误码
6、 TIME 时间报文
(1)、Time Stamp 时间报文中的时间戳信息,已解析为时间
7、 PDO PDO 报文
(1)、PDO Object PDO 通讯对象
(2)、Node ID 从节点的 ID 标识
(3)、PDO Data PDO 对象数据
8、 Remote PDO 远程 PDO 报文,用于请求 PDO 传输
(1)、PDO Object PDO 通讯对象
(2)、Node ID 从节点的 ID 标识
9、 SDO SDO 报文
(1)、SDO Object SDO 通讯对象
(2)、Node ID 从节点的 ID 标识
(3)、Data Field SDO 对象数据
CANopen 协议对 SDO 报文的解释与 Block_CANopen 不同,其他类型的报文定义都相同,
这里不再赘述,CANopen 协议中定义的各种 SDO 报文如下:
1、Initiate SDO Download Request 初始化 SDO 下载请求报文
(1)、Node ID 从节点的 ID 标识
(2)、Object Index 对象索引值
(3)、Object Sub-index 对象子索引值
(4)、Transfer Type 指示传输类型为快速传输还是一般的分段传输
(5)、Size Indicator 指示报文是否标识了传输量
(6)、Bytes Not Data 数据域中无效的字节数,只有快速传输才有效
(7)、Bytes Downloaded 下载的数据字节数,只有分段传输才有效
(8)、SDO Data SDO 数据域,只有快速传输才有效
2、Initiate SDO Download Response 初始化 SDO 下载响应报文
(1)、Node ID 从节点的 ID 标识
(2)、Object Index 对象索引值
(3)、Object Sub-index 对象子索引值
3、Download SDO Segment Request SDO 分段下载请求报文
(1)、Node ID 从节点的 ID 标识
(2)、Toggle Bit 触发位
(3)、Whether More Segments 标识是否最后一个分段
(4)、Bytes Not Data 数据域中无效的字节数
(5)、SDO Data SDO 数据域
4、Download SDO Segment Response SDO 分段下载响应报文
(1)、Node ID 从节点的 ID 标识
(2)、Toggle Bit 触发位
5、Initiate SDO Upload Request 初始化 SDO 上传请求报文
(1)、Node ID 从节点的 ID 标识
(2)、Object Index 对象索引值
(3)、Object Sub-index 对象子索引值
6、Initiate SDO Upload Response 初始化 SDO 上传响应报文
(1)、Node ID 从节点的 ID 标识
(2)、Object Index 对象索引值
(3)、Object Sub-index 对象子索引值
(4)、Transfer Type 指示传输类型为快速传输还是一般的分段传输
(5)、Size Indicator 指示报文是否标识了传输量
(6)、Bytes Not Data 数据域中无效的字节数,只有快速传输才有效
(7)、Bytes Downloaded 上传的数据字节数,只有分段传输才有效
(8)、SDO Data SDO 数据域,只有快速传输才有效
7、Upload SDO Segment Request SDO 分段上传请求报文
(1)、Node ID 从节点的 ID 标识
(2)、Toggle Bit 触发位
8、Upload SDO Segment Response SDO 分段上传响应报文
(1)、Node ID 从节点的 ID 标识
(2)、Toggle Bit 触发位
(3)、Whether More Segments 标识是否最后一个分段
(4)、Bytes Not Data 数据域中无效的字节数
(5)、SDO Data SDO 数据域
9、Abort SDO Transfer SDO 传输中止报文
(1)、SDO Object SDO 通讯对象(是 Server 还是 Client)
(2)、Node ID 从节点的 ID 标识
(3)、Object Index 对象索引值
(4)、Object Sub-index 对象子索引值
(5)、Abort Code 中止代码,表示传输中止的原因
三,CAN总线控制电机时常用的硬件
USB-CAN 以太网-CAN NI9082 PMC007电机驱动器
四,CAN总线开发时常用软件介绍
CANOPEN等协议分析平台 CAN pro
通用测试软件 CAN test
分析仪通讯软件 ECANtool