[導讀] 相信ADC的應用或多或少都會用到,在很多場合都有分辨率要求,要實現較高分辨率時,第一時間會想到采用一個較高位數的外置ADC去實現。 可是高分辨率外置ADC往往價格都不便宜,這就帶來一對矛盾: 高指標與低成本。 其實利用單片機片上的ADC利用過采樣技術就能很好的解決這樣一對矛盾體,本文來聊聊這個話題。
什么是過采樣?
在信號處理中,過采樣是指以明顯高于奈奎斯特速率的采樣頻率對信號進行采樣。從理論上講,如果以奈奎斯特速率或更高的速率進行采樣,則可以完美地重建帶寬受限的信號。奈奎斯特頻率定義為信號帶寬的兩倍。過采樣能夠提高分辨率和信噪比SNR,并且通過放寬抗混疊濾波器的性能要求,有助于避免混疊和相位失真。
在很多項目應用中,需要測量信號的動態范圍較大,且需要參數的微小變化。例如,ADC需要測量很大的溫度范圍(比如工業中甚至要求從-200℃~500℃),但仍要求系統對小于1度的變化做出響應。常見的單片機片上ADC位數為12位,如要實現高于12位分辨率要怎么做呢?我們知道奈奎斯特-香農采樣定理可知:


或許你會問,常規的應用都是過采樣,怎么也沒見分辨率提高了呀?如果僅僅過采樣,要實現更高分辨率顯然是不夠的,那么要怎么利用過采樣實現更高的分辨率呢?要知道所采用的ADC硬件核分辨率是固定的,難道還會變不成?
過采樣提高分辨率
如果對一模擬信號,采用過采樣,然后再進行一定的軟件后處理,理論上是可以得到更高分辨率的:

為增加有效位數(ENOB :effective number of bits),對信號進行過采樣,所需的過采樣率可以由下面公式確定(省略理論推導,過于枯燥):

具體怎么做呢?
首先將256個連續采樣累加
然后將總數除以16(或將總數右移4位)。該過程通常稱為抽取,也即將速率采樣。
在類似進行下一次16位樣本處理
注意:用于累積過采樣數據并執行除法抽取數據類型必須具有足夠的字節寬度,以防止溢出和截斷錯誤。比如這里累積和可以采樣32位無符號整型。

這個公式沒必要去記,用到的時候參考計算一下即可。從公式中可看出,要提升一個模數轉換器的理論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和測量分辨率。
過采樣和加和抽取可以改善白噪聲的信噪比。
責任編輯:haq
-
單片機
+關注
關注
6076文章
45495瀏覽量
670375 -
adc
+關注
關注
100文章
7511瀏覽量
555978 -
編程
+關注
關注
90文章
3716瀏覽量
97188
發布評論請先 登錄
佛瑞亞海拉與恩智浦在高分辨率雷達技術領域展開合作
中科天機向全球共享中國區1公里高分辨率氣象融合數據
DLP9500:高分辨率空間照明調制的理想之選
深入解析DLP9000XUV DMD:高分辨率UV調制的理想之選
DLPC7540高分辨率控制器:技術解析與設計指南
DLPC4420 DLP顯示控制器:高分辨率顯示的理想之選
探秘DLP991UUV:高分辨率數字微鏡器件的卓越應用與設計要點
DLPC8445、DLPC8445V和DLPC8455高分辨率控制器深度解析
分辨率對于模擬到數字轉換器有什么重要性
極細同軸線束是如何提升高分辨率成像的穩定性與清晰度的?
聚徽廠家工業液晶屏的高分辨率成像技術揭秘
分辨率 vs 噪聲 —— ADC的挑戰
LT8722如何實現高分辨率的脈沖?
普源精電RIGOL推出MHO2000系列高分辨率示波器
普源精電RIGOL推出MHO2000系列高分辨率數字示波器 內置函數發生器
單片機內置ADC實現高分辨率采樣?
評論