基于C8051F040的高性能CAN总线节点模块设计

2010-08-11 06:23甄国涌牛会恩
通信技术 2010年2期
关键词:波特率寄存器报文

甄国涌, 牛会恩

(中北大学 电子测试技术国家重点实验室,山西 太原 030051)

0 引言

CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。由于其卓越的性能,在工业自动化、多种控制设备、交通工具、医疗器械以及建筑、环境控制等众多部门越来越受到广泛的关注[1]。

CAN总线控制系统的设计重点集中在节点模块的设计上。通常节点模块的设计方案有两种: 传统的方法是用单片机加上CAN 协议控制器组成,例如用51系列单片机和CAN控制器SJA1000 组成[2];另外一种方案是采用内部集成了CAN 控制器模块的微控制器。第一种开发CAN 节点的应用实例已经很多了,所以本文以C8051F040 为例介绍第二种开发方式。

1 典型的C8051F040的CAN总线网络结构

本论文采用“CAN单片机+CAN收发器”的组合,配合以适当的外围电路构成一个完整的CAN节点,节点之间再经导线简单连接便形成“CAN网络”,下页图1为CAN总线网络结构。一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。

CAN网络控制逻辑电平信号从CAN控制器到达物理总线的物理层,反之也一样。CAN控制器执行CAN协议,用于信息缓冲和滤波。C8051F040的CAN控制器支持完全的CAN2.0A和CAN2.0B。

2 C8051F040的CAN控制器结构

C8051F040的所有CAN协议功能都由独立的CAN控制器而不是由51处理器来完成。因此CAN通信占用CPU带宽很小,51处理器只需要通过特殊功能寄存器(SFR)配置CAN控制器和数据过滤器就可以了。

图1 CAN总线网络结构

图2是C8051F040内部集成的CAN控制器原理框图,各部分功能如下:

CAN控制器核: CAN协议控制器和发送/接收转换寄存器;

消息RAM:存储Message Objects和标志码, CAN控制器共有32个信息目标可供配置来用于发送或接收数据;

CAN专用寄存器:用于控制和配置C_CAN模块的所有寄存器;

消息处理器:控制数据在CAN控制核的接收/发送转换寄存器和目标信息之间的传输,以及中断的产生。

图2 CAN控制器原理框

CAN寄存器可分为以下4类:

CAN控制器协议寄存器:用于CAN控制,中断,错误控制,总线状态控制和测试模式;

信息目标接口寄存器:配置32个信息目标,从目标接收和发送数据。C8051F040处理器通过它来读写CAN 消息RAM;

信息处理寄存器:只读寄存器。为51CPU提供信息目标的状态,如信息有效标志,发送请求状态,新数据标志和中断标志;

C8051处理器特殊功能寄存器(SFR):C8051处理器控制的5个寄存器,直接读写CAN协议寄存器,通过CAN数据寄存器(CAN0DATH和CAN0DATL)和CAN地址寄存器(CAN0ADR)间接读写其他CAN控制器。

3 CAN节点模块的硬件设计

CAN控制器工作于多主方式[3],对于主节点和从节点,CAN总线硬件接口是相同的。由于C8051F040内部集成了CAN总线控制器,所以只需外加总线驱动器并加上适当的隔离就可以了, 电路上显得非常简洁。CAN总线信号CANTX和CANRX从C8051F040出来后先分别经过高速光耦6N137进行电气隔离,再经过CAN总线收发器接口芯片TJA1040,然后接到CAN数据线上。由于工业现场环境恶劣,电磁干扰与瞬时干扰比较严重,为了保证系统的可靠性,节点的控制器和接收器之间用6N137进行光电隔离,避免总线上的瞬时干扰。但是需注意的是两边的电源一定要隔离处理,否则无效[4]。本课题在高速光耦和CAN收发器的电源之间选用的DC-DC电源模块是BO505进行电源隔离,它可以使VCC与+5V完全隔离,使结点的稳定性与安全性得到了很大的提高。

总线终端匹配电阻是必须使用的。总线两端的120Ω电阻对于匹配总线阻抗起着相当重要的作用。因此本系统的所有节点终端电阻全部加上跳线,两端的节点的跳线接上,使电阻有效,中间节点不接跳线,相当于没有终端电阻。

4 CAN节点模块的软件设计

单片机固件程序主要完成的任务是:系统初始化程序、发送程序、接收程序等。软件部分设计的好坏将直接决定系统能否正常工作,这是CAN总线系统的设计人员来说是一个难点,也是一个重点。本系统软件采用结构化程序设计方案,使其具有较好的模块性和可移植性,对于不同的系统功能或不同的应用环境,可以方便地进行编程重组。

4.1 系统初始化

初始化程序主要完成对所有的报文对象进行初始化(一般将所有值置零),对CAN控制寄存器、位定时寄存器进行设置,还要对发送报文对象和接收报文对象分别进行初始化。其中,位定时寄存器的设置较为复杂,这里我们使用外部晶振为 22.1184 MHz,CAN 通信速率为 1 Mb/s,得到BITREG的初始值为0x5EC0。下面为CAN启动程序:

4.2 发送程序

