[導(dǎo)讀] 相信ADC的應(yīng)用或多或少都會(huì)用到,在很多場(chǎng)合都有分辨率要求,要實(shí)現(xiàn)較高分辨率時(shí),第一時(shí)間會(huì)想到采用一個(gè)較高位數(shù)的外置ADC去實(shí)現(xiàn)。 可是高分辨率外置ADC往往價(jià)格都不便宜,這就帶來(lái)一對(duì)矛盾: 高指標(biāo)與低成本。 其實(shí)利用單片機(jī)片上的ADC利用過(guò)采樣技術(shù)就能很好的解決這樣一對(duì)矛盾體,本文來(lái)聊聊這個(gè)話題。
什么是過(guò)采樣?
在信號(hào)處理中,過(guò)采樣是指以明顯高于奈奎斯特速率的采樣頻率對(duì)信號(hào)進(jìn)行采樣。從理論上講,如果以奈奎斯特速率或更高的速率進(jìn)行采樣,則可以完美地重建帶寬受限的信號(hào)。奈奎斯特頻率定義為信號(hào)帶寬的兩倍。過(guò)采樣能夠提高分辨率和信噪比SNR,并且通過(guò)放寬抗混疊濾波器的性能要求,有助于避免混疊和相位失真。
在很多項(xiàng)目應(yīng)用中,需要測(cè)量信號(hào)的動(dòng)態(tài)范圍較大,且需要參數(shù)的微小變化。例如,ADC需要測(cè)量很大的溫度范圍(比如工業(yè)中甚至要求從-200℃~500℃),但仍要求系統(tǒng)對(duì)小于1度的變化做出響應(yīng)。常見(jiàn)的單片機(jī)片上ADC位數(shù)為12位,如要實(shí)現(xiàn)高于12位分辨率要怎么做呢?我們知道奈奎斯特-香農(nóng)采樣定理可知:
或許你會(huì)問(wèn),常規(guī)的應(yīng)用都是過(guò)采樣,怎么也沒(méi)見(jiàn)分辨率提高了呀?如果僅僅過(guò)采樣,要實(shí)現(xiàn)更高分辨率顯然是不夠的,那么要怎么利用過(guò)采樣實(shí)現(xiàn)更高的分辨率呢?要知道所采用的ADC硬件核分辨率是固定的,難道還會(huì)變不成?
過(guò)采樣提高分辨率
如果對(duì)一模擬信號(hào),采用過(guò)采樣,然后再進(jìn)行一定的軟件后處理,理論上是可以得到更高分辨率的:
為增加有效位數(shù)(ENOB :effective number of bits),對(duì)信號(hào)進(jìn)行過(guò)采樣,所需的過(guò)采樣率可以由下面公式確定(省略理論推導(dǎo),過(guò)于枯燥):
具體怎么做呢?
首先將256個(gè)連續(xù)采樣累加
然后將總數(shù)除以16(或?qū)⒖倲?shù)右移4位)。該過(guò)程通常稱為抽取,也即將速率采樣。
在類(lèi)似進(jìn)行下一次16位樣本處理
注意:用于累積過(guò)采樣數(shù)據(jù)并執(zhí)行除法抽取數(shù)據(jù)類(lèi)型必須具有足夠的字節(jié)寬度,以防止溢出和截?cái)噱e(cuò)誤。比如這里累積和可以采樣32位無(wú)符號(hào)整型。
這個(gè)公式?jīng)]必要去記,用到的時(shí)候參考計(jì)算一下即可。從公式中可看出,要提升一個(gè)模數(shù)轉(zhuǎn)換器的理論SNR的一種可行方案可以通過(guò)提升采樣位數(shù),但是需要注意的是這里的信噪比是度量模數(shù)轉(zhuǎn)換器本身的,就一個(gè)真實(shí)系統(tǒng)的信噪比還與整個(gè)信號(hào)鏈相關(guān)!
從上式中不難算出,12位ADC的理論SNR極限值為74dB,而通過(guò)過(guò)采樣提升4位分辨率后,其SNR理論極限提高至96 dB!
到底怎么實(shí)現(xiàn)呢?
這里以偽代碼的方式給出編程思路:
void init_adc(void)
{
/*配置ADC的采樣率為過(guò)采樣率連續(xù)中斷模式*/
}
void start_adc(void)
{
/*控制ADC啟動(dòng)采樣*/
}
/*不同的開(kāi)發(fā)平臺(tái)中斷函數(shù)寫(xiě)法略有差異,比如51需要指定向量 */
/*OVERSAMPLE_FACTOR=4^RSHIFT_BITS 下面兩個(gè)宏一起修改 */
#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轉(zhuǎn)換結(jié)果寄存器,不同平臺(tái)名稱不同*/
accumulator += ADC_REG;
adc_index--;
if( adc_index==0 )
{
/* 加和按因子抽取 */
adc_result = accumulator》》RSHIFT_BITS;
accumulator = 0;
adc_index = OVERSAMPLE_FACTOR;
}
}
該方案有一個(gè)缺陷,就是每次ADC中斷都需要CPU參與,在過(guò)采樣率很高的情況下,上述方案消耗很多CPU資源,那么如果單片機(jī)內(nèi)存資源足夠的情況下可以考慮采用DMA模式,采集很多數(shù)據(jù)并將數(shù)據(jù)暫存下來(lái),然后再做累加平均抽取。這是空間換時(shí)間的策略的體現(xiàn)。這個(gè)編代碼也很容易,只需要申請(qǐng)一片內(nèi)存區(qū),內(nèi)存區(qū)的大小可以定為256的倍數(shù),這是因?yàn)樵谔嵘?位分辨率情況下,一個(gè)16位的輸出樣本需要256個(gè)12位樣本。
總結(jié)一下
在成本受限的情況下,可以通過(guò)單片機(jī)片內(nèi)ADC過(guò)采樣以及累積抽取的技術(shù)來(lái)提升采樣分辨率,這種技術(shù)的特點(diǎn):
可以使用過(guò)采樣和平均來(lái)提高測(cè)量分辨率,而無(wú)需增加昂貴的片外ADC。
過(guò)采樣和加和抽取將以提高CPU利用率和降低吞吐量為代價(jià)來(lái)提高SNR和測(cè)量分辨率。
過(guò)采樣和加和抽取可以改善白噪聲的信噪比。
責(zé)任編輯:haq
-
單片機(jī)
+關(guān)注
關(guān)注
6066文章
44947瀏覽量
648423 -
adc
+關(guān)注
關(guān)注
99文章
6663瀏覽量
548572 -
編程
+關(guān)注
關(guān)注
88文章
3686瀏覽量
94982
發(fā)布評(píng)論請(qǐng)先 登錄
分辨率 vs 噪聲 —— ADC的挑戰(zhàn)

LT8722如何實(shí)現(xiàn)高分辨率的脈沖?
普源精電RIGOL推出MHO2000系列高分辨率示波器

高分辨率示波器的功能與作用:以麥科信MHO6為例
24位或者說(shuō)高分辨率的AD到底有什么用呢?
lvds接口如何實(shí)現(xiàn)高分辨率顯示
過(guò)采樣ADC12以獲得更高分辨率

使用DM642 DSP和THS8200驅(qū)動(dòng)器的高分辨率視頻

利用高分辨率捕獲(HRCAP)進(jìn)行單線數(shù)據(jù)傳輸

高分辨率音頻和傳統(tǒng)音頻區(qū)別

鼎陽(yáng)科技|高分辨率產(chǎn)品增長(zhǎng)39.42%,引領(lǐng)高端市場(chǎng)新浪潮!

什么是高分辨率示波器?它有哪些優(yōu)勢(shì)?
Moritex 5X 高分辨率遠(yuǎn)心鏡頭 助力晶圓檢測(cè)

ADS1282-SP抗輻射加固保障高分辨率Δ-ΣADC數(shù)據(jù)表

評(píng)論