|
其實原理很簡單, 很容易明白, 怎樣實現提高分辨率?
假定環(huán)境條件: 10位ADC最小分辨電壓1LSB 為 1mv
假定沒有噪聲引入的時候, ADC采樣上的電壓真實反映輸入的電壓, 那么小于1mv的話,如ADC在0.5mv是數據輸出為0
我們現在用4倍過采樣來, 提高1位的分辨率,
當我們引入較大幅值的白噪聲: 1.2mv振幅(大于1LSB), 并在白噪聲的不斷變化的情況下, 多次采樣,那么我們得到的結果有
真實被測電壓 白噪聲疊加電壓 疊加后電壓 ADC輸出 ADC代表電壓
0.5mv 1.2mv 1.7mv 1 1mv
0.5mv 0.6mv 1.1mv 1 1mv
0.5mv -0.6mv -0.1mv 0 0mv
0.5mv -1.2mv -0.7mv 0 0mv
ADC的和為2mv, 那么平均值為: 2mv/4=0.5mv!!! 0.5mv就是我們想要得到的
這里請留意, 我們平時做濾波的時候, 也是一樣的操作喔! 那么為什么沒有提高分辨率?????
是因為, 我們做滑動濾波的時候, 把有用的小數部分扔掉了, 因為超出了字長啊, 那么0.5取整后就是 0 了,結果和沒有過采樣的時候一樣是 0 ,
而過采樣的方法時候是需要保留小數部分的, 所以用4個樣本的值, 但最后除的不是4, 而是2! 那么就保留了部分小數部分,而提高了分辨率!
從另一角度來說, 變相把ADC的結果放大了2倍(0.5*2=1mv), 并用更長的字長表示新的ADC值,
這時候, 1LSB(ADC輸出的位0)就不是表示1mv了, 而是表示0.5mv,而(ADC輸出的位1)才是原來表示1mv的數據位,
下面來看看一下數據的變化:
ADC值相應位 9 8 7 6 5 4 3 2 1 0
0.5mv測量值 0 0 0 0 0 0 0 0 0 00mv(10位ADC的分辨率1mv,小于1mv無法分辨,所以輸出值為0)
疊加白噪聲的4次過采樣值的和 0 0 0 0 0 0 0 0 1 0 2mv
滑動平均濾波2mv/4次 0 0 0 0 0 0 0 0 0 0 0mv(平均數, 對改善分辨率沒作用)
過采樣插值2mv/2 0 0 0 0 0 0 0 0 0 0 1 2mv/2=0.5mv, 將這個數作為11位ADC值,那么代表就是0.5mv
這里我們提高了1位的ADC分辨率
這樣說應該就很簡單明白了吧, 其實多出來的位上的數據, 是通過統(tǒng)計輸入量的分布, 計算出來的,
而不是硬件真正分辨率出來的, 引入噪聲并大于1LSB,目的就是要使微小的輸入信號疊加到ADC能識別的程度(原ADC最小分辨率).
理論來說, 如果ADC速度夠快, 可以無限提高ADC的分辨率, 這是概率和統(tǒng)計的結果
但是ADC的采樣速度限制, 過采樣令到最后能被采樣的信號頻率越來越低,
就拿stm32的ADC來說, 12ADC, 過采樣帶來的提高和局限
分辨率 采樣次數 每秒采樣次數
12ADC 1 1M
13ADC 4 250K
14ADC 16 62.5K
15ADC 64 15.6K
16ADC 256 3.9K
17DC 1024 976
18ADC 4096 244
19ADC 16384 61
20ADC 65536 15
要記住, 這些采樣次數, 還未包括我們 要做的 滑動濾波,
看到這些文檔, 啰啰嗦嗦說一大堆公式什么的, 忍不住就隨便寫了些,
如果我是做IC的, 我一定要求把文檔寫到白話文一樣, 小學生都能看明白的, 自然小學生都會用, 人多用了, 才有錢賺嘛,
都不知道這些芯片廠是怎么推廣的, 寫一大堆公式有什么用, 這么復雜的芯片都設計了, 寫個文檔卻馬馬虎虎,
其實不管多復雜的公式, 實現起來還不是加減乘除, 廢話少說, 有時間再寫了......
|
|