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_singlechanel_LP_MSPM0G3507_freertos_ticlang

Guru**** 2551910 points
Other Parts Discussed in Thread: MSPM0G3507

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

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

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

工具/软件:

大家好:

我正在使用 MSPM0G3507 微控制器、以官方示例 adc_singlechannel_LP_MSPM0G3507_freertos_ticlang为基础、遇到意外的通道干扰问题。 我希望在这里获得一些见解。

原始示例使用两个 ADC 通道:

  • ADC0(对应于引脚 PA22)
  • ADC1(对应于引脚 PA17)

我的要求是添加两个额外的信道、因此我扩展了代码:

  • A1_0(对应于引脚 PA15)
  • A1_1(对应于引脚 PA16)

添加这些新通道后、我发现了一个异常:从 A1_0 (PA15) 和 A1_1 (PA16) 读取 ADC 值时、它们的读数会受到 PA17 上输入电压的显著影响(来自原始示例的 ADC1)。 即使 PA17 上的微小电压变化也会导致 A1_0 和 A1_1 的测量出现不合理的波动、而原始 ADC0 (PA22) 也不受影响。

我已经检查了以下配置:

  1. 已验证引脚映射是否正确:A1_0 确实映射到 PA15、A1_1 到 PA16、与数据表一致。
  2. 新通道的初始化过程遵循与原始 ADC0 和 ADC1 相同的模式(包括用于 ADC 功能的 GPIO 多路复用,通道启用等)。
  3. 已检查 ADC 序列发生器配置、以确保新通道不会错误地分配到与 PA17 (ADC1) 相同的序列或触发源。

由于 PA17 在原始示例中已经用作 ADC1、并且新通道受到 ADC1 的影响、因此我怀疑共享 ADC 资源的配置(例如基准电压,采样时间或多路复用器)可能存在冲突、但我无法确定确切的原因。

扩展 ADC 通道时、是否有需要特别注意的特定寄存器配置(例如 ADCx_CTL、ADCx_MUX、GPIO 多路复用寄存器)? 添加 A1_0 和 A1_1 时、我的代码修改中是否存在错误、导致对现有 ADC1 (PA17) 产生干扰?

如果需要、我可以提供用于 ADC 初始化和通道配置的特定代码片段。 感谢您的指导!e2e.ti.com/.../3755.ti_5F00_drivers_5F00_config.he2e.ti.com/.../3755.ti_5F00_drivers_5F00_config.ce2e.ti.com/.../adcsinglechannel.c
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../7462.ti_5F00_drivers_5F00_config.h 上传了缺失的 ti_drivers_config.h

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

    您好:

    我遇到了 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,
            .adcInputPincm        = 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,
            .samplingDuration     = 16,
            .refVoltage           = 3300000, /* uV */
            .resolutionBits       = ADCMSPM0_RESOLUTION_12_BIT,
            .adcClkkDivider       = 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,
            .samplingMode         = 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,
            .adcHWAveraging       = ADCMSPM0_HW_AVG_DISABLED,
            .idxMEMCTLx           = 0},
        /* CONFIG_ADC_1 */
    }

    问题:

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

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

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

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

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

    感谢您的帮助。

    此致、

    谢谢。

    Pakho
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    添加这些新通道后、我注意到一个异常情况:从 A1_0 (PA15) 和 A1_1 (PA16) 读取 ADC 值时、它们的读数会受到 PA17 上输入电压的显著影响(来自原始示例的 ADC1)。 即使 PA17 上的微小电压变化也会导致 A1_0 和 A1_1 的测量值出现不合理的波动、而原始 ADC0 (PA22) 也不受影响。

    ADC 通道之间似乎存在串扰。

    您正在使用哪个软件包?

    您能否确认这些信号是否是不同通道之间同一 ADC 内的串扰?

    您可以参考 Driverlib 来测试以下 ADC 通道:

    C:\ti\mspm0_sdk_2_06_00_05\examples\nortos\LP_MSPM0G3507\driverlib\ADC12_SEQUENCE_CONVERSION

    我们首先确认 ADC 串扰问题!

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

    感谢您的答复。

    简而言之、我们的 ADC 硬件没有串扰问题。 单独测试时、通道工作正常。 我们的咨询是关于软件配置方面的具体问题。

    我们正在寻求有关如何在使用 TI 驱动程序框架的同时正确实现外部 ADC 通道扩展的指导。 具体而言、我们想了解通过 TI 驱动程序接口添加其他外部 ADC 通道的正确配置参数和方法。

    您能否就该方案的实施方法提供帮助? 我们感谢您的支持、帮助我们浏览驱动程序配置以获得扩展的渠道支持。

    谢谢你。

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

    我将在接下来的两个工作日检查这个问题。

    另一个主题:  MSPM0G1507:ADC 

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

    ADC tidrivers 不直接支持 ADC 序列模式。

    您可以使用 drivelib ADC init 代码作为另一种方法。

    如果要使用 ADC 序列模式、至少需要更改此模式:

      1.hwAttrs->conversionMode ==  ADCMSPM0_MULTI_CH_SEQUENCE_CONV

    但是、检查  ADCMSPM0.c 中的 ADCMSPM0_initHw 后:

    如果用作 ADC 序列模式、则 需要 在 ADCMSPM0.c 中的 ADCMSPM0_initHw 中运行几个 DL_ADC12_configConversionMem 函数

      您可以从以下代码获得示例。

    但我发现 ADCMSPM0+中只有一个调用的 DL_ADC12_configConversionMem  

    因此、现在、ADC tidrivers 不支持 ADC 序列模式。

    如果你想修改这个,这将需要很多工作。

    以下是基于 Driverlib 的 ADC 序列模式示例:

    您可以在[SYSCFG_DL_ADC12_0_init]函数中找到 ADC 序列初始化函数。

    e2e.ti.com/.../0451.adc12_5F00_sequence_5F00_DMA_5F00_G3507.zip

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

    感谢您的跟进。 我的调查结果确实与你的调查结果一致。 据我所知、这应该是一个标准用例。 您能否深入介绍一下 TI ADC 驱动程序当前不支持序列模式的原因?

    关于未来的支持、这是否是 TI 计划包含在即将发布的 SDK 版本中的功能?

    [引述 userid=“571933" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1566782/mspm0g1507-adc_singlechannel_lp_mspm0g3507_freertos_ticlang/6041153

    因此、现在、ADC tidrivers 不支持 ADC 序列模式。

    如果你想修改这个,这将需要很多工作。

    [/报价]

    虽然我可能会在我这边实施修改、但主要问题是长期可维护性、尤其是当 SDK 升级或其他团队成员正在处理同一个项目时。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否介绍一下 TI ADC 驱动程序当前不支持序列模式的原因?

    我们计划维护和增强 ti 驱动程序功能、将支持 ADC 序列。

    但它最近不会发布。

    主要关注的是长期可维护性、特别是在 SDK 升级或其他团队成员正在处理同一项目时。

    产生这种担忧是正确的。

    您可以选择使用 SDK 中的 Driverlib 示例来驱动 ADC。(我上传的示例。)

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

    感谢您的澄清。 我尝试使用 Driverlib。 再次感谢您的支持。