CAN报文发送是由CAN控制器自动完成的,用户只需根据接收到的远程帧的识别符,将对应的数据转移到发送缓冲寄存器,然后将此报文对象的编码写入命令请求寄存器启动发送即可,而发送由硬件来完成。这里,我们使用定时更新发送报文对象中的数据,数据的发送有控制器自动完成,当其收到一个数据帧时,就将具有相同识别符的数据帧发送出去。其发送程序结构如下:

4.3 接收程序

CAN报文的接收与发送一样,是由CAN控制器自动完成的,接收程序只需从接收缓存器中读取接收的数据,再进行相应的处理即可。其基本方法与发送程序一致。

5 关键技术分析

5.1 波特率设置

5.1.1 波特率设置分析

C8051F040CAN控制器的波特率主要是设置2个寄存器:Bit Timing Register与BRP Extension Register,对于Bit Timing Register, Res为保留位;Tseg1占4个二进制位,可设置值为0x1~0xF;Tseg2占3个二进制位,可设置值为0x0~0x7;SJWP占2个二进制位,可设置值为0x0~0x3;BRP占6个二进制位,为Baud Rate Prescaler的缩写,译为波特率预分频比例因子,用于对CAN时钟频率fsys_can预分频,可设置值为0x00~0x3F。他们要比实际使用值少1。fsys_can与C8051F040单片机的系统时钟频率fsys相同,可通过配置C8051F040单片机的晶振配置寄存器OSCICN或OSCXCN分频得到。由于CAN 通信的高精度要求,一般使用外部石英晶振。

对于BRP Extension Register,主要用在fsys_can很高,要求的CAN波特率又很小,BRP设置到0x3F仍然不能满足要求时,用此寄存器来扩展预分频的值。BRPE为4位,作为分频数中的MSB部分,BRP为6位,作为分频数中的LSB 部分,2者合用共10位,最大可产生1023分频数,即实际分频数最大可达1024。

5.1.2 1M波特率的设置过程

本例说明如何配置CAN控制器的时序参数来满足上文介绍的1 Mb/s的位速率。表1给出了进行计算所需要的与时序相关的系统参数。

表1 CAN控制器的时序参数

我们要调整这4个位段的长度,以使它们的和最接近所期望的位时间。由于每个时段必须是时间量子(tq)的整数倍,所以可得到最接近的位时间为22 tq(994.642 ns),由此可得位速率为1.00539 Mb/s。Sync_Seg固定为1 tq。Prop_Seg必须大于或等于400 ns的传输延迟时间,我们选9 tq(406.899 ns)。

位时间中剩余的时间量子数(tq)分配给Phase_Seg1和Phase_Seg2,我们选Phase_Seg1=6 tq,Phase_Seg2=6 tq。

写入到位定时寄存器中的值用如下方程计算。BRP扩展寄存器保持其复位值0x0000不变。

BRPE=BRP-1=BRP扩展寄存器=0x0000,

SJWP=SJW-1=min(4,6)-1=3,

TSEG1=(Prop_Seg+Phase_Seg1-1)=9+6-1=14,

TSEG2=(phase_Seg2-1)=5,

位时间寄存器=TSEG2·0x1000+TSEG1·0x0100+SJWp·0x0040+BRPE=0x5EC0。

5.2 定时器初值的计算

本文介绍的单片机固件程序采用定时器0、方式1的方式发送CAN报文。在定时器模式下,计数器由单片机脉冲经12分频后计数。因此,定时器定时时间T的计算公式为:

式中TM为计数器从初值开始作加1计数到计满为全1所需要的时间,TM为模值,和定时器的工作方式有关;fOSC是单片机晶体振荡器的频率,TC为定时器的定时初值。

在式(2)中,若设TC=0,则定时器定时时间为最大(初值为0,计数从全0到全1,溢出后又为全0)。TM的值和定时器工作方式有关,本文介绍的单片机主脉冲晶体振荡器频率fOSC为10 MHz,则最大定时时间为:

经过以上分析,式(2)中,四个未知量已知,所以我们可以解出TC的值,即为位定时寄存器的值。

6 结语

本文设计的CAN总线节点模块,采用内部集成CAN控制器模块的微控制器,不但硬件设计上简单、可靠,编制相应的软件时也更方便和简洁。而且抗干扰能力强、性能高效:能单发和循环发送报文,其时间间隔在0~60 ms任意设定。通讯速率能根据系统需要设置不同档,而且能够对所需要发送数据的ID号、数据长度、数据内容等进行设定。目前整个系统运行良好,性能稳定,符合工业现场使用的要求。

[1] 邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,2002.

[2] 侯明,杜奕.基于 CAN总线的接口电路设计[J].通信技术,2008,41(07):138-139.

[3] 蔡连君.基于 CAN总线的生产监控系统研究[J].通信技术,2009,42(10):151-152.

[4] 宋明权,周纯杰.基于C8051F040的CAN通讯接口的开发与应用[J].计算技术与自动化,2005(07):50-51.

猜你喜欢
波特率寄存器报文
基于J1939 协议多包报文的时序研究及应用
UART 波特率检测电路的FPGA 设计算法与实现
STM32和51单片机寄存器映射原理异同分析
CTCS-2级报文数据管理需求分析和实现
CAN 总线波特率自适应程序设计
Lite寄存器模型的设计与实现
浅析反驳类报文要点
波特率自适应的CAN驱动在嵌入式Linux下的实现①
详解lAP15W4K58S4单片机的串行口通信
ATS与列车通信报文分析