控制器局部网(controller area network,CAN)属于现场总线的范畴,它是一种有效支持分布式控制的串行通讯网络,被公认为是最有前途的现场总线之一。本文利用MAX6675测温芯片作为传感器,使用CAN总线标准设计了一种智能测温系统(适用范围0℃~+1023.5℃)。该系统精度高(±0.5℃)、可靠性好、结构简单、成本低,在适用范围内可取代传统的测温系统,对该系统稍加修改,可使它应用于在多种测温场合。
1 硬件设计
硬件电路由微处理器、CAN控制器、测温芯片MAX6675、LED、键盘、复位电路、蜂鸣器等几部分组成,如图1所示。单片机AT89C51是硬件电路的核心,承担CAN 控制器的初始化、数据收发控制等任务;CAN总线控制器用于同上位机进行远程通讯,能够独立完成CAN总线上数据的接收和发送工作;MAX6675芯片用于检测和发送温度数据。
图1 整体设计框图
1.1 温度测量电路
测温电路如图2所示。微控制器采用ATMEL公司的单片机AT89C51,它具有4K内部可擦写程序存储器和32个输入/输出端口,满足本系统中温度测量、数据显示、数据通讯、复位电路的需要。AT89C51没有SPI接口。因此,采用I/O口线模拟SPI串行口读取MAX6675输出的数据。
从AT89C51的P13端口给MAX6675发送串行时钟,P11端口用来接收MAX6675输出的温度数据;P0口作为数据输出,即将温度信号编码后输出
到4位LED显示和CAN总线接口芯片SJA1000数据输入端口。PI口的P15-P17引脚接74LS138译码器,用于控制5位LED的数字显示;P14用于报警信号输出,当热电偶开路时或温度超过一定范围就给P14输出一个高电平,经三极管放大后驱动蜂鸣器:P2口的P20 P23作为16键盘的行输出;P24~P28作为16键盘的列输入。
图2 测温电路图
MAX6675从I/O口线输出数据的具体过程如下:P12端口输出的低电平将CS变低,并提供时钟信号给SCK,由SO口读取测量结果。CS变低,将停止任何转换过程,CS变高将启动一个新的转换过程。
一个完整串行接口读操作需16个时钟周期,在时钟的下降沿读16个输出位。第15位是伪标志位,并总为0;第14位到第3位为以MSB到LSB顺序排列的转换温度值;第2位平时为低,当热电偶输入开放时为高,开放热电偶检测电路完全由MAX6675实现,为开放热电偶检测器操作,T-必须接地,并使能地点尽可能接近GND脚;第1位为低以提供MAX6675器件身份码,第0位为三态标志位 。
1.2 CAN总线的通信节点电路
通信节点采用PHILIPS公司生产的符合CAN2.0B协议的独立CAN通信控制器SJA1000及CAN收发器PCA82C250组成与其他智能节点或上位机的通信接口,实现数据传输。CAN控制器SJA1000工作在中断模式,通过其中断输出引脚向CPU申请中断,CPU在中断子程序内完成对上位机命令的解释与执行。CAN通信节点电路如图3所示。
图3 CAN节点电路图
AT89C51单片机的ALE、WR、RD端分别控制SJA1000的ALE、WR、RD端,地址和数据线AD0~AD7由P0口分时复用实现。SJA1000的中断请求信INT,在中断允许且有中断发生时,INT由高电平跳变到低电平,所以INT和AT89C51的INT0直接相连,片选信号CS由AT89C51的第9脚控制,当CS接到低电平时,SJA1000被选中,CPU可对SJA1000进行读/写操作。
PCA82C250为CAN控制器和物理总线之间的接口,它可以提供向总线的差动发送能力和CAN控制器的差动接收能力,TXD和RXD引脚分别发送和接收经过驱动后的信号。其引脚8(Rs)可以选择2种不同的工作方式:
1)把该引脚直接与地相连,系统将处于高速工作方式;
2)Rs脚串接一个电阻R后再接地,用于控制上升和下降斜率,以减少射频干扰,实践表明R在15~ 200KΩ范围内的取值较理想(本系统采用100KΩ)。
IMP708具有2个复位输出RESET和RESET ,分别接到AT89C51和SJA1000。当按下按键S时,为手动复位。IMP708芯片有上电复位、看门狗和电源监控功能。
设计时还必须注意以下二点:
1)CAN总线二端必须接2个120Ω的终端匹配电阻,以保护PCA82C250免受过流的冲击。若忽略掉它们,则会使数据通信的抗干扰性及可靠性大大降低。
2)为了提高系统的抗干扰能力需把模拟的和数字的分开。
2 软件设计
2.1 温度采集模块设计
在系统设计中,温度测量这一部分程序作为一个独立的程序段可定时调用。其主要包括MAX6675数据读取、开路判断、数据处理和码制转
换等几个部分。程序流程图见图4。
图4 温度采集程序流程图
2.2 CAN通讯节点设计
CAN接口通信软件设计主要分为三部分:CAN初始化、数据发送、数据接收。
2.2.1 CAN控制器SJA1000的初始化
CAN初始化主要是设置SJA1000的参数。需要初始化的CAN控制寄存器有:模式寄存器、时分寄存器、接收代码寄存器、屏蔽寄存器、总线定时寄存器、输出控制寄存器。这些寄存器只能在CAN控制器处于复位状态下才可写访。设SJA1000的首地址是0BF00H。初始化子程序如下:
CR EQU 0BF00H; 控制寄存器
CMR EQU 0BF01H; 命令寄存器
SR EQU 0BF02H; 状态寄存器
IR EQU 0BF03H; 中断寄存器
ACR EQU 0BF04H; 验收码寄存器
AMR EQU 0BF05H; 验收屏蔽寄存器
BTR0 EQU 0BF06H; 总线定时寄存器0
BTR1 EQU 0BF07H; 总线定时寄存器1
OCR EQU 0BF08H; 输出控制寄存器
CANINI:MOV DPTR,#CR ;开始初始化
MOV A,#01H ;置复位请求为高
MOVX @DPTR,A
CANI1:MOVX A,@DPTR ;判复位请求有效
JNB ACC.0,CAN I1
MOV DPTR,#ACR ;写接收码寄存器
MOV A,NODE;设置接点号
MOVX @DPIR,A
MOV DPTR,#AMR;写接收码屏蔽寄存器
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#BTR0;写总线定时寄存器0
MOV A,NBTR0;设置波特率
MOVX @DPIR,A
MOV DPTR,#BTR1;写总线定时寄存器1
MOV A,NBTR1
MOVX @DPTR,A
MOV DPTR,#OCR;写输出控制寄存器
MOV A,#0FAH
MOV @DPTR,A
MOV DPTR,#CDR;写时钟分频寄存器
MOV A,#00H ;设定工作模式
MOVX @DfTR ,A
MOV DPTR,#CR ;写控制寄存器
MOV A,#0EH ;开放中断源
MOVX @DPTR,A
RET
2.2.2 CAN接收与发送数据程序
发送数据程序把数据存储区中待发送的数据取出,组成数据帧,并将主机的ID地址填人帧头,然后将数据帧发送到CAN 控制器的发送缓冲区。其数据帧形式如下:
帧起始→仲裁场→控制场→数据场(8B)→CRC场→ACK场→帧结束。
在接收到主机的发送请求后,发送程序启动发送命令。数据从CAN控制器发送到总线是由CAN控制器自动完成的。数据从CAN总线到CAN控制器的接收缓冲区也是由CAN控制器自动完成的。接收程序只需从接收缓冲区读取数据,并将其存储在数据存储区。接收和发送数据的中断程序流程如图5、图6所示。
图5 接收数据的中断程序流程 图6 发送数据的中断程序流程
3 结语
基于CAN总线的智能测温系统具有测量范围广、精度高、环境适应能力强等特点。该系统通过CAN适配器与计算机连接,可以方便地构成分布式测控系统。已经成功应用于CNC精密成型磨削设备数控的研制项目中。此外,该智能测温系统在电力、油田、楼宇、冶金等工业自动化领域可具有广泛的应用前景。