STM32應用實例十五:STM32的ADC通道間干擾的問題


最近我們在開發一個項目時,用到了MCU自帶的ADC,在調試過程中發現通道之間村在相互干擾的問題。以前其實也用過好幾次,但要求都不高所以沒有太關注,此次因為物理量的量程較大,所以看到了變化。

首先來說明一下此次的軟硬件環境,MCU采用的是STM32F103VET6,ADC采用自帶的ADC1,使用通道6和7。在軟件方面,我們使用版本為1.4的HAL庫,使用DMA方式采集。

接下來,我們描述一下現象。在下邊有兩幅截圖,左邊是只給第二路輸入為100%時輸入顯示99.962%。而右邊的圖是在第一路輸入也添加100%輸入時顯示的結果,第一路輸入為99.9643%而第二路輸入變成了100.0418%。

這個影響在只需要顯示數值時,沒有特別的要求可以忽略,但在控制中有時可能會引起不必要的波動。正好我們此次要求較高,但因周期很急,硬件采用了原來項目中類式的電路,就出現了這一問題。修改硬件肯定是來不及的,只能是想其他辦法盡量修正。

1、問題的分析

我們首先收集數據分析,在一路輸入為0的情況下,另一路輸入0-100%的輸入觀察第一路的信號變化。分別在55.5個時鍾周期和239.5個時鍾周期的采樣頻率下,獲得一個通道對另一個通道的影響數據,如下圖所示:

 

 

 

 由以上兩幅圖我們可以發現,采樣周期越長通道間的相互干擾就越小,反之則越大。一個同到的輸入信號越強烈則在另一個通道上在成的干擾信號越強烈,反之則越小。如上圖所示,我們對數據作曲線擬合,我們發現最多3次多項式姐可以很好的近似表示他們的關系。

2、相應的措施

有了上述對通道間相互干擾的數據關系的認識,一般來說本通道的輸入與輸出間應該是一個線性關系,但實際上總會有寫偏差,我們測得數據的實際情況同樣作曲線擬合。我們發現數據劇本是符合線性關系的,但為了更精確我們也可采用高次多項式,一般三次多項式完全就可滿足,如下圖所示:

 

經過上面的分析我們以2個通道為例來獲得最終結果。兩個同道的輸入設為:[X1,X2],兩個通道我們想得到的輸出為:[Y1,Y2],而兩輸入對Y1的影響為:[A1,B1],兩個輸入對Y2的影響為:[A2,B2]。則其函數關系可表示為:Y1=A1*X1+B1*X2和Y2=A2*X2+B2*X1,其中各變量及系數均為向量,根據所想要采取的解析函數確定。

在本次項目中,我們采用三次多項式函數來擬合,所以根據三次多項式來確定上述量及解析目標量。

3、最終的結果

解析完成后,我們再做測試,量通道件的相互干擾可以減少到1%以下,想要完全消除有困難,畢竟只是軟件處理。

最終的解決辦法是在硬件電路上消除這干擾,如在要求較高時,盡量不要采用MCU自帶的ADC和DAC來做模擬量的輸入輸出。

歡迎關注:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM