|
我用STC15F2K60S2單片機(jī)做10位AD試驗(yàn),當(dāng)用TL431做電壓基準(zhǔn)時(shí),顯示采集到的電壓時(shí),后兩位一直在跳動(dòng)變化,當(dāng)不用TL431做基準(zhǔn)時(shí),顯示出的數(shù)據(jù)就不跳動(dòng),有可能是什么原因造成的?下面是AD采集的函數(shù)。請各位幫忙分析下原因,謝謝!!
//-------讀ADC結(jié)果:
uint Get_ADC10bitResult (uchar CHA) //channel = 0~7
{
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = 0x60; //ADC轉(zhuǎn)換的速度(0XX0 0000 其中XX控制速度,請根據(jù)數(shù)據(jù)手冊設(shè)置)
_nop_();
ADC_CONTR |= CHA; //選擇A/D當(dāng)前通道
_nop_();
ADC_CONTR |= 0x80; //啟動(dòng)A/D電源
delayms(1); //使輸入電壓達(dá)到穩(wěn)定(1ms即可)
ADC_CONTR = (ADC_CONTR & 0xe0) | 0x08 | CHA;//ADC_CONTR |= 0x08;// //start the ADC //啟動(dòng)A/D轉(zhuǎn)換(0000 1000 令A(yù)DCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while((ADC_CONTR & 0x10) == 0) ; //wait for ADC finish
ADC_CONTR &= ~0x10; //清除ADC結(jié)束標(biāo)志
return (((uint)ADC_RES << 2) | (ADC_RESL & 3));
}
//-----------------電壓轉(zhuǎn)換函數(shù)-----------------
/****************************************************
M=模擬量采樣值,N=基準(zhǔn)電壓源采樣值(本例為2.48V),R=模擬量輸入值(待顯示值)
N=1024*2.48/Vcc;變形后得Vcc=1024*2.48/N; 代入M=1024*R/Vcc;得到M=R*N/2.48;變形后得R=M*2.48/N
4為輸入端分壓比。
******************************************************************/
void transfer(void)
{
Get_ADC10bitResult(0); //通道改變, 先讀一次并丟棄結(jié)果, 讓內(nèi)部的采樣電容的電壓等于輸入值.
N=Get_ADC10bitResult(0); //P1.0口模擬量轉(zhuǎn)換,電壓基準(zhǔn)
Get_ADC10bitResult(1); //通道改變, 先讀一次并丟棄結(jié)果, 讓內(nèi)部的采樣電容的電壓等于輸入值.
M=Get_ADC10bitResult(1); //P1.1口基準(zhǔn)電壓(2.48V)源采樣(轉(zhuǎn)換),采用基準(zhǔn)電壓時(shí)使用
// t1=Get_ADC10bitResult(1)/2.28; //不采用采用基準(zhǔn)電壓時(shí)
t1=(M*248)/N; //輸入模擬量換算并放大100倍,精度0.01; //采用基準(zhǔn)電壓時(shí)
}
|
|