基于STM32的光学透射法水浊度检测系统设计
2020-05-23李仔艳丁思同郭未宽高秀敏
李仔艳,郭 骥,丁思同,郭未宽,高秀敏
(上海理工大学 光电信息与计算机工程学院,上海 200093)
引 言
浊度是反映天然水和饮用水物理特性的一项指标,用以表征水的清澈或浑浊程度,是衡量水质良好程度的重要指标之一[1]。水浊度不仅与水中悬浮物质的含量有关,而且与它们的大小、形状及折射系数等有关[2]。针对上述浊度这一参数的光学特性,本文提出一种光学透射式浊度测量方法。该方法利用水样对光散射和吸收的光学性质,将浊度转化为光电信号[3],通过STM32芯片智能处理[4]保证一定准确度和精度的在线水质分析。
1 系统检测原理
在国际标准(ISO7027—1984)中,透射法和散射法定义为浊度仪设计的两种标准测量方法。透射法是用一束光穿过一定厚度的水样,通过测量水样中悬浮颗粒物对入射光的吸收和散射所引起的透射光强度的衰减量来确定水样的浊度。散射法则是通过测量穿过水样的入射光束被水样悬浮颗粒物散射所产生的散射光强来确定水浊度。透射与散射两种检测方法在光源的稳定性和传感器的灵敏度等方面各有特点。透射法的原理和仪器的设计相对简单,能获得较大的浊度测量范围,但在测定低浊度时,由于微小的浊度变化所引起的透射光变化很小,故对光电接收元件和放大器的分辨率和稳定性要求比较高。而测量非常低的浊度时,散射法测量对光源及电路的稳定性要求相对较低,易于达到对仪器的稳定性要求。通常散射法只用于测量较低的浊度,若浊度范围较大时,光电转换得到的电信号将不再是浊度的单值函数[5-7]。
本系统采用透射法来设计浊度检测系统,其工作原理如下:将光源入射到待测水样中,传感器在另一端接收信号,然后将接收到的信号放大,再送入单片机中进行模数(A/D)转换及数据处理,最后将数据输出。系统的工作原理框图如图1所示。
2 系统硬件设计
系统的总体硬件设计方案,主要由光源驱动模块、光电转换模块、信号放大模块、显示模块、电源模块等部分组成。首先光源驱动电路驱使LED光源发光,然后传感器将光信号转化为电信号,电信号经过放大之后输出至STM32单片机进行A/D转换,转换得到的数字信号通过数据处理后得到水样的浊度大小,最后将浊度值传输至显示模块上显示。系统硬件设计如图2所示。
图1 系统原理框图Fig. 1 System schematic block
图2 系统硬件设计Fig. 2 Hardware design of the system
2.1 光源和传感器的选型
根据水样对光散射和吸收的光学性质,可知光源和传感器的选型对整个浊度系统的准确性、灵敏度、稳定性十分关键。市面上常用的光源有三大类,分别为汞光源、激光光源及LED光源。汞光源是发展时间最长的一种光源,亮度高,在色彩方面可调的空间很大,其最大的缺点就是寿命短,且与其它光源相比,在使用过程中还可能出现炸灯现象。汞光源主要应用在家庭影院和灯泡中。激光光源波长可选择性大,光谱亮度高,色域广,同时具有较长的使用寿命和超高的亮度,但是由于技术和成本的问题,色彩的准确性不是很高,且成本过高。LED光源结构简单,便携性高且使用简单易操作,同时LED光源的寿命较长,色彩较好,价格低廉。将三种光源的优缺点进行对比,本系统选择LED光源。
前人研究表明在一定低浊度范围内,不同波长下测得的浊度与吸光度有很好的线性关系;当浊度相对较高时浊度与吸光度的关系曲线将偏离原有的线性关系,不同波长下偏离程度明显不同[7]。当波长大于 880 nm时,曲线偏离程度相对较低。所以本系统光源选择型号为OED-CL-1556SN的LED。
光电传感器实际上就是光敏二极管,它的作用是将光信号转换为电信号。光敏二极管可以看作一个受光照强度影响的电阻,光照强度越大其阻值越小,光照强度越小其阻值越大。当光敏二极管接收到LED光照时,其阻值会变小。选择光敏二极管型号时要考虑几个重要参数,如暗电流、最高反向工作电压、光电流及光电灵敏度[8-9]。考虑本系统的设计要求,要选择一个暗电流小、最高反向工作电压高、光电流大、光电灵敏度高的光敏二极管。同时光敏二极管有一定光谱响应范围,并对某波长的光有最高的响应灵敏度(峰值波长)。光敏二极管对于照射光线的响应程度是不一样的,它对某一范围内的光谱有最强响应,而对另外一些光波则响应不佳,主要表现为光电流的大小不同。因此,要想获取最大的光电流,应选择光谱响应特性符合待测光谱的光敏二极管。综合考虑以上几个参数特性,本系统选择PN502。
2.2 光源驱动电路
光源驱动电路如图3所示,其中U7(BL8532)是升压恒流芯片,用来驱动LED。BL8532具有0.8 V极低启动电压,通过调节外接电阻Rc大小来达到0~500 mA的可调输出电流,或由外围电阻调节输出2.5~6 V可调的稳定电压。由于内部集成了限压保护模块,这使得电路在不接负载的情况下,也不会烧毁芯片及外围电路。
图3 光源驱动电路Fig. 3 Driving circuit of the light source
本系统采用恒流输出,其中Rc的确定通过1管脚反馈电压(VIFB)和输出的恒定电流(IOUT)确定
2.3 光电转换及放大电路
2.3.1 光电转换
实现光电转换主要依靠的是光电二极管(PD1),它会将接收光源发出的光信号转换为微弱的电流信号。光敏二极管有两种工作模式,分别是光伏工作模式(零偏置)和光导工作模式(反向偏置)。光伏模式时几乎没有暗电流, 这时二极管的噪声基本上是分路电阻的热噪声,这种模式下的光电二极管有非常精确的线性曲线; 光导模式时有一个外加的反向电压,即使无光照条件下仍有一个很小的暗电流,但是可以通过选择光电二极管的材料来限制其大小[8-9]。这种模式下光敏二极管有较高的响应速度, 但会稍微牺牲曲线的线性度。考虑到在光电转换的精密测量中灵敏度对系统的稳定性有至关重要的影响,所以采用光导模式来搭建最基本的光电转换电路,如图4所示。
图4 光电转换电路Fig. 4 Photoelectric conversion circuit
2.3.2 前置放大电路
搭建了两个光电转换电路,将其中一个对准光源经过光电转换得到微电压信号VIN1,另外一个光敏二极管不对准光源无法得到光信号,得到的是环境信号VIN2。将VIN1信号和VIN2信号送入一个由U4(LF353)构成的差分放大电路进行放大处理[10]。本系统的测量环境是水样中,环境噪声对系统的稳定性有很大的影响, 如因环境产生振幅相同、相位相同、时间同步的干扰信号,则该信号就是共模信号。差分放大器的输入端接收到共模信号后,会将共模信号滤除,从而达到消除外界环境对探测电路影响的目的。差分电路本身具有良好的电气对称性,使其对共模信号有很强的抑制作用,从而增大了系统信噪比。理论上来说前级放大倍数可以设计得很大,但实际上反馈电阻会引入热噪声而限制电路的信噪比,所以前级信号不能无限放大。经差分放大电路放大后的信号进入U6再进行二级放大。其中VOUT的计算公式为
图5 前置放大电路Fig. 5 Preamplifier circuit
2.3.3 有源二阶带通滤波电路
有源二阶带通滤波电路是由U2、U3构成的,其主要作用是进行滤波。前置放大电路放大的电压再进行二级带通滤波。有源带通滤波器的主要作用是选通某一频段内的信号, 抑制该频段以外的信号[11]。由于电信号是一个直流信号,滤波器主要是滤去高频干扰、前置放大器引入的噪声以及环境噪声。有源二阶带通滤波电路如图6所示。
带通滤波器由两部分组成,第一部分是低通滤波器,第二部分是高通滤波器。
低通滤波器的传递函数为
高通滤波器的传递函数为
2.4 电源电路
电源电路为整个系统供电,采用3.7 V锂电池和5 V USB两种供电方式,其中5 V USB接口不仅可以为整个系统供电,还可以为锂电池充电,采用U1(TP4056)芯片对锂电池充电,U6(LP2992)为稳压芯片,其作用是将5 V转为3.3 V,转换后的电压为STM32F103ZET6和OLED提供工作电压。
图6 有源二阶带通滤波电路Fig. 6 Active second-order bandpass filter circuit
2.5 单片机及其它电路
水浊度系统采用由ST公司开发的STM32F103ZET6芯片作为控制器,该系列芯片采用具有高性能、低功耗、低成本的嵌入式ARM Cortex-M0+内核,具有内置的A/D转换功能及较强的数据处理功能,并拥有丰富的外设接口[12]。液晶显示屏电路用于系统的信息显示及输出,通信接口用于单片机与上位机之间的通信。
3 系统软件设计
主控程序是为各个硬件模块提供执行所需功能的相关配置程序,主要包括主控单元程序设计、光源驱动程序设计、A/D转换程序设计、OLED显示屏程序设计、通信协议程序等。程序开发采用C语言进行编写,调试程序的平台为Keil uVision5。
3.1 主控程序
STM32F103ZET6为整个硬件系统的核心控制单元,主控程序通过ST-Link烧录,控制整个硬件系统正常有序地工作。主控程序先将系统初始化,再由使能光源驱动芯片并采集传感器信号,对采集的数据作预处理,最后将水浊度函数进行线性拟合[13-14]。主控程序流程如图7所示。
图7 主控程序流程图Fig. 7 Flow chart of main control program
3.2 光源驱动程序
光源驱动模块的使能控制也由STM32F103 ZET6完成。STM32初始化变量后,通过设置PB5引脚不同工作方式,使能控制LED驱动模块,配合光电传感器接收光信号来分析水样对光散射和吸收的光学性质。光源驱动程序如图8所示。
图8 光源驱动程序Fig. 8 Light source driver
3.3 数据采集及处理程序
STM32F103ZET6控制相关模块开始采集光电传感器上的模拟信号,然后进行A/D转换。采用转换好的数字信号进行浊度函数计算,数据采集与处理程序如图9所示。
图9 数据采集与处理程序Fig. 9 Data acquisition and processing program
4 浊度函数的标定
4.1 实验方法
按 ISO7027—1984 国际标准单位(FNU)配制福尔马肼聚合物浊度标准液[15],用稀释法制备标准浊度溶液系列。利用浊度检测系统检测浊度标准溶液系列,得到输出结果。该实验需在黑盒中进行,最大程度地减小日光、杂散光对浊度测量的干扰。
4.2 实验步骤
1)配制0 FNU, 1 FNU,5 FNU,10 FNU标准浊度溶液,放入干净且干燥的烧瓶待用。
2)将配制好的标准浊度液倒入实验装置中,驱动光源和传感器进行多次实验,测量电压值,然后作线性拟合,将拟合后的函数y=-4.544x+4烧入最小系统板中,再进行多次测量,与标准浊度值进行比较,并计算误差值。
4.3 实验数据
水浊度误差分析如表1所示。
表1 水浊度误差分析表Tab. 1 Error analysis of water turbidity
5 分析与结论
从几组数据可以看出,测量值与标准值存在偏差,在测量0 FNU和1 FNU时系统根本分辨不出。用透射法不适合测量低浊度,系统性能和灵敏度达不到要求。但是在测量5 FNU、10 FNU时误差明显有减小的趋势。根本原因还是透射法不适合低浊度的检测,只适合高浊度的水质检测。总的来说透射法在结构上是比较简单的,一般情况下能满足对低浊度水样测量的精度要求,在高浊度的水样检测中具有更好的稳定性和准确性。