tft每日頭條

 > 圖文

 > 單片機自帶adc和外部adc

單片機自帶adc和外部adc

圖文 更新时间:2024-12-23 14:54:48

相信ADC的應用或多或少都會用到,在很多場合都有分辨率要求,要實現較高分辨率時,第一時間會想到采用一個較高位數的外置ADC去實現。

可是高分辨率外置ADC往往價格都不便宜,這就帶來一對矛盾:高指标與低成本。其實利用單片機片上的ADC利用過采樣技術就能很好的解決這樣一對矛盾體,本文來聊聊這個話題。

什麼是過采樣?

在信号處理中,過采樣是指以明顯高于奈奎斯特速率的采樣頻率對信号進行采樣。從理論上講,如果以奈奎斯特速率或更高的速率進行采樣,則可以完美地重建帶寬受限的信号。奈奎斯特頻率定義為信号帶寬的兩倍。過采樣能夠提高分辨率和信噪比SNR,并且通過放寬抗混疊濾波器的性能要求,有助于避免混疊和相位失真。

在很多項目應用中,需要測量信号的動态範圍較大,且需要參數的微小變化。例如,ADC需要測量很大的溫度範圍(比如工業中甚至要求從-200℃~500℃),但仍要求系統對小于1度的變化做出響應。常見的單片機片上ADC位數為12位,如要實現高于12位分辨率要怎麼做呢?我們知道奈奎斯特-香農采樣定理可知:

其中:

  • 為輸入待采樣信号最高頻率
  • 為奈奎斯特頻率。

如果實際采樣頻率高于奈奎斯特頻率,即為過采樣。那麼低于奈奎斯特采樣頻率進行采樣就稱為欠采樣,如下圖:

單片機自帶adc和外部adc(單片機内置ADC如何實現高分辨率采樣)1

或許你會問,常規的應用都是過采樣,怎麼也沒見分辨率提高了呀?如果僅僅過采樣,要實現更高分辨率顯然是不夠的,那麼要怎麼利用過采樣實現更高的分辨率呢?要知道所采用的ADC硬件核分辨率是固定的,難道還會變不成?

過采樣提高分辨率

如果對一模拟信号,采用過采樣,然後再進行一定的軟件後處理,理論上是可以得到更高分辨率的:

單片機自帶adc和外部adc(單片機内置ADC如何實現高分辨率采樣)2

為增加有效位數(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!

到底怎麼實現呢?

這裡以僞代碼的方式給出編程思路:

voidinit_adc(void) { /*配置ADC的采樣率為過采樣率連續中斷模式*/ } voidstart_adc(void) { /*控制ADC啟動采樣*/ } /*不同的開發平台中斷函數寫法略有差異,比如51需要指定向量*/ /*OVERSAMPLE_FACTOR=4^RSHIFT_BITS下面兩個宏一起修改*/ #defineRSHIFT_BITS(4) #defineOVERSAMPLE_FACTOR(256) staticunsignedshortadc_result=0U; voidadc_isr(void) { staticunsignedshortadc_index=OVERSAMPLE_FACTOR; staticunsignedintaccumulator=0U; /*ADC_REGADC轉換結果寄存器,不同平台名稱不同*/ 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和測量分辨率。
  • 過采樣和加和抽取可以改善白噪聲的信噪比。

------------ END -----------

免責聲明:本文系網絡轉載,版權歸原作者所有。如涉及作品版權問題,請與我聯系,我将及時删除内容。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved