TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TM4C1231D5PZ:同时在两个 ADC 上执行多个 ADC 序列。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1261101/tm4c1231d5pz-multiple-adc-sequences-over-both-adcs-at-the-same-time

器件型号:TM4C1231D5PZ

您好

在 TM4C1231D5PZ 上使用两个 ADC 时都遇到一些问题。
两个 ADC 似乎都配置正确、引脚多路复用似乎也可以。
由于某种原因、我无法读取所有渠道。

我使用的是通道0 - 11和20。
ADC0上的通道0 - 7、ADC 1上的通道8 - 11 + 20。
通道10 + 11 + 20的读数为0 (而在使用示波器或万用表进行测量之后、引脚上肯定会有一些电压)。
它不是0'ish、它只是0。  
看起来 ADC 由于某种原因没有开始工作。

两个 ADC 都按序列0进行配置、并且使用 ADC_TRIGGER_Always。
处理器以80 MHz 的频率运行。

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

    您好!

     我不确定您为什么会在通道10、11和20上测量0。 您可以做三次实验吗?

     关闭 ADC0。 仅使用 ADC1来测量8-11 + 20。  10、11和20是否会得到正确读数?

     关闭 ADC0。 仅使用 ADC1来测量 10、11和20的三个通道? 结果如何。  

     3.仅将 ADC0用于 8 - 11 + 20。 结果是什么?

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

    感谢您的快速回复。

    执行此操作将为我提供相同的输出。 通道10、11和20保持为0、而8和9具有读数。

    2.仅使用通道10、11和20就可以读取10和11

    3.为 ADC0交换 ADC1,为我提供通道的正确读数

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

    尊敬的 Ayrton:

     感谢您收集这些数据点。  

     -您能分享您的代码吗?

     -如何配置时钟? 我想知道它是否与下面的勘误表有关。  

     -你是否有另一个板,你可以重复同样的问题?

     抱歉、您能再尝试两次 实验吗、因为我从未遇到过这样的问题报告?

     -关闭 ADC0并仅使用 ADC1。 使用 ADC1以该顺序 10、11、20、8、9进行采样、而不是8、9、10、11、20。 您是否仍会看到10、11、20等于0、同时正确采样8和9?

     -关闭 ADC0并仅使用 ADC1。 使用 ADC1在   一个序列发生器(例如 SS0)中采样10、11、20,而在另一个序列发生器(例如 SS1)上采样8、9。  您是否仍会看到10、11、20等于0、同时正确采样8和9?

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

    您好

    我在下面添加了代码。 这仅是代码的 ADC 部分。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #define MAX_ADC0_CHANNELS 8
    #define MAX_ADC1_CHANNELS 5
    #define ADC_5V ADC_CTL_CH0
    #define ADC_3V3 ADC_CTL_CH1
    #define ADC_2V5 ADC_CTL_CH2
    #define ADC_1V8 ADC_CTL_CH3
    #define ADC_1V5 ADC_CTL_CH4
    #define ADC_1V2 ADC_CTL_CH5
    #define ADC_1V1 ADC_CTL_CH6
    #define ADC_3V3A ADC_CTL_CH7
    #define ADC_12V ADC_CTL_CH8
    #define ADC_1V8A ADC_CTL_CH9
    #define ADC_n5V ADC_CTL_CH10
    #define ADC_1V ADC_CTL_CH11
    #define ADC_1V8B ADC_CTL_CH20
    struct adc_channel {
    uint32_t channel;
    int nominal_voltage_d;
    int nominal_voltage_a;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在上面的代码中完成时钟配置。
    我使用的主时钟 SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_OSC_INT); 、并通过  ADCClockConfigSet(adc_base, ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_EIGHTH, 1);

    已对3个电路板全部使用 TM4C1231D5PZ 进行了测试。 都遇到相同的问题。

    1. 在这种情况下,10和11是可读的。 其他则不是。
    2、我必须要尝试,当我有了,我就来了。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADC0上的通道0 - 7、ADC 1上的通道8 - 11 + 20。

    这不是我在代码中看到的。  

    根据我在以下代码中看到的内容、ADC1的五个通道分别为7、8、9、10和20、而不是8、 9、10、11和20。 您实际上正在跳过 CH11。 我不知道您的代码中是否存在其他问题。  

    常量结构 ADC_CHANNEL ADC1[]={
    ADC_3V3A、_3V3A_digital、_3V3A_analog、_3V3A_digital -_3V3A_diff、_3V3A_digital +_3V3A_diff}、
    adc_12V、_12V_digital、_12V_analog、_12V_digital -_12V_diff、_12V_digital +_12V_diff}、
    ADC_1V8A、_1V8A_digital、_1V8A_analog、_1V8A_digital -_1V8A_diff、_1V8A_digital +_1V8A_diff}、
    adc_n5V、_n5V_digital、_n5V_analog、_n5V_digital -_n5V_diff、_n5V_digital +_n5V_diff}、
    ADC_1V8B、_1V8B_digital、_1V8B_analog、_1V8B_digital -_1V8B_diff、_1V8B_digital +_1V8B_diff}、
    };

    #define ADC_3V3A ADC_CTL_CH7
    #define ADC_12V ADC_CTL_CH8
    #define ADC_1V8A ADC_CTL_CH9
    #define ADC_n5V ADC_CTL_CH10
    #define ADC_1V ADC_CTL_CH11
    #define ADC_1V8B ADC_CTL_CH20

    我知道您是在尝试以 紧凑的方式使用 for 循环来初始化 ADC。 但是、为了调试您的问题、我建议您至少目前按如下所示配置通道。 它可能不是最优雅的方式、但它更具可读性。 您可能需要对 ADC0执行同样的操作。 您可以重复同样的问题吗?  

    ADCSequenceStepConfigure (ADC1_BASE、0、0、ADC_CTL_CH8);//通道8是 SS0的阶跃0。
    ADCSequenceStepConfigure (ADC1_BASE、0、1、ADC_CTL_CH9);//通道9是 SS0的阶跃1。
    ADCSequenceStepConfigure (ADC1_BASE、0、2、ADC_CTL_CH10);//通道10是 SS0的阶跃2。
    ADCSequenceStepConfigure (ADC1_BASE、0、3、ADC_CTL_CH11);//通道11是 SS0的阶跃3。
    ADCSequenceStepConfigure (ADC1_BASE、0、4、ADC_CTL_CH20 | ADC_CTL_IE | ADC_CTL_END)//  

    在您的第73行、为什么要使用 ADC_CLOCK_RATE_八分之一 跳过采样? 为什么现在不删除这一行? 如果您出于任何原因需要在应用中使用它、可以在您了解导致当前问题的原因后再将其添加回去。 最好的做法始终是从简单的配置开始,然后再升级。