This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求助:TMS320F2803xADC使用外部基准源,VrefLO采样不准

TMS320F2803x ADC采用3.0V外部基准源,VrefLO与Vssa连接到AGND,Vdda接3.3V电源,VrefHI接3.0V基准源,3.0V电源由3.3V电源经过REF3030得到。

CPU主频为60MHz,

ADC时钟频率为60MHz

采样保持时间为25个ADC时钟周期

ADC时钟及电源配置如下:

void InitAdc(void)
{
extern void DSP28x_usDelay(Uint32 Count);

EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
(*Device_cal)();
EDIS;

EALLOW;
AdcRegs.ADCCTL1.bit.ADCREFSEL = 1; // Select external BG
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power ADC BG
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power reference
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADC
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADC
EDIS;

DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
}

ADC通道配置如下:

void ConfigADC(void)
{
InitAdc(); //启动模拟电路、带隙和参考源,使能ADC,并选择外部参考电压
AdcOffsetSelfCal();

EALLOW;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 0; // ADCINT1 trips after AdcResults latch
AdcRegs.ADCCTL1.bit.VREFLOCONV = 1; // ADCINB5启动低参考电压信号

AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; // 不允许采样和转换重叠
AdcRegs.ADCCTL2.bit.CLKDIV2EN = 0; // ADC时钟分频=0,使用系统时钟60MHz

AdcRegs.ADCINTFLGCLR.all = 0xFFFF; // 清除ADC中断标志位
AdcRegs.ADCINTOVFCLR.all = 0xFFFF; // 清除ADC中断溢出位

AdcRegs.INTSEL1N2.all = 0;
AdcRegs.INTSEL3N4.all = 0;
AdcRegs.INTSEL5N6.all = 0;
AdcRegs.INTSEL7N8.all = 0;
AdcRegs.INTSEL9N10.all = 0;

AdcRegs.ADCSAMPLEMODE.all = 0x0000; // 顺序采样
AdcRegs.ADCINTSOCSEL1.all = 0;
AdcRegs.ADCINTSOCSEL2.all = 0;

AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 1; // SOCx的触发源选择CPU Timer0
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 1;

AdcRegs.ADCSOC0CTL.bit.ACQPS = 24; // 设置SOCx的采样保持时间为 n+1个ADC时钟周期
AdcRegs.ADCSOC1CTL.bit.ACQPS = 24;

AdcRegs.ADCSOC0CTL.bit.CHSEL = 13; // SOC0的转换通道为ADCINB5--外部参考低电压
AdcRegs.ADCSOC1CTL.bit.CHSEL = 13; // SOC1的转换通道为ADCINB5--外部参考低电压

AdcRegs.ADCSOCFRC1.all = 0xFFFF; // 启动SOCx转换

EDIS;
}

在定时器中断中读取ADC转换结果:

vol1 = AdcResult.ADCRESULT0;

vol2 = AdcResult.ADCRESULT1;

原则上vol1与vol2的值都应接近0,但实际得到的数据接近800,这个是不是ADC哪里没配置好啊?

求各位大神指点啊!!!!!!