移动式温度数据采集仪及其可视化编程
导读:
关键字:
移动式温度数据采集仪及其可视化编程 湖州市计量检定测试研究所潘文诚 北京邮电大学电子工程学院张晓莹 摘要较全面地介绍基于单片机的移动式温度数据采集仪的硬件设计,以及它向PC串行口的数据传送和用可视化编程工具VB6.0实现的Windows界面的数据接收、处理软件,并给出几个主要环节的程序代码。 关键词单片机数据采集系统串行通信 概述 在电子工业中,随着整机集成度的提高和元器件的微型化、复杂化,在印制板上焊接元件时对各种焊接设备(波峰焊、回流焊、SMT等)内的温度工艺的要求越来越高,这就需要一种可移动的温度数据采集仪器。它能随传送带进入焊炉内,测量记录下不同焊点(印制板上的焊盘孔、过孔等)在焊炉内不同位置时的温度参数,并能将测量数据传送给PC机,进行数据曲线的显示、分析和打印,以便制定和执行合适的工艺流程。 为此,我们研制了移动式温度数据采集仪。该仪器电池供电,可以1Hz的采集率同时对8个温度测量点采集600s(秒)数据。温度测量范围为0~300℃,测量精度为满量程1%。测量数据存于E2PROM中,可掉电保存,直到下次采集才将数据更新。通过RS232接口电路与PC机的串行口连接,仪器可将存储的测量数据传送给电脑。我们用可视化编程工具Visual Basic 6.0制作了具有Windows界面风格的数据接收和处理软件,方便了测量数据的输出与分析。 一、 采集仪的硬件原理 仪器的硬件设计贯彻了确保性能、缩小外形、便于移动、降低功耗和机内隔热的原则。硬件框图如图1所示。图中数据存储单元是具有I2C串行接口的E2PROM,用于保存测量数据。RS232接口电路由MAX20图1采集仪硬件框图2芯片构成,用于与PC机的串行口连接。下面重点介绍信号调理电路、模数转换电路和整机微功耗设计。 1. 信号调理及AD595芯片的应用 8个通道的K分度号热电偶将温度信号转换成mV级电势信号输入给采集仪。信号调理电路包括多路切换电路和热偶信号调理专用芯片AD595电路。 在实际的热电偶测温中,必须进行冷端补偿、调零、电势放大和线性化等比较烦琐的工作,否则会造成很大的误差,使测量变得毫无意义。AD595就是ANALOG DEVICES公司针对上述问题而设计的专用芯片。它内部具有放大、冷端补偿、冰点基准电路、温差电偶故障报警电路等。被测温度与AD595输出电压的关系是10mV/℃,芯片在+5~30V范围内都可正常工作。随所测温度量程增大,电源电压应相应提高。图2是模拟开关电路CD4051与AD595组成的信号调理电路。 须要注意的是,AD595要求接热电偶正极的第1脚接地,所以模拟开关切换的是各热电偶的负极。图中电位器W用于微调冷端补偿电势。AD595的7脚是负电源端,由于不测0℃以下的负温,不用负压供电,所以7脚可接地。12脚是热偶故障报警电路的输出端,13脚接地后,集电极开路的12脚在上图5AD转换结果读入子程序图4MAX144输出信号操作波形图2信号调理电路拉电阻的帮助下,热偶正常时输出高电平,断偶故障时输出低电平。我们将这个逻辑电平引到单片机,用于对14脚热电偶电势的正确判断。 2. 模数转换及MAX144电路的应用 模数转换电路是以单片机为核心的数据采集系统的关键环节。我们采用了美信公司12位串行输出的A/D器件MAX144。它具有两个输入通道,我们将一个通道CH1用于转换来自信号调理电路的温度测量信号,另一个通道CH0用于转换仪器内的电池电压信号(电池电压的高低,将在电脑显示数据曲线的同时告知用户)。MAX144为8脚μMAX封装,非常适合于微小型手持仪器。其引脚功能及周边接线如图3所示。MAX144的引脚5是基准电压引入端,我们用4096V的3引脚TO\ 92封装的ADR292作为外接基准源,模拟输入信号1mV对应于数字输出1个字,相 图3MAX144引脚及周边接线图当于温度0.1℃的分辨率。器件的3线串行输出是SPI/QSP兼容接口,其输出操作波形如图4所示。我们用单片机的3条I/O口线作了模拟替代,其读入A/D转换结果的子程序框图如图5所示。至于转换后读入的是哪个A/D通道的结果,可从结果的第13位来判别。每个测量值两个字节,按顺序存入E2PROM中。 3. 整机微功耗设计 由于采集仪是电池供电,所以对功耗的要求是很苛刻的。我们采取了以下措施: (1) 尽量使用微功耗器件。(2) 通过模拟开关CD4051的热偶信号是负电势,按一般的要求CD4051的第7引脚VEE需接负电源。但实验证明,CD4051在VEE接地的情况下仍可通过-0.1V~+Vcc的信号。这样,就可省去一个负电源变换器,即缩小了体积又降低了功耗。(3) 让单片机的CPU在不工作时处于休眠状态,MAX144不转换时自动关断,可最大限度地降低功耗。 经测试,采集仪整机功耗≤100mW。按采集仪每次采集数据10min(分钟)、传送数据1min估算,一节9V的层积电池可采集近百次。 二、 采集仪数据传送和处理的可视化编程 采集仪采集完数据后,要将数据传送到PC机,以便进行数据曲线的分析、显示和打印。Visual Basic 6.0(VB6)是一个强大的Windows平台上的软件开发工具。它可视化的编程方法以及向导的功能,使开发人员几乎不用加入太多的代码就可以开发出标准的Windows风格的应用程序。我们用VB6编制了采集仪的数据接收和处理软件,界面友好,操作简便。图6是显示数据曲线的主界面。 图6曲线显示界面下面简要介绍一下我们编制的几个主要环节的程序代码。 1. 串行口数据接收 采集仪里的单片机将采集到的温度数据从E2PROM里取出,以2400band的波特率通过RS232连接电缆向PC机的串行口发送。VB6是通过MSComm控件来为应用程序实现串行口的通信功能的。串行口数据接收程序分以下几步: (1) MSComm控件主要属性的设置(初始化) MSComm1.CommPort=2 ’设置COM2为通信端口 MSComm1.Settings="2400,n,8,1" ’设置波特率2400,无校验,数据位数8,停止位数1 MSComm1.InputMode=comInputModeBinary ’数据以二进制形式取回 MSComm1.RThreshold=1 ’每接收到一个字节就产生OnComm事件(中断) MSComm1.InBufferSize=10000 ’设置接收缓冲区的最大字节数 MSComm1.InputLen=0 ’使用Input语句可读取接收缓冲区内全部内容 MSComm1.PortOpen=True ’打开端口 (2) 产生OnComm事件的处理过程(中断处理) PC机从串行口接收数据时,显示器屏幕以进度条的形式指示已接收的百分比。 ProgressBar1.Scrolling=ccScrollingSmooth ’设置进度条显示方式为连续 ProgressBar1.Max=ByteMax ’设置进度条滚动框的最大值为待接收字节数 ProgressBar1.Value=0 ’进度条滚动框值清零 Private Sub MSComm1_OnComm() ProgressBar1.Value=MSComm1.InBufferCount ’进度条滚动框值为接收缓冲区中的字符数 If ProgressBar1.Value=ByteMax Then StopOn ’已接收全部字节数则跳转 End Sub StopOn: inputdata=MSComm1.Input ’读回并删除接收缓冲区中的数据流 MSComm1.PortOpen=False ’关闭端口 End Sub (3) 对接收到的数据进行预处理 下面的语句是对串口接收的数据进行双字节拼装,每个采集数据两个字节,除以10体现了温度01℃的分辨率。 For i=0 To ByteMax chdata(i)=(256*inputdata(2*i)+inputdata(2*i+1))/10 Next i 2. 数据的显示保存与打印 VB6中最有用的ActiveX控件之一是RichTextBox控件,它允许向应用程序中添加高级字处理特性。Rich TextBox控件允许用一种称之为RTF的特殊编码标准格式化文本。与HTML(超文本标记语言)相似,RTF把特殊格式化代码添加到文本中,以便传达字体信息、字体大小、类型风格、段落风格和其他一般格式选项。我们把格式选项的信息和各通道的测量数据处理到一个变体型变量(Variant)Datatxt中后,执行下列语句即完成了数据的显示。 RichTextBox1.Visible=True ’显示高级文本框 RichTextBox1.Text=Datatxt ’高级文本框中的文本为变体型变量Datatxt 为了便于查阅以前的测量结果,保存数据文件也是必要的。保存和打开文件的操作常用对话控件CommandDialog来实现。 Dim sFile As String’定义文件变量 With dlgCommonDialog ’设置 common dialog控件的标志和属性 .DialogTitle="保存" .CancelError=False .Filter="数据文件 (*.dat) *.dat" .ShowSave If Len(.FileName)=0 Then Exit Sub End If sFile=.FileName’将欲保存的文件赋予变量 End With Dim fnum As Integer’定义所保存的文件号变量 Dim num_bytes As Integer’定义字节数变量 Dim bytes() As Byte’定义字节数组变量 DoEvents fnum=FreeFile’得到下一个可用的文件号#fnum Open sFile For Binary As #fnum ’以二进制方式打开文件sFile到#fnum内存 num_bytes=LOF(fnum)’返回一个Long,表示用Open语句打开的文件的大小,该大小以字节为单位 ReDim bytes(0 To num_bytes) ’定义上界为num_bytes的字节数组变量 bytes=inputdata ’将欲保存的数据变量inputdata赋予变量bytes Put #fnum, , bytes’将#fnum内存的变量写入磁盘 Close fnum’关闭#fnum内存的文件 通常用Get语句将 Put语句写入文件的数据读出来。打开文件功能的编程与保存文件相仿,不再赘叙。 打印RichTextbox中的内容的操作非常简单,只要简单地使用SelPrint方法并指定想要使用的打印机的内部地址或设备句柄即可。在此程序中,用Printer对象和该对象的hDC属性实现打印,hDC属性包含了系统打印机的当前设备句柄: RichTextBox1.SelPrint .hDC 3. 曲线的显示与打印 在屏幕上显示各通道被测温度随时间变化的曲线是必须的。VB6的MSChart控件给数据图表的显示提供了极大的方便。MSChart控件可显示的图表类型有三维和二维的条形图、面积图、阶梯图、饼图、折线图等。我们设置ChartType属性为VtChChartType2dLine(二维折线图),设置ColumnCout属性(与图表关联的当前数据网格中的列数)为8(测量通道数),然后将数据赋于控件的行和列(某测量时刻的数据对应于某行,通道号对应于列),如下所示: For m=1 To 600’600s测量600次,每次对应1行 MSChart1.Row=m’ MSChart1.Column=1’赋通道1数据给第1列 MSChart1.Data=chdata(3*m-7) MSChart1.Column=2’赋通道2数据给第2列 MSChart1.Data=chdata(3*m-6) MSChart1.Column=3’赋通道3数据给第3列 MSChart1.Data=chdata(3*m-5) Next m MSChart控件所形成的曲线不能直接打印,可通过剪贴板转换成为BMP位图,然后用Priner方法打印。PictureBox控件Picture2专用于打印 MSChart1。程序语句如下: Picture2.Top=MSChart1.Top ’设置Picture2与MSChart1同尺寸 Picture2.Left=MSChart1.Left Picture2.Width=MSChart1.Width Picture2.Height=MSChart1.Height MSChart1.EditCopy ’MSChart中的数据变成BMP的格式保存到剪贴板 Set Picture2.Picture=Clipboard.GetData() ’剪贴板上的图片显示到PictureBox控件Picture2中 Printer.PaintPicture Picture2.Picture, Picture2.Left,Picture2.Top Printer.Print Picture2.Picture’打印位图 Printer.EndDoc’清空打印机 结束语 通过PC机对所采集的数据进行显示和处理是手持式仪表(或曰可移动仪器仪表)的一个发展方向。本文介绍的移动式温度数据采集仪的研制过程是基于单片机的数据采集系统的软硬件开发和PC机Windows界面应用程序开发的有机结合。通过本文,我们希望对该类仪器仪表的开发应用起一个抛砖引玉的作用。MES 参考文献 1Analog Devices Inc.Monolithic Thermocouple Amplifiers with Cold Junction Compensation AD594/AD595 Datasheet,1999 2MAXIM Inc.MAX144/MAX145 Datasheet,1998 3李玉东,等.Visual Basic 6.0 中文版控件大全.北京:电子工业出版社,2000
来源:单片机与嵌入式系统应用 作者:湖州市计量检定测试研究所 潘文诚;北京邮电大学电子工程学院 张晓莹 2006/2/12 0:00:00