基于STM32 的正交锁相放大器在气体检测中的应用
2023-02-23卜雄洙杨昊青
恽 浩,卜雄洙,杨昊青,宋 扬
(南京理工大学机械工程学院,江苏南京 210094)
在国内城市家庭中,随着天然气使用的日益普遍,人们逐渐开始关注并重视天然气的安全使用和监测预警[1]。甲烷气体作为温室效应的罪魁祸首,不但污染大气环境,而且影响人们的身体健康[2]。因此,在日常生活和环境保护等方面,对甲烷气体进行检测具有十分重要的意义[3-4]。
可调谐半导体激光吸收光谱技术是一种光学气体检测技术[5],具有非接触测量、实时性等优点[6],目前已经广泛应用于痕量气体检测中[7]。半导体激光器经过高频调制,输出的激光扫描甲烷气体的吸收谱线[8-9],通过白板将吸收光反射回来;然后由平凸镜将反射光信号聚集到光电探测器;最后利用STM32F407的内置外设A/D 转换器进行数据采集,反演出甲烷气体的浓度。为了从光电探测器接收到的微弱信号中提取出二次谐波分量,设计了一种基于STM32 的正交锁相放大器。该正交锁相放大器结构简单,运行稳定,能够解调出反射光信号中的二次谐波分量,实现正交锁相放大器的功能。
1 正交锁相放大器原理
锁相放大技术是一种将特定频率的微弱信号从噪声中提取出来的技术[10-11],它是以互相关检测原理为基础的信号检测手段[12-13]。含有噪声的微弱信号可以通过锁相放大技术提取出来,而噪声被抑制或者滤除。
锁相放大器的输出与待测信号和参考信号的相位差有关。当两个信号的相位相同时,此时直流分量最大;当两个信号的相位差为90°时,直流分量为0,此时无法检测出待测信号。为了正确提取出待测信号,采用正交锁相放大器[14-15],该放大器不需要进行相位调节、测量方便、使用广泛。
2 锁相放大器的Matlab仿真
为了验证甲烷气体检测系统中正交锁相放大器的可行性,利用Matlab 进行正交锁相放大仿真,提取二次谐波信号。仿真时,三角波的频率为20 Hz,正弦波的频率为5 kHz,仿真时间为0.05 s。
2.1 气体吸收信号仿真
理想状态下,气体分子在发生跃迁时,形成的吸收谱线应为单一谱线[16-17]。实际上,由于分子间的相互作用,吸收谱线具有一定的轮廓,以某一中心频率向两侧分布。在气体吸收信号的仿真过程中,可以用洛伦兹线型函数描述这种现象,其中取谱线的半宽高为0.065 cm-1,洛伦兹线型函数如图1 所示。
图1 洛伦兹线型函数
低频三角波经过高频正弦波调制后,驱动激光器发射出调制光。调制光来回扫描甲烷气体的吸收峰,然后被气体吸收并反射回去。经过气体吸收后的反射光信号如图2 所示。
图2 经过气体吸收后的反射光信号
2.2 谐波信号仿真
吸收信号中的二次谐波含有甲烷气体的浓度信息,根据正交锁相放大器的原理,设置10 kHz 参考信号进行仿真提取。仿真得到的二次谐波信号如图3所示。
图3 二次谐波信号
3 正交锁相放大器的STM32实现
在甲烷气体检测系统中,利用锁相放大技术实现反射光信号的精确提取是实现气体检测的关键一步。目前,锁相放大器主要通过硬件实现,体积较大。为了实现小型化和数字化的设计理念,采用基于STM32 的软件方法实现正交锁相放大器。将信号控制和数据处理集中在STM32 中,在数据运算方面采用内部硬件FPU 和集成DSP 库,加速浮点运算,达到实时检测的目的。
基于Cortex-M4 内核的STM32F407 芯片不但内部集成了硬件FPU,支持浮点运算指令集,而且还提供了一套DSP 库,支持多种DSP 指令集,指令的执行可以在单周期内完成。相比其他的内核,Cortex-M4内核在浮点数据的各种运算速度方面得到大幅度的提升。以STM32F407 作为甲烷气体检测系统的控制和数字信号处理的中枢,完全可以满足实时检测的需求。系统软件设计流程框如图4 所示。
图4 系统软件设计流程框
首先通过定时器定时一个周期对反射光信号进行采集,采集4 096 个点的数据并存储到数组中。
在正交锁相放大运算中,10 kHz 的参考信号是通过DSP库中的两个库函数arm_sin_f32和arm_cos_f32得到的。在DSP库中事先生成了含有512个浮点数的正弦数据表,并保存在数组sinTable_f32 中。设置采样频率为100 kHz,通过这两个函数查找浮点正弦表得到10 kHz 的正弦、余弦值。如果正弦表中没有对应的数据,就通过线性插值的方式获取正弦、余弦值。
生成参考信号以后,开始进行乘法以及FIR 低通滤波运算。乘法运算采用arm_mult_f32 函数,FIR低通滤波采用arm_fir_f32 函数,滤波器的阶数为32阶,截止频率为100 Hz。在函数中,每组数据以四个数为一个单位进行计算,不够四个数则单独进行计算。浮点数运算采用单指令多数据指令(SIMD)、乘加指令(MAC)在单周期内完成。
一方面为了实现甲烷气体的实时检测,另一方面为了减少数据的运算量,对正交锁相放大后的信号进行抽取、FIR 低通滤波。抽取因子为8,低通滤波的参数与正交锁相放大的滤波器相同。最后,通过STM32 的D/A 转换器输出二次谐波信号的峰值,并将数据通过串口实时打印出来。
4 实验分析
4.1 STM32实现正交锁相放大器实验
为了验证STM32F407 能够实现正交锁相放大器的功能,将仿真得到的吸收信号进行二次谐波提取,与仿真结果进行比较。
解调出来的二次谐波信号通过STM32 的D/A 转换器引脚输出,示波器观察到的二次谐波如图5 所示。从图5 中可以看出,正交锁相放大器基本可以解调出反射光信号中的谐波信号。
图5 解调出的二次谐波
由上述分析可知,STM32F407 可以实现正交锁相放大器的功能,设计满足微弱信号的检测需求,为后面的甲烷气体检测奠定了基础。
4.2 甲烷传感器遥测实验
在环境温度为25 ℃,标准大气压下对甲烷气体进行标定实验。实验使用的标准气室宽度为30 cm,入射光穿过标准气室并反射回去,光程为60 cm。传感器与标准气室的距离为5 m。
首先,用导管把标准气室和红外分析仪相连接;然后,检查标准气室的气密性;最后,通过入气口将一定浓度的甲烷气体通入标准气室。标准气室中的气体浓度通过红外分析仪读出,同时串口打印出二次谐波峰值,如表1 所示。
根据表1 中的数据,绘制散点图并进行线性拟合,如图6 所示。
表1 不同甲烷气体浓度下二次谐波的峰值
由图6 可知,甲烷浓度与二次谐波峰值呈线性关系,线性拟合的表达式如下:
图6 拟合曲线
其中,x为二次谐波峰值,单位为mV;y为甲烷气体浓度,单位为ppm·m。
将式(1)写入STM32 中,对甲烷气体进行探测并将浓度信息显示在液晶屏上,基本能对甲烷气体进行检测和报警。
5 结束语
文中设计了一种基于STM32 的正交锁相放大器,并将其应用于甲烷气体的检测。该正交锁相放大器采用STM32F407 芯片的硬件FPU 和DSP 库,通过调用库函数进行各种浮点数的基本运算和FIR 低通滤波运算。对于需要实时处理的大量数据,只需要几个指令周期即可完成,大大提高了运算效率。对0%~3%浓度的甲烷气体进行检测实验,能够成功提取出反射光信号中的二次谐波,且二次谐波的峰值和甲烷气体的浓度呈线性关系,线性度为99.66%,设计满足甲烷检测系统的要求。