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.

[参考译文] TM4C1230C3PM:TM4C123 ADC 示例代码

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1131303/tm4c1230c3pm-tm4c123-adc-sample-code

器件型号:TM4C1230C3PM
主题中讨论的其他器件:TM4C123EK-TM4C123GXL

大家好、

我们希望在下面就我们客户的询问寻求您的帮助。

我使用的是 TM4C123系列控制器。
我需要 ADC 示例代码

int main (空)

unsigned int array[4];

//将时钟设置为16MHz
SysCtlClockSet (SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_INT | SYSCTL_XTAL_16MHz);

//启用 GPIOE 外设

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);

//启用 ADC0模块。
//
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);

//等待 GPIOE 模块准备就绪。


InitConsole();
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOE))


//等待 ADC0模块准备就绪。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC0))

//配置 ADC 引脚 PE3 (AIN0)和 PE2 (AIN1)
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3 | GPIO_PIN_2);

//配置 ADC 功能
//使用具有4入口 FIFO 的序列1
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);
ADCIntClear (ADC0_BASE、1);
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL、1);

while (1)

ADCProcessorTrigger (ADC0_BASE、1);
//等待转换完成
while (!ADCIntStatus (ADC0_BASE、1、false))


//清除中断标志
ADCIntClear (ADC0_BASE、1);

//读取 ADC 输入并将 PE3存储在数组[0]中,将 PE2存储在数组[1]中
ADCSequenceDataGet (ADC0_BASE、1、ARRAY);//读取模拟值
UARTprintf ("\rADC_CTL_CH0 ->%d、ADC_CTL_CH1 ->%d"、array[0]、array[1]);
SysCtlDelay (SysCtlClockGet ()/ 10 / 3);
SysCtlDelay (SysCtlClockGet ()/ 10 / 3);
SysCtlDelay (SysCtlClockGet ()/ 10 / 3);
SysCtlDelay (SysCtlClockGet ()/ 10 / 3);
SysCtlDelay (SysCtlClockGet ()/ 10 / 3);


这是我在中的代码,如果我将3.3V 连接到通道0,而通道1保持悬空,我将获得 ADC 通道0的值4095,但对于通道1,它是2045
 
我使用的是 Tiva c 系列开发板 Tm4c123
 
如果我删除应用于通道0的3.3V,然后读出通道0并更改通道,我的问题就是一个通道影响另一个通道读数的原因
此致、
Danilo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、

    我在 下面分享了 TM4C123G 技术讲座 、其中向客户展示了 ADC 的示例代码。

    https://software-dl.ti.com/trainingTTO/trainingTTO_public_sw/GSW-TM4C123G-LaunchPad/TM4C123G_LaunchPad_Workshop_Workbook.pdf#page=111

    这是他的回答。

    1.我已经介绍了你提供的文件,它非常有用。
    2.在所提供的文档中,提供的温度传感器读数程序可按预期工作
    在我的应用中、我使用的是 ADC 通道1和 ADC 通道0。 我已根据用户指南中提供的设置配置了 ADC 序列发生器1。
    下面是我要面对的问题
    a:在不将任何信号连接到 ADC 通道1和 ADC 通道0的情况下、ADC 通道1计数为237、ADC 通道计数0为253近似值。
    b.当我将3.3V 连接到 ADC 通道1时、计数显示为4095、这是正确的。 但对于 ADC 通道0、计数大约从253增加到2556。 我无法理解为什么连接到 ADC 通道1的3.3V 电压会影响 ADC 通道0的读数。
    请指导我如何解决此问题?
    以下是供您参考的代码
    int main (空)

    unsigned int array[4];

    //将时钟设置为16MHz
    SysCtlClockSet (SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSC

    我使用 DMA 参考了 ADC 乒乓方法,因为只使用了一个通道。 您能否提供没有 DMA 或具有多通道 DMA 的解决方案

    此致、

    Danilo

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

    您好 Danilo、

    这是由悬空引脚从 相邻引脚拾取寄生电压导致的。 我在自己做发展的时候看到这种行为,这种行为并非无人听说的。 除非 ADC 引脚正确接地且不保持悬空、否则 ADC 将不会仅读取0伏电压。 这就是最小功耗等建议涉及将所有未使用的引脚接地的原因。

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    感谢您的回答。 请参阅下面我们客户的评论。

    我使用的  是"EK-TM4C123GXL 基于 ARMRegisteredCortexRegistered-M4F 的 MCU TM4C123G LaunchPad 评估套件"板。 请告诉我我的理解是否正确。 如果我将3.3V 连接到通道1、则它将提供4095计数、同时连接到 ADC 通道0 1.65V、然后它将显示 ADC 通道0计数2047。 即使移除通道1 3.3V、它也不会更改 ADC 通道0计数。

    此致、

    Danilo

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

    您好 Danilo、

    如果我正确理解他们的意见、那么他们就理解正确。 这是我对他们所询问的情景的理解:

    通道1 = 3.3V --> 4095计数|通道0 = 1.65V --> 2047计数

    通道1 =悬空-->未知计数|通道0 = 1.65V --> 2047计数

    如果是、这是正确的理解。

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    请参阅以下客户的回复

    在本例中
    点-> 1. 如果两个通道都是浮动的
    通道1 =悬空-> 324个计数
    通道0 =悬空-> 324个计数

    点-> 2. 提供3.3V 电压之后
    通道1 = 3.3V->4095计数
    通道0 =悬空--> 2047计数(这是我对通道1施加电压但通道0的计数也发生变化的问题)
    ..................................................................
    提供的解决方案来确定
    如果我们将正确的接地端连接到未使用的引脚,则可以解决第->2点中的上述问题。

    请让我在下面列出我的理解是否正确
    如果假设我已将所有未使用的引脚连接到接地端、则应提供以下输出
    通道1 = 3.3V -> 4095计数
    通道1 = 1.65V -> 2047计数

    此致、

    Danilo

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

    您好 Danilo、

    是的、客户的理解是正确的、如果所有未使用的引脚都接地、则通道1应具有这些结果。

    此致、

    Ralph Jacobi