基于STM32F407的高速峰值检测方法
2021-08-21魏烈祥汪天照张晶廖辉秦家宝
魏烈祥,汪天照,张晶,廖辉,秦家宝
(湖北方圆环保科技有限公司,湖北武汉,430074)
模拟信号峰值检测在仪器仪表和工业检测中应用非常普遍,如放射性粒子检测、光谱分析和机械受损峰值压力等。常规方法采用高速AD+FPGA实现,技术要求高、价格比较昂贵。为此介绍一种基于STM32F407的低成本高速模拟信号峰值检测方法,通过三重ADC交替采样,利用DMA将实时采样数据传送到环形队列存放;动态设置STM32F407内置模拟看门狗上下限阈值;截取有效峰值信号并进行滤波和寻峰处理。通过此方法,AD采样率高达8.4MHz, 可以实时高速采样有效的模拟峰值信号,实现模拟信号的峰值检测。
1 基本原理
传感器输出的模拟信号经过前置放大、S–K滤波、高斯成形和调理,送入STM32F407内部A/D通道进行采样、滤波和寻峰处理,如图1所示。
图1 电路框图
STM32F407是ST(意法半导体)基于ARMCortex™–M4为内核的高性能微控制器,所使用的ART技术使得程序零等待执行,程序执行的效率非常高。集成了单周期DSP指令和FPU(floating point unit,浮点单元),提升了计算能力,可以进行一些复杂的计算和控制。
STM32F407自带多通道、三路ADC控制器,每路ADC具有DMA功能,ADC转换精度为12位,其中三路ADC控制器可以实现对同一通道的信号进行交替采样,实现对一个模拟通道信号的高速数据采集。每路ADC最大的采样率达到了2.8M,三路ADC在规则组模式下交替采样最快可以达到8.4M的采样率。模拟看门狗可以实时监控ADC通道模拟信号是否在设定的上下限阈值范围内[1]。
■1.1 多重ADC工作原理
在规则组模式下,三重交替ADC工作原理如图2所示。三路ADC:ADC1、ADC2和ADC3在规则组模式下交替转换,每一路ADC最小采样时间(Sampling time)为3个ADC时钟周期,AD转换时间(Conversion time )最小12个ADC时钟周期。两路ADC之间最小间隔(Delay between sampling start of 2 ADC)5个ADC时钟周期。采用STM32F407三重ADC交替采样技术对同一模拟通道数据采集只需要5个ADC时钟周期,最快采样时间不到120ns,最高采样率可达8.4MHz。
图2 三重交替ADC原理框图
■1.2 模拟看门狗阈值设置
STM32F407内模拟看门狗可以通过设置上下限阈值,HTR寄存器设置上限阈值,LTR寄存器设置下限阈值,实时监控ADC模拟输入信号的幅度是否异常。
模拟看门狗实时监控模拟输入信号,当模拟信号高于上限阈值HTR 或小于下限阈值LTR 时,会引发模拟看门狗中断。
本方法的基本思路是:STM32F407的ADC工作在三重ADC交替工作模式,三路ADC对同一通道模拟信号连续、实时采样,ADC转换后的数据通过DMA方式存储到环形存储队列AdBuあer中。模拟看门狗实时监控该通道的模拟信号,通过动态设置上下限阈值,在环形队列AdBuあer中提取上升沿(信号大于Vthreshold),下降沿(信号小于Vmin)信号波峰区域的数据序列,如图3所示。剔除波峰宽度过大和过小的波峰信号(即t1–t0过大或过小),对有效模拟信号波峰数据(t0到t1之间AD转换数据)寻峰处理求出tp时刻峰值Vpp的数据并保存[2]。
图3 模拟信号峰值波形图
2 软件设计
本方法软件主要包括ADC和DMA初始化、模拟看门狗中断程序和寻峰程序。
图4 DMA存储环形队列AdBuffer
■2.1 初始化程序
设置ADC采用DMA的通道,数据从三重模式的 ADC通用规则数据寄存器(ADC–>CDR)传输到内存(环形队列AdBuあer)。每次传输的大小为半字(16位),用于存放12位AD转换数据,内存大小为M个半字。使用DMA循环传输模式[3]。
模拟输入信号接入到三路ADC的模拟通道,每路ADC连续对模拟通道采样转换,转换结束立即启动DMA,将转换结果数据传输到环形队列AdBuあer保存。三重ADC交替采样,在时间上采样顺序为ADC1、ADC2、ADC3、ADC1…。模拟看门狗实时监控三路ADC模拟通道的信号,设置上下限阈值,启动模拟看门狗中断[4]。
下面是部分初始化程序:
■2.2 模拟看门狗中断、滤波及寻峰程序
模拟看门狗中断程序功能是检测模拟信号波峰的上升沿和下降沿,在下降沿时对有效模拟信号的波峰数据脉宽滤波及寻峰处理。如图5所示,模拟看门狗实时监控模拟信号,在检测模拟信号波峰的上升沿时,将模拟看门狗的上限阈值设为Vthreshold,下限阈值设为0,当模拟信号大于Vthreshold时会产生模拟看门狗中断,表示收到模拟信号的上升沿信号,处理上升沿程序;在检测模拟信号波峰的下降沿时,将模拟看门狗的上限阈值设为满刻度,下降沿设为Vmin,当模拟信号小于Vmin(即下降沿)时会产生模拟看门狗中断,表示收到模拟信号的下降沿信号,处理下降沿程序[5]。
具体流程:进入模拟看门狗中断程序后,首先判断当前中断是上升沿中断还是下降沿中断。如图3、图4所示,如果是上升沿中断,保存该时刻(t0时刻)的DMA计数器NDTR在环形队列中的位置Addr0,并且重新设置模拟看门狗的阈值为检测下降沿的阈值,表示已监测到脉冲信号的上升沿,下次需要监测脉冲信号的下降沿,退出模拟看门狗中断;如果是下降沿中断,表示已监测到脉冲信号的下降沿,开始对监测到的脉冲上升沿至下降沿之间的波形数据进行脉宽滤波、最大值寻峰处理。具体过程:记下此时刻(t1时刻)的DMA计数器NDTR在环形队列中的位置Addr1,将环形队列AdBuあer中上升沿的位置Addr0和下降沿的位置Addr1中的采样数据AdBuあer[Addr0]~ AdBuあer[Addr1]复制到缓冲区WaveBuあer中,由于ADC工作在三重ADC交替DMA工作模式,对信号的采样是连续、实时采样的,每个采样数据的AD转换时间都是一样的,因此可以通过波形上升沿t0时刻在循环队列的采样数据AdBuあer[Addr0]和下降沿t1时刻在循环队列的采样数据AdBuあer[Addr1]之间在循环队列AdBuあer中一共采样了多少个数据乘以ADC转换时间来计算上升沿和下降沿之间的时间间隔,即检测到的信号波峰脉宽t,比较t与有效信号的脉宽时间范围,当t不在有效信号的脉宽时间范围内时,信号为干扰信号,过滤掉脉宽过宽或过窄的信号,退出中断程序,不作寻峰处理;否则在缓冲区WaveBuあer的数据中寻找最大值,也就是寻峰处理,寻出的最大值即为峰值数据(tp时刻波峰Vpp的采样数据)。此时信号检测完毕,需要监测下一个脉冲信号,重新设置模拟看门狗的阈值为检测上升沿的阈值,退出模拟看门狗中断。图6和图7是模拟看门狗中断服务程序流程图和寻峰处理流程图。
图6
图7
3 结束语
本文利用STM32F407微控制器芯片的特点,采用其带有规则组交替转换的三路ADC对模拟信号采样,将ADC采样率提高了两倍,利用DMA技术,实时保存采样数据,同时结合模拟看门狗对模拟信号的实时监控,巧妙的提取信号的上升沿和下降沿,截取峰数据序列,实现模拟信号的峰值检测,摒弃了传统的脉冲幅度甄别电路、阈值调节电路和脉冲峰值保持电路,使得信号调理电路简单、信噪比提高、抗干扰性能好、脉冲计数通过率高。
本方法已成功运用在公司的放射性检测仪器设备产品中。