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.
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哪里没配置好啊?
求各位大神指点啊!!!!!!