TI中文支持网
TI专业的中文技术问题搜集分享网站

28377D的ADC16位采样问题

根据controlsuite中的adc_soc_software编写程序,ADCA配置为16位,ADCB、ADCC、ADCD配置成为12位,12位的程序result精度稳定程度还行可以接受,ADCA的16位差分输入0Vresult结果应该是65536/2=32768,可我这里数据读出来是34096,基准电平3V,P脚和N脚对地同为2.93V,请问16位ADC使用和配置和12位有什么不一样么?

ke xu4:

EALLOW;

AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4

AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);//write configurations

AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;//Set pulse positions to late

AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;//power up the ADCs

DELAY_US(1000);

//ADCIN1P&ADCIN1N AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert pin A0&A1 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 63; //sample window is acqps +                                                                              //1 SYSCLK cycles                                                                              //320ns //ADCIN2P&ADCIN2N AdcaRegs.ADCSOC1CTL.bit.CHSEL = 2; //SOC1 will convert pin A2&A3 AdcaRegs.ADCSOC1CTL.bit.ACQPS = 63; //sample window is acqps +                                                                              //1 SYSCLK cycles                                                                              //320ns //ADCIN3P&ADCIN3N AdcaRegs.ADCSOC2CTL.bit.CHSEL = 4; //SOC2 will convert pin A4&A5 AdcaRegs.ADCSOC2CTL.bit.ACQPS = 63; //sample window is acqps +                                                                              //1 SYSCLK cycles                                                                              //320ns //ADCIN4P&ADCIN4N AdcaRegs.ADCSOC3CTL.bit.CHSEL = 14; //SOC3 will convert pin A14&A15 AdcaRegs.ADCSOC3CTL.bit.ACQPS = 63; //sample window is acqps +                                                                              //1 SYSCLK cycles                                                                              //320ns

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 3; //end of SOC1 will set INT1 flag AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared

EDIS;

以上为配置函数,以下为main主循环函数

//start conversions immediately via software, ADCA

 AdcaRegs.ADCSOCFRC1.all = 0x000F; //SOC0 ~ SOC3

//wait for ADCA to complete, then acknowledge flag

while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0); AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

//store results

AdcaResult0 = AdcaResultRegs.ADCRESULT0; AdcaResult1 = AdcaResultRegs.ADCRESULT1; AdcaResult2 = AdcaResultRegs.ADCRESULT2; AdcaResult3 = AdcaResultRegs.ADCRESULT3;

读出来的数据和以上所说的问题一样,请问这个3V / 65536 * (34096-32768) = 60mV的误差是因为我程序配置的问题吗?我在硬件管脚上量查分电压为4mV

根据controlsuite中的adc_soc_software编写程序,ADCA配置为16位,ADCB、ADCC、ADCD配置成为12位,12位的程序result精度稳定程度还行可以接受,ADCA的16位差分输入0Vresult结果应该是65536/2=32768,可我这里数据读出来是34096,基准电平3V,P脚和N脚对地同为2.93V,请问16位ADC使用和配置和12位有什么不一样么?

Jason Wu4:

回复 ke xu4:

既然有相近的转换结果,就说明ADC配置不会有太大问题,可以尝试调整采样窗口大小试试,主要原因还是外部输入的模拟信号可能存在差异。

赞(0)
未经允许不得转载:TI中文支持网 » 28377D的ADC16位采样问题
分享到: 更多 (0)