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.

[参考译文] MSPM0G1507:ADC

Guru**** 2538930 points
Other Parts Discussed in Thread: LP-MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1565173/mspm0g1507-adc

部件号:MSPM0G1507
Thread 中讨论的其他器件:LP-MSPM0G3507

工具/软件:

尊敬的 TI 工程师:

我希望此消息能帮您找到答案。 我目前正在根据示例“adc_singlechanel"(“(PA22→ADC0、PA17→ADC1 TI_driver) 开发 ADC 配置。 最初、我设置了 2 通道 (ADC0 和 ADC1)、但我将 ADC0 从 1 通道扩展到 6 通道。 但是、我遇到了将 3.3V 连接到 PA22 会影响除 ADC0_3 之外的所有读数的问题。

观察到的行为如下:

当 3.3V 连接到 PA22 时、除 ADC0_3 之外、所有 ADC 读数都受影响。

当 3.3V 连接到 PA17 时、ADC0_3 显示一个读数。

当 3.3V 连接到 PA15 时、不会观察到任何影响。

引脚到通道映射如下:

A0_7→PA22

A0_12→PA14

A0_0→PA27

A0_1→PA26

A0_2→PA25

A0_3→PA24

A1_0→PA15

您能否提供指导、说明为什么将 3.3V 连接到 PA22 会影响除 ADC0_3 之外的所有通道? 此外、为什么在连接到 PA17 时将 3.3V 连接到 PA17 会导致 ADC0_3 读数、而连接到 PA15 则无效?

感谢您的时间和支持。 我期待着您的见解。

此致、

Pakho

void *adcSrvThread(void *arg) {
    AdcSrv_Handle adcSrv;           // ADC service handle
    // Statistics for 6 ADC0 channels and 1 ADC1 channel
    AdcSampleStats stats0;    // ADC0 Channel 7 (A0_7 - AMP_ID)
    AdcSampleStats stats0_12; // ADC0 Channel 12 (A0_12 - HW_ID)
    AdcSampleStats stats0_0;  // ADC0 Channel 0 (A0_0 - CH1_FET1_NTC)
    AdcSampleStats stats0_1;  // ADC0 Channel 1 (A0_1 - CH1_FET2_NTC)
    AdcSampleStats stats0_2;  // ADC0 Channel 2 (A0_2 - CH2_FET1_NTC)
    AdcSampleStats stats0_3;  // ADC0 Channel 3 (A0_3 - CH2_FET2_NTC)
    AdcSampleStats stats1;    // ADC1 Channel
    
    // Initialize ADC service
    if (AdcSrv_init(&adcSrv) != 0) {
        LOG_PRINT_ERR("ADC service initialization failed");
        return NULL;
    }
    
    LOG_PRINT_INF("ADC service started with 6 channels");
    
    uint32_t cycle_count = 0;
    while (1) {
        // Clear statistics for all channels
        memset(&stats0, 0, sizeof(AdcSampleStats));
        memset(&stats0_12, 0, sizeof(AdcSampleStats));
        memset(&stats0_0, 0, sizeof(AdcSampleStats));
        memset(&stats0_1, 0, sizeof(AdcSampleStats));
        memset(&stats0_2, 0, sizeof(AdcSampleStats));
        memset(&stats0_3, 0, sizeof(AdcSampleStats));
        memset(&stats1, 0, sizeof(AdcSampleStats));
        
        // Perform ADC sampling cycle with correct parameter order
        // Order: stats0 (A0_7), stats0_12 (A0_12), stats0_0 (A0_0), stats0_1 (A0_1), stats0_2 (A0_2), stats0_3 (A0_3), stats1 (ADC1)
        if (AdcSrv_sampleCycle(&adcSrv, &stats0, &stats0_12, &stats0_0, &stats0_1, &stats0_2, &stats0_3, &stats1) != 0) {
            break;
        }
        
        // Display results for all 6 ADC0 channels
        if (stats0.avg > 0) {
            LOG_PRINT_DBG("ADC0_7(AMP_ID)[%lu]: min=%d, max=%d, avg=%d (%.2f V)", 
                          cycle_count, stats0.min, stats0.max, stats0.avg,
                          (float)stats0.microvolts / 1000000.0f);
        }
        
        if (stats0_12.avg > 0) {
            LOG_PRINT_DBG("ADC0_12(HW_ID)[%lu]: min=%d, max=%d, avg=%d (%.2f V)", 
                          cycle_count, stats0_12.min, stats0_12.max, stats0_12.avg,
                          (float)stats0_12.microvolts / 1000000.0f);
        }
        
        if (stats0_0.avg > 0) {
            LOG_PRINT_DBG("ADC0_0(CH1_FET1_NTC)[%lu]: min=%d, max=%d, avg=%d (%.2f V)", 
                          cycle_count, stats0_0.min, stats0_0.max, stats0_0.avg,
                          (float)stats0_0.microvolts / 1000000.0f);
        }
        
        if (stats0_1.avg > 0) {
            LOG_PRINT_DBG("ADC0_1(CH1_FET2_NTC)[%lu]: min=%d, max=%d, avg=%d (%.2f V)", 
                          cycle_count, stats0_1.min, stats0_1.max, stats0_1.avg,
                          (float)stats0_1.microvolts / 1000000.0f);
        }
        
        if (stats0_2.avg > 0) {
            LOG_PRINT_DBG("ADC0_2(CH2_FET1_NTC)[%lu]: min=%d, max=%d, avg=%d (%.2f V)", 
                          cycle_count, stats0_2.min, stats0_2.max, stats0_2.avg,
                          (float)stats0_2.microvolts / 1000000.0f);
        }
        
        if (stats0_3.avg > 0) {
            LOG_PRINT_DBG("ADC0_3(CH2_FET2_NTC)[%lu]: min=%d, max=%d, avg=%d (%.2f V)", 
                          cycle_count, stats0_3.min, stats0_3.max, stats0_3.avg,
                          (float)stats0_3.microvolts / 1000000.0f);
        }
        
        // Display results for ADC1 channel
        if (stats1.avg > 0) {
            LOG_PRINT_DBG("ADC1[%lu]: min=%d, max=%d, avg=%d (%.2f V)", 
                          cycle_count, stats1.min, stats1.max, stats1.avg,
                          (float)stats1.microvolts / 1000000.0f);
        }

        LOG_PRINT_DBG("----------------------");
        cycle_count++;
        usleep(CYCLE_DELAY_MS * 1000);
    }
    
    // Cleanup ADC service
    AdcSrv_close(&adcSrv);
    return NULL;
}

