adc采样时间_太秀了!单片机内置 ADC 实现高分辨率采样?
其中:
- 為輸入待采樣信號最高頻率
- 為奈奎斯特頻率。
如果實際采樣頻率高于奈奎斯特頻率,即為過采樣。那么低于奈奎斯特采樣頻率進行采樣就稱為欠采樣,如下圖:
或許你會問,常規的應用都是過采樣,怎么也沒見分辨率提高了呀?如果僅僅過采樣,要實現更高分辨率顯然是不夠的,那么要怎么利用過采樣實現更高的分辨率呢?要知道所采用的ADC硬件核分辨率是固定的,難道還會變不成?
過采樣提高分辨率
如果對一模擬信號,采用過采樣,然后再進行一定的軟件后處理,理論上是可以得到更高分辨率的:
為增加有效位數(ENOB :effective number of bits),對信號進行過采樣,所需的過采樣率可以由下面公式確定(省略理論推導,過于枯燥):
其中:
- 為過采樣頻率
- 產品所需實際采樣頻率
- W為額外所需增加的分辨率位數
假設系統使用12位ADC每100 ms輸出一次采樣值也即(10 Hz)。為了將測量的分辨率提高到16位,我們按上述公式計算過采樣頻率:
因此,如果我們以f對信號進行過采樣,然后在所需的采樣周期內收集足夠的樣本以對它們進行平均,現在可以將16位輸出數據用于16位測量。
具體怎么做呢?
- 首先將256個連續采樣累加
- 然后將總數除以16(或將總數右移4位)。該過程通常稱為抽取,也即將速率采樣。
- 在類似進行下一次16位樣本處理
注意:用于累積過采樣數據并執行除法抽取數據類型必須具有足夠的字節寬度,以防止溢出和截斷錯誤。比如這里累積和可以采樣32位無符號整型。
由上面公式可得出一個重要結論:每提高W位分辨率,需要提高采樣率倍。
過采樣提高ADC的信噪比
ADC測量的SNR理論極限基于量化噪聲,這是基于在沒有過采樣和平滑濾波情況下模數轉換過程中固有的量化誤差所致。而量化誤差取決于ADC分辨率的位數,其中N為ADC的位數,為參考電壓。
SNR理論情況下極限值的計算方式是數據轉換的有效位數,如下所示:
這個公式沒必要去記,用到的時候參考計算一下即可。從公式中可看出,要提升一個模數轉換器的理論SNR的一種可行方案可以通過提升采樣位數,但是需要注意的是這里的信噪比是度量模數轉換器本身的,就一個真實系統的信噪比還與整個信號鏈相關!
從上式中不難算出,12位ADC的理論SNR極限值為74dB,而通過過采樣提升4位分辨率后,其SNR理論極限提高至96 dB!
到底怎么實現呢?
這里以偽代碼的方式給出編程思路:
void init_adc(void){ /*配置ADC的采樣率為過采樣率連續中斷模式*/}void start_adc(void){ /*控制ADC啟動采樣*/}/*不同的開發平臺中斷函數寫法略有差異,比如51需要指定向量 *//*OVERSAMPLE_FACTOR=4^RSHIFT_BITS 下面兩個宏一起修改 */#define RSHIFT_BITS (4)#define OVERSAMPLE_FACTOR (256)static unsigned short adc_result=0U;void adc_isr(void){ static unsigned short adc_index = OVERSAMPLE_FACTOR; static unsigned int accumulator = 0U; /*ADC_REG ADC轉換結果寄存器,不同平臺名稱不同*/ accumulator += ADC_REG; adc_index--; if( adc_index==0 ) { /* 加和按因子抽取 */ adc_result = accumulator>>RSHIFT_BITS; accumulator = 0; adc_index = OVERSAMPLE_FACTOR; }}該方案有一個缺陷,就是每次ADC中斷都需要CPU參與,在過采樣率很高的情況下,上述方案消耗很多CPU資源,那么如果單片機內存資源足夠的情況下可以考慮采用DMA模式,采集很多數據并將數據暫存下來,然后再做累加平均抽取。這是空間換時間的策略的體現。這個編代碼也很容易,只需要申請一片內存區,內存區的大小可以定為256的倍數,這是因為在提升4位分辨率情況下,一個16位的輸出樣本需要256個12位樣本。
總結一下
在成本受限的情況下,可以通過單片機片內ADC過采樣以及累積抽取的技術來提升采樣分辨率,這種技術的特點:
可以使用過采樣和平均來提高測量分辨率,而無需增加昂貴的片外ADC。
過采樣和加和抽取將以提高CPU利用率和降低吞吐量為代價來提高SNR和測量分辨率。
過采樣和加和抽取可以改善白噪聲的信噪比。
更多精彩推薦
?300億美元,AMD為什么要買Xilinx?
?“我們的邊緣計算技術點,可能超前了業界一點”?1024程序員節開源技術英雄會,參會“英雄榜”發榜?5行Python代碼實現刷爆全網的動態條形圖!
?如何應對云原生之旅中的安全挑戰?
?區塊鏈+生鮮:杜絕“偷梁換柱”和“以次充好”點分享點點贊點在看總結
以上是生活随笔為你收集整理的adc采样时间_太秀了!单片机内置 ADC 实现高分辨率采样?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python获取输入法状态_Python
- 下一篇: 按键映射_第三章 中文注释及按键相关