基于C8051F500的CAN总线通信系统的节点设计
2011-08-07吴志玲靳鸿冯彦君
吴志玲,靳鸿,冯彦君
(中北大学电子测试技术重点实验室,仪器科学与动态测试教育部重点实验室,山西太原030051)
0 引言
CAN( Controller area network),即控制器局域网,是目前国际上应用最广泛的现场总线之一。CAN为串行通信协议,能有效的支持具有很高安全等级的分布式实时控制系统。CAN的应用范围极其广泛,从高速的网络到低价位的多路接线都可以使用CAN。在汽车电子行业里,使用CAN连接发动机控制单元、传感器、刹车系统、电子系统等,其传输速率可达1Mbps。CAN 总线因传输时间短, 受干扰的概率低, 保证了通信的实时性。另外, CAN 总线[1]可对错误来源进行正确的定位, 将永久的硬件错误从软件错误中独立出来, 其协议采用CRC 检验并可提供相应的错误处理能力, 同时保证了数据通信的可靠性。
Silicon Lab公司的C8051F500单片机内部集成了CAN控制器[2],符合Bosch规范2.0A(基本CAN)和2.0B[3](全功能CAN),方便了CAN网络通信系统的设计。由于C8051F500的高集成度,只需少量外围测量电路便可组成集数据采集、控制和通信功能于一体的单片机系统,同时还可提高系统的整体可靠性。另外,C8051F500内核与普通51系列兼容,且指令简单易学,因此,可缩短系统研发周期。
1 硬件描述
1.1 系统整体结构
CAN功能节点硬件分布原理图如图1所示。
图1 CAN功能节点组成原理图
1.2 C8051F500 单片机
Silicon Lab公司推出的C8051F500是完全集成的混合信号片上系统型MCU。
该单片机内部集成了CAN控制器,其与收发模块(CTM1050)共同构成CAN节点模块。其中CAN控制器包括CAN核、消息存储器、消息处理器和控制寄存器[4]。由于其MCU无法直接访问消息RAM,因此有两组位于控制寄存器的接口寄存器被用来控制CPU对消息RAM的访问。接口寄存器通过缓存传输将要传输的数据,避免了CPU访问消息RAM时同CAN消息的发送和接收之间的冲突。在单个传输时,一个完整的消息对象[5]或者消息对象的一部分在消息RAM和IFx消息缓冲寄存器之间进行可靠传输。两个消息寄存器组的功能是一样的(除了测试处于基本模式)。
1.3 隔离CAN收发器CTM1050
CTM1050[6]是CAN控制器与CAN物理总线之间的接口芯片,其功能框图如图2所示。该模块是集电源隔离、电气隔离[7]、CAN收发器、CAN总线保护于一体的隔离CAN收发器模块,可以实现带隔离的CAN收发电路,从而进一步提高了系统的抗干扰能力和稳定性。其隔离电压可以达到DC 2500 V ,并且能连接任何一款CAN协议控制器。该芯片TxD、RxD 引脚兼容+3.3V及+5V的CAN控制器,不需要外接其他元器件直接将+3.3V或+5V的CAN控制器发送、接收引脚与CTM模块的发送、接收引脚相连接。由此可见,CTM1050接口简单,使用方便,非常适合对体积有一定要求的系统设计。
图2 CTM2050T功能框图
2 系统软件
在CAN初始化时会打开CAN中断,即CAN总线上有数据要发送时会产生一个中断,此时由单片机的MCU来判断其优先级是否为最优,若是,则响应其中断。此时单片机内的CAN处理器会控制消息缓存寄存器写入数据,并按照协议对消息进行处理;等发送请求中断产生,响应中断并发送处理好的数据,此为一次数据收发过程[8]。CAN总线数据收发流程图如图3所示。
图3 CAN总线收发程序流程
2.1 系统初始化
系统初始化主要包括端口、时钟和CAN控制器的初始化。此处主要对CAN控制器初始化做详细说明,其一般步骤如下:
·将SFRPAGE寄存器设置为CAN0_PAGE;
·将CAN0CN寄存器中的INIT和CCE位
设置为’1’;
·设置位定时寄存器和BRP扩展寄存器中的时序参数;
·初始化每个消息对象或将其MsgVal位设置为NOT VALID(无效);
·将INIT位清零。
其初始化部分程序如下:
2.2 收发程序
系统初始化完成后,在主程序中调用接收子程序,由接收子程序来响应总线上的消息接收请求命令。接收子程序要比发送子程序复杂一些,因为在处理接收报文的过程中,还要对诸如总线关闭、错误报警、接收溢出等情况进行处理。下面给出部分接收子程序:
发送子程序负责节点报文的发送。发送时用户只需将处理好的待发送的数据按特定的格式组合成一帧报文,送入发送缓存区中,然后启动发送即可。由于发送过程与接收过程只是数据缓存寄存器与消息RAM之间的数据传输方向有所不同,故在此不再赘述。
3 仿真结果
此次设计采用IDE开发环境,并用其进行仿真,所用适配器为新华龙公司最新产品U-EC6。如图4所示,为实验仿真结果中各寄存器、地址空间和相关变量的值。此CAN节点的通信速率为1Mbps,将适配器与目标节点相连接,再通过USB数据线分别与PC相连,由上位机控制总线给节点发送命令,进行数据的接受,并对其进行处理,等待发送中断到来,再将总线所需数据发送回总线。实验结果显示:数据传送完整、准确、高效,并且有效的解决了系统数据冲突等问题,满足本次设计的初衷。
图4 结果仿真显示
4 结语
本次设计采用由内部集成了CAN控制的C8051500单片机与隔离CAN收发器CTM1050共同构成的模块作为CAN总线通信系统的智能节点。首先,解决了节点的CPU在访问消息RAM时同CAN消息的发送与接收发生冲突等问题;其次,使微控制器这一核心部件的控制得以简化;最后,由于同以往的节点相比减少了外部隔离光耦,还使得单片机的外围电路得到大大简化,从而使系统的稳定性、可靠性及实时性得到进一步高。
[3]李迎.基于C8051F040的CAN总线接口嵌入式系统开发[J].电子测量技术,2009(2):90-94.
[4]饶运涛,邹继军,郑永云.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.
[5]袁越阳.C8051F040的CAN模块应用研究[J].单片机与嵌入式系统应用,2008(10):76-79.
[6]杨春杰,王曙光,亢红波,等.CAN总线技术[M].北京:北京航空航天大学出版社,2010.
[7]于晓光.CAN总线隔离器的设计与应用[J].电子设计工程,2009(12):1-4.
[8]于成毅,裴东兴,梁志剑.基于CAN总线的数据采集节点的设计[J].电子测试,2009(11):62-66.
[1]王黎明,夏立,邵英,闫晓玲.CAN现场总线系统的设计与应用[M].北京:电子工业出版社,2008.
[2]鲍可进.C8051F单片机原理及应[M].北京:中国电力出版社,2006.