馬文博,羅 丹,蔣玉華,張億宗,廖志賢,黃國(guó)現(xiàn)
(1.廣西師范大學(xué) 電子與信息工程學(xué)院/集成電路學(xué)院,廣西 桂林 541004;2.桂林學(xué)院 理工學(xué)院,廣西 桂林 541006)
有效值、峰值和平均值是廣泛應(yīng)用于電機(jī)和電網(wǎng)的重要參數(shù),對(duì)其采集和測(cè)量有著十分廣泛的應(yīng)用場(chǎng)景,其中有效值可以直接反應(yīng)有功功率大小,對(duì)其進(jìn)行測(cè)量至關(guān)重要[1]。隨著越來越多的電氣設(shè)備接入電網(wǎng),電壓、電流的波形可能因受到干擾而發(fā)生嚴(yán)重的畸變。在許多科學(xué)研究和應(yīng)用場(chǎng)景,需要實(shí)時(shí)跟蹤這種畸變以消除其帶來的不利影響,因此需要一種穩(wěn)定可靠的方法來準(zhǔn)確測(cè)量非標(biāo)準(zhǔn)正弦波的有效值[2]。市面常見的數(shù)字或指針式萬用表的測(cè)量方法是依據(jù)平均值進(jìn)行的,因此其輸出結(jié)果不是真有效值,依據(jù)此測(cè)量原理,它們只有在測(cè)量標(biāo)準(zhǔn)正弦波時(shí)結(jié)果是準(zhǔn)確的[3]。在現(xiàn)有技術(shù)中,可精確測(cè)量有效值的方法有熱電偶法、RMS/DC運(yùn)算法、數(shù)字采樣法等,其中熱電偶法、RMS/DC運(yùn)算法的原理是將被測(cè)信號(hào)轉(zhuǎn)換為成比例的直流信號(hào)進(jìn)行測(cè)量,采用該原理無法實(shí)時(shí)測(cè)量每一個(gè)周期的有效值;而數(shù)字采樣法通過高速ADC 對(duì)波形進(jìn)行離散化采樣,并結(jié)合有效值的數(shù)學(xué)定義實(shí)現(xiàn)測(cè)量[4]。市面常見的真有效值測(cè)量芯片(如:AD637、AD736等)往往價(jià)格高昂、外圍電路復(fù)雜[7-10],并不適合多路測(cè)量和大規(guī)模生產(chǎn)。
近年來國(guó)內(nèi)外的學(xué)者都對(duì)有效值的應(yīng)用和計(jì)算方法進(jìn)行了大量探索。文獻(xiàn)[3]給出了交流電流有效值的物理意義和真有效值的概念。文獻(xiàn)[5]提出了一種電壓暫降檢測(cè)方法,該方法借助有效值對(duì)電壓暫降的幅值進(jìn)行測(cè)算,文中指出了有效值算法存在實(shí)時(shí)性差的缺點(diǎn),但對(duì)該缺點(diǎn)并未提出有效的解決辦法。文獻(xiàn)[6]基于真有效值檢測(cè)技術(shù),利用土壤的介電特性,設(shè)計(jì)了一個(gè)高頻電容式土壤水分傳感器。文獻(xiàn)[7]通過AD637芯片設(shè)計(jì)了一種有效值轉(zhuǎn)換電路,但相比于單片機(jī)通過編程實(shí)現(xiàn),其硬件相對(duì)復(fù)雜且成本更高。文獻(xiàn)[12]對(duì)比了LMC6482放大器代替二極管的精密整流電路和基于真有效值轉(zhuǎn)換器AD637的高精度轉(zhuǎn)換電路的測(cè)量精度和實(shí)現(xiàn)難度。結(jié)論為精密整流電路僅限于標(biāo)準(zhǔn)信號(hào),而基于AD637的轉(zhuǎn)換電路的適用范圍更廣。文獻(xiàn)[4]對(duì)伺服調(diào)速系統(tǒng)的有效值測(cè)量方法進(jìn)行了研究,并提出了數(shù)字離散同步采樣法進(jìn)行信號(hào)的采樣,但由于采樣間隔和周期需要提前確定,對(duì)頻率不穩(wěn)定的波形進(jìn)行有效值測(cè)量時(shí)仍存在較大誤差。文獻(xiàn)[11]針對(duì)變頻器供電時(shí)交流電動(dòng)機(jī)的輸入電壓和電流波形嚴(yán)重偏離正弦波的問題,提出一種電參量有效值測(cè)量的算法。文獻(xiàn)[13]指出 “有效值”是模塊化多電平換流器(MMC)設(shè)計(jì)過程中的一項(xiàng)重要指標(biāo),文章從理論角度推導(dǎo)了電流有效值的計(jì)算表達(dá)式,但并未解決實(shí)際場(chǎng)景下采樣和數(shù)據(jù)處理過程中的難點(diǎn)。文獻(xiàn)[14 -18]提出了基于Harr小波變換、準(zhǔn)同步采樣、同步采樣等方法實(shí)現(xiàn)交流信號(hào)的數(shù)字測(cè)量和精度改進(jìn)的方法。文獻(xiàn)[19]指出“有效值”在故障限流器(FCL)中快速判斷故障的應(yīng)用,并給出微分法、迭代法、全周期采樣法等有效值測(cè)量方法[20-21],但這些方法基于大量采樣值進(jìn)行數(shù)學(xué)運(yùn)算,不適用于需要實(shí)時(shí)響應(yīng)的場(chǎng)景。
本文旨在通過嵌入式單片機(jī)(如STM32系列)的ADC轉(zhuǎn)換功能和DSP處理,設(shè)計(jì)一個(gè)高精度、高可靠性的有效值求解算法,其可適用于任何有峰波形,只需要少量外部參數(shù)即可穩(wěn)定運(yùn)行,其準(zhǔn)確度高,通用性強(qiáng)、擴(kuò)展性好,且不需要復(fù)雜的外圍電路,調(diào)試簡(jiǎn)便,為后續(xù)各類有效值的應(yīng)用提供便利。
為實(shí)現(xiàn)有效值的測(cè)量,系統(tǒng)需要對(duì)外部信號(hào)進(jìn)行采樣。采樣電路需要擁有較高精度,以真實(shí)還原被測(cè)信號(hào)的情況。由于STM32單片機(jī)GPIO 只能接受0~3.3V 電壓信號(hào),因此還需對(duì)輸入信號(hào)進(jìn)行預(yù)處理和隔離,以適應(yīng)不同的外部電壓輸入,防止輸入不符合上述要求時(shí)對(duì)系統(tǒng)造成不可逆的損傷。采樣模塊將經(jīng)過調(diào)理的電壓信號(hào)輸入單片機(jī),單片機(jī)通過ADC采樣、DMA 傳輸和適當(dāng)?shù)臑V波程序,保證采樣速度和精度。為完整實(shí)現(xiàn)系統(tǒng)功能和人機(jī)交互,還需要電源電路、按鍵模塊、顯示模塊。本設(shè)計(jì)分別采用STM32F103C8T6和STM32F407ZGT6 兩款單片機(jī)完成設(shè)計(jì)和算法驗(yàn)證,并進(jìn)行對(duì)比分析。軟件部分主要完成采樣、濾波、峰值查找、有效值計(jì)算處理,并采用多種方式優(yōu)化計(jì)算速度和準(zhǔn)確性。
STM32F103C8T6是一款基于Cortex-M3內(nèi)核的32位單片機(jī),最高工作頻率可達(dá)72MHz,內(nèi)置64KFlash存儲(chǔ)器和20KSRAM,它具有較強(qiáng)的性能,能夠滿足多種應(yīng)用需求。其芯片價(jià)格相對(duì)低廉,非多路有效值計(jì)算場(chǎng)景下仍能保持較高實(shí)時(shí)性和可靠性[22]。
STM32F407ZGT6是一款卓越的多功能微控制器,可以滿足各種應(yīng)用需求,它擁有高性能、低功耗的32 位ARM Cortex-M4F內(nèi)核,有高達(dá)168 MHz的主頻,1 MB的Flash存儲(chǔ)器和192kB的SRAM,以及豐富的外設(shè)資源,如ADC、DAC、USB、SDIO、USART、高級(jí)定時(shí)器等,同時(shí)具有DSP單元和硬件單精度浮點(diǎn)運(yùn)算單元(FPU),可以加快RMS、FFT 等數(shù)學(xué)運(yùn)算的速度[23-24]。
本設(shè)計(jì)中主要用到主控制芯片中的ADC采樣和DSP內(nèi)核,上述兩款單片機(jī)可完全滿足設(shè)計(jì)需求需求,STM32F407擁有更高主頻、更大ROM 和SRAM 和獨(dú)立的DSP處理單元、FPU 單元,可以更加快速地完成本算法,并留有一定擴(kuò)展性。
系統(tǒng)硬件主要由STM32單片機(jī)最小系統(tǒng)、電源電路、信號(hào)輸入與調(diào)理電路以及部分人機(jī)交互模塊組成。
圖1 系統(tǒng)硬件整體框圖
圖2 信號(hào)輸入與調(diào)理電路圖
系統(tǒng)電源可由外接6~20V 供電、7.2V 鋰電池、四節(jié)干電池等多種方案提供,可適用多種使用環(huán)境。
系統(tǒng)中運(yùn)算放大器、模擬開關(guān)等器件均采用5V 供電,STM32單片機(jī)、OLED顯示屏采用3.3V 供電。本電路采用兩級(jí)LM1117LDO 芯片串聯(lián)組成,第一級(jí)將輸入電壓轉(zhuǎn)換為5V 輸出;第二級(jí)將5V 電壓轉(zhuǎn)換為3.3V,從而滿足系統(tǒng)各模塊的供電需求。LDO 芯片具有外圍電路簡(jiǎn)單、低壓差下效率高、輸出紋波小等優(yōu)點(diǎn)。
為擴(kuò)大測(cè)量信號(hào)輸入范圍,采用運(yùn)放-模擬開關(guān)制作了多檔位量程切換器。本電路需要將外部的電壓輸入按比例放大或縮小,轉(zhuǎn)換為STM32單片機(jī)ADC 端口可以接受的0~3.3V 電壓,并通過模擬開關(guān)實(shí)現(xiàn)量程切換功能。
運(yùn)放芯片采用LM324,該芯片具有4路獨(dú)立運(yùn)放單元。其中,第一、二路構(gòu)成跟隨器,根據(jù)電阻分壓公式:
第一和二路輸入電壓分別衰減為輸入的1/11、1/4。第三路構(gòu)成同相比例放大器,放大倍數(shù)關(guān)系為:
其中:R32為平衡電阻,阻值計(jì)算方法為:R32=R31/R30。第三路的放大倍數(shù)為11倍。
量程切換功能通過模擬開關(guān)實(shí)現(xiàn),型號(hào)為CD4052。其A0、A1 連接至單片機(jī)GPIO 作為控制端,Y0B、Y1B、Y2B作為輸入端,ZB作為輸出端連接至單片機(jī)ADC 端口。單片機(jī)控制A0、A1以選通不同電壓等級(jí)輸入作為模擬開關(guān)的輸出。
表1 設(shè)計(jì)量程與電阻的關(guān)系
表2 時(shí)間復(fù)雜度比對(duì)
表3 準(zhǔn)確度比對(duì)
單片機(jī)最小系統(tǒng)包含STM32主芯片、復(fù)位電路、SWD下載調(diào)試接口、晶振電路等。STM32F103C8T6與STM32F 407ZGT6外圍電路基本一致。
設(shè)計(jì)選用4*4 矩陣鍵盤,從而實(shí)現(xiàn)人機(jī)交互輸入功能,并方便系統(tǒng)調(diào)試。該鍵盤引出4條行線,4條列線,分別連接至單片機(jī)GPIO 接口,用于行列掃描以判斷鍵值。
系統(tǒng)通過OLED顯示屏向用戶展示系統(tǒng)運(yùn)行時(shí)的各項(xiàng)參數(shù)和計(jì)算結(jié)果。
顯示模塊采用中景園電子1.91英寸sh1108OLED 顯示屏,其顯示分辨率為128×160。接口類型為spi。圖3為該模塊的電路圖。OLED有機(jī)發(fā)光二級(jí)管(organic light emitting diode):即有機(jī)電激光顯示,指的是基于電流的作用,有機(jī)發(fā)光材料與有機(jī)半導(dǎo)體材料中的載流子符合及注入使得有機(jī)材料發(fā)光的技術(shù)[25]。
圖3 STM32F103C8T6最小系統(tǒng)的電路圖
有效值獲取算法通過STM32系列單片機(jī)進(jìn)行驗(yàn)證。軟件編寫過程分為初始化代碼生成和主程序邏輯代碼編寫。其中初始化代碼配置采用STM32CubeMX 工具生成HAL庫代碼。該工具通過圖形化界面直接生成STM32初始化代碼,相比于標(biāo)準(zhǔn)庫方便快捷,易于維護(hù)。主程序基于STM32cubeMX 生成的HAL庫初始化代碼,添加邏輯代碼完成。該程序采用C語言作為編程語言,基于Keil軟件進(jìn)行編譯和調(diào)試。其主要目的是實(shí)現(xiàn)量程切換電路的控制、測(cè)量結(jié)果濾波、峰值點(diǎn)查找、有效值計(jì)算、按鍵狀態(tài)讀取、送入OLED屏幕顯示等。
1)矩陣鍵盤行線配置為輸出,列線配置為輸入。
2)將System core→RCC→High Speed Clock(HSE)配置為“CrystalCeramic Resonator”即將系統(tǒng)時(shí)鐘來源配置為外部時(shí)鐘;將Clock Configuration→Input frequency配置為8MHz,將Clock Configuration→HCLK(MHz)設(shè)置為168MHz(對(duì)于STM32F1系列應(yīng)設(shè)置為72MHz)。
3)使能ADC1通道0用于輸入電壓信號(hào)采樣。ADC配置為獨(dú)立模式,禁用掃描,使能DMA 傳輸。為盡可能提高精度,ADC使用12bits模式以提供4096級(jí)精度,采樣時(shí)間設(shè)置為28cycles,以盡可能平衡采樣時(shí)間過長(zhǎng)造成的采樣點(diǎn)數(shù)不足和采樣時(shí)間過短帶來精度不足的問題。觸發(fā)方式設(shè)置為由定時(shí)器2觸發(fā)。
4)定時(shí)器2配置。定時(shí)器預(yù)分頻值設(shè)置為168,計(jì)數(shù)值設(shè)置為200-1。當(dāng)前系統(tǒng)時(shí)鐘配置為168 MHz,根據(jù)式(3):
計(jì)算得到,當(dāng)前定時(shí)頻率為5kHz。該數(shù)值可根據(jù)實(shí)際需要適當(dāng)修改,對(duì)于較高頻率信號(hào),該定時(shí)頻率應(yīng)適當(dāng)增加,但不能超過ADC單次采樣所需的時(shí)間,否則會(huì)造成采樣結(jié)果錯(cuò)誤。對(duì)于較低頻率信號(hào),該定時(shí)值應(yīng)適當(dāng)降低,以采樣到更多周期的信號(hào)(本算法至少保證采集1個(gè)完整周期波形即可正常運(yùn)行)。
為保證有效值計(jì)算的準(zhǔn)確性,其輸入必須為波形的一個(gè)或多個(gè)整周期。而如何準(zhǔn)確快速找出一列未知波形的整周期是有效值計(jì)算過程中尤為關(guān)鍵的一步。常見處理方案有FFT(快速傅里葉變換法)、過零比較法等。FFT 由于算法中需要進(jìn)行大量乘法和加法運(yùn)算,在單片機(jī)等運(yùn)算資源有限的場(chǎng)合下,可用性大大降低。過零比較法可以顯著降低單片機(jī)運(yùn)算量,但該方法僅對(duì)波形過零時(shí)敏感,且需要硬件電路支持。對(duì)于較為復(fù)雜的波形,其仍存在明顯不足,如圖4所示,波形存在多個(gè)過零點(diǎn),過零比較方法不適用。本文主要討論通過峰值查找算法,實(shí)現(xiàn)對(duì)一個(gè)(或多個(gè))完整周期的提取。通過尋找一個(gè)周期中三個(gè)峰值,即可得到一個(gè)完整波形的區(qū)間。
圖4 波形示例
圖5 峰值查找算法流程圖
圖6 峰值查找結(jié)果示例
該算法可用MATLAB 中findpeaks()函數(shù)實(shí)現(xiàn)。該函數(shù)為盡可能保證通用性,進(jìn)行了大量冗余判斷,在MATLABr2021b版本中,代碼量超1 130行。對(duì)于單片機(jī)系統(tǒng),需要更加精簡(jiǎn)的C 語言代碼實(shí)現(xiàn),從而降低時(shí)間、空間復(fù)雜度。
算法分析:為確定峰值,實(shí)際上需要找到波形中一系列點(diǎn)x,滿足如下關(guān)系:
算法運(yùn)行時(shí),首先判斷是否滿足上述條件,將滿足該條件的點(diǎn)設(shè)置為峰值參考點(diǎn)。之后找出峰值參考點(diǎn)中的最大值,判斷每一個(gè)峰值參考點(diǎn)是否數(shù)值上相距最大值過遠(yuǎn)(即大于某個(gè)人為指定的閾值);判斷該參考點(diǎn)與上一參考點(diǎn)距離是否小于峰值間隔閾值(該閾值由人為指定,一般通過預(yù)先判斷輸入類型和頻率范圍,從而確定峰值最小間隔),二者符合其一則判定為次高峰,而忽略不做處理。否則將該參考點(diǎn)標(biāo)記為峰值點(diǎn),并繼續(xù)重復(fù)執(zhí)行上述過程,直到遍歷結(jié)束。
上述算法執(zhí)行結(jié)束后,將得到所有波形峰值點(diǎn)的數(shù)組下標(biāo)。隨后取出波形中的三個(gè)峰值點(diǎn),即可確定波形的一個(gè)周期。
完成完整周期查找后,即可進(jìn)行均方根值計(jì)算。根據(jù)有效值定義式(5):
式中,T為信號(hào)的周期。其離散化公式為:
式中,N為參與計(jì)算的采樣點(diǎn)數(shù),Xi為采樣信號(hào)在第i次采樣時(shí)刻的瞬時(shí)值。
根據(jù)式(5)、(6)計(jì)算原理,當(dāng)且僅當(dāng)輸入為一個(gè)或多個(gè)完整周期時(shí)才能得到準(zhǔn)確的結(jié)果。利用峰值查找的結(jié)果,即所有波形峰值點(diǎn)的數(shù)組下標(biāo),完整周期長(zhǎng)度N可通過如下方法求得:
式中,Num為峰值點(diǎn)下標(biāo)數(shù)組,n為起始點(diǎn)。在圖7的結(jié)果中,n=1。
圖7 多sin疊加波形峰值查找結(jié)果
圖8 Dirichlet波形峰值查找結(jié)果
圖9 mstg函數(shù)波形峰值查找結(jié)果
隨后需要提取源數(shù)組中Num[n]至Num[n+2]區(qū)段作為均方根值計(jì)算的輸入數(shù)組,具體可通過如下C 代碼實(shí)現(xiàn):
代碼主要功能是將源波形數(shù)組中一個(gè)整周期Num[n]至Num[n+2]區(qū)段各個(gè)數(shù)值轉(zhuǎn)存入新數(shù)組中,其中RMS_In為均方根值計(jì)算的輸入數(shù)組,Src為源波形數(shù)組。
均方根值在嵌入式處理器中實(shí)際計(jì)算過程可通過兩種方案實(shí)現(xiàn):
方案1:通過DSP庫內(nèi)置函數(shù):
參數(shù)1為均方根值計(jì)算的輸入數(shù)組RMS_In,存放一個(gè)或多個(gè)整周期波形全部采樣點(diǎn)的數(shù)值;參數(shù)2為數(shù)組長(zhǎng)度N;參數(shù)3為函數(shù)輸出變量指針。調(diào)用該函數(shù)后*pResult所指內(nèi)存空間將產(chǎn)生均方根值計(jì)算結(jié)果。
方案2:根據(jù)定義式(6)進(jìn)行計(jì)算。
相比于方案2,方案1經(jīng)過軟硬件優(yōu)化,保持結(jié)果準(zhǔn)確性的前提下運(yùn)算速度更快。
本算法最終目標(biāo)是實(shí)現(xiàn)應(yīng)用于嵌入式處理器的任意有峰波形的有效值計(jì)算功能,驗(yàn)證分為計(jì)算機(jī)模擬理論準(zhǔn)確性驗(yàn)證及嵌入式處理器運(yùn)行驗(yàn)證,分別設(shè)計(jì)不同實(shí)驗(yàn)以全面驗(yàn)證算法可靠性、準(zhǔn)確性、時(shí)空復(fù)雜度等。
在時(shí)空復(fù)雜度測(cè)試中,將本文提出算法與快速傅里葉變換法(傳統(tǒng)算法)進(jìn)行對(duì)比??焖俑道锶~變換法(FFT)主要用于解決離散傅里葉變換(DFT)中計(jì)算量過大的問題,大幅降低了借助于計(jì)算機(jī)的傅里葉變換求解過程中的算法復(fù)雜度[26]。在STM32系列單片機(jī)中調(diào)用DSP 庫中的FFT 函數(shù)即可求得波形的頻譜,頻譜中除直流分量外第一個(gè)幅值明顯較高的點(diǎn)位即可認(rèn)為整體波形的頻率點(diǎn)。根據(jù)式(8):
可求得算法所需的頻率參數(shù),式中,n為FFT 輸出數(shù)組下標(biāo),F(xiàn)s為采樣頻率,采樣點(diǎn)數(shù)N=2n,其中n需為4到12間的整數(shù),f為FFT 數(shù)組下標(biāo)對(duì)應(yīng)波形的頻率。本文取n=10,即N=1 024,F(xiàn)s取1 024,此時(shí)根據(jù)式(9):
FFT 分辨率為1Hz。因此對(duì)于非整數(shù)頻率測(cè)量中采用FFT(傳統(tǒng)算法)會(huì)引入較大誤差。
波形峰值查找準(zhǔn)確性是決定有效值輸出結(jié)果正確性的關(guān)鍵所在。通過本文編寫的C 語言代碼與調(diào)用MATLAB工具箱中findpeaks()函數(shù)進(jìn)行峰值查找、調(diào)用rms()函數(shù)進(jìn)行有效值計(jì)算結(jié)果進(jìn)行對(duì)比。處理多組數(shù)據(jù),觀察輸出結(jié)果。算法中均只保留3個(gè)連續(xù)峰值,其余峰值和次高峰做忽略處理。
測(cè)試數(shù)據(jù)1:多sin疊加波形
1)MATLAB程序測(cè)試:圈出的波形位置為查找的有效值所在位置。
輸出峰值數(shù)組下標(biāo):17,80,143
RMS值:1.230 5
2)C語言程序:
輸出數(shù)組下標(biāo):16,79,142
RMS值:1.230 466
測(cè)試數(shù)據(jù)2:Dirichlet(混疊正弦函數(shù))波形
1)MATLAB程序測(cè)試:圈出的波形位置為查找的有效值所在位置。
輸出峰值數(shù)組下標(biāo):62,125,187
RMS值:0.372 0
2)C語言程序:
輸出數(shù)組下標(biāo):61,124,186
RMS值:0.372 003
測(cè)試數(shù)據(jù)3:mstg函數(shù)波形
1)MATLAB程序測(cè)試:圈出的波形位置為查找的有效值所在位置。
輸出數(shù)組下標(biāo):401,801,1201
RMS值:0.872 0
2)C語言程序:
輸出數(shù)組下標(biāo):400,800,1 200
RMS值:0.872 016
注:因MATLAB數(shù)組下標(biāo)起始值為1,C 語言數(shù)組下標(biāo)起始值為0,故C語言輸出下標(biāo)值較MATLAB輸出下標(biāo)值少1,指代數(shù)組中的相同數(shù)據(jù)。
測(cè)試結(jié)果:對(duì)于任意復(fù)雜度的有峰波形信號(hào)表現(xiàn)出極高準(zhǔn)確性和穩(wěn)定性,C語言程序與MATLAB程序輸出峰值點(diǎn)查找結(jié)果一致,RMS值計(jì)算結(jié)果一致。
分別使用STM32F1系列單片機(jī)(基于Cortex-M3內(nèi)核,無DSP處理單元,主頻72 MHz)、STM32F4 系列單片機(jī)(基于Cortex-M4內(nèi)核,有DSP 處理單元,主頻168 MHz)兩款單片機(jī),對(duì)一組相同數(shù)據(jù)進(jìn)行FFT 運(yùn)算(即傳統(tǒng)算法)求得波形頻率,進(jìn)而根據(jù)采樣率換算找出整周期區(qū)間,求得均方根值、使用本文峰值查找算法求得波形一個(gè)整周期,進(jìn)而求得均方根值,通過STM32仿真器觀察states(指令周期數(shù)),比對(duì)二者所需指令周期差異。
運(yùn)行峰值查找算法所需時(shí)間較FFT 大幅縮減,尤其在主頻更低、成本更低、無FPU 和DSP 處理單元的STM32F1系列單片機(jī)中,通過峰值查找的均方根求解算法較傳統(tǒng)算法加速效果尤為明顯。
傳統(tǒng)FFT 算法執(zhí)行時(shí),需要定義輸入數(shù)組(長(zhǎng)度為輸入數(shù)據(jù)長(zhǎng)度2倍)、輸出數(shù)組(長(zhǎng)度與輸入數(shù)據(jù)長(zhǎng)度相同),而本算法可直接利用源數(shù)組作為峰值查找算法的輸入,定義較小數(shù)組長(zhǎng)度作為算法所找峰值點(diǎn)輸出,算法運(yùn)行時(shí)無需開辟其他內(nèi)存空間。在源數(shù)據(jù)長(zhǎng)度較長(zhǎng)時(shí),使用峰值查找算法可顯著降低空間復(fù)雜度,不考慮FFT 運(yùn)行過程中額外內(nèi)存開銷的條件下,總內(nèi)存空間節(jié)省量為源數(shù)組長(zhǎng)度3倍以上,有效節(jié)省單片機(jī)片上內(nèi)存資源。
通過RIGOL DG4000系列任意波形發(fā)生器產(chǎn)生幅值不同的非標(biāo)準(zhǔn)波形信號(hào),接入上述兩款單片機(jī)ADC 端口,單片機(jī)進(jìn)行采樣和計(jì)算后,通過OLED 屏幕顯示有效值數(shù)據(jù)。通過與UNI-T UT71C型號(hào)萬用表的真有效值測(cè)量功能與單片機(jī)測(cè)量結(jié)果進(jìn)行對(duì)比,分析測(cè)量誤差。
在20 次模擬實(shí)驗(yàn)中,樣機(jī)測(cè)量結(jié)果與UNI-TUT71C型號(hào)萬用表測(cè)量結(jié)果整體相近,平均誤差為0.57%。算法對(duì)于不同種類的非標(biāo)準(zhǔn)周期波形均能有效識(shí)別峰值,并計(jì)算有效值。誤差多為隨機(jī)誤差,信號(hào)采樣電路、ADC 轉(zhuǎn)換和部分外部因素會(huì)引入測(cè)量誤差,整體誤差可控,符合實(shí)際應(yīng)用要求。
本文提出的真有效值快速算法首先通過峰值查找確定波形中的一個(gè)周期,然后在一個(gè)(或多個(gè))整周期中使用RMS計(jì)算函數(shù)計(jì)算波形的真有效值。相比于傳統(tǒng)的FFT 求頻率,進(jìn)而得到周期的辦法,其計(jì)算效率有了顯著提高,為單片機(jī)片上多路RMS值實(shí)時(shí)計(jì)算提供了有效的解決方案。本方案無需任何用于獲取頻率、周期、RMS值的外圍電路參與,很大程度上降低了硬件成本,同時(shí)該算法無需滿足傳統(tǒng)有效值算法中 “采樣頻率須等于交流信號(hào)頻率的整數(shù)倍或有理分?jǐn)?shù)倍”這一硬性條件,增強(qiáng)了算法適用范圍,可實(shí)時(shí)獲取任意非標(biāo)準(zhǔn)波形的有效值。經(jīng)與標(biāo)準(zhǔn)儀表對(duì)比,本算法擁有較好的準(zhǔn)確性和穩(wěn)定性,可進(jìn)一步推廣使用。