APP下载

基于CAN总线的智能节点设计

2012-01-18朱悦涵

电子设计工程 2012年24期
关键词:报文端口总线

朱悦涵,林 立,邵 明

(福建工程学院 福建 福州 350108)

CAN总线,即控制器局域网总线,主要用于各种设备检测及控制的现场总线。它是一种串行数据通信协议,是德国BOSCH公司于20世纪80年代初开发的,最初是为了解决汽车中众多控制与测试仪器间的数据交换问题[1],具有良好的实时性、极高的可靠性、较低的成本和较强的可扩展性,是目前为止唯一有国际标准的现场总线,被公认为最有前途的几种现场总线之一[2-3]。它非常适合现场设备的互联。奔驰S级轿车上使用的就是CAN总线。节点指的是CAN总线上通信的起点和终点,可用于实现I/O扩展、远程I/O、设备间通信等,应用广泛。智能节点指的是带有处理器的节点。相对于普通节点,智能节点有更好的兼容性和更强大的处理能力,不仅能够作为普通节点使用,还可实现一定的信息处理与控制功能,使用起来更加灵活。本文描述了一种基于MCS-51单片机的CAN智能节点的设计方案,软硬件均已通过测试。

1 总体方案

智能节点的设计方案要与其功能设计相适应。从智能节点的定义来看,其必须自身带有处理器MCU,拥有一定的数据处理能力;智能节点还必须能够和CAN总线上的其他节点通信,所以必须包含CAN总线通信模块;对于智能节点,其必须具备获取现场信息,控制现场执行单元的能力,所以必须同时具有输入输出端口;除此之外,还希望该智能节点拥有一定的显示功能,所以要包含一个显示模块;最后,要驱动以上器件,还需要有电源模块的存在。根据以上思路,系统总体结构如图1所示。

图1 系统结构框图Fig.1 Block diagram of the system

其中,MCU是智能节点的核心,它完成了大部分信息处理的功能,其它模块都在其控制下工作。它采集输入端口的信号,并对采集的信号进行处理;它可以根据输入信号和事先设定的程序及实时输出相应的控制信号;它也可以将输入信号处理后传递给通信模块,形成CAN报文发送到CAN总线上;它可以通过通信模块获取CAN总线上的信息,并通过这些信息控制输出端口进行相应的动作;它还可以控制显示模块实现信息的显示。通信模块主要分为3个部分:CAN总线控制模块、CAN总线收发模块、CAN总线保护模块。其中,CAN总线保护模块主要起安全和抗干扰的作用。电源模块为各给模块提供工作电平,在设计时需要考虑必要的隔离措施,以防止干扰。

2 硬件设计

该智能节点有3个主要模块:MCU、CAN总线控制模块、CAN总线收发模块。其中,MCU是整个智能节点的核心,选择单片机89C51作为节点的MCU,同时选择SJA1000作为CAN通信控制器,选择82C250作为CAN总线收发器。智能节点的主要引脚连接关系如图2所示。

图2 89C51、SJA1000、82C250的主要引脚的连接关系Fig.2 Main part of the interconnection among 89C51,SJA1000 and 82C250

图2 中,单片机89C51的主要作用是对SJA1000进行初始化,并控制SJA1000进行CAN报文的收发。89C51共有4个8位并口:P0、P1、P2和P3。P3的8个引脚有第二功能,用于控制信号的传输,而P0、P1、P2口则可用于和其他器件进行数据交换。在设计中将P0口用于和CAN通信控制器SJA1000进行数据交换。根据实际需要,将P2口的部分引脚也用于控制信号的传输,只剩下P1口作为I/O使用。为了使该智能节点能够实现8输入、8输出,需要使P1口成为双向I/O,使其能同时对输入和输出信号进行处理。所以需要对P1口进行I/O扩展。这里选用三态门芯片74LS245对P1口的信息传送方向进行控制,实现I/O扩展。

