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.

[参考译文] TM4C1292NCPDT:ADC 转换结果的变化

Guru**** 1839620 points
Other Parts Discussed in Thread: EK-TM4C1294XL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/946004/tm4c1292ncpdt-variation-in-adc-conversion-results

器件型号:TM4C1292NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

您好!

我对 ADC 采集数据的可变性有疑问。
使用两个 ADC 引脚、其中高优先级引脚设置为 AIN11、低优先级引脚设置为 AIN10。
有关 ADC 初始化代码和中断处理、请参阅以下内容。

#define ADC_SEQUENCERS0
#define ADC_SEQUENCERS1 1
#define ADC_SEQUENCERS2 2
#define ADC_SEQUENCERS3 3

#define ADC_PRIORITY0 0
#define ADC_PRIORITY1 1
#define ADC_PRIORITY2 2
#define ADC_PRIORITY3 #define

ADC_RATE 25000000u

(void)


SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);

ADCReferenceSet (ADC0_BASE、ADC_REF_INT);

ADCSequenceConfigure (ADC0_BASE、ADC_SEQUENCERS0、ADC_TRIGGER_TIMER、ADC_PRIORITY0);
ADCSequenceStepConfigure (ADC0_BASE、ADC_SEQUENCERS0、0、ADC_CTL_CH11 | ADC_CTL_IE | ADC_CTL_END);

ADCSequenceConfigure (ADC0_BASE、ADC_SEQUENCERS1、ADC_TRIGGER_TIMER、ADC_PRIORITY1);
ADCSequenceStepConfigure (ADC0_BASE、ADC_SEQUENCERS1、0、ADC_CTL_CH10 | ADC_CTL_IE | ADC_CTL_END);

ADCSequenceEnable (ADC0_BASE、ADC_SEQUENCERS0);
ADCIntClear (ADC0_BASE、ADC_SEQUENCERS0);

ADCSequenceEnable (ADC0_BASE、ADC_SEQUENCERS1);
ADCIntClear (ADC0_BASE、ADC_SEQUENCERS1);


MAP_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
MAP_TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);

MAP_TimerConfigure (TIMER0_BASE、TIMER_CFG_A_PERIODICRACASE);
MAP_TimerLoadSet (TIMER0_BASE、TIMER_A、SAMPLE_RATE);

IntMasterEnable();
ADCIntEnable (ADC0_BASE、ADC_SEQUENCERS0);
ADCIntEnable (ADC0_BASE、ADC_SEQUENCERS1);

MAP_TimerEnable (TIMER0_BASE、TIMER_A);

MAP_IntEnable (INT_TIMER0A);
MAP_IntEnable (INT_ADC0SS0);
MAP_IntEnable (INT_ADC0SS1);

}

void ADC0SS0IntHandler (void)
{
unsigned int adcVal = 0;

TimerDisable (TIMER0_BASE、TIMER_A);

ADCIntClear (ADC0_BASE、ADC_SEQUENCERS0);

ADCSequenceDataGet (ADC0_BASE、ADC_SEQUENCERS0、&adcVal);

TimerEnable (TIMER0_BASE、TIMER_A);

}

void ADC0SS1IntHandler (void)
{
unsigned int adcVal = 0;

TimerDisable (TIMER0_BASE、TIMER_A);

ADCIntClear (ADC0_BASE、ADC_SEQUENCERS1);

ADCSequenceDataGet (ADC0_BASE、ADC_SEQUENCERS1、&adcVal);

TimerEnable (TIMER0_BASE、TIMER_A);
}



高优先级 ADC 引脚的转换数据几乎没有变化、但低优先级 ADC 引脚的转换数据显示变化较大、最大变化为144。
下图显示了当 AIN10的输入电压固定并且 AIN11的输入电压变化时的 ADC 转换结果。

此外、下图显示了当 AIN11的输入电压固定且 AIN10的输入电压变化时的 ADC 转换结果。

从结果来看、低优先级 ADC 引脚似乎受到高优先级 ADC 输入数据的影响、您能不能就此因素提出建议以及如何抵消它?


此致、
H.U

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我实际上没有发现您的 ADC 初始化有任何问题。 要调试该问题、您可以进行一些实验吗?

     1.在 AIN11和 AIN10之间交换优先级。 换言之、使 AIN10成为高优先级、使 AIN11成为低优先级? 你看到什么?

     2.如果您使用另一个 AIN 而不是 AIN10、该怎么办? 让我们选择 AIN9或除 AIN10之外的任何其他通道? 您看到了什么差异吗? 我只是想知道它是否特定于 AIN10。  

     3.禁用 AIN11上的采样。 如果您仅对 AIN10进行采样、您是否能获得准确的数据?

     4.如果将 AIN11和 AIN10都放在同一序列发生器中而不是放在两个差分序列发生器中,会怎么样? 您看到了什么差异吗? 同样、本实验是要了解问题是特定于 AIN10还是与低优先级序列发生器相关。  

     5.我假设您有自己的定制板,对吧? 您能否在 EK-TM4C1294XL LaunchPad 上重现同样的问题? 如果您无法重现 Launchpad 的问题、则问题可能出在您的电路板上。 检查是否有噪声注入 AIN10。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我看来、您的输入阻抗对于您的采样时间来说太高了。 如果采样电容器没有足够的时间将电压与被采样的源均衡、那么来自之前转换的采样电容器上的电荷将影响电流转换。 请记住、采样多路复用器开关的电阻最高可达2.5K 欧姆、必须添加到外部源阻抗中。 尝试增加采样时间。 从数据表的第1051页和1052页: