一個(gè)關(guān)于STM32F207 AD采集正弦信號(hào)不穩(wěn)定的話(huà)題
前言
客戶(hù)W在使用STM32F207VET6做一款電源監(jiān)控產(chǎn)品,STM32通過(guò)ADC采集一路正弦波信號(hào)。發(fā)現(xiàn)ADC采集的數(shù)據(jù)總會(huì)不定時(shí)的出現(xiàn)異常波動(dòng)。采集完成后即使對(duì)數(shù)據(jù)進(jìn)行處理,最后還是有會(huì)有一些異常數(shù)據(jù)無(wú)法消除。
硬件環(huán)境:STM32F207VET6 ST-Link仿真器
軟件環(huán)境:MDK Matlab
ADC數(shù)據(jù)的處理
ADC采集完的數(shù)據(jù)一般都需要有濾波算法進(jìn)行處理。因?yàn)閱未蔚臄?shù)據(jù)采集,有很多的隨機(jī)因素導(dǎo)致采集數(shù)據(jù)不準(zhǔn),常見(jiàn)的干擾源由以下幾點(diǎn):
高斯白噪聲:這是一種正態(tài)分布的隨機(jī)噪聲,功率譜密度服從均勻分布,幅值分布服從高斯分布。對(duì)于此種噪聲,我們可以通過(guò)取算術(shù)平均值的方式將其噪聲去掉。
固定頻率的噪聲:比如在被采集的信號(hào)源有一個(gè)固定頻率的噪聲會(huì)周期性的影響被采集信號(hào)。對(duì)此種噪聲,我們可以通過(guò)提高采集頻率,軟件中實(shí)現(xiàn)數(shù)字濾波的方式進(jìn)行去除。
隨機(jī)噪聲:這種噪聲是沒(méi)有規(guī)律的噪聲,有可能是數(shù)據(jù)采集錯(cuò)誤,或者是意外的參考電壓波動(dòng)引起的。一般可以適用中值平均濾波算法來(lái)降低這種隨機(jī)信號(hào)對(duì)數(shù)據(jù)的影響。對(duì)于水位、液壓、溫度等緩慢變化的信號(hào)有很好的濾波效果,但是對(duì)于數(shù)據(jù)變化較快的信號(hào)并不適用。
針對(duì)STM系列的MCU如何提高采集信號(hào)的精度,有對(duì)應(yīng)的應(yīng)用文檔來(lái)進(jìn)行介紹:
AN4073(針對(duì)STM32F2/F4xx)
AN2834(針對(duì)STM32F10x)
AN3137(針對(duì)STM8Lxx)
在AN4073中,一些通用的方式來(lái)降低系統(tǒng)噪聲的辦法有如下幾種。
現(xiàn)場(chǎng)檢查
在仔細(xì)查看了客戶(hù)的原理圖與硬件PCB布線后,并沒(méi)有發(fā)現(xiàn)硬件中有什么問(wèn)題。但是在數(shù)據(jù)的采集中,的確會(huì)發(fā)現(xiàn)有一些數(shù)據(jù)明顯高于其他測(cè)試點(diǎn)的值,類(lèi)似下圖:
首先,建議客戶(hù)修改濾波算法??蛻?hù)以前在時(shí)域不做任何濾波工作的,而是直接將采集到的數(shù)據(jù)進(jìn)行頻域轉(zhuǎn)換,在頻域中進(jìn)行濾波操作。建議客戶(hù)在采集數(shù)據(jù)之后,馬上進(jìn)行濾波(因?yàn)樵跁r(shí)域上已經(jīng)可以明顯的看到異常數(shù)據(jù)了)。
增加上濾波算法后是可以減少一些‘毛刺’的出現(xiàn),但是因?yàn)樵肼暤碾S機(jī)性和客戶(hù)的真實(shí)數(shù)據(jù)就是正弦波,客戶(hù)最后還需要將時(shí)域的數(shù)據(jù)轉(zhuǎn)換到頻域進(jìn)行計(jì)算,在最后的結(jié)果中還有‘不和諧’的因素在里邊。
其次,通過(guò)查看勘誤手冊(cè),關(guān)于系統(tǒng)限制的說(shuō)明中有關(guān)于噪聲的說(shuō)明。所以修改MCU的系統(tǒng)配置參數(shù)進(jìn)行嘗試。
注意,這個(gè)問(wèn)題并不是寫(xiě)在ADC部分,而是寫(xiě)在了勘誤手冊(cè)的系統(tǒng)設(shè)計(jì)限制中。
這里說(shuō)的很清楚,MCU的內(nèi)部會(huì)產(chǎn)生噪聲對(duì)ADC的精度造成影響。解決的辦法就是關(guān)閉ART加速器的預(yù)取功能并通過(guò)取平均值的濾波算法來(lái)實(shí)現(xiàn)降低這個(gè)干擾。
于是請(qǐng)客戶(hù)按照我們的參考文檔AN4073中所描述的方式進(jìn)行操作。
最后,發(fā)現(xiàn)此方法對(duì)于降低異常數(shù)據(jù)有更好的效果,采集到的數(shù)據(jù)的穩(wěn)定性能夠進(jìn)一步的提高。但因?yàn)檫@個(gè)部分的噪聲來(lái)源于MCU內(nèi)部(MCU只要工作,這個(gè)噪聲就是存在的),也無(wú)法做到100%消除這種異常值。且此計(jì)算需要時(shí)間(一次計(jì)算大概需要2ms),客戶(hù)的對(duì)于時(shí)間的要求很?chē)?yán)格,需要有大量的應(yīng)用功能需要計(jì)算。異常值對(duì)于在頻域的功率因數(shù)等參數(shù)的影響又較大,故此種方式并不適用客戶(hù)的實(shí)際應(yīng)用場(chǎng)合。但客戶(hù)也肯定了我們這樣的ADC對(duì)于采集直流信號(hào),噪聲為高斯白噪聲的情況下是適用的。采集速度也比較快。
小結(jié): 對(duì)于不同的場(chǎng)合,根據(jù)不同的噪聲類(lèi)型,我們可能需要對(duì)ADC采集到的信號(hào)進(jìn)行處理。具體到STM32F2和STM32F4,因?yàn)橄到y(tǒng)設(shè)計(jì)的限制,MCU 內(nèi)部的噪聲會(huì)對(duì)ADC的采集精度造成一定的影響,所以必須將ART加速器的預(yù)取功能關(guān)閉(數(shù)據(jù)緩存 指令緩存 打開(kāi))。對(duì)于采集交流信號(hào)源,并需要在頻域做相關(guān)處理的領(lǐng)域不太合適,主要是對(duì)于功率因數(shù)的計(jì)算產(chǎn)生影響較大。但是對(duì)于一般的直流信號(hào)的采集還是非常不錯(cuò)的。