基于ADG1607十六通道湿度测量电路设计
2023-07-06吕雪芹敖振浪黄宏智
吕雪芹,敖振浪,黄宏智
(广东省气象探测数据中心,广州 510080)
0 引言
空气湿度是重要的气象要素之一。气象、环保、国防、工农业生产、科研、航天等各行各业,经常需要对环境的空气湿度实施测量与控制。对一般用途来讲,测量某个点的空气湿度一般都采用单个仪器来实现,但是在某些应用领域里需要同时测量多路湿度或者十多路湿度,比如气象部门,需要对空中垂直方向上的各个高度层的湿度进行测量;大型的仓储场所,需要各个检测点进行湿度检测,其他日常生活中也很多时候会用到多点甚至几十个点需要同时测量湿度的情形。假如每个检测点用单个测量仪器来完成,众多的检测点需要组网完成数据收集,那么系统就变得相当复杂,同时成本也会按倍数增加。假如对某一个垂直高度上测量不同高度层的湿度,需要精确计算各测量点相互之间的湿度差异的话,那么多个单独仪器测量的系统误差就可能影响精准测量。在普通环境中,湿度这个参数是最难准确测量的,因为测量湿度要比测量温度复杂得多,温度是个独立的被测量,而湿度却受其他因素(大气压强、温度)的影响,随时可能在变化,因此需要采取同一个测量电路实现多路甚至十几路的测量方法才是比较合理的测量方式。采取集成的温度和湿度传感器进行环境检测,通过多路温度和湿度电路设计,每路对应一个外部接口,实现多路同时测量并且具有良好的一致性系统误差[1]。例如库房温湿度检测需要大面积多点测量,单个仪器组成监测网成本比较高,而且每个站点的测量系统误差不一致会影响监测网的质量,需要通过多通道测量仪器作为节点,再采取ZigBee无线通信技术,形成星型传输网络完成数据采集及传输,构成物联网测量采集系统,对库房或者大棚种植等场景实现多点实时监测和监控[2-4]。
在多路测量系统组成方面,通常有多种方法。其中之一,是采用每一通道对应一个AD转换器,输出数字信号以后再通过单片机或者用户终端进行数据收集和汇总,该方法的电路复杂,成本相对较高[5]。其中之二,就是将多路湿度通过开关阵列,单片机控制开关阵列进行转换,分时切换各路湿度输入,在同一个AD转换器上转换,这种方式控制相对比较简单,成本也相对较低,同时最大的优点是各通道的系统误差一致性比较好。基于这个原因,本文采用了后者进行优化设计,设计一个16路湿度测量电路模块。
1 硬件原理设计
对于需要互相对比相互参考的测量电路来说,保证各个通道的测量一致性和测量误差至关重要,电路设计需要解决几个关键的技术问题,一是共用的AD 转换电路;二是AD转换器采取相同的参考电压基准;三是模拟转换开关导通电阻尽可能小,其次是湿度传感器电压型信号需要采取四线制引出,防止电流流过信号输入线路引起电压降造成误差。
1.1 开关阵列的构成
电子模拟开关的使用范围十分普遍,广泛应用于各种各样的电子设备中,因为这些应用系统有很多路信号共用信号处理通道,进行通道切换是必不可少的。众所周知,如果使用继电器构成开关阵列,则成本相对来说很高,而且转换时间较长,在高速转换电路应用中难以胜任。因模拟开关具有转换速度快、体积微小、无机械触点、功耗低和使用寿命长的优点,在自动化控制系统中得到十分广泛的应用,目前业界使用电子模拟开关为主流解决方案。
模拟开关的主要功能是完成电路中信号通道的信号切换。实际上是利用模拟器件特性实现开关的功能。通常模拟开关都是采用MOS管通断能力作为开关,其所起作用类似于继电器开关。为了实现共用一路AD 转换电路,16通道的湿度信号输入需要一个16通道的开关阵列进行分时切换。电子模拟开关采用两片ADG1607八转一转换开关,这种芯片的特点是转换速度快、导通电阻极小和控制灵活等特点。由两片ADG1607模拟开关U401和U402组成16通道。U401的S1A-S8A 和U402的S1A-S8A 分别连接湿度信号输入端(正极)JH1-2至JH16-2;U401的S1B-S8B和U402的S1B-S8B分别连接湿度信号输入端(负极)JH1-3至JH16-3;U401的地址控制引脚A0、A1、A2组合8个地址对应8路开关通道,由PF8、PF9、PF10决定,PF11接使能EN 引脚为片选控制信号,决定该芯片是否工作。U402的控制方法类似。U401和U402的组合变成了16路开关。16路开关阵列的构成如图1所示。整个16路开关是通过软件的时序分别控制从通道1到通道16逐个转换。
图1 开关阵列
需要注意的是,这种模拟开关需要12V 电源供电,如果改用5V 电源,那么它的开关导通性能会严重变差,所以强烈建议使用12V 电源供电[6]。
在本设计应用中,要求至少每一分钟60 个循环周期(每个周期切换16通道。)也就是说每一分钟每通道采集数据60次以上,这种响应速度要求对于模拟开关来说能够完全满足。
1.2 模数转换电路
湿度传感器通常使用湿敏电容作为敏感器件,输出电压信号,一般输出的电压信号为0~1V。要把模拟信号变成数字信号,本设计采用了AD7792模数转换芯片,它具有3个通道,内置基准源,内置一个低噪声的16位/24位∑-Δ 型ADC,有3个差分模拟输入端口,前端还有片内低噪声仪表放大器,可直接输入放大微小信号,当信号通道的增益设置为64、数据更新速率为4.17Hz时,其均方根(RMS)噪声为40NV左右。非常适合于高精度测量的应用中。
AD7792的使用相对比较简单,电路构成如图2所示。U411的AD7792通信接口使用三线SPI方式,CS是片选信号控制线,通常连接MCU,当MCU 引脚输出低电平时,则MCU 可以与AD7792 进行通信,由于本设计只有一片AD7792,所以CS可以直接接地,MCU 任何时候均可与之通信。硬件上AD7792 的时钟信号线SCLK 与MCU 的ADC_CLCK_2连接,MCU 送出时钟信号与AD7792 同步。DIN 等同于SPI总线MOSI信号,即MCU 作为主机输出,AD7792作为从机输入,由MCU 的ADC_DIN_2引脚控制。DOUT 等同于SPI总线MISO 信号,即AD7792作为从机输出,MCU 作为主机输入,由MCU 的ADC_DOUT_2引脚操作。三线SPI按照规定时序设置寄存器或者读取AD数据。
图2 AD 转换电路
AD7792需要一个基准参考电压,这里由一个高精度、低噪声和低漂移的电压基准芯片U412(ADR395)提供+5 V,接至U411的REF(+)引脚,与对地(即REF(-)引脚)构成5 V 参考电压。同时作为AD7792 的电源AVDD,这是为了提供一个非常稳定的电源来确保AD 转换精度。C409是高频滤波电容,必不可少的,滤掉干扰信号对AD的影响,实践经验表明,在PCB 制板的时候特别要注意,这个电容要安装在紧靠着U412的pin4位置才有最好的滤波效果。
AD7792的模拟输入是电压型差分共模输入,电压信号正极接AIN1(+)引脚,电压信号负极接AIN1(-)引脚,通常在传感器的输出电压负极为接地GND 端,相当于AD7792电压信号负极接AIN1(-)引脚接地。
连接在模拟输入端的C401、C402、C403、R401、R402、R403这六个元件组成平衡输入电路,RC 电路的时间常数很小,能够比较好地滤除信号高频毛刺,特别是模拟开关切换的瞬间产生的干扰尖峰毛刺[7-8]。
对于本设计的湿度传感器电压信号来说,送到图2中VDB端实际上是接地的,所以对于VDA 端来说,VDA 端对地的滤波电路则由(C401+C403)与R402构成,并决定它的时间常数,t=RC=10*1000*(470+470)*10-12=9.4(μs)。这个时间常数只有9.4微秒,因此能够滤掉高频干扰信号。但必须注意,正因为有了这个滤波电路,每一个通道切换的时候就需要一定的等待稳定时间,也就是说每个通道转换以后需要等待至少10微秒以上,等待AD 转换电路的输入完全稳定以后再读取AD数据,否则读到的数据会存在误差。AD7792输入电阻非常高,输入电路的并联电阻R403是为了输入通道没有信号输入时加速放电而设计的,从而避免输入信号在滤波电容上的电荷积累而可能影响测量精度。
1.3 信号接口和电源
通常湿度传感器采用四线制连接,电压型信号如通道1的JH1-2和JH1-3,JH1-3在传感器输出端是接地(GND)的。16个电压通道通过P401插排引入,P402为控制信号及电源输入接口,这里有一个非常值得注意的地方就是12V、5V 和3.3V 电源,都加了LC电路进行滤波,如图3中的L401和C410、L402和C411、L403和C412,避免与外设互相干扰。这里的电感器件L401、L402和L403使用磁珠代替。另外,为了避免浪涌冲击,例如雷电冲击,每个电源收入端电路都加上双向瞬态二极管进行有效抑制,如图3中的D401、D402、D403。这种设计的理念和方法在实际的应用中得到验证,效果比较好。
图3 接口电路及供电
1.4 PCB设计
本设计的电路板设计如图4所示。为了清晰显示布线,图中去掉了顶层和底层的敷铜层。
图4 PCB设计图
PCB设计强调器件布局的合理性,比如,AD 转换电路与提供基准电压芯片的距离应该尽可能靠近,减少线间的感应干扰。在滤波电路元件布局中,滤波电感电容紧靠被保护器件的引脚位置,如电路中的C404、C405、C408、C409等。必须特别注意的是信号输入电路的平衡性布局原则,也就是说信号的正极和信号的负极在电路布线的时候,两条连线必须平行走线,而且要求长度一样长,如果两条线长度不一致,其线上的电阻值不一致可能会引起测量系统误差,如开关阵列图1的信号公共端VDA 和VDB到AD转换电路图2的AD7792引脚5和引脚6之间,走线必须平行并且保持一样长度。这是没有经验的设计人员最容易忽视的技术细节。
对于精密测量电路来说,PCB板顶层和底层一般都还需要增加敷铜,目的是增强抗干扰能力[9-12],这一点不容忽视。
2 实现的软件代码
本测量电路是一个大型测量设备的一小部分。核心控制由单片机STM32F207实现。软件代码采用keil51内嵌式C语言编程。两个头文件stm32f2xx_gpio.h和stm32f2xx_rcc.h包含了对STM32F207单片机全部初始化所需的定义。
首先要对单片机的PIO 口进行初始化,把PF8、PF9、PF10、PF11、PF12、PF13、PF14、PF15初始化为状态控制脚,设置为输入输出属性,按照十六通道湿度信号输入顺序的逻辑时序分别设置高或低电平的组合,形成十六通道选择控制开关矩阵。
头文件ADC.h包含了AD初始化定义。AD 转换电路AD7792初始化按照固定的步骤要求完成。关键是初始化的参数需要根据应用电路的实际需求进行合理的设置,比如说AD转换数据更新率、信号放大倍数等,这些参数都会直接影响到了测量电路的转换速度和测量精度[13-15]。由例程My_InitADC(void)完成AD7792初始化。
所用的湿度传感器测量相对湿度值0%~100%(即0~100RH),对于输出电压范围为0~0.5V,AD7792采用的基准电压为5V,即是全量程可以达到0~5V 之间。为了提高转换分辨率,设置AD7792的增益为8倍,使信号电压变化在0~4V 之间。AD7792是十六位AD 转换器,按照这样的计算,转换的分辨率可以达到0.001 9RH,完全满足测量分辨率要求。
初始化及AD转换器数据读取例程的源代码如下:
在使用AD7792之前,必须完成初始化各个步骤,芯片才能进入正常工作状态,特别是需要进行内部零点校准和内部满刻度线性校准的过程。这个过程是通过对AD7792初始化完成后,AD芯片自身内部完成,并把校准曲线保持在寄存器中。初始化步骤如下:
1)通信寄存器:0 0 101 0 00——0x28选择下一步写IO 寄存器,IO 寄存器(8 位可读可写):0000 00 11——0x03 电流源接至IOUT1,1mA。
2)通信寄存器:0 0 010 0 00——0x10选择下一步写配置寄存器,配置寄存器(16位可读可写):00 0 1 0 011 0 00 1 0 000——0x1310 偏置电压发生器禁用,禁用熔断电流,单极性模式,增益=8,选择外部基准电压,输入有缓冲器,通道1(AN+和AN-)。
3)通信寄存器:0 0 001 0 00——0x08选择下一步写模式寄存器,模式寄存器(16位可读可写):100 00000 00 00 0101——0x8005 内部零点校准,内部时钟64kHz 不送CLK 引脚,转换更新速率50Hz。
4)通信寄存器:0 0 001 0 00——0x08选择下一步写模式寄存器,模式寄存器(16位可读可写):101 00000 00 00 0101——0xA005 内部满刻度校准,内部时钟64kHz不送CLK 引脚,转换更新速率50Hz。
5)通信寄存器:0 0 001 0 00——0x08选择下一步写模式寄存器,模式寄存器(16位可读可写):110 00000 00 00 0101——0xC005 系统零点校 准,内部时钟64kHz 不送CLK 引脚,转换更新速率50Hz。
6)通信寄存器:0 0 001 0 00——0x08选择下一步写模式寄存器,模式寄存器(16位可读可写):111 00000 00 00 0101——0xE005 系统满刻度校准,内部时钟64kHz不送CLK 引脚,转换更新速率50Hz。
7)通信寄存器:0 0 001 0 00——0x08选择下一步写模式寄存器,模式寄存器(16位可读可写):000000000000 0101——0x0005 连续转换模式,内部时钟64kHz 不送CLK引脚,转换更新速率50Hz。
8)通信寄存器:0 1 011 0 00——0x58选择下一步读数据寄存器,不连续读数据。
AD7792上电以后或者工作过程中,有时候可能会接口迷失无法受控,为了保险起见,初始化之前需要恢复接口状态,可以保持DIN 高电平,经过32个以上时钟周期,通信口就可恢复到默认模式。数模转换电路初始化例程如下:
通过时序控制例程按顺序切换模拟开关来选择各个信号通道,实现分时测量,注意开关切换后的需要一定的稳定时间才能再读数,否则数据不准确,经验值大概需要20~50ms。
如下例程完成寄存器写参数设置:
如下例程完成读取寄存器数据:
等待输入信号稳定以后,AD转换器的数据就可以正常读取出来,下面是读16位数据例程:
3 测试验证
十六路湿度测量电路是湿度梯度观测仪器的重要组成部分,它适配湿度传感器输出模拟电压信号,如果传感器输出电流信号,则需要转换为电压信号再送入测量电路。十六路电压信号分别输入到开关阵列,按照分时顺序切换进入AD转换器,因为AD转换器是公用的,那么转换的误差在这个环节中是相同的,但是开关阵列前端的输入信号电路造成的误差可能不一样,通过实际测试加以验证。
3.1 通道一致性测试
AD7792是16 位转换器,测量相对湿度0%~100%,那么湿度测量最优分辨率=100/655 35=0.001 5。适当设置AD的增益,使传感器输出0~1V 代表的相对湿度0%~100% 落在AD 转换器的线性区域,提高测量精度。0.01V代表相对湿度1%,为方便起见,选择0.100 V 和0.800V 分别代表10%和80%两个测量点进行测试,验证测量电路的通道一致性和测量误差。
使用Fluke 5720A 高精度校准仪作为标准信号源,具有7 位半数字多用表的准确度,最佳年不确定度到达±3.5ppm。使用并联方法把Fluke 5720A 输出连接到图3的P401 接线板的各路输入端JH1-2 和JH1-3,JH2-2 和JH2-3,……,JH16-2和JH16-3,使每个通道的输入信号完全相同。注意测量电路与Fluke 5720A 通过导线良好共地,防止干扰。调节标准信号源分别输出0.100 0 V 和0.800 0V,取小数点后4位能够满足测试要求。利用后端的气象数据采集器读数,读出换算后的相对湿度数据,连续读数三次,三次平均作为测量值,如表1所示。
表1 测试数据统计表
从表1可以看出,当输入0.100 013V 电压的时候,相当于输入标准相对湿度10%,那么被测各通道读出的湿度最大值是10.077%,湿度最小值是9.940%,两者之差为0.137%;当输入0.800 006V 电压的时候,相当于标准相对湿度80%,那么读出的湿度最大值是80.193%,湿度最小值是79.823%,两者之差为0.170%,充分说明了16个通道的一致性非常好,低湿度点和高湿度点之间的线性也比较好。
3.2 误差分析
参考气象部门有关地面气象观测现场考核评估方法,对测量电路各通道的测试数据(见表1)的相对误差、平均绝对离差和标准差进行统计分析,运用的具体方法如下:
相对误差:定义为绝对误差与真值(标准值)的比值。
式中,δ表示相对误差,Y表示从十六通道测量电路读出的相对湿度数据,X表示标准器换算得到的相对湿度数据。在10%测试点,对其对应的16组数据进行相对误差计算,得出结果是0.003,第二个测试点80%,对应相对误差为0.000 2;
平均绝对离差:每个误差值与平均误差值之间的差的平均值,表示为:
式中,AD表示平均绝对离差,X为一组数据的误差值;为X的算术平均数;n为数据的项数。
利用公式(2)计算16 个通道的平均绝对离差,在10%测试点是0.002 475,在80%测试点是0.000 147;
测量电路16通道的测量标准差,使用下列公式(3)进行计算:
式中,σ表示标准差,xi的平均值(算术平均值)为μ。计算结果在10%测试点的标准差为0.041,在80%测试点的标准差为0.095。
上述误差分析结果表明,十六通道的测量电路一致性比较好,测量误差很小。中国气象观测规范中,湿度测量的指标要求是,当0%~85%时测量最大允许误差是±4%,当85%~100%时测量最大允许误差±8%,分辨率0.1%。本电路作为自动气象站设备中一个测量模块,在气象塔上湿度梯度观测设备长期应用,其性能稳定可靠,完全满足气象观测设备的应用要求。
4 结束语
通常在电子精密测量应用中实现多路模拟量的测量,广泛使用多路复用器(MUX)芯片。采用MUX 完成多个通道模拟量的切换,没有机械触点,增强系统性能,信号汇聚到单路ADC 电路,分时测量多路模拟量,从而节省大量的ADC、参考电路、开关分电路和调理电路,明显降低成本实现整体最优化[16-18]。基于多路电子模拟开关构成的十六通道湿度测量电路,只用一片16位AD7792数模转换器和两片ADG1607电子模拟开关,不仅是明显降低成本,更重要的是能够确保每一路的系统误差尽可能一致[19-21],测量出来的湿度值能够客观反映各通道的真实情况及微小差异,这对于精密测量应用中是首要考虑的因素。电子模拟开关阵列形成的多通道测量电路比较适合于电压型湿度传感器模拟测量电路应用,因为通过的电流小,开关内阻也小,开关导通的内阻造成的压降就可以忽略不计,对测量结果影响非常微小。各通道互相之间的测量差异表现为相对湿度最大是0.17%,在各通道两个测量点上测量数据的相对误差、平均绝对离差、标准差分别为0.003、0.002 475、0.095,说明了通道一致性和测量误差都比较好。
本电路已经应用于投入业务运行的自动气象站设备中,静态性能检定和外场考核对比表明,系统整体性能指标均达到了设计标准要求,长期工作稳定。
当然,电子模拟开关构成的电路也存在局限性和不足,比如,不太适合数据采用频率要求很高的场景,因为每一路的切换以后需要一定的稳定时间,16路就需要16倍的等待时间,所以数据采样的频率就不可能很高,难以满足高速数据采集的需要。