魏烈祥,汪天照,張晶,廖輝,秦家寶
(湖北方圓環(huán)??萍加邢薰?,湖北武漢,430074)
模擬信號(hào)峰值檢測(cè)在儀器儀表和工業(yè)檢測(cè)中應(yīng)用非常普遍,如放射性粒子檢測(cè)、光譜分析和機(jī)械受損峰值壓力等。常規(guī)方法采用高速AD+FPGA實(shí)現(xiàn),技術(shù)要求高、價(jià)格比較昂貴。為此介紹一種基于STM32F407的低成本高速模擬信號(hào)峰值檢測(cè)方法,通過三重ADC交替采樣,利用DMA將實(shí)時(shí)采樣數(shù)據(jù)傳送到環(huán)形隊(duì)列存放;動(dòng)態(tài)設(shè)置STM32F407內(nèi)置模擬看門狗上下限閾值;截取有效峰值信號(hào)并進(jìn)行濾波和尋峰處理。通過此方法,AD采樣率高達(dá)8.4MHz, 可以實(shí)時(shí)高速采樣有效的模擬峰值信號(hào),實(shí)現(xiàn)模擬信號(hào)的峰值檢測(cè)。
傳感器輸出的模擬信號(hào)經(jīng)過前置放大、S–K濾波、高斯成形和調(diào)理,送入STM32F407內(nèi)部A/D通道進(jìn)行采樣、濾波和尋峰處理,如圖1所示。
圖1 電路框圖
STM32F407是ST(意法半導(dǎo)體)基于ARMCortex?–M4為內(nèi)核的高性能微控制器,所使用的ART技術(shù)使得程序零等待執(zhí)行,程序執(zhí)行的效率非常高。集成了單周期DSP指令和FPU(floating point unit,浮點(diǎn)單元),提升了計(jì)算能力,可以進(jìn)行一些復(fù)雜的計(jì)算和控制。
STM32F407自帶多通道、三路ADC控制器,每路ADC具有DMA功能,ADC轉(zhuǎn)換精度為12位,其中三路ADC控制器可以實(shí)現(xiàn)對(duì)同一通道的信號(hào)進(jìn)行交替采樣,實(shí)現(xiàn)對(duì)一個(gè)模擬通道信號(hào)的高速數(shù)據(jù)采集。每路ADC最大的采樣率達(dá)到了2.8M,三路ADC在規(guī)則組模式下交替采樣最快可以達(dá)到8.4M的采樣率。模擬看門狗可以實(shí)時(shí)監(jiān)控ADC通道模擬信號(hào)是否在設(shè)定的上下限閾值范圍內(nèi)[1]。
在規(guī)則組模式下,三重交替ADC工作原理如圖2所示。三路ADC:ADC1、ADC2和ADC3在規(guī)則組模式下交替轉(zhuǎn)換,每一路ADC最小采樣時(shí)間(Sampling time)為3個(gè)ADC時(shí)鐘周期,AD轉(zhuǎn)換時(shí)間(Conversion time )最小12個(gè)ADC時(shí)鐘周期。兩路ADC之間最小間隔(Delay between sampling start of 2 ADC)5個(gè)ADC時(shí)鐘周期。采用STM32F407三重ADC交替采樣技術(shù)對(duì)同一模擬通道數(shù)據(jù)采集只需要5個(gè)ADC時(shí)鐘周期,最快采樣時(shí)間不到120ns,最高采樣率可達(dá)8.4MHz。
圖2 三重交替ADC原理框圖
STM32F407內(nèi)模擬看門狗可以通過設(shè)置上下限閾值,HTR寄存器設(shè)置上限閾值,LTR寄存器設(shè)置下限閾值,實(shí)時(shí)監(jiān)控ADC模擬輸入信號(hào)的幅度是否異常。
模擬看門狗實(shí)時(shí)監(jiān)控模擬輸入信號(hào),當(dāng)模擬信號(hào)高于上限閾值HTR 或小于下限閾值LTR 時(shí),會(huì)引發(fā)模擬看門狗中斷。
本方法的基本思路是:STM32F407的ADC工作在三重ADC交替工作模式,三路ADC對(duì)同一通道模擬信號(hào)連續(xù)、實(shí)時(shí)采樣,ADC轉(zhuǎn)換后的數(shù)據(jù)通過DMA方式存儲(chǔ)到環(huán)形存儲(chǔ)隊(duì)列AdBuあer中。模擬看門狗實(shí)時(shí)監(jiān)控該通道的模擬信號(hào),通過動(dòng)態(tài)設(shè)置上下限閾值,在環(huán)形隊(duì)列AdBuあer中提取上升沿(信號(hào)大于Vthreshold),下降沿(信號(hào)小于Vmin)信號(hào)波峰區(qū)域的數(shù)據(jù)序列,如圖3所示。剔除波峰寬度過大和過小的波峰信號(hào)(即t1–t0過大或過小),對(duì)有效模擬信號(hào)波峰數(shù)據(jù)(t0到t1之間AD轉(zhuǎn)換數(shù)據(jù))尋峰處理求出tp時(shí)刻峰值Vpp的數(shù)據(jù)并保存[2]。
圖3 模擬信號(hào)峰值波形圖
本方法軟件主要包括ADC和DMA初始化、模擬看門狗中斷程序和尋峰程序。
圖4 DMA存儲(chǔ)環(huán)形隊(duì)列AdBuffer
設(shè)置ADC采用DMA的通道,數(shù)據(jù)從三重模式的 ADC通用規(guī)則數(shù)據(jù)寄存器(ADC–>CDR)傳輸?shù)絻?nèi)存(環(huán)形隊(duì)列AdBuあer)。每次傳輸?shù)拇笮榘胱郑?6位),用于存放12位AD轉(zhuǎn)換數(shù)據(jù),內(nèi)存大小為M個(gè)半字。使用DMA循環(huán)傳輸模式[3]。
模擬輸入信號(hào)接入到三路ADC的模擬通道,每路ADC連續(xù)對(duì)模擬通道采樣轉(zhuǎn)換,轉(zhuǎn)換結(jié)束立即啟動(dòng)DMA,將轉(zhuǎn)換結(jié)果數(shù)據(jù)傳輸?shù)江h(huán)形隊(duì)列AdBuあer保存。三重ADC交替采樣,在時(shí)間上采樣順序?yàn)锳DC1、ADC2、ADC3、ADC1…。模擬看門狗實(shí)時(shí)監(jiān)控三路ADC模擬通道的信號(hào),設(shè)置上下限閾值,啟動(dòng)模擬看門狗中斷[4]。
下面是部分初始化程序:
模擬看門狗中斷程序功能是檢測(cè)模擬信號(hào)波峰的上升沿和下降沿,在下降沿時(shí)對(duì)有效模擬信號(hào)的波峰數(shù)據(jù)脈寬濾波及尋峰處理。如圖5所示,模擬看門狗實(shí)時(shí)監(jiān)控模擬信號(hào),在檢測(cè)模擬信號(hào)波峰的上升沿時(shí),將模擬看門狗的上限閾值設(shè)為Vthreshold,下限閾值設(shè)為0,當(dāng)模擬信號(hào)大于Vthreshold時(shí)會(huì)產(chǎn)生模擬看門狗中斷,表示收到模擬信號(hào)的上升沿信號(hào),處理上升沿程序;在檢測(cè)模擬信號(hào)波峰的下降沿時(shí),將模擬看門狗的上限閾值設(shè)為滿刻度,下降沿設(shè)為Vmin,當(dāng)模擬信號(hào)小于Vmin(即下降沿)時(shí)會(huì)產(chǎn)生模擬看門狗中斷,表示收到模擬信號(hào)的下降沿信號(hào),處理下降沿程序[5]。
具體流程:進(jìn)入模擬看門狗中斷程序后,首先判斷當(dāng)前中斷是上升沿中斷還是下降沿中斷。如圖3、圖4所示,如果是上升沿中斷,保存該時(shí)刻(t0時(shí)刻)的DMA計(jì)數(shù)器NDTR在環(huán)形隊(duì)列中的位置Addr0,并且重新設(shè)置模擬看門狗的閾值為檢測(cè)下降沿的閾值,表示已監(jiān)測(cè)到脈沖信號(hào)的上升沿,下次需要監(jiān)測(cè)脈沖信號(hào)的下降沿,退出模擬看門狗中斷;如果是下降沿中斷,表示已監(jiān)測(cè)到脈沖信號(hào)的下降沿,開始對(duì)監(jiān)測(cè)到的脈沖上升沿至下降沿之間的波形數(shù)據(jù)進(jìn)行脈寬濾波、最大值尋峰處理。具體過程:記下此時(shí)刻(t1時(shí)刻)的DMA計(jì)數(shù)器NDTR在環(huán)形隊(duì)列中的位置Addr1,將環(huán)形隊(duì)列AdBuあer中上升沿的位置Addr0和下降沿的位置Addr1中的采樣數(shù)據(jù)AdBuあer[Addr0]~ AdBuあer[Addr1]復(fù)制到緩沖區(qū)WaveBuあer中,由于ADC工作在三重ADC交替DMA工作模式,對(duì)信號(hào)的采樣是連續(xù)、實(shí)時(shí)采樣的,每個(gè)采樣數(shù)據(jù)的AD轉(zhuǎn)換時(shí)間都是一樣的,因此可以通過波形上升沿t0時(shí)刻在循環(huán)隊(duì)列的采樣數(shù)據(jù)AdBuあer[Addr0]和下降沿t1時(shí)刻在循環(huán)隊(duì)列的采樣數(shù)據(jù)AdBuあer[Addr1]之間在循環(huán)隊(duì)列AdBuあer中一共采樣了多少個(gè)數(shù)據(jù)乘以ADC轉(zhuǎn)換時(shí)間來計(jì)算上升沿和下降沿之間的時(shí)間間隔,即檢測(cè)到的信號(hào)波峰脈寬t,比較t與有效信號(hào)的脈寬時(shí)間范圍,當(dāng)t不在有效信號(hào)的脈寬時(shí)間范圍內(nèi)時(shí),信號(hào)為干擾信號(hào),過濾掉脈寬過寬或過窄的信號(hào),退出中斷程序,不作尋峰處理;否則在緩沖區(qū)WaveBuあer的數(shù)據(jù)中尋找最大值,也就是尋峰處理,尋出的最大值即為峰值數(shù)據(jù)(tp時(shí)刻波峰Vpp的采樣數(shù)據(jù))。此時(shí)信號(hào)檢測(cè)完畢,需要監(jiān)測(cè)下一個(gè)脈沖信號(hào),重新設(shè)置模擬看門狗的閾值為檢測(cè)上升沿的閾值,退出模擬看門狗中斷。圖6和圖7是模擬看門狗中斷服務(wù)程序流程圖和尋峰處理流程圖。
圖6
圖7
本文利用STM32F407微控制器芯片的特點(diǎn),采用其帶有規(guī)則組交替轉(zhuǎn)換的三路ADC對(duì)模擬信號(hào)采樣,將ADC采樣率提高了兩倍,利用DMA技術(shù),實(shí)時(shí)保存采樣數(shù)據(jù),同時(shí)結(jié)合模擬看門狗對(duì)模擬信號(hào)的實(shí)時(shí)監(jiān)控,巧妙的提取信號(hào)的上升沿和下降沿,截取峰數(shù)據(jù)序列,實(shí)現(xiàn)模擬信號(hào)的峰值檢測(cè),摒棄了傳統(tǒng)的脈沖幅度甄別電路、閾值調(diào)節(jié)電路和脈沖峰值保持電路,使得信號(hào)調(diào)理電路簡(jiǎn)單、信噪比提高、抗干擾性能好、脈沖計(jì)數(shù)通過率高。
本方法已成功運(yùn)用在公司的放射性檢測(cè)儀器設(shè)備產(chǎn)品中。