岳 洋,焦运良,邢计元
(华北计算机系统工程研究所,北京 100083)
智能数据采集是将被采集对象的特征量通过相应的传感器做适当变换后,再经过信号调理等步骤,最终送到处理器中去进行处理的一个过程。它是计算机在检测、管理和控制的过程中取得原始数据的主要手段[1]。虽然市面上有很多关于数据采集系统成熟的解决方案,但是往往价格很高,而且在采集数据的过程中,又会遇到不同的使用环境。所以低功耗、便携化和高性能的要求是必需的。单片机具有良好的开发环境和成熟的外围电路资源,它对数字电路和模拟电路都有很好的处理能力。所以课题使用单片机作为主控芯片,发挥其低功耗的特点,并且适合在多种测量环境下使用。
数据采集系统由数据采集部分、数据传输部分、数据处理部分以及显示部分组成。电压电流等模拟量由A/D将其转换成数字信号再传输到单片机进行数据处理,最后显示采集结果。系统设计框图如图1所示。
图1 系统流程图
信号输入部分包括传感器采集输出的电压、电流以及八路开关量。信号调理部分主要是对输入信号进行调理,使其在A/D的输入范围之内。A/D模块主要是对采集的模拟信号转化为数字信号,其中A/D的工作电压范围和位数决定了采样的精度。传输通道是把A/D转化输出的数字信号传输到单片机进行数据处理。数据处理部分是对数字信号进行处理,还原出调理前的原始数据。数据显示部分是将处理后的数据显示出来。
系统硬件模块主要由主控模块、开关量采集模块、模拟量采集模块和显示模块四部分组成。
系统采用MSP430单片机作为主控模块,其外围电路如图2所示。晶振对单片机的正常运行起着至关重要的作用。方案中采用双晶振配合使用,其中Y2为8 MHz的高速晶振,如果将其直接加到单片机上,虽然单片机能工作,但是会产生干扰信号,对系统的稳定性产生影响,所以在其两端增加两个电容已达到稳频的效果[2];Y1为32 768 Hz的低速晶振,其内部的杂散电容构成回路可以看做是已经加过电容,所以可以将其直接接入单片机。
图2 MSP430原理图
此外,因为MSP430单片机内置了ADC12模块,所以选择ADC12作为模数转换器。ADC12具有诸多优点,完全能够满足本次采集系统的需求。它的分辨率能够达到1/212,采样的速度为200 kbit/s;而且ADC12中还内置了采样保持电路,节省了外部电路成本;它还有四种转换模式,支持超低功耗模式,能够关闭其内核[3]。
本系统的模拟量采集中拟采集4~20 mA的电流信号、1~5 V和0~10 V的电压信号。因为4~20 mA、1~5 V信号是我国使用最广泛的DDZ-III型电动仪表所采用的标准,它是沿用的国际电工委员会(IEC)规定的过程控制系统模拟信号标准[4]。模拟量采集电路如图3所示。
图3 模拟量采集电路
对于电压量,首先数据采集系统要求电压的输入量程为两挡:0~10 V挡和1~5 V挡,所以在设计中通过控制双路选择开关选出要采集的挡位。当0~10 V电压输入时,电压应从规定好的10 V输入口P4输入,然后通过电阻分压为原信号的1/2后送入后级电路。当1~5 V电压输入时,电压应从AIN+和AIN-端接入,以实现对不同量程电压的测量。
对于电流信号,4~20 mA电流信号同样从AIN+和AIN-端接入,通过R11将其转换为电压量后送入后级电路。同时,为使转换的电压量符合输入量程,由欧姆定律可得出R11的阻值应该被设计为250 Ω。
考虑到阻抗会对电路产生一定的影响,甚至可能会影响到信号采集电路的准确性,所以在电路中加入了两级跟随器电路来对电路进行阻抗变换,以提高电路的驱动能力和稳定性[5]。在电路末端反向串联了两个二极管,形成保护电路,将电压钳制在安全的范围内,以免出现意外烧坏内部器件的情况。
开关量采集电路是以光电耦合器为核心,采集通、断信号并将其传输到单片机的I/O口线中。如图4所示,开关量采集使用TLP521-4光电耦合器。开关量由P3和P5输入,有信号输入时,光电耦合器一侧导通,点亮发光二极管促使光敏三极管基极导通,从而使光电耦合器另一侧有高电平输出[6]。
图4 开关量采集电路原理图
同时,光电耦合器在电路中也起到了隔离作用。如果没有加光电耦合器而是直接把开关量接到单片机上,可能会由于开关量输出的电压或电流超过单片机的正常工作电压从而对单片机造成损伤。
LCD分为段码型和点阵型两种,点阵型又分为字符点阵型和图形点阵型。因为LCD1602型液晶屏幕是字符型液晶,显示内容丰富,而且具有较小的体积,接口方便使用,故选择它作为显示模块。
LCD1602有16个接口,在本系统中采用3.3 V电压驱动,所以不需要其他电源电路;而且MSP430单片机的I/O接口较为充裕,所以选择将LCD1602的接口直接与单片机I/O接口相连[7]。
系统要具体实现所需功能,不仅仅要搭建好硬件电路基础,而且还需要对所需软件程序进行良好的设计。本系统软件设计部分主要有主程序、开关量采集程序、A/D转换程序和LCD显示程序四个部分。
主程序负责其余三个程序的调配和数据交换工作,主程序流程图如图5所示。首先应对整个系统进行复位,再初始化主程序;然后初始化各模块子程序,随后打开系统中断,利用中断的方式调用其余子程序。
图5 系统软件模块流程图
A/D转换子程序负责将采集到的模拟信号进行模数转换。首先初始化A/D转换模块,等待系统打开中断后开始对采集的数据进行A/D转换。其中初始化部分主要完成A/D转换和定时器的初始化功能设置,如参考电压、模拟量的输入口等。
LCD显示程序负责对LCD的初始化和液晶模块操作。其中LCD初始化包括造作控制引脚置高或置低,使控制指令和数据能够正常写入显示模块;液晶模块操作包括发送指令、显示数据、显示位置设置、显示内容设置等。
由于开关量经过光电耦合器之后可以直接接到单片机,单片机只需判断引脚的高低电平就可以读取数据。所以开关量采集程序相对简单,只需将单片机相应引脚置为输入,然后读取数据即可。
在系统设计之前,对电路进行了模拟仿真;在系统设计完成之后,对系统进行了调试。
在硬件电路仿真时使用Multisim软件,分别对模拟量采集电路进行了仿真,仿真结果均表明电流量、5 V电压量和10 V电压量输入电路后,电路输出端接收到的电压量均为理想值,其中5 V电压量仿真结果如图6所示。电路能够正常运行,并完成系统所需的采集任务。
图6 5 V电压仿真
在本系统的调试中,对系统功能进行了测试,结果如表1、表2、表3所示。其中电流的单位为毫安(mA),电压的单位是伏特(V)。
表1 1~5 V电压测量结果
表2 0~10 V电压测量结果
表3 4~20 mA电流测量结果
由于测量部分都是模拟电路,因此与实际的电压值相比会存在一定的误差,经过分析可能有以下几方面因素导致误差:
(1)电阻值精度不高,与标值之间会有一定的误差。因为电路中采用了多个分压电阻,所以导致在分压过程中产生一定的误差。
(2)稳定误差及干扰误差等[8]。
(3)器件误差,如在电路中运用到的二极管、三极管等计算时的误差。
模拟电路中遇到误差是常见的,而经过分析,测量电路误差较小,基本能够满足本系统的采集需求。