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 紧急报⽂