《1 前言》

1 前言

在楼宇自动化等系统中, 能够准确而实时地解决多路温度采集及数据通信问题, 是一项重要内容。在以往有关设计中, 主要存在提高测量精度、可靠性及性价比, 降低成本等方面的问题。笔者介绍的智能多路数据采集系统及串口通信成果, 在模/数转换中采用了压频变换, 在输出驱动电路中采取了光电隔离等技术, 使测量系统具有较高的精度, 线性度也较好。数据通信方法简便易行。该成果对有关实际工作具有较重要的参考价值, 已在天津市应用成功。

《2 智能多路温度采集系统构成及特点》

2 智能多路温度采集系统构成及特点

智能多路温度采集系统主要包括测量与传感电路、信号放大与压频变换电路、基于单片机89S52的数据采集与存储[1], 用VB实现单片机与PC机之间的通信, 如图1所示。

该设备采用铜-康铜传感器, 利用仪用放大器AD620进行信号放大, 模/数转换部分采用LM331型电压-频率转换器进行电量转换, 采用89S52单片机进行数据采集及存储并与PC机进行通信。其中89S52单片机为系统的核心, 主要完成对温度数据的采集和处理, 控制系统工作, 协调串行通信向上位机发送数据信息。

《图1》

图1 智能多路温度采集系统整体框图

图1 智能多路温度采集系统整体框图  

Fig.1 Diagram of principle for intelligent multiplex temperature collecting system

《3 放大电路结构与特点》

3 放大电路结构与特点

笔者设计的温度采集范围为-50~200 ℃, 根据铜-康铜分度表[2], 可知相应的热电势范围为-2~8 mV。信号经过放大输入到电压-频率转换器LM331, 后者的输入范围为0~10 V, 所以需要用放大环节把微弱信号放大为适合LM331的输入电压。所设计的电路采用了三级放大, 把毫伏级的电压信号放大1 000倍, 且有一定的偏移量, 如表1所示。


  

表1 设备中放大电路的期望输出值  

Table 1 The anticipant output of amplification circuit mV

《图2》

表1 设备中放大电路的期望输出值

第一级放大电路采用仪用放大器AD620。AD620只需要一只外部电阻就可设置1~1 000倍的放大增益。放大电路的二、三级如图2所示, 第二级电路采用7650运算放大器为偏置电路, 反相输入使输出极性相反且实现0.2 V的偏移量, 计算公式为

《图3》

《图4》

图2 二、三级放大电路

图2 二、三级放大电路  

Fig.2 Amplification circuit of secondstage and thirdstage

当第二级的输入为0 V时, 输出为-0.2 V;输入为-0.2 V时, 输出为0 V。代入上式得

《图5》

R7=R4=10 kΩ, R5=15 kΩ, R6=10 kΩ, VR1为0~50 kΩ的可调电阻。

第三级放大电路也采用7650运算放大器, 放大倍数为10, 计算公式为

《图6》

在深度负反馈条件下, 放大电路的增益表达式可近似为

《图7》

在该设备中:R10=82 kΩ, R8=10 kΩ, VR5=10 kΩ。

《4 电压-频率转换电路》

4 电压-频率转换电路

笔者设计的模/数转换采用LM331型电压-频率转换器[3]。LM33l用了新的温度补偿能隙基准电路, 在整个工作温度范围内和低到4.0 V电源电压下都有较高的精度;动态范围可达100 dB;线性度好, 最大非线性失真小于0.01%, 工作频率低到0.1 Hz时仍有较好的线性;变换精度高, 数字分辨率可达12 b;外接电路简单, 只需接入几个外部元件即可方便地构成V/FF/V等变换电路, 并且容易保证转换精度。

为了减少在恶劣环境中的前向通道及电源干扰, LM331的频率输出采用光电隔离方法, 见图3。

《图8》

图3 带光电隔离的输出驱动电路

图3 带光电隔离的输出驱动电路  

Fig.3 The output driving circuit with optoelectronic isolators

图4为信号放大与电压-频率转换电路。电路中, 积分器的作用是通过一个常规运算放大器和一个反馈电容器C5产生的。当积分器的输出值超过了LM331的引脚6的额定门限电压时, 定时循环就开始启动。注入引脚2的平均电流为i· (1.1RtCt) ·fout, 流出的电流为-Vin/Rin。电路中, 由于是在一个独立操作的电压-频率转换器中, 而不是在LM331的偏流中, 所以LM331的电压偏置输入比较器不会影响电压-频率转换器的偏置值或精度。由于LM331的最小偏压<1 mV, 最小偏流<2 mA, 操作电流在很低的时候是可以保证使用的, 所以这个电路对于一般小信号的处理已足够精确。此电路对输入信号的改变也会做出很快的反应, 两个输出脉冲的间隔都可以测量, 而单独一片LM331却没有这个功能, 所以输出频率是输入电压Vin的精确表示。在这种精确模式下, 输入输出可获得很好的线性关系, 由于电流源 (引脚1) 接地电压不会随着Vinfout的变化而改变, 单独一片LM331电压-频率转换器非线性的主要原因是引脚1的输出阻抗会使电流变成Vin的函数随其改变。

《图9》

图4 信号放大与电压-频率转换电路

图4 信号放大与电压-频率转换电路  

Fig.4 Signal amplifier and voltage to frequency converter

《5 数据的存储及后向通道》

5 数据的存储及后向通道

《图10》

图5 系统结构

图5 系统结构  

Fig.5 Configure of the system

