標(biāo)題: 怎樣用stm32(F103系列是12位ADC)實(shí)現(xiàn)14位精度的AD采樣? [打印本頁(yè)]
作者: 51黑黑黑 時(shí)間: 2016-2-23 17:33
標(biāo)題: 怎樣用stm32(F103系列是12位ADC)實(shí)現(xiàn)14位精度的AD采樣?
重點(diǎn)在最后一段(看懂就行了)
可采用過(guò)采樣技術(shù)。過(guò)采樣技術(shù)是一種以犧牲采樣速度來(lái)提高ADC分辨率的技術(shù)。如
果STM32的12位AD,每秒采集10個(gè)數(shù)據(jù),即采樣率為:10/秒。根據(jù)過(guò)采樣技術(shù),每提高1位ADC分辨率,需要增加4倍的采樣率。從12位AD提
高到14位AD,一共提高了2位,所以需要把采樣率提高2
* 2 * 2 * 2 =
16倍。原來(lái)在100mS之內(nèi)只采集一個(gè)數(shù)據(jù),現(xiàn)在需要在100mS之內(nèi)采集16個(gè)數(shù)據(jù)了。然后,我們把這16個(gè)數(shù)據(jù)累加,再把累加值右移2位,這樣就得
到STM32過(guò)采樣之后的14位ADC。
需要注意的是,過(guò)采樣技術(shù)會(huì)限制輸入信號(hào)的頻率。根據(jù)采樣定律,采樣率最少是輸入信號(hào)的2倍才能將信號(hào)還原。當(dāng)需要提高n位的ADC分辨率時(shí),采樣率又得
提高4*n倍。STM32的12位ADC的最高采樣率為1MHz,如果要達(dá)到14位的ADC分辨率,那么輸入信號(hào)的頻率就不能超過(guò):1M/2/15
= 31.25KHz。
最后提醒:分辨率的提升到14位并不是精度也能提升14位。我自己試過(guò)提升到16位的分辨率,但是精度大概只有13、14位的樣子。
STM32的精度不可能提高的太多,要提高只能在分辨率上想辦法,提高分辨率間接提高精度,但是這是由一個(gè)度的,跟你的要采樣的外部信號(hào)的頻率、CPU的處理速度等等都是有關(guān)系的。
過(guò)采樣只能提高分辨率,精度不是隨便可以提高的。要不然0832不就能替代所有的AD芯片了。
精度通常是指準(zhǔn)確度。指測(cè)量值與實(shí)際值的差異性。影響精度的因素很多。如分辨力,線性度等。
分辨率可以通過(guò)分辨力來(lái)理解。8bit的分辨力為1/256,10bit時(shí)為1/1024,但實(shí)際還要通過(guò)量程轉(zhuǎn)換成具體的值,不能沒(méi)有量綱或單位(量綱與單位是不同的概念)。
分辨率通常用百分比來(lái)表示,而分辨力則用絕對(duì)值來(lái)表示。“5/256
=0.01953125V”指的是分辨力而不是分辨率。而這樣的分辨能力僅僅是指理論能力而不是實(shí)際能力。因?yàn)閷?shí)際能力還要包括非線性因素引起“干擾”。
總結(jié):分辨率容易提升到24位,但是精度能到24位的要求就很高了。市面上的16、24位AD轉(zhuǎn)換芯片一般指的是分辨率,而不是精度。
STM32的adc如果要使用在精度要求高的地方,如3級(jí)電子稱、精準(zhǔn)計(jì)量?jī)x表的話,stm32就比較勉強(qiáng)了。建議換外置的ADC。
到底怎樣使用過(guò)采樣法來(lái)提高AD采樣精度?
以下的思路使用于任何單片機(jī):
比如設(shè)個(gè)定時(shí)器每個(gè)10us觸發(fā)下STM32的ADC的采用,采到256個(gè)后將256個(gè)數(shù)據(jù)累加
求和,如果當(dāng)12位ADC用就除以256,13位用除以128,14位用除以64,15位用除以32,16位用除以16。得到結(jié)果后存放緩沖區(qū)中,再增加
一段軟件濾波程序就OK了!
例如下面這段程序:
#define VccTmpAdcVal 16384//14位ADC
VREF_VAL=VccVal*ADC_FilterChannel[inrefv]/VccTmpAdcVal ;
//內(nèi)部參考電壓對(duì)應(yīng)的電壓值 VREF_VAL=3.3*內(nèi)部基準(zhǔn)電壓的十六進(jìn)制ADC值/16384
void FileterADC(void)
{
u8 i,j,k;
u32 sum;
u16
temp;
vu16 AD_Value_T[N][M];
for(i=0; i
for(j=0; j
{
AD_Value_T[j][i]=AD_Value[j][i];
}
for(k=0; k
for(i=N; i>0; i--)//博客不顯示出來(lái) 一定要顯示出來(lái)這句
for(j=0; j<=i;
j++)
{
if(AD_Value_T[j][k] >
AD_Value_T[j+1][k] )
{
temp=AD_Value_T[j][k] ;
AD_Value_T[j][k] =AD_Value_T[j+1][k];
AD_Value_T[j+1][k]=temp;
}
}
for(i=0; i
{
for(j=30,sum=0; j<70; j++)
{
sum+=AD_Value_T[j][i] ;
//把第一列的數(shù)據(jù)從第30位到第69位共40位 求和
}
ADC_FilterChannel[i]=sum/10;
//取平均//當(dāng)14位ADC使用時(shí),累加和要除以(采樣個(gè)數(shù)右移兩位)//sum/(40>>2)
}
}
作者: 1113634577 時(shí)間: 2018-11-24 17:11
很好的提升分辨力方法,學(xué)習(xí)了
作者: laigs218 時(shí)間: 2018-11-27 09:23
個(gè)人經(jīng)驗(yàn)先加軟件濾波程序會(huì)比好。
作者: 1xiaosun 時(shí)間: 2020-3-3 12:05
精度是不能提高的,你說(shuō)的提高到13-14位我猜是指穩(wěn)定的分辨率
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |