图2 CIP-51访问CAN中控制寄存器和每个消息的路径图
基于C8051F040的CAN智能节点设计
由于CAN总线采用多主方式工作,所以CAN总线系统具有与DCS(分布式控制系统)不一样的拓扑结构。图3所示是某型火控系统的总线系统结构。该系统结构最大的特点就是所有的节点都能以平等的地位挂接在总线上。CAN总线智能节点之间能够相互进行通信,以完成数据交换。一个智能节点通常至少包括三个部分,即负责节点任务控制的单片机、总线控制器及总线收发器。由于C8051F040单片机为内部集成有CAN控制器,因此智能节点主要由C8051F040和CAN收发器TJA1050组成。
图3 某型火控系统的CAN总线结构
图4是一个以C8051F040为核心的智能节点硬件框图。由于C8051F040集成的是CAN控制器,要使CAN总线得以运行,还需外加CAN总线收发器,常用的CAN总线收发器有Philips公司的PCA82C250收发器、高速TJA1050收发器等。本系统采用了TJA1050高速CAN收发器来替代传统的PCA82C250收发器,TJA1050具有电磁辐射低、防短路、不上电时对总线无影响等特点,它的引脚S可以选择高速或静音两种模式,并可由C8051F040的P4.0控制,CAN总线上两端节点8一般加上两个60W的电阻和47nf的电容对信号吸收,以避免信号反射。为了进一步提高系统的抗干扰能力,在CAN控制器引脚CANTX、CANRX和收发器TJA1050之间并不是直接相连,而是通过由高速光耦6N137构成的隔离电路后再与TJA1050相连,这样就可以很好的实现总线上各节点的电气隔离。这部分增加了节点的复杂性,但它却提高了节点的稳定性和安全性。
图4 智能节点硬件框图
CAN智能节点主要完成的任务是:将相关数据数传送给其它节点,同时从总线上接收本节点所需要的数据。因此智能节点的CAN通信主要包括系统初始化程序、发送程序、接收程序等。在本例中,系统软件采用结构化程序设计方案,使其具有较好的模块性和可移植性,对于不同的系统功能或不同的应用环境,可以方便地进行编程重组。
系统初始化程序
初始化程序主要完成对所有的报文对象进行初始化(一般将所有值置零),对CAN控制寄存器(CAN0CN)、位定时寄存器(BITREG)进行设置,还要对发送报文对象和接收报文对象分别进行初始化。其中,位定时寄存器的设置较为复杂,这里我们使用外部晶振为8MHz,CAN通信速率为500k/s,得到BITREG的初始值为0x2301。主程序中规定对象初始化、发送和接收初始化,最后才启动CAN处理机制(对BITREG和CAN0CN初始化),下面为CAN启动程序: