STM32-ADC采集
ADC采集和過濾
STM32采用的是12位ADC是一種逐次逼近型模擬數字轉換器,它有多達18個通道,可以測量16個外部和2個內部信號源。各通道的A/D轉換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結果可以是左對齊或者是右對齊方式存儲在16位數據寄存器中。模擬看門狗特性允許應用程序檢測輸入電壓是否超出用戶定義的高/低閾值。ADC的輸入時鐘不得超過14MHZ,它是由PCLK2經分頻產生。
有16個通道,可以把轉換組織分成兩組:規(guī)則組和注入組。在任意多個通道上以任意順序進行的一系列轉換構成成組轉換。例如,可以如下順序完成轉換:通道3、通道8、通道2、通道0、通道2、通道15。
規(guī)則組:由多達16個轉換組成,規(guī)則通道和它們的轉換順序在ADC_SQRx寄存器中選擇,規(guī)則組中轉換的總數應寫入ADC_SQR1寄存器的了L[3:0]位中。
注入組:由多達4個轉換組成,注入通道和它們的轉換順序在ADC_JSQR寄存器中選擇,注入組里的轉換總數目應寫入ADC_JSQR寄存器的L[1:0]中。
如果 ADC_SQRx 或 ADC_JSQR 寄存器在轉換期間被更改,當前的轉換被清除,一個新的啟動脈
沖將發(fā)送到 ADC 以轉換新選擇的組。
溫度傳感器/Vrefint內部通道
溫度傳感器和通道ADC_IN16相連接,內部參照電壓Vrefint和ADC_IN17相連接??梢园醋⑷牖蛞?guī)則通道對這兩個內部通道進行轉換
在使用ADC的時候要注意ADC的采樣時間。
ADC輸入時鐘有ADC_CLK由PCLK2(一般72M)分配產生,最大14M。
ADC用若干個ADC_CLK周期對輸入電壓進行采樣,采樣的周期數可由ADC采樣時間寄存器ADC_SMPR1和ADC_SMPR2中的SMP位設置,ADC_SMPR2控制通道0~9,ADC_SMPR1控制通道10~17,最小采樣周期是1.5個,周期為1/ADC_CLK.。
ADC轉換時間:Tconv = 采樣時間 + 12.5個周期。當ADC_CLK設置最大14M,采樣時間設置最快的1.5個周期,轉換時間最短=1.5個周期 + 12.5個周期 = 14個周期 = 1us。但一般PCLK2 = 72M,ADC_CLK最大為12M,所以最短轉換時間為1.17us。
在我們使用ADC采集數據的時候會遇到很多問題,當我們遇到采集的數據不穩(wěn)定的時候這個時候需要我們使用特定的方法使測得的數據更加穩(wěn)定。
我經常使用的方法有四種:
每100ms測一次數據,將測得的連續(xù)的兩個數據求他們的差,給定一個值與他們的差進行比較,如果變化過大判定為無效數據,過濾掉。
建立一個數組這個數組大小根據具體情況而定,每次測得一個數據去頭進尾,然后求平均值,這樣可以讓我們的數據不會變化太大,我們的數據看上去會更加平滑。
建立一個有10個元素的數組,每測得10個數據去掉最大值和最小值,然后求取平局值作為一次測量的結果,將這10個數據全部對掉,以此類推。這個方法可以排除不定的因素的干擾。
四、每次讀取5次數據,對這5個數據進行排序,使用這五個數的中位數。再將這五個數全部去掉。
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。