魏烈祥,汪天照,張晶,廖輝,秦家寶
(湖北方圓環??萍加邢薰?,湖北武漢,430074)
模擬信號峰值檢測在儀器儀表和工業檢測中應用非常普遍,如放射性粒子檢測、光譜分析和機械受損峰值壓力等。常規方法采用高速AD+FPGA實現,技術要求高、價格比較昂貴。為此介紹一種基于STM32F407的低成本高速模擬信號峰值檢測方法,通過三重ADC交替采樣,利用DMA將實時采樣數據傳送到環形隊列存放;動態設置STM32F407內置模擬看門狗上下限閾值;截取有效峰值信號并進行濾波和尋峰處理。通過此方法,AD采樣率高達8.4MHz, 可以實時高速采樣有效的模擬峰值信號,實現模擬信號的峰值檢測。
傳感器輸出的模擬信號經過前置放大、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]。
在規則組模式下,三重交替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原理框圖
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 模擬信號峰值波形圖
本方法軟件主要包括ADC和DMA初始化、模擬看門狗中斷程序和尋峰程序。
圖4 DMA存儲環形隊列AdBuffer
設置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]。
下面是部分初始化程序:
模擬看門狗中斷程序功能是檢測模擬信號波峰的上升沿和下降沿,在下降沿時對有效模擬信號的波峰數據脈寬濾波及尋峰處理。如圖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
本文利用STM32F407微控制器芯片的特點,采用其帶有規則組交替轉換的三路ADC對模擬信號采樣,將ADC采樣率提高了兩倍,利用DMA技術,實時保存采樣數據,同時結合模擬看門狗對模擬信號的實時監控,巧妙的提取信號的上升沿和下降沿,截取峰數據序列,實現模擬信號的峰值檢測,摒棄了傳統的脈沖幅度甄別電路、閾值調節電路和脈沖峰值保持電路,使得信號調理電路簡單、信噪比提高、抗干擾性能好、脈沖計數通過率高。
本方法已成功運用在公司的放射性檢測儀器設備產品中。