1CAN总线及车载CAN网络介绍
控制器局域网(又称CAN)是德国BOSCH公司于19世纪80年代初提出的一种串行数据通信协议。最初,CAN总线的提出是为了解决汽车内部庞大的电控单元间的通讯[1]。经过20多年的发展,CAN总线已成为国际上应用最广泛的总线之一,由于其应用的广泛性,国际标准化组织(ISO)于1993年将CAN总线标准化,制定了专门针对CAN总线的一系列标准。如今,国外许多汽车厂商如通用、丰田、大众、沃尔沃、雷诺等都采用了CAN总线技术,并制定了各自的总线通讯协议。图1给出了一种车载CAN网络架构的其中一部分,包含6个电控单元,分别为发动机控制模块、车身控制模块、防抱死刹车模块、仪表及倒车雷达。网络中的每个电控单元都可视为一个节点(Node),每个节点均集成有CAN控制器和CAN收发器,可通过对报文标识符滤波的设置实现点对点、一点对多点或全局广播的数据接收方式。以图1中网络为例,倒车雷达在某一时刻向网络上其它5个节点发送了一帧障碍物距离报文,在本例中,真正接收并使用此报文数据的只有仪表节点和语音提示系统节点,网络上其它节点都将此报文屏蔽。CAN网络两端通常连接两终端电阻,终端电阻可以防止数据在到达线路终端后像回声一样返回而干扰原始数据,从而保证数据的正确传送,根据ISO11898标准中描述,终端电阻一般取120[2]。CAN网络的数据传输线通常为双向数据线,分为高位(CAN_H)和低位(CAN_L)数据线。所以,CAN网络中各节点间实际传输的物理电平为差分电平,其对应的逻辑电平如图2所示。
为了防止外界电磁波干扰和向外辐射,两条数据线通常平行缠绕在一起,电位相反,电压和总等于常值。2基于车载CAN网络的倒车雷达硬件设计2.1倒车雷达硬件结构与功能本例中倒车雷达以PIC16F877为核心控制器。主要由超声波发射接收、PIC16F877、温度修正和CAN
总线接口等部分组成,其功能是为车载CAN网络的其他节点提供车体与障碍物距离数据以实现其他功能,其系统结构如图3所示。PIC16F877芯片是采用RISC指令系统的高性能8位微处理器,哈佛总线结构,低功耗、高速度(最高达20MHz)。内部集成了ADC、串行外围接口(SPI)、Flash程序存储器和丰富的I/O口,具有PWM输出等多种外设功能。PIC16F877通过SPI接口可以实现与MCP2510的无缝连接,实现系统的CAN总线接口。温度补偿电路采用一线制数字温度传感器DS18B20,利用声速和温度之间的关系对声速进行校正,从而消除温度对声速的影响。2.2CAN总线接口电路硬件设计在CA总线接口电路中,CAN控制器使用Mi-crochip的MCP2510,CAN收发器使用Philip的TJA1050,CAN总线接口电路如图4所示。MCP2510是一带有串行外围接口SPI的独立CAN控制器,它支持CAN技术规范V2.0A/B;并能够发送和接收标准和扩展信息帧,同时具有接收滤波和信息管理的功能[3]。PIC16F877通过SPI接口与MCP2510进行实时的数据传输,MCP2510将实时数据转化成CAN报文的式,而TJA1050将MCP2510传来的CAN报文的数据转换成差分电压并传到CAN总线上。这样整个倒车雷达系统就可以实现和网络上其它电控单元进行通讯。3倒车雷达通讯报文定义CAN网络中各节点间传输的信息称之为报文(Message)。倒车雷达要和网络上其它电控单元进行通讯,需要对其传输的报文进行定义。每帧报文由7部分组成,标准帧格式[4]如图5所示。倒车雷达的通讯报文定义主要是定义报文的标识符(ID)、长度、周期及数据场内容,具体报文定义如表1所示。CAN总线使用的是非破坏性位仲裁机制,即标识符值越小,报文的优先级越高[5]。周期是指两帧报文传输的间隔时间,然后定义数据场的长度为8字节。字节1用于传输障碍物距离,其数据值会随着障碍物距离的改变而改变。距离值对应编码关系如图6所示。距离值对应编码定义如表2所示。4
CAN
总线通讯的软件设计
CAN
总线节点的软件设计主要包括三大部分
:
CAN
节点初始化
、
报文发送和报文接收
。
初始化程
序设计对于
CAN
总线节点的正常工作相当重要
。
它
主要包括工作方式的设置
、
时钟输出寄存器的设置
、
接收屏蔽寄存器和接收代码寄存器
的设置
、
总线定时器的设置
、
输出控
制寄存器的设置和中断允许寄存器
的设置
。
PIC16F877
单片机通过
SPI
接口与
MCP2510
相连
,
通过
SPI
口
对
MCP2510
进行初始化
[
6
]
。
本方案
中的传输率取
125k
,
则位时间为
1
/
125k=8
μ
s
,
设置一个位时间由
8
个时间份
(
T
q
)
组
成
,
则每个时间份
T
q=1
μ
s
,
MCP2510
的晶振频率选
8MHz
,
为得到
1
μ
s
的时间份则寄存器
CNF1
的值
须设为
3
((
1
μ
s×8MHz
/
2
)
-1
)。
另外
,
根据
CAN2.0
标
准
中
定
义
,
一
个
时
间
份
由
同
步
段
(
SJW
),
时
间
段
1
(
TSEG1
),
时间段
2
(
TSEG2
),
如图
7
所示
。
本文同步
段
、
时
间
段
1
和
时间段2分别取1Tq、5Tq和2