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.

TM4C1294中ADC接口采样问题

通过配置好ADC接口后,用查询或中断方式进行采样,但是采样的值跟实际的值相差大概1.2倍左右。是初始化程序问题还是哪里需要做进一步设置?

初始化代码:

void ADC0Init(void)
{

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_3);

ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V);

ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0);

ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_CH0);

ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END);

ADCSequenceEnable(ADC0_BASE, 1);

// ADCIntEnable(ADC0_BASE,1);
//
// IntEnable(INT_ADC0SS1);

ADCIntClear(ADC0_BASE, 1);
}

查询采样代码:

uint32_t *GetSampleADc(void)
{
uint32_t pui32ADC0Value[2] = {0};
uint32_t *ADC0Value = &pui32ADC0Value[0];

ADCProcessorTrigger(ADC0_BASE, 1);

while(!ADCIntStatus(ADC0_BASE, 1, false))
{
}

ADCIntClear(ADC0_BASE, 1);

ADCSequenceDataGet(ADC0_BASE, 1, pui32ADC0Value);

SysCtlDelay(g_ui32SysClock / 12);

return ADC0Value;
}

  • 只要数字不跳动,就默认是采集结果正确。至于和实际差1.2倍,你可以采集下GND和VCC电压,看看是怎么回事,GND和VCC是否准确呢?

  • 数字倒很稳定,VCC与GND之间的电压是3.28V,VDDC是单独接了3.3V的LDO,电压也在3.28V左右,我查了电压,都符合芯片手册里面的使用要求范围。我一开始以为是查询方式造成的,结果用中断方式,结果是一样的。

  • 我意思是你用AD直接连接GND和VCC,分别读取数据,看看读数误差也是1.2倍么

  • 我试了直接接VCC,读取的值与实际的值也差不多是成1.2倍的关系,这时我配置的问题还是存在bug?

  • 这个问题就不好说了,接VCC的话,最大读数是AD满值的话,就认为是没有问题的。你接VCC时候的读数是多少呢?AD最大值/1.2么?