文献标识码:A
文章编号: 0258-7998(2013)05-0086-03
温度控制器已广泛应用于冶金、纺织、化工、医疗等工业控制的诸多领域,是一种最常用的自动化仪表。但是大都存在着无法与控制系统通信,或者无法自动保存用户设定的数据等功能单一的问题。
本文介绍的具有与上位机通信功能的智能温度控制器,它以单片机STC12C5204AD[1]为核心,采用A/D转换技术和RS485通信接口芯片MAX487,具有可靠性好、抗干扰性能强、可实现计算机网络控制等优点,具有0 ℃~1 024 ℃范围的温度测量和自动控制。同时,实现了在应用中编程,即自主完成内部Flash的擦写,降低了外扩存储器带来的成本。
1 温度控制器的设计原理
温度控制器的系统结构如图1所示。传感器采用应用较广的K型热电偶,测量电路选用芯片MAX6675。MAX6675将热电偶输出的毫伏信号直接转换成数字信号送给单片机STC12C5204AD,单片机控制LED数码管显示相关的信息,冷端温度补偿问题由MAX6675自行解决。温度控制器通过串行口与上位机通信,发送测量数据,接收温度设定值,并将温度测量值与设定值比较,送出控制信号驱动光耦,以控制继电器的吸合与断开。
2 系统硬件设计
2.1 通信电路
RS485串行总线接口采用平衡发送和差分接收的方式进行数据通信,较RS232提高了抗共模干扰能力和传输距离。RS485总线可用于多个带有RS485接口设备的互连,以实现数据高速远距离传送,其连线十分方便。基于芯片MAX487的通信接口电路如图2所示。
2.2 温度采集电路
传感器K型热电偶的测量电路选用芯片MAX6675[2],如图3所示。MAX6675不仅可以将热电偶输出的毫伏信号直接转换成数字信号,而且可以自行解决冷端温度补偿问题。图中,P+和P-分别接热电偶的正极和负极;SO、CS、SCK三条信号线与单片机的GPIO连接,实现串行数据传输。
3 系统软件设计
3.1 温度读取
测量环节的软件的重点是MAX6675测温数据的读取。MAX6675与单片机通过3线串口进行通信。当CS引脚由高电平变为低电平时,MAX6675停止任何信号的转换并在时钟SCK的作用下向外输出已转换的数据;当CS从低电平变回到高电平时,MAX6675将进行新一轮转换。一个完整的数据读取需要16个时钟周期,数据的读取在SCK的下降沿进行。
MAX6675的输出数据为16位,如图4所示。输出时高位在前,D15为无用位;D14~D3对应于热电偶模拟输出电压的数字量;D2用于检测热电偶是否断线(D2为1表明热电偶断线);D1为MAX6675标识符;D0为三态。
3.2 通信模块设计
3.2.1 通信规约的设计[3]
每个温度控制器都必须通过按键设定一个地址,地址的最大值为255。温度控制器采用RS485的接口标准与上位机进行通信。通信采用异步通信方式,1位起始位,8位数据位,1位停止位。通信速率(波特率)设定为1 200 b/s。上位机与温度控制器采用主从查询方式进行数据交互。
在规约中定义以下报文:(1)上位机查询温度控制器的测量值报文A1和温度控制器的数据应答报文R1;(2)上位机设定温度控制器工作参数报文A2和温度控制器的参数确认报文R2; (3)上位机复位温度控制器报文A3及温度控制器的复位确认报文R3; (4)上位机查询温度控制器工作状态报文A4及温度控制器的状态报告报文R4;(5)温度控制器向上位机发送的接收出错报文R5。
3.2.2 通信模块软件设计
温度控制器的通讯模块初始化包括定时器的初始化和中断寄存器的初始化。
温度控制器的数据发送采用中断方式。 每次发送8 bit,即一个字节,每发送完一个字节,中断标志位TI将置位,进入发送中断服务程序。在发送中断服务程序中,先将发送中断标志位TI清0,然后发送相应的一个字节的数据。
温度控制器的数据接收采用中断方式。当上位机以1 200 b/s的通信速率向温度控制器传送数据时,单片机STC12C5204AD的接收缓存寄存器SBUF每次中断只接收8 bit,即一个字节,每接收完一个字节后,接收中断标志RI将置位,在下一个机器周期,CPU查询到此标志为1时,就会产生接收中断,进入接收中断服务程序。在接收中断服务程序中,首先判断接收的数据是否符合报文A1、A2、A3或者A4的规范。若不符合,则舍弃;若符合,则将其放入事先定义的数组中。在主程序中,计算CRC校验是否正确。如果正确, 则根据报文的不同类型回答R1、R2、R3或者R4;如果不正确,则回答R5。如图5所示。
3.3 IAP保存数据
3.3.1 单片机内部EEPROM地址设计
单片机STC12C5204AD内部集成的EEPROM是与程序空间分开的,利用ISP/IAP技术可将内部的Data Flash作为EEPROM。EEPROM分为两个扇区,每个扇区的大小为512 B,第一扇区地址是0x000~0x1FF,第二扇区的地址是0x200~0x3FF。
由上位机以通信的方式或者由按键设定的参数地址编排如表1所示。其中,STDL和STDH分别代表设定温度下限的低字节和高字节,STUL和STUH分别代表设定温度上限的低字节和高字节;SFL和SFH分别代表设定报警温度的低字节和高字节。
擦除整个扇区的数据,首先向IAP_ADDRH和IAP_ADDRL中写入扇区起始地址的高字节和低字节,在这里均为0x00;然后将寄存器IAP_CONTR的最高位置1,表示允许IAP操作;向IAP_CMD中写入0x03; 最后向IAP_TRIG中先后发送0x5A和0xA5,完成扇区的擦写。
把表1中的数据写入到相应地址,首先向IAP_ADDRH和IAP_ADDRL中写入相应地址的高字节和低字节;然后将寄存器IAP_CONTR的最高位置1,表示允许IAP操作;然后向IAP_CMD中写入0x02;最后向IAP_TRIG中先后发送0x5A和0xA5,完成扇区的擦写。
4 功能测试与分析
温度控制器上电后,LED数码管依次显示“100”、“110”和“150”,说明单片机将数据写入到了Flash中,IAP功能正常。
温度控制器显示的温度与使用标准的温度计测量的温度值进行比较,误差小于0.2℃。
利用PC作为上位机,使用串口助手分别发送报文A1、A2、A3和A4,串口助手分别接收到R1、R2、R3和R4,并且能够远程设定温度控制器的参数和远程重启。
手动给热电偶加热,当热电偶的温度值处在不同区间时,观察两个继电器的吸合与断开的状态。继电器的状态如图7所示,0代表断开,1代表吸合,继电器正常工作。
本装置以通用的单片机STC12C5204AD为核心,外扩测温模块、通信模块和人机交互模块,应用于热电偶测温的场合。经测试,该温度控制器可以实现对温度的自动控制,测温数据精确;实现了计算机网络控制,远程操作方便;实现了IAP功能,降低了扩展外部存储器带来的成本,具有很强的实用价值。
参考文献
[1] 张毅刚.单片机原理及应用[M].北京:高等教育出版社,2003.
[2] 李平,李亚荣. 基于MAX6675的温度控制器设计[D].大连:大连交通大学,2004.
[3] SARIKAYA B. Analysis and testing of application layer protocols with an application to FTAM[J]. IEEE Transactions on Communications, 1992,40(1):7-11.
[4] 钟磊. C8051F单片机的IAP系统设计与实现[J].微处理机,2009(3):9-11.