SJA1000是Philips公司生产的独立CAN控制器,用于替代PCA82C200。它不仅有之前的BasicCAN工作模式,还有全新的PeliCAN工作模式,支持CAN2.0协议[4]。它能自动完成所有与CAN总线物理层和数据链路层有关的功能。所以对于处理器而言,它是一个基本的外部I/O设备。SJA1000的AD口是其地址数据总线,在图2中与89C51的P0口相连,实现数据的交互。SJA1000的CS口是片选信号,连接到89C51的P2.0口,当P2.0为低电平时可以访问SJA1000。这样,89C51可通过P0口对SJA1000内的寄存器进行读写。TX0为输出驱动器0的输出端,与CAN总线收发器82C250的TXD端相连,用于向82C250传输需要发送的数据;RX0为对应的输入端,与82C250的RXD端相连,用于从82C250获得通过CAN总线接收到的数据。

82C250是NXP公司生产的CAN收发器,作用是对CAN总线提供差动发送能力,对CAN控制器提供差动接收能力[5]。其驱动电路内部具有限流电路,可防止发送输出级对电源、地或负载短路[4]。即使如此,在实际的电路设计中还是需要采用一些额外的保护措施。82C250的CANH引脚和CANL引脚与CAN总线连接的时候需要采取一些抗干扰和安全措施。其中,CANH和CANL引脚各自通过一个5Ω的电阻连接CAN总线,这样可以起到限流的作用。同时,将CAN总线与地之间用30 pF的电容相连,起到抗高频干扰的作用。

为使智能节点能够实际应用,输入输出接口的设计是非常重要的。而接口设计中最重要的一个问题就是抗干扰,为了达到较好的抗干扰效果,在接口的设计中采用了光电耦合器。图3是所设计的输入接口模块。

图3 输入接口模块Fig.3 The input interface module

图3 中的电路通过一个光电耦合器实现了输入端和采集端电信号的隔离。其工作原理如下:当有开关量(按钮、主令开关、行程开关、传感器)输入时,即把5 V电源接入,此时光耦二极管导通,工作指示灯的D5点亮。由于初级光耦二极管导通,使得次级光敏三极管导通,输入到I/O口的电平由高变低,即开发板接收到信号执行相应的动作。其中,C8用于滤除高频噪声,R11为上拉电阻。当无开关量输入时,X3输出始终保持高电平,当有开关量输入时,X3输出为低电平。

输出接口模块如图4所示,同样采用光耦进行电气隔离,以达到抗干扰的目的。其工作原理是:当单片机输出低电平时,光耦前级二极管导通,LED灯DY0发光,起指示作用。光耦导通后通过R80为Q0提供偏置电压,使Q0导通。这样,Y00与COM0之间转变为低阻态,从而实现开关量输出。其中,二极管D0起保护作用。

图4 输出接口模块Fig.4 The output interface module

3 软件设计

CAN总线智能节点的软件设计主要实现以下内容:输入端口信号采集、通过输出端口输出信号、SJA1000初始化、发送报文、接收报文、通过数码管显示信息等。其中,最重要的是SJA1000初始化、发送报文、接收报文这3个部分。它们的程序流程如图5所示。

图5 初始化、接收、发送功能子程序流程图Fig.5 The flow charts of initialization,receiving and sending

初始化子程序主要用于对SJA1000内部的各参数进行初始化设置,在上电时该程序会被执行。在进行初始化的时候,首先需要关闭SJA1000的中断,并确保其处于复位模式下[6],然后向各寄存器写入参数,最后将其恢复到运行状态。接收子程序用于完成报文的接收功能。通过SJA1000接收报文可以使用两种方式:中断方式和查询方式。查询方式用于对实时性要求不是很高的场合。这里使用的是中断方式。发送子程序用于完成CAN报文的发送。在发送前和发送后需要进行一些判断,避免不必要错误。在发送前需要确保SJA1000没有正在接收报文,发送缓冲区没有处于锁定状态;在发送后需要判断发送是否完成,才能中断返回。

4 实验测试

