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