ADC 使用相關(guān)注意事項(xiàng)以及常見問題
? ? ? ?賽元的大部分芯片都具有 ADC 功能,其中 92F 系列大部分芯片的 ADC 有兩個(gè)基準(zhǔn)電 壓可以選擇,VDD 和內(nèi)部 2.4V,內(nèi)部 2.4V 要求的芯片供電電壓為 2.9V 以上,低于 2.9V 內(nèi) 部 2.4V 無 法 保 證 穩(wěn) 定 ; 95F 系 列 芯 片 的 ADC 有 三 個(gè) 基 準(zhǔn) 電 壓 可 以 選 擇 , VDD/2.048V/1.024V,內(nèi)部 2.048V 要求芯片供電電壓在 2.7V 以上,內(nèi)部 1.024V 要求芯片 供電電壓在 2.4V 以上,低于供電電壓限制,內(nèi)部參考電壓的值會無法保證穩(wěn)定;SC92F859X 系列芯片的 ADC 基準(zhǔn)電壓與 95F 系列芯片一致。?
? ? ? ?此文檔主要對 ADC 使用過程中常見的問題以及相關(guān)注意事項(xiàng)進(jìn)行說明,包含以下幾個(gè)內(nèi)容:
1、ADC 采樣電路注意事項(xiàng);?
2、ADC 多通道轉(zhuǎn)換注意事項(xiàng);?
3、怎樣改善 ADC 的采樣誤差;?
4、如何使用 ADC 檢測電源電壓;?
5、加入 ADC 檢測功能之后,出現(xiàn)程序跑死的現(xiàn)象是什么原因;?
6、ADC 采樣值如何計(jì)算;?
7、ADC 測量電壓的范圍是多少。?
以下為具體內(nèi)容:?
1、ADC 采樣電路注意事項(xiàng)?
? ? ? ?ADC 采樣口需要在靠近管腳處加 103 電容,ADC 轉(zhuǎn)換需要讓電源電壓穩(wěn)定,所以在使用 ADC 功能時(shí),請?jiān)诳拷?IC 的 VCC 和 GND 處加 104 電容,以保證轉(zhuǎn)換結(jié)果準(zhǔn)確。?
2、ADC 多通道轉(zhuǎn)換注意事項(xiàng)?
? ? ? ?賽元芯片大多數(shù)型號擁有多路 ADC 通道,但每次轉(zhuǎn)換只能轉(zhuǎn)換一個(gè)通道,若想實(shí)現(xiàn)多路 通道的ADC信號的采集,需要在一路ADC通道轉(zhuǎn)換完畢后將轉(zhuǎn)換口切換至另一路ADC, 如此反復(fù)以實(shí)現(xiàn)多通道的 ADC 轉(zhuǎn)換。若在 ADC 通道切換后馬上進(jìn)行 AD 轉(zhuǎn)換,通道口 線上的電壓可能存在不穩(wěn)定的現(xiàn)象,在切換通道后轉(zhuǎn)換的第一個(gè)值可能會存在異常,建議 用戶對某個(gè)通道做連續(xù)的多次采集和轉(zhuǎn)換后,將切換通道后轉(zhuǎn)換的第一個(gè)值或幾個(gè)值去 除,或?qū)⒆畲笾导白钚≈等コ?,再將剩余?AD 轉(zhuǎn)換值求平均值得到采集結(jié)果。?
使用示例如下:?
unsigned int ADC_Value0,ADC_Value1,ADC_Value2;?
unsigned int ADC_Convert(void)?
{?
unsigned int Tad=0,MinAd=0x0fff,MaxAd=0x0000,TempAdd=0;?
unsigned char t=0;?
for(t=0;t<10;t++)?
{?
ADCCON |= 0X40;? ? ? ? ? ? ? ? ? ? ?//開始 ADC 轉(zhuǎn)換?
while(!(ADCCON&0x20));? ? ? ? ? //等待 ADC 轉(zhuǎn)換完成,具體轉(zhuǎn)換完成標(biāo)志位請參照規(guī)格。
?ADCCON&=~(0X20);? ? ? ? ? ? ? ?//清中斷標(biāo)志位?
Tad = ((unsigned int)ADCVH<<4)+(ADCVL>>4);? ? ? ? ? //取得一次轉(zhuǎn)換值?
if (Tad>MaxAd)?
{?
MaxAd=Tad;? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?//獲得當(dāng)前的最大值?
}?
if (Tad<MinAd)
{?
MinAd=Tad;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲得當(dāng)前的最小值?
}?
TempAdd+=Tad;? ? ? ? ? ? ? ? ? ? ? ? ?//轉(zhuǎn)換值累加?
}?
TempAdd-=MinAd;? ? ? ? ? ? ? ? ? ? ? //去掉最小值?
TempAdd-=MaxAd;? ? ? ? ? ? ? ? ? ? //去掉最大值?
TempAdd>>=3;? ? ? ? ? ? ? ? ? ? ? ? ?//求平均值?
return(TempAdd);?
}?
void ADC_channel(unsigned char channel)?
{?
ADCCON = ADCCON &0xE0| channel;? ? ? ? ? //ADC 輸入選擇為 ADCchannel 口??
}?
void ADC_Multichannel()?
{?
ADCCFG0 = 0x07;? ? ? ? ? ? //設(shè)置 AIN0、AIN1、AIN2 設(shè)置為 ADC 口,并自動將上拉電阻移除。?
ADCCON |= 0X80;? ? ? ? ? ? //開啟 ADC 模塊電源?
ADC_channel(0);? ? ? ? ? ? ? //ADC 入口切換至 AIN0 口?
ADC_Value1 = ADC_Convert();? ? ? ? ? ?//啟動 ADC 轉(zhuǎn)換,獲得轉(zhuǎn)換值?
ADC_channel(1);? ? ? ? ? ? ? ?//ADC 入口切換至 AIN1 口?
ADC_Value1 = ADC_Convert();? ? ? ? ? ? ?//啟動 ADC 轉(zhuǎn)換,獲得轉(zhuǎn)換值?
ADC_channel(2);? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? //ADC 入口切換至 AIN2?
ADC_Value2 = ADC_Convert();? ? ? ? ? ? ?//啟動 ADC 轉(zhuǎn)換,獲得轉(zhuǎn)換值
3、怎樣改善 ADC 的采樣誤差?
使用 ADC 采樣實(shí)際值和理論值達(dá)到幾百甚至上千個(gè)值,可以從以下幾個(gè)方面進(jìn)行檢查:?
1) 查看 ADC 初始化是否正確,ADC 電源是否提前打開,AD 口的選擇除了需要設(shè)置 選擇 ADC 采樣通道以外,還要有 ADC 端口設(shè)置寄存器需要將 ADC 采樣口所在的 IO 口設(shè)置為 ADC 輸入口,檢查 ADC 采樣口選擇是否正確;?
2) ADC 轉(zhuǎn)換完成標(biāo)志位判斷錯(cuò)誤,或者是 bit 位搞錯(cuò),導(dǎo)致啟動 ADC 轉(zhuǎn)換后沒有等 待轉(zhuǎn)換完成就進(jìn)行了 ADC 值的讀取,賽元各系列芯片的 ADC 轉(zhuǎn)換完成的標(biāo)志位 不是全部都在同一個(gè) bit 位的,需要注意,大多數(shù)集中在 ADCCON 寄存器的 bit4 和 bit5,具體需要查看規(guī)格書;
3) ADC 檢測需要將對應(yīng)的 IO 口設(shè)置為輸入模式,同時(shí)需要設(shè)置為 ADC 輸入口,設(shè) 為輸出模式的話在進(jìn)行 AD 口切換時(shí)有可能導(dǎo)致 ADC 值偏差。?
使用 ADC 采樣實(shí)際值和理論值相差幾十到一兩百個(gè)值時(shí),可以從以下幾個(gè)方面進(jìn)行檢查:?
1) 是否有切換 ADC 通道或者是參考電壓,建議切換后延時(shí)一下等待電路穩(wěn)定后再進(jìn) 行 ADC 轉(zhuǎn)換;?
2) 輸入電壓或者是芯片供電電壓不穩(wěn)定,可以實(shí)驗(yàn)一下看切為內(nèi)部參考電壓 ADC 采 樣值是否有改善;?
3) 分壓電阻太大,導(dǎo)致 ADC 采樣值和理論值有偏差,可以減小分壓電阻實(shí)驗(yàn)是否有 改善,分壓電阻超過 1MΩ 就會有影響;?
4) VDD 做參考時(shí),VDD 電壓有較大波動,或者是輸入電壓有較大波動,或者是 VDD 電壓和輸入電壓波動的頻率不一樣,都會導(dǎo)致 ADC 采樣值不準(zhǔn),可以將芯片電源 管腳上的 104 電容盡量靠近芯片管腳擺放,或?qū)?ADC 采用管腳上的電容值減小, 使電源電壓的波動與采樣電壓的波形頻率與幅度盡量保持一致。?
4、如何使用 ADC 檢測電源電壓?
賽元芯片的 ADC 通道選擇中提供了測量 1/4VDD 的通道用于測量電源電壓,將 ADC 采 樣通道設(shè)置為測量 1/4VDD 的通道,92F 系列芯片選擇內(nèi)部 2.4V 參考電壓,95F 系列芯 片選擇內(nèi)部 2.048V 或 1.024V 參考電壓,獲取的 ADC 采樣值就是 1/4VDD 的采樣值,所 得到的的 ADC 采樣值通過反算可以得到電源電壓的 1/4,再乘以 4 就可以得到電源電壓, 具體的 ADC 采樣通道設(shè)置可查看對應(yīng)芯片的規(guī)格書。?
5、加入 ADC 檢測功能之后,出現(xiàn)程序跑死的現(xiàn)象是什么原因?
不同型號的芯片,ADC 轉(zhuǎn)換完成的標(biāo)志可能不同,有的在 ADCCON 寄存器的 bit4,有的 在 ADCCON 寄存器的 bit5,請檢查 ADC 轉(zhuǎn)換完成標(biāo)志位是否操作有誤,程序中一直在 等待轉(zhuǎn)換完成的標(biāo)志,導(dǎo)致出現(xiàn)程序跑死的現(xiàn)象。?
6、ADC 采樣值如何計(jì)算?
ADC 采樣值的計(jì)算方式為:(被采樣電壓/參考電壓)*滿偏值,其中被采樣電壓為 ADC 通 道檢測的實(shí)際電壓值,參考電壓為用戶所設(shè)置的參考電壓值,92F 系列芯片的參考電壓可 選 VDD 或內(nèi)部 2.4V,95F 系列的參考電壓可以選擇 VDD,內(nèi)部 2.048V 和內(nèi)部 1.024V, 滿偏值為 ADC 采樣值能達(dá)到的最大值,例如 12 位的 ADC 滿偏值是 4095,假如使用 12bit 的 ADC,選擇內(nèi)部 2.4V 為參考電壓,ADC 采樣通道上的電壓值為 2V,那么得到 的采樣值為:(2/2.4)*4096=3413。?
7、ADC 測量電壓的范圍是多少?
賽元芯片使用 ADC 功能可以檢測的電壓范圍與所選擇的 ADC 基準(zhǔn)電壓有關(guān),電壓檢測 范圍為 0V 到參考電壓,不同系列的芯片,ADC 參考電壓不同,用戶需要根據(jù)被測量電壓 的電壓值范圍選擇合適的參考電壓:?
1) 92F 系列芯片的 ADC 有兩個(gè)基準(zhǔn)電壓可以選擇,VDD 和內(nèi)部 2.4V,內(nèi)部 2.4V 要 求的芯片供電電壓為 2.9 以上,低于 2.9V 內(nèi)部 2.4V 無法保證穩(wěn)定的 2.4V;?
2) 95F 系列芯片的 ADC 有三個(gè)基準(zhǔn)電壓可以選擇 VDD/2.048V/1.024V,內(nèi)部 2.048V 要求芯片供電電壓在 2.7V 以上,內(nèi)部 1.024V 要求芯片供電電壓在 2.4V 以上,低 于供電電壓限制內(nèi)部參考電壓的值會無法保證穩(wěn)定;?
3) 目前賽元的芯片還不能選擇外部電壓做 ADC 基準(zhǔn)電壓。
