张 钊,孟紫腾,刘华宇,雷 远
(北华航天工业学院,河北 廊坊 065000)
近年来,随着电子技术的发展,科研人员对各种物理环境下数据采集的准确性和稳定性都有了进一步要求,尤其是模拟信号的采集更是科研人员研究的重点,温度信号就是一种常见的模拟信号。传统的温度计存在一定的缺陷,不能满足电子实验的要求。随着单片机的发展,各种基于单片机的温度采集系统逐渐代替了传统温度计。AD590温度传感器作为一种应用较为广泛的电子温度传感器,其性能稳定、精度较高、抗干扰能力强。除此之外,笔者采用了目前应用较为广泛的STM32单片机,该单片机功能较为强大,外设资源丰富,且集成了较多的功能,可以满足本实验的设计要求。
温度测量系统主要由主控电路、温度采集电路、信号放大电路、温度显示电路组成。主控电路由STM32F103ZET6最小系统电路组成,是系统的核心部分。温度传感器AD590负责采集温度信号,并将温度信号转换成电压信号输出,但是直接输出的电压信号含有较多的噪声,需要经过OP467运算放大器滤波处理,以去除噪声。处理过的电压信号通过STM32单片机自带的A/D转换器转换成温度数据[1],最后显示在LCD显示屏上。系统的整体结构如图1所示。
图1 整体结构框架
STM32F103ZET6是一款基于CORTEX-M3内核的高性能、低成本的芯片。STM32单片机硬件资源极为丰富,拥有两个串口、多个IO口用以扩展。同时,开发板自带了许多例程可供参考,极大地方便了设计者的使用。本设计不需要使用整个开发板,只需要STM32的一个最小系统板。
STM32F103ZET6拥有的资源包括64KBSRAM、512KBFLASH,能够充分满足本设计的需要;还拥有8个定时器、1个USB、3个12位ADC以及112个通用IO口。STM32F103ZET6外设资源非常丰富,尤其是其自带的12位ADC采样[2],其采样速度可达1μs,这是本设计选择该单片机作为核心控制器的原因之一。
本设计所选用的温度传感器是美国亚德诺公司生产的AD590。相比一般温度传感器,AD590是一种输出电流型温度传感器[3],其输出电流与绝对温度成比例,且输出稳定。其具体参数如表1所示。
AD590具有较好的耐压性,其最大正向电压可达44 V,因此电源异常或者引脚接错时,器件不会损坏。
表1 AD590性能参数
AD590是一种已经芯片化的温度传感器,其工作原理是将温度转换为电流输出,输出电流以绝对温度零度为基准,温度升高1 ℃,其输出电流就会升高1 μA。因此当温度为常温25 ℃时,其输出电流为Iout=(273+25)=298 μA。
温度采集电路如图2所示。
图2 温度采集电路
在上述电路中,温度传感器的输出电流I=(273+T)μA(T为此时环境温度),因此电压V=(273+T)μA×10K=(2.73+T/100)。在这里,电流I转换成电压待测量。为了测量电压但又不让输出电流I分流,需要接入一个电压跟随器以保证待测量电持不变,即V2等于V。
上述电路中还有一个稳压二极管,可以有效滤除电源所带的杂波,使输出更加准确。
由一般的运算放大器运算公式得输出Vo=(V2-V1)×(100K/10K)=T/10。即如果温度传感器测得的温度是27 ℃,此时的输出电压就是2.7 V,接着将输出电压接单片机的ADC,经过单片机数据处理后输出的值就和此时的摄氏温度呈线性关系。
以上电压跟随器和差动放大器可以使用一个OP467搭建出来。OP467是一种四通道高速运算放大器,具有失调电压低,单位增益稳定且工作功耗较低的优点,其宽带宽为28 MHz,电源工作电压为±5 V至±15 V,满足本设计的需要。
如图3(a)所示,测得OP467输出端的电压是2.986 V,温度传感器测得的温度就是29.86 ℃。在TFTLCD显示屏上,此时的温度为29.79 ℃,在误差允许范围内。如图3(b),当用手捏住温度传感器时,温度升高,此时的温度显示是30.57 ℃。
温度显示电路采用TFTLCD显示模块,TFTLCD模块采用16位的并行方式与外部连接。TFTLCD显示屏具有320×240的分辨率,可以显示彩色图片。该显示屏支持8080并行接口模式,分别如下。
CS:TFTLCD片选引脚,连PG12;WR:向TFTLCD写入数据,连PD5;RD:从TFTLCD读取数据,连PD4;RES:对TFTLCD进行复位操作,连PG0;D0-D15:是16位双向数据线;DC:读写/命令数据标志(0代表命令,1代表数据)。
8080并口模式的具体读写过程:首先判断要写入或读取的数据的类型,从而设置DC的高低,高为数据模式,低为命令模式;其次,拉低CS信号,设置SSD1306,然后根据实现设置的DC命令最终确定是“读”还是“写”。最后,在RD的上升沿,将数据存入到D0-D7数据锁存器中;在WD的上升沿,将数据写到SSD1306中。
图3 温度测量显示
TFTLCD显示模块在8080模式下进行读写操作时,有时候需要加一个“读”命令。因为在读取真正的数据之前,往往需要将所读到的第一个数据舍去不要,从第二个开始才是真正的数据,这样才能使得频率相匹配。
单片机程序首先需要进行GPIO口初始化配置,将PA1配置为ADC的第0个采样通道,PG12,PD5,PD4和PG0为TFTLCD显示屏配置,控制信号输出。
在本设计中,软件设计最主要的部分是ADC采集程序的编写。首先选定ADC通道,STM32F103ZET6型号的单片机共有3个ADC通道(ADC123),笔者选择了ADC1通道;其次,复位ADC1通道,接下来就是对ADC1通道的配置,分别选择ADC1工作在独立模式、选择单通道单次转换模式、选择ADC数据右对齐、选择规则转换的ADC通道数目;这些基础配置设置完毕后,还需要一个转换函数ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ),即可完成对端口电压的采集。最后对ADC1使能。
此外,为了保证采集的精度,笔者还编写了一个函数 Get_Adc_Average(u8 ch,u8 times),可进行times次转换,取平均值,以提高采集的精度。
本文的温度传感器为AD590,该温度传感器在测量温度时可以将电流信号转换成电压信号,进而转换成温度值;同时以STM32F103ZET6为主控制芯片,STM32单片机自带的A/D转换器可以采集温度信息经芯片处理输出在LCD显示屏上。该系统精度高、输出稳定,可以满足日常工程实践的需要。