CANCANopen学习笔记
- 格式:pdf
- 大小:199.24 KB
- 文档页数:7
CANCANopen学习笔记
PART1——CAN
1 CAN 基础知识
CAN 总线是⼀种通⽤的串⾏通信协议,包含OSI ⽹络模型中的物理层和数据链路层,全部通过硬件来实现。
CAN 总线不分主从,每个节点只要需要,都可作为主站,向⽹络上其他节点发送信息。 物理层主要是通过CAN 收发器来实现。1.1 CAN 收发器
CAN 收发器安装在CAN 控制器内部,负责逻辑信号和电信号的转换,也即信息的收发。将逻辑信号转为电信号,并将其送⼊传输线;或者,将传输线的电信号转为逻辑信号。
传输线跟电线⼀样,分⼀⾼⼀低,即CANH 和CANL 。 TIPS :电信号,指随着时间⽽变化的电压或电流CAN 收发器如图1.1所⽰。由⼀个电路进⾏控制,也意味着控制单元的某个时间段只能进⾏⼀个操作,收或者发。
图1.1 收发器原理图
开关闭合输出低电平,⽤逻辑“0”来表⽰,即显性电平; 开关断开输出⾼电平,⽤逻辑“1”来表⽰,即隐性电平。
当总线上连接有多个节点时,只要其中1个节点输出低电平,则总线激活,总线电平为低电平;总线上所有节点都输出⾼电平时,总线电平才为⾼电平,此时总线未激活。原理如图1.2所⽰。
图1.2 多节点收发器原理图1.2 CAN 总线终端电阻
CAN ⽹络中,⽹络的源端(起始节点)和末端需各安装⼀个终端电阻。注:上图所⽰电阻并⾮终端电阻。有两种接法,⼀般采⽤左图接法,如图1.3所⽰,左边⾼速,右边低速。
主要作⽤是:● 提⾼总线抗⼲扰能⼒ ● 提⾼信号质量。
通过终端电阻来消除在通信电缆中的信号反射,在通信过程中,有两种原因导致信号反射:阻抗不连续和阻抗不匹配。阻抗不连续,信号在传输线末端突然遇到电缆阻抗很⼩甚⾄没有,信号在这个地⽅就会引起反射。数据收发器与传输电缆之间的阻抗不匹配,这种原因引起的反射,主要表现在通讯线路处在空闲⽅式时,整个⽹络数据混乱,为了提⾼⽹络节点的拓扑能⼒,CAN 总线两端需要接有120Ω的抑制反射的终端电阻。
图1.3 两种终端电阻接线⽅式1.3 CAN 报⽂
CAN 总线的报⽂有5种类型,数据帧、远程帧、错误帧、过载帧和帧间隔。只介绍数据帧和远程帧。
1) 数据帧
有两种格式,即标准帧和扩展帧。帧结构如图1.4所⽰。以标准帧为例,详细介绍如下:
图1.4帧结构图
帧起始:由单个显性位“0”组成,即总线激活。
仲裁段:有CANID 和RTR 位组成。对于标准帧, CANID 为11位(扩展帧29位),通过此CANID 来规定数据帧的优先级。RTR 位,远程帧发送标识位,为1代表是远程帧,数据帧此位为0。
控制段:IDE+1个保留位+DLC ,DLC 表⽰数据段长度。 数据段:标准帧数据段长8个字节。 CRC 段:CRC 校验值存在此段。
帧起始
仲裁段
控制段
数据段CRC 段 ACK 段 帧结束
ACK段:当⼀个接收节点接收的帧起始到CRC段之间的内容没发⽣错误时,它将在ACK 段发送⼀个显性电平
帧结束:每个数据帧和远程帧均由7个隐性位“1”来标志该帧结束。2) 远程帧
当⼀个节点想要获取另⼀个节点的数据时,就发送远程帧来请求数据。CAN协议中,未在CANID中定义⽬标节点ID。此部分由应⽤层协议定义,如CANopen。另远程帧需指定数据长度。与数据帧的唯⼀区别是⽆数据段,也分为标准帧和远程帧两种格式。1.4 数据链路层
数据链路层由CAN控制器实现,负责以下操作:LLC:
●接收报⽂的选择
●过载通知
●错误恢复
MAC:
●数据的打包拆包
●帧编码
●错误检测及通知
●串并⾏转换
PART2——CANopen
1 CANopen基础知识
CANopen,⼀种架构在CAN上的⾼层通信协议,协议由通信⼦协议和设备⼦协议组成。两个协议均包含在对象字典(OD)中,如下图,对象字典中的对象通过16位的索引及8位的⼦索引来定位。
OD对象列表
CANopen完全基于CAN标准报⽂格式,细化了对CAN报⽂11位标识符的定义,其中⾼4位定义为功能码,后7位为节点ID。功能码标识报⽂类型,主要类型有NMT、SYNC、PDO、SDO等,且给报⽂定义了优先级,如下:NMT→SYNC→EMERGENCY→TIME→PDO →SDO→NMT Err Control
1.1 SDO
Service Data Object,服务器数据对象,主要⽤于对OD进⾏读写。⼀发⼀回模式,主站发送请求帧,从站回复应答帧。
写
主站发送报⽂:600H+NodeID Cs
(1Byte) Index
(2Bytes)
Subindex
(1Byte)
Data
(4Bytes)
Cs命令字随数据长度(DL)的变化⽽变化:当DL=1时,CS=2F;
DL=2时,CS=2B;
DL=3时。CS=27;DL=4时,CS=23;
If success,从站返回:
600H+NodeID 60 Index
(2Bytes) Subindex
(1Byte)
00 00 00 00
If failed,从站返回:
580H+NodeID 80 Index
(2Bytes) Subindex
(1Byte)
Error Code
读
主站发送:600H+NodeID 40 Index
(2Bytes) Subindex
(1Byte)
00 00 00 00
若读取成功,从站返回:580H+NodeID Cs Index
(2Bytes) Subindex
(1Byte)
Data
CS随数据长度变化⽽变化:当DL=1时,CS=4F;
DL=2时,CS=4B;
DL=3时,CS=47;
DL=4时,CS=43;
若失败,则从站返回:580H+NodeID 80 Index
(2Bytes) Subindex
(1Byte)
Erro code
1.2 PDO
Process Data Object,过程数据对象,⽤于传输实时过程数据。⽣产/消费者模型,PDO 的传输由事件触发,由同步报⽂(SYNC)同步触发,或者由远程帧及设备⼦协议中特定事件异步触发。PDO分为发送PDO(TPDO)和接收PDO(RPDO)。⼀条PDO中可以包含8个字节数据。
PDO在对象字典中通过通信参数及映射参数来描述。对于TPDO,通过映射参数将OD 中数据调出,与通信参数组合成报⽂,发送到CAN⽹络中。对于RPDO,接收到发来报⽂后,通过映射参数将CAN报⽂中数据存放在指定的OD条⽬中。可以说,映射参数指定具体的I/O⼝,TPDO连接Input,RPDO连接Output。
RPDO 通信参数
通信参数
包含CANID,传输类型(0-255,定义了PDO的触发⽅式),限制时间,事件计时器等参数。PDO传输类型分为同步和异步。
1) 同步:通过SYNC报⽂触发PDO传输,
周期:0-240,接收相应个数的SYNC报⽂后触发PDO;
⾮周期:指当PDO触发条件发⽣后(事件发⽣且接受到SYNC)⽴即触发PDO报⽂(0)。另⼀种为远程帧预触发(252),接受到远程帧后,在SYNC报⽂之后⽴即触发。2) 异步
远程帧触发(253)或者设备⼦协议中对象特定事件(255)触发
映射参数
指定数据所在位置,也即OD的索引和⼦索引,还有数据的长度。例如:1.3 NMT
NMT,⽹络管理。主要功能是改变CANopen节点的状态。报⽂结构如下:
11位CANID 2字节数据
0 cs Node_ID
Node_ID为⽬标节点地址,为0表⽰所有节点。cs命令字,不同命令字改变不同状态,如下表:
命令字描述功能操作后状态1(01h) Start_Remote_
Node 启动CANopen设备和PDO传输
激活输出OPERATIONAL
2(02h) Stop_Remote_
Node 停⽌PDO
使输出处于错误状态STOPPED or
PREPARED
128(80h) Enter_Pre_
Operational_State
停⽌PDO,SDO可⽤PREOPERATIONAL 129(81h) Reset_Node 初始化,所有配置重置为默认值PREOPERATIONAL130(82h) Reset_Communication 将所有通信参数重置为默认值PREOPERATIONAL
Index Subindex Object data Desciption
1601H 0 2 被映射的条⽬数量
1 64110110 对应索引6411H⼦索引01,数据长度位10位
2 64110210 对应索引6411H⼦索引02,数据长度位10位
1.4 节点保护
主从模式,主站周期发送节点保护消息(远程帧),从站返回状态信息(含1字节服务数据),具体含义见1.5。Node_ID为从站节点ID。
主站定期发送:700H+Node_ID 00
从站返回:700H+Node_ID service data(1Byte)
节点保护有⼏个参数:节点保护时间,⽣命周期因⼦和⽣命周期;节点保护时间为两次节点保护消息间隔;⽣命周期因⼦指明超过多少个节点保护时间后,若未返回信息则报错。⽣命周期等于节点保护时间和⽣命周期因⼦的乘积,超过这个时间,报错。
上述参数通过SDO进⾏配置。
从站可以识别主站关闭状态。从站若在⽣命周期内未收到节点保护数据,则假定主站失败,将Inputs设为错误状态,发送⼀条紧急消息并切换⾄pre-operational状态。
节点保护时间和⽣命周期因⼦设为0时,停⽌保护1.5 ⼼跳保护
与节点保护类似,是⼀种⽹络监控服务。与节点保护不同的是,⼼跳保护是⽣产/消费者模式,不需要NMT主站。
通过SDO配置好⽣产者⼼跳时间后,
⽣产者(producer)定期返回:700H+Node_ID Producer state (1Byte) 后六个字节保留(1-7)
Producer State可以是以下值:
00h BOOTUP
04h STOPPED
05h OPERATIONAL
7Fh PRE-OPERATIONAL
消费者(Consumer)分析来⾃⽣产者的⼼跳数据,为达到这个⽬的,消费者需要知道⽣产者的Node_ID和消费者⼼跳时间,这些数据存于OD条⽬Consumer Heatbeat Time中。也是通过SDO来设定,如下:MSB LSB
Bit 31-24 23-16 15-0 Bit
Value 00h Node_ID Consumer Heatbeat Time
超过消费者⼼跳时间后若仍未收到节点保护消息,则该⽣产者的消费者失效。
当⽣产者⼼跳时间设为0时,停⽌保护1.6 紧急报⽂