该设备电路框图如图5所示, 采用LCD显示器和非易失性RAM-DS1642[4], 在线检测采集的数据经单片机80S52运算后送到DS1642内部存储器存储, 然后取出送到LCD显示器显示。单片机80S52的P2·0P2·2口分别作为显示器和DS1642的控制信号和选通信号, 与非门电路74LS00完成读写时序逻辑控制。MAX 232为标准串行通信接口电路[5], 当仪器检测完数据后, 可以用89S52的串行口TXD把片内数据传输至PC机, 而外部信号经MAX232变换后经RXD读入到内部, 有效地实现内外数据交换, 这样可以即时处理大量数据, 弥补芯片存储量小的缺陷。CPU晶振频率则根据测量精度来确定。P1口接键盘输入信号, T1口接LM331输入频率, 通过74LS14门电路接光电耦合器减小外部信号干扰。

《6 基于89S52的串行数据通信》

6 基于89S52的串行数据通信

该设备采用MAX232芯片作为PC机与89S52单片机串行通信的接口电路, 现从MAX232芯片两路发送接收中任选一路作为接口。

如使T1in接单片机的发送端TXD, 则PC机的RS-232的接收端RXD一定要对应接T1out, 同时, R1out接单片机的发送端TXD, 则PC机的RS-232的发送端TXD对应接R1in引脚。接口电路如图6。

在串行通信系统中, 主要实现了下位机数据经串行通道上传至PC机, 并在上位机中做相应的处理, 转化成用户需要的数据存储格式。上位机接收程序采用VB语言实现从下位机一次传输2 000多个数据, 对数据进行相应的处理转化成用户所要的数据, 并实现将数据存入文件且以表格形式显示于窗口。处理程序见附录。

《图11》

图6 采用MAX232接口的串行通信电路

图6 采用MAX232接口的串行通信电路  

Fig.6 Serial communication circuit using MAX232

《7 应用》

7 应用

笔者的研究成果已成功地应用到天津市梅江小区综合办公楼生态能源示范系统, 2003年9月通过了天津市科委“组合型埋地换热器地源热泵与生态能源建筑研究”成果鉴定, 经天津市节能技术中心检测, 各项技术参数均达到指标, 并取得了全年运行的性能数据。图7为梅江小区冬季热泵供回水温度与埋地换热器进出水温度, 在空调循环水流量保持在72 t/h, U型井埋管与桩埋管流量分别保持42 t/h, 23 t/h不变时, 热泵供水温度范围为37~52 ℃, 平均46 ℃;出水温度为35~51 ℃, 平均43 ℃;埋地换热器进水温度为10.5~16.5 ℃, 平均12.3 ℃;出水温度为11.8~17.4 ℃, 平均13.3 ℃。夏季温度曲线图与冬季相似。

《图12》

图7 冬季埋地换热器和热泵供回水温度

图7 冬季埋地换热器和热泵供回水温度  

Fig.7 The temperature of transition heat apparatus and heat pump supplying water

《8 结语》

8 结语

课题组成功研制开发的一套计算机监控与数据采集系统由传感器、数据采集模块、工控机等硬件与组态软件及自行编制的应用软件等组成, 笔者介绍了多路温度采集系统的设计与制作, 实现了与上位机之间的数据通信, 使上位机可以对下位机及测量结果进行控制和管理。最后给出了本系统应用于梅江小区综合办公楼生态能源示范系统的冬季温度数据图。数据表明该研究成果的社会效益、环境效益显著。

附录 数据处理程序

定义全局变量:

Dim TEMP () As Byte, num1 () , BYTBUF ()

Dim num3 (0 To 1025) As Variant

接收数据并将数据存储到一个二进制文件中:

Private Sub CommReceive-OnComm ()

Dim NUM As Byte

Open App.Path & “\temp.dat” For Binary As #1

TEMP = CommReceive.Input

For i = LBound (TEMP) To UBound (TEMP)

NUM = TEMP (i)

Put #1, , NUM

Next i

Close #1

End Sub

Private Sub CmdOpen-Click ()

Static M As Long

Dim CH As Integer

Dim K As LongStatic num2 (0 To 6000) As Variant

CommonDialog1.InitDir = App.Path

CommonDialog1.Filter = “data files (*.dat) ”

CommonDialog1.ShowOpenOpen CommonDialog1.FileName For Binary As #2

ReDim BYTBUF (0 To LOF (2) ) As Byte

Get #2, , BYTBUF ()

MSFlexGrid.Cols = CH + 1

For K = 6 To 2040 Step 2

num2 (M) = BYTBUF (K - 1) ·100 + BYTBUF (K)

M = M + 1

Next K

If Val (Text4.Text) = 1 Then

For j = 0 To 1200 / CH

For i=j*CH To (j + 1) * CH - 2

num2 (i + 1) =num2 (i + 1) - num2 (j * CH)

Next i

Next j

Else

For j = 0 To 1200 / CH

For i = j * CH To (j + 1) * CH - 2

num2 (i + 1) = num2 (i + 1) - num2 (j * CH)

Next i

Next j

End If

For intLoopindex = 1 To MSFlexGrid.Cols - 1

MSFlexGrid.Row = 0

MSFlexGrid.Col = intLoopindex

MSFlexGrid.Text = Str (intLoopindex)

Next intLoopindex

For i = 1 To 200

For j = 1 To CH

MSFlexGrid.Row = i

MSFlexGrid.Col = j

MSFlexGrid.Text = num2 (s)

s = s + 1

Next j

Next i

Close #2

End Sub

Private Sub CmdStop-Click ()

Kill App.Path & “\temp.dat”

CommReceive.PortOpen = False

End

End Sub