基于SJA1000的CAN总线控制系统的设计与实现
扫描二维码
随时随地手机看文章
0 引言
CAN-bus(Controller Area Network)即控制器局域网是国际上应用最广泛的现场总线之一。最初CAN-bus被设计作为汽车环境中的微控制器通讯工具,用于在车载各电子控制装置ECU之间交换信息,从而形成汽车电子控制网络。如今,CAN-bus作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,已被广泛应用到各个自动化控制系统中。而且CAN-bus总线在通信能力、可靠性、实时性、灵活性、易用性、传输距离等方面较RS-485总线有着明显的优势。因而用CAN总线取代RS-485总线将是大势所趋。
1 CAN总线的主要特性
CAN总线与其它通信网的不同之处有二:一是报文传送中不包含目标地址,它是以全网广播为基础,各接收站根据报文中反映数据性质的标识符来过滤报文,该收的收下,不该收的弃而不用。其好处是可在线上网下网、即插即用和多站接收;二是特别强化数据安全,可满足控制系统及其它较高数据要求的系统需求。CAN具有以下主要技术特性:
(1)CAN遵从ISO模型,采用了其中的物理层、数据链路层与应用层。采用双绞线,通信速率最高可达到1 Mbps/40 m,直接传输距离最远可达10 kin/5 kbps。同一段总线内最多可挂接110个设备。
(2)CAN的信号传输采用短帧结构,每一帧有效字节数为8个。因而传输时间短,受干扰的概率低。当节点发生严重错误时,CAN可自动关闭该节点,同时切断与总线的联系,以使总线上其它节点不受影响,因此CAN总线具有很强的抗干扰能力。
(3)CAN可支持多主工作方式,网络上任一节点在任何时候均可主动向其它节点发送信息,同时也支持点对点、一点对多点和全局广播方式来接收/发送数据。处于优先级低的节点会主动停止发送,以此来避免总线冲突。
2 CAN总线接口硬件电路的设计
硬件电路的设计主要是CAN通信控制器与微处理器之间和CAN总线收发器与物理总线之间的接口电路的设计。CAN通信控制器是CAN总线接口电路的核心,主要完成CAN的通信协议,而CAN总线收发器的主要功能是增大通信距离,提高系统的瞬间抗干扰能力,保护总线,降低射频干扰(RFI),实现热防护等。
2.1 CAN总线接口电路
SJA1000硬件接口原理图如图l所示。图中,CAN总线控制器SJA1000的ADO-AD7连接到AT89C51的P0口。片选端CS取反后连接到AT89C51的P2.7,当P2.7为1时,CPU片外存储器地址可选中SJA1000。CPU通过这些地址可对SJA1000执行相应的读/写操作(即:SJA1000首地址为8000H)。SJA1000的RD、WR、ALE分别与AT89C51的对应引脚相连。由于SJA1000是低电平复位,而AT89C51是高电平复位,所以两者的复位端接法不同。另外,当SJA1000的11脚MODE接高电平时,可选择Intel二分频模式。SJA1000的16脚(INT)是中断信号输出端,在中断允许的情况下,有中断发生时,16脚会输出由高电平到低电平的跳变,因此将AT89C51的外部中断输入脚(INT0)与该脚相连接,即可通过中断方式来访问SJA1000。为了增强CAN总线节点的抗干扰能力,本设计采用SJA1000的具有光电隔离的CAN总线接口。SJA1000的发送输出端TX0与接收输入端RXO、RX1分别经高速集成光电耦合器6N137隔离后,与CAN总线接口驱动芯片82C250的TXD和RXD相连,82C250直接与CAN物理总线相连。CAN总线驱动器PCA82C250是CAN控制器和物理总线之间的接口,具有可向总线的差动发送数据和CAN控制器的差动接收数据的功能。
2.2设计注意事项
在进行电路设计时应注意以下几点:
(1)总线两端必须接两个终端匹配电阻Rs,若忽略掉它们,会使数据通信的抗干扰性及可靠性大大降低。
(3)SJA1000的TX1脚悬空时,RX1引脚的电位必须维持在约0.5Vcc上,否则,将不能形成CAN协议所要求的电平逻辑。因本系统传输距离近,环境干扰小,可以不用电流隔离,这样可以直接把82C250的Vref端(约为0.5 Vcc)与SJA1000的RX1相连,从而简化了电路设计。
(4)设计时将SJA1000的CLOCKOUT的时钟信号接至AT89C51的时钟电路输入端,来作为AT89C51的外部时钟输入,从而解决了时钟同步问题:同时将SJA1000中断输出信号/INT接至AT89C51的/INT0端,通过中断方式与AT89C51进行通信。
3系统软件设计
系统上电后首先对82C250和SJA1000进行初始化。以确定工作主频、波特率、输出特性等,然后通过查询方式获取模数转换采样值,并把该值通过SJA1000传送到CAN总线上由上位PC机来进行显示控制。而对来自CAN总线上的信息则采用中断方式处理,系统每接收到一帧信息,便产生一次中断以触发微处理器进入中断模式,然后在中断服务程序中读取该帧信息并传送到现场。SJA1000的初始化程序如下:
MOV DPTR,#CR:控制寄存器CR的地址送DPTR
MOVA,#01H
MOVX@DPTR,A:进入复位模式
MOV DPTR,#CDR
MOVA,#00H
MOVX@DPTR,A:选择BASIC CAN模式、时钟不输出
MOV A,#NODECODE
MOVX @DPTR,A;节点号NODECODE写入ACR
MOVX DPTR,#AMR
MOV A,#00H
MOV @DPTR,A;AMR置为0,当且仅当RXID0=ACR时接收数据
MOV DPTR,#BTR0;设定总线时序寄存器BTR0,系统采用12 MHz晶振
MOV A,#85H;分频后总线时钟频率为2MHz
MOVX @DPTR,A;同步跳转宽度为3tscl
MOV DPTR,#BTR1;设定总线时序寄存器BTR1
MOV A,#OB4H:位同步时间为1个tsc1,采样开始位置TSEG1=5tsc1
MOVX @DPTR,A;TSEG2=4tsc1,每一位时间10tsc1(200 kHz),每位采样3次
MOV DPTR,#OCR;设置输出控制寄存器
MOV A,#1AH:数据从TX0按正常输出模式同极性输出
MOV @DPTR,A;TX1不用
MOV DPTR,#CR;初始化完成,使控制器退出复位模式,进入工作模式工作。
MOV A,#06H
MOV @DPTR,A
SJA1000在经过初始化后便开始接收或发送数据,其程序流程分别如图2和图3所示。
4结束语
该接口电路在经DP-51H单片机通讯仿真实验仪的调试后,结果表明它能模拟实现通信功能,且其抗干扰性能优良,通信速率较高,电路也比较简单,是开发与应用其它CAN总线产品的基础。