何汁艳,巩权庆
(南通大学 电气工程学院,江苏 南通 226019)
在传统的温度测量中,用户直接在检测设备上读取数据.但是,如果被测点距离远、环境恶劣,现场无人时工控机自动监测和记录测控点的即时数据就显得尤为必要.为解决传统的检测方法不能及时了解工况的问题,开发了终端温度监控软件,以C8051F020自热温度为监控对象,PC机控制MCU在任意时刻检测实时温度数据并存入数据库;可视化监控界面可反馈当前和历史数据,数据存储记录可供用户查询和分析参考.
片上系统C8051F020 SOC(System on Chip)的微控制器MCU(Micro Controller Unit)负责器件自热温度数据的采集与通信;VB(Visual Basic)6.0人机交互管理界面提供实时数据;适配器[2]完成JTAC接口与RS232接口之间的协议转换,整体结构见图1.
图 1 终端温度监控系统硬件结构图Fig.1 Terminal temperature monitoring system-based hardware structure diagram
C8051F020单片机的内部和外部振荡器驱动电路都能产生系统时钟,协调CPU及其部件工作.编程选择后者,并使之能100 ms时钟丢失检测.
交叉开关按数字外设优先权级别分配,可用I/O的端口引脚,系统选择全双工串行通信接口(UART0)外设,分配数字引脚p0.0和p0.1并使之能交叉开关.
ADC0(Analog to Digital Converter)模/数转换器包括一个9通道可配置模拟多路开关AMUX(Analog Multiplexer),一个可编程增益放大器PGA(Pr ogrammable Gain Amplifier)和一个转换速率为100 kps、12位分辨率的逐次逼近寄存器型ADC.转换步骤如下:
(1)允许温度传感器工作;
(2)选择片内温度传感器通道作为ADC输入;
(3)选择增益和转换的ADC0SAR时钟,SAR转换时钟来源于系统时钟,由公式(1)给出:
(1)
式中,ADC0SC为配置寄存器ADC0CF的转换时钟控制位,CLKSAR0为所需要的转换时钟周期;
(4) 定义ADC0跟踪方式和A/D转换结果数据格式;
(5) 启动转换.
配置基准电压VREF模拟开关,ADC编程选择外部或片内带隙基准作为基准电压发生器.电压基准是ADC能够接受的最大直流输入电压,编程设定温度传感器输出电压信号PGA的增益以符合ADC的电压基准.
集成开发环境IDE(Integrated Development Environment)与C8051F020 MCU的JTAG调试逻辑接口支持生产和系统测试所需要的边界扫描功能,可以进行非侵入式的全速在线系统的编程与调试.
启动Keil μVision集成开发环境,建立新项目UART_TEST.UV2.由于使用的是Siliom Laboratories公司的调试器,目标CPU应在相应的节点下选择与硬件系统一致的器件型号并选择与上位机匹配的串行通信波特率和数据传输格式.
Mscomm(Microsoft Communication Control)控件是Microsoft公司提供的简化Windows下的串行通信组件ActiveX控件,它为应用程序提供了串行接口收发数据的简便方法:查询和事件驱动.前者通过查询属性值来查询事件和错误,适用于不必对每个接收的数据都产生事件的场合如电话拨号程序.系统中选择后者,因为除接收出错外都是有效数据,格式为ASCII字符.进入VB监控窗要初始化串行口,设定Msomm控件属性,包括Commport属性,返回通信端口号;PortOpen属性,打开端口;Setrings属性,设置通信参数(115200,n,8,1);InputMode属性,接收类型为二进制数据等.
分析系统的实时性要求,将并行处理的任务划分,见表1.
表 1 软硬件任务分配表Tab.1 Hardwre and software task distribution
注:表示接收缓冲区有数据.
下位机完成间隔1 s采集一次数据,LED闪烁指示.通信双方按约定传输数据,通信波特率由公式(2)确定:
(2)
式中,SMOD0为UART0波特率系数控制位;SYSCLK为振荡器的振荡频率;T1M为设定定时器1系统时钟的分频系数;X为定时器1定时初值.
C8051F×××单片机不能处理浮点数,与器件内部绝对温度成正比的采集数据代码发送给上位机转换成相应的温度摄氏度数值.公式(3)给出了PGA增益为1时两者的关系:
Vtemp=2.86 mV/℃×Temp+776 mV,
(3)
式中,Vtemp为温度传感器的输出电压;Temp为器件内部摄氏温度值.
A/D转换结果左对齐格式的输出代码与输入电压成正比,见公式(4):
(4)
式中,CODE为左对齐的ADC输出代码;Gain为PGA增益;VREF为电压基准.如果使用内部VREF,大约为2.43 V.
公式(3)代入(4)并假设Gain=2,VREF=2.43 V,解方程得到Temp,见公式(5):
(5)
式中,Temp为器件内部的摄氏温度值;CODE为左对齐的ADC输出代码.
下位机应用软件设计包括接收联络命令、数据采集和传送数据3个模块.上位机分析软件采用VB开发,完成On_Comm( )事件以及相关命令控件的代码设计,这里以流程控制框图的形式分别给出,描述系统的全部功能,见图2.
(a) 下位机 (b) 上位机(a) Terminal station (b) Control center PC图 2 串行通信程序框图Fig.2 Serial communication block diagram
系统根据工业现场用户的需求设计,包括采集数据存入数据库、查询当前和历史数据记录、绘制不重复采样点曲线、生成格式化报表和打印输出.
进入主界面,单击“开始联络”,文本框显示发送和接收的联络命令.如错误,会给出提示信息,单击“关闭串口”,再次联络;如正确,“开始联络”变为“接收数据”.“传送数据”命令窗提示用户输入正确的口令,开始传送数据.上位机校验接收的数据,校验正确后存入数据库;如错误,“数据错误”命令窗提示用户输入口令,重新接收.“再次接收”用于接收一组新的数据,“绘制曲线”显示当前或历史数据.
界面中曲线标出连续三天选取不同温差时刻获得的最新10点采样值.天气状况:24日的最高气温为28~29 ℃;25日和26日的最高和最低气温分别较前一天下降1℃,偏南风3~4级.图中温度骤然下降是24日雷雨时短时阵风7~8级并伴有雷电时测得的.在曲线描绘的10点数据中,24日上午采集6个采样点,晚上新增编号为645~695的4个点,25日保持,26日新增最后一个中午时的采样点,见图3.
图 3 操作管理界面与运行实例Fig.3 Operation management interface and operational case
可以通过数据控件访问Access2003数据库.引擎[3]建立VB面向对象的DAO[4]编程接口.数据控件负责数据库和工程之间的数据交换,与数据绑定控件一起使用.在选择上述控件时,要注意两者的兼容性.这里,选择数据控件ADOdc和可绑定的ActiveX控件Dbgrid,并为要访问的数据库建立一个OLEDB链接.系统运行后,数据源的Recordset记录集对象自动填充绑定控件.向数据库写入数据是一个难点,以下给出节选的程序片段:
//打开数据库
Public cnn as NewADODB.Connection
Public rec as NewADODB.Recordset
cnn.open“Provider=Microsoft.Jet.OLE DB.4.0;Data Source=;Persist Security Info=False”
Set rec=cnn.execute("select*from data")
//向数据库写入数据
With Adodcl.Recordset
rec.addnew
rec.num=自动编号
rec.temp=温度值
tec.time=系统时间
rec.update//确认所做的添加
cnn.close
ADOdcl.refresh//刷新数据
End With
选择Mschart控件绘制曲线,设定控件属性页,建立2个绘图区,分别描述采集点和理论值.
Data Report对象、Section对象和Data Report控件3个部分组成数据报表设计器,步骤如下:
(1)为Data Report对象配置数据源;
(2)用Command命令建立Data Environment与数据库的连接;
(3)将数据报表设计器添加到工程,给Data Report添加新的分组,使之与最低一层的Command对象建立一一对应的关系.
格式化报表见图4,最后一行为历史采集的729个不同采样点的温度数据平均值.
图 4 采集数据的格式化报表Fig.4 Formatted report on collected data
调试前,电路板上有关跳线要正确设置.跳线中的TX是串行口(UART0)发送数据端,PX是接收数据端,RS232与RS485通信口不能同时占用串行口.建议选择与开发板匹配的开发工具,防止其驱动能力影响程序的正常下载.可以在串口助手的接收区观察UART0发出的数据,也可以向对方发送,调试助手的数据格式是字符型,这一点与Mscomm缓冲区不同.由于使用了多个中断,要正确处理中断优先级别.将数据存入数据库时,要注意指针所在的位置.
一个工作在11.059 2 MHz、采用开关型降压稳压器提供3.3 V电源电压的C8051F×××系列单片机,功率消耗大约为35 mW.对于64脚的TQFP封装,其θJA值是39.5 ℃/W.使用常数θJA时假定标准的PCB安装方式.依据器件的自热温度计算公式[5]:
T=θJA×P,
(6)
式中,θJA为封装的热耗散常数;P为器件消耗的功率.求得其理论值为0.211 ℃.受气温变化和周围空气流通状况的影响,实际测量器件的自热温度有明显的涨落,历史数据平均值高出给定的传感器自热理论参数15.64%.
测试结果证明,C8051F020单片机器件的自热温度对于气温和空气流通状况不同的应用环境存在自热误差.μC/OS-Ⅱ在C8051F020微处理器上开发的终端温度监控软件已经通过了全面调试,达到了预期的阶段性设计目标,能方便用户对被控对象进行实时监控和信息管理,具有良好的开发应用前景.
参考文献:
[1] 张泉.μC/OS-Ⅱ在C8051F020单片机系统上的移植与应用研究[D].上海:上海交通大学,2009.
[2] 王晓宁,谭业双,吕洪斌,等.基于C8051F020的通用串口适配器的设计与实现[J].国外电子元器件,2007(6):17-20.
[3] 张妍垚,孙曦东.VB连接数据库[J].处理微机,2010(3):53-55.
[4] 段宏伟.基于VB 6.0平台的两种数据库访问技术的分析与比较[J].赤峰学院学报,2009,25(3):128-130.
[5] 黄颖琦.C8051F片内温度传感器测量环境温度误差分析[J].甘肃科技,2007,23(10):95-96.