进行实物测试需要使用两个智能节点,现将它们分别称为节点1和节点2。同时使用到的还有I/O接口板。这块接口板上集成了之前所描述的输入接口模块和输出接口模块。因为所设计的智能节点既可以作为CAN总线的输入节点也可以作为CAN总线的输出节点,所以将输入接口和输出接口集成在一起可以方便测试和日常使用。将节点1、节点2、I/O接口板、CAN总线以及其他辅助器件连接好后的实物如图6所示。

其中,图左的模块为I/O接口板;右上方的模块为节点1,它与I/O接口板的输入端口X0~X7相连,同时它还连接有一个数码管显示模块;右下方的模块为节点2,它与I/O接口板的输出端口Y0~Y7相连,没有连接显示模块。这里的节点1和节点2是完全相同的智能节点。

测试方法如下:在输入接口中随机选取输入端口制造输入信号,测试输出端口是否能够产生相应的输出信号;节点2通过中断按键向节点1发送数据,测试节点1是否能够通过显示模块对按键次数进行计数。

图6 实物测试图Fig.6 The practical tests

测试结果如图6所示。当I/O接口板上的2个输入端口产生信号(两个指示灯亮)的时候,输出接口上的对应的2个端口的灯亮起。说明节点1成功的采集并处理了这2个输入信号,并通过CAN总线将数据发送给节点2。节点2也成功的接收通过CAN总线传来的信息,并进行了正确的处理——按照事先编写的程序点亮对应的两个指示灯。另外,图中节点2通过中断按键向节点1发送数据,节点1的数码管显示模块已计数到19,通信正常。

5 结束语

文中介绍了一种CAN总线智能节点的设计与实现方案,描述了主要的设计思路,实现了支持8输入8输出的智能节点,并进行了实际测试。通过实际测试,该智能节点能够有效的实现远程I/O与I/O扩展的功能。对电路进行进一步改进,可以在现有的基础上使智能节点支持的输入输出端口数量进一步增加。

[1]李金刚,刘永鸿.基于AT89C51型单片机的CAN总线智能节点设计[J].国外电子元器件,2006(8):26-29.LI Jin-gang,LIU Yong-hong.Design of smart node in the CAN bus based on AT89C51[J].International Electronic Elements,2006(8):26-29.

[2]罗雪梅.基于SJA1000的CAN总线接口电路的设计与实现[J].贵州工业大学学报,2003,32(4):42-44.LUO Xue-mei.Designing and realizing of CAN bus juncture circuit based on SJA1000[J].Journal of Guizhou University of Technology,2003,32(4):42-44.

[3]邹继军,饶运涛.基于SJA1000的CAN总线系统智能节点设计[J].单片机与嵌入式系统应用,2001(12):26-31.ZHOU Ji-jun,RAOYun-tao.Designing of CAN bus intelligent node based on SJA1000[J].Microcontroller&Embedded System,2001(12):26-31.

[4]吴坎.基于SJA1000和PCA82C250的CAN总线接口设计[J].机械设计与制造,2010(7):55-57.WU Kan.Design of CAN bus interface based on SJA1000 and PCA82C250[J].Machinery Design&Manufacture,2010(7):55-57.

[5]杨春杰,王曙光,亢红波.CAN总线技术[M].北京:北京航空航天大学出版社,2010.

[6]王亮,王立忠,胡锦霖,等.基于CAN总线的智能继电器研究[J].现代电子技术,2012,35(8):83-89.WANG Liang,WANG Li-zhong,HU Jin-lin,et al.Research of intelligent relay based on CAN bus[J].Modern Electronics Technique,2012,35(8):83-89.

猜你喜欢

报文端口总线
基于J1939 协议多包报文的时序研究及应用
一种端口故障的解决方案
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
基于PCI Express总线的xHC与FPGA的直接通信
机载飞控1553B总线转以太网总线设计
端口阻塞与优先级
ATS与列车通信报文分析
CAN总线并发通信时下位机应用软件设计
8端口IO-Link参考设计套件加快开发速度