e2e.ti.com/.../AdcDrv.ce2e.ti.com/.../AdcDrv.he2e.ti.com/.../AdcSrv.ce2e.ti.com/.../AdcSrv.he2e.ti.com/.../7534.ti_5F00_drivers_5F00_config.ce2e.ti.com/.../ti_5F00_drivers_5F00_config.h

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

    以下是日志以供您参考。


    [DBG] ADC0_7 (AMP_ID)[2979]:最小值= 0、最大值= 24、平均值= 6 (0.0048V)
    [DBG] ADC0_12 (HW_ID)[2979]:最小值= 36、最大值= 94、平均值= 63 (0.0507V)
    [DBG] ADC0_0 (CH1_FET1_NTC)[2979]:最小值=104、最大值=155、平均值=128 (0.1031V)
    [DBG] ADC0_1 (CH1_FET2_NTC)[2979]:最小值=161、最大值=209、平均值=184 (0.1482V)
    [DBG] ADC0_2 (CH2_FET1_NTC)[2979]:最小值=211、最大值=256、平均值=233 (0.1877V)
    [DBG] ADC0_3 (CH2_FET2_NTC)[2979]:最小值=732、最大值=902、平均值=834 (0.6720V)
    [DBG] ADC1[2979]:最小值=250、最大值=293、平均值=271 (0.2183V)
    [DBG]------------------------

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

    大家好、您似乎使用的是 FreeRTOS、对吗?

    当 3.3V 电压连接到 PA22 时、除 ADC0_3 之外、所有 ADC 读数都受到影响。

    你看到了什么样的感情?

    当 3.3V 电压连接到 PA17 时、ADC0_3 显示读数。

    这种行为是否异常? 您能否为“显示阅读“操作仔细解释一下?

    引脚到通道映射如下:

    您是否在应用代码中启用任何其他模拟外设?

    当 3.3V 电压连接到 PA15 时、未观察到任何影响。

    ADC0 似乎存在问题、ADC1 似乎没有问题。

    请帮助确认所有异常现象均仅用于测试、不使用其他外设。

    e2e.ti.com/.../2210.adc12_5F00_sequence_5F00_DMA_5F00_G3507.zip

    以下是序列模式下的 ADC 代码示例、使用 DMA 传输 ADC 结果、请使用此示例帮助解决该问题。

    这是一个简单的 ADC 示例。

    您测试了多少个芯片?  ADC0 问题的可能性是多少?

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

    您好、Helic、

    感谢您的答复。

    要澄清您之前的问题:

    • 是的、我们使用的是 FreeRTOS。

    • 问题是 ADC 行为异常:

      • 当对 PA22 施加 3.3V 电压时、通道 ADC0_7 (AMP_ID)、ADC0_12 (HW_ID)、ADC0_0 (CH1_FET1_NTC)、ADC0_1 (CH1_FET2_NTC)、 ADC1 的读数都为 3.3V、但 ADC0_2 (CH2_FET1_NTC) 的读数仅为 0.6V 左右。

      • 同样、当对 PA17 施加 3.3V 电压时、只有 ADC0_3 显示 3.3V 电压、而其他通道的读数约为 0.04V。

    • 应用程序代码中未启用其他模拟外设。

    • 我们测试了两个 LP-MSPM0G3507 开发套件、二者出现了相同的问题。

    关于您共享的示例代码 (2210.ADC12_SEQUENCE_DMA_G3507.zip)、它基于驱动程序库、而不是 TI 驱动程序模型。 由于我们的工程基于 TI 驱动程序构建、因此该示例并不直接适用。

    我们感谢您对在基于 TI 驱动程序的 RTOS 环境中解决此 ADC 行为提供的进一步指导。

    此致、
    Pakho。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于您共享的示例代码 (2210.ADC12_SEQUENCE_DMA_G3507.zip)、它基于驱动程序库、而不是 TI 驱动程序模型。 由于我们的工程基于 TI 驱动程序构建、因此此示例并不直接适用。

    这是区分硬件/软件问题的最简单方法。

    如果测试结果指向软件、我们可以继续调试软件。

    您能帮助您测试这个演示代码吗?

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

    您好、Helic、

    我测试了这个演示。 它是有效的。 我发现 PA27 和 PA22 相互影响。

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

    PA27 和 PA22 的正确值是多少?

    我会尝试在自己这边进行这个设置。

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

    您好、Helic、

    我们在测试过程中观察到 ADC 引脚 PA22 和 PA27 之间存在显著的信号串扰。

    异常行为如下所示:

    1. 向施加 3.3V 时  PA22 、上的 ADC 读数  断开 PA27  约为  3875  (在 12 位标度上)、而不是接近 0 的预期值。

    2. 相反、在施加 3.3V 电压时  PA27 、上的读数  断开 PA22  约为  3890 、而不是接近 0 的值。

    这表明这两个输入通道之间存在明显且一致的串扰问题。 我们已在 LP-MSPM0G3507 两款开发套件上验证了这种行为。

    您能否提供有关潜在的根本原因的建议、以及有效隔离这些 ADC 通道的任何可能解决方案?

    此致、

    Pakho。

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

    嗨、 Pakho 

    您能给我发送您的 MSPM0 封装信息吗?

    最好具有 M0 的 OPN。(器件型号+封装)

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

    您好、Helic、

    以下是供您参考的封装信息。

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

    好的、获得了~ MSPM0G1507SPTR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“597638" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1565173/mspm0g1507-adc/6028510

    异常行为如下所示:

    1. 向施加 3.3V 时  PA22 、上的 ADC 读数  断开 PA27  约为  3875  (在 12 位标度上)、而不是接近 0 的预期值。

    2. 相反、在施加 3.3V 电压时  PA27 、上的读数  断开 PA22  约为  3890 、而不是接近 0 的值。

    [/报价]

    我得到了该串扰测试结果。

    1.您可以测试以下条件吗?

    向 ADC 引脚通道 x 输入正弦波形、ADC 定期对该引脚通道 x 进行采样。

    然后监控另一个 ADC 引脚通道 y、通道 y 不需要对其进行配置、将其保持未连接状态并连接到示波器以监测信号。

    尝试找出 x 和 y 之间的所有相关串扰、x 可以是 PA22、y 可以是 PA27、任何可用的 ADC 输入引脚。

    2.需要确认如何获取这些 MSPM0 芯片? 但从 TI.com 或 TI 样片或者从第三方供应商处购买呢?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid=“571933" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1565173/mspm0g1507-adc/6032023 需要确认如何获取这些 MSPM0 芯片? 但从 TI.com 或 TI 样片购买或从第三方供应商处购买?

    它应该是 ti 个样片。

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

    申请新的~

    它应该是有效的。

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

    你好、 齐赫里克 、

    回到开始。

    我遇到了 ti_drivers_config.c 文件中的 ADC 设置配置问题。

    问题:
    我已经确定问题在于 const ADCMSPM0_HWAttrs adcHWAttrs 中的配置 ti_drivers_config.c。 当前的 SDK 示例主要演示单次转换模式、但需要将 ADC 配置为序列模式运行。

    具体请求:
    我想向 ADC0 添加一个额外的通道 (PA14、A0_12)、并对其进行配置以实现序列模式运行。 您能帮助我了解需要修改 adcHWAttrs 结构中哪些参数才能实现这一点吗?

    当前配置片段:

    const ADCMSPM0_HWAttrs  adcHWAttrs[CONFIG_ADC_COUNT]={
      /* CONFIG_ADC_0 */
      {.adc           = ADC_0_INST、
        .adcInputDIO      = CONFIG_GPIO_ADC_0_AIN、
        .adcInputIncm    = CONFIG_GPIO_ADC_0_AIN_PINCM、
        .adcInputPinMux   = CONFIG_GPIO_ADC_0_AIN_PINMUX、
        .adcPosRefDIO     = GPIO_INVALID_INDEX、
        .adcNegRefdio     = GPIO_INVALID_INDEX、
        .adcChannel      =  7
        .refSource       = ADCMSPM0_VDDA_REFERENCE、
        .sampleingDuration  =  16
        .refVoltage      =  3300000 /* UV */
        .resolutionBits   = ADCMSPM0_Resolution_12_bit、
        .adcClkDivider   = ADCMSPM0_CLKDIV_8、
        .adcClkSelect     = ADCMSPM0_CLK_ULPCLK、
        .adcClkFreqRange   = ADCMSPM0_CLK_FREQ_RANGE_24TO32、
        .conversionMode   = ADCMSPM0_SINGLE_CH_SINGLE_CONV、
        .conversionStartAddr =  0
        .conversionEndAddr  =  0
        .repeatConversionMode = ADCMSPM0_REPEAT_MODE_ENABLED、
        .sampleingMode     = ADCMSPM0_SAMPLING_MODE_AUTO、
        .sampleTrigger    = ADCMSPM0_SAMPLING_TRIG_SW、
        .conversionDataFormat = ADCMSPM0_CONV_DATA_FORMAT_unsigned、
        .sampleTimerSrc   = ADCMSPM0_SAMP_TMR_SOURCE_SCOMP0、
        .conversionTrigger  = ADCMSPM0_NEXT_CONV_WITH_TRIG、
        .adcHWAetizing   = ADCMSPM0_HW_AVG_DISABLED、
        .idxMEMCTLx      =  0}、
      /* CONFIG_ADC_1 */
    }

    问题:

    1. 从单次转换模式更改为序列模式需要修改哪些参数?

    2. 如何配置转换序列的起始地址和结束地址?

    3. 使用序列模式时、对于采样计时器源或触发器设置是否有任何具体注意事项?

    4. 如何在序列模式下为多个通道正确设置存储器控制寄存器 (MEMCTLx)?

    非常感谢您提供指导、说明需要对 adcHWAttrs 结构进行具体修改、以便启用具有多个通道的序列模式、尤其是在向 ADC0 添加 PA14 (A0_12) 时。

    感谢您的帮助。

    此致、

    谢谢。

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

    我们来讨论其他线程中的 ADC 配置问题。

    该主题似乎主要讨论 ADC 串扰。

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

    我已将 3.3V 输入信号连接到 PA22、但我在 PA27 上测量的电压约为 2.9V。 这种电压差异表明开发板上可能存在意外的信号路径或硬件问题。

    我会在获得新电路板时检查问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将在收到新电路板时检查问题。

    好的、得到了~