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.

[参考译文] MSPM0G3507:ADC DMA 样本计数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1393962/mspm0g3507-adc-dma-samples-count

器件型号:MSPM0G3507
主题中讨论的其他器件:MSPM0G3107

工具与软件:

您好、技术支持部门、

我正在使用 MSPM0G3507微控制器的应用中、需要对模拟信号进行非常快速的采样(在微秒范围内)并尽可能精确地重建。 虽然我目前正在为此使用 LP-MSPM0G3507、但在最终工程中将被 MSPM0G3107取代。 然而、我遇到了一些障碍、并希望在这里得到一些援助。

根据所选的 DMA 样本计数(在手册中称为 SAMPCNT)、输出映像会有显著变化。 为了直观显示、我向 ADC 施加了振幅为1V 且失调电压为1.65V 的50Hz 正弦波信号。 使用的采样时间为20 µs。 测量完成后、通过将每个指数乘以采样时间来重构信号。 为了获得所有这些结果、我使用了示例项目 adc12_max_freq_dma、并且只更改了输入通道、采样时间和 DMA 采样计数。


我还观察到测量值的运行时间发生了变化。


值6似乎最适合此采样时间。 不过、当我使用2 µs 而不是20 µs 时、值7似乎是最佳选择、尽管偏差仍然很小。


我还测试了11 µs、但所有值似乎都不适合。


我注意到的另一个异常是、从 SAMPCNT 6开始已经传输了12个测量值。 从"0"可以明显看出这一点、这是因为在项目中默认使用 DL_ADC12_DMA_MEM10_RESULT_LOAD、而不是像在其他项目中那样使用 DL_ADC12_DMA_MEM11_RESULT_LOAD。 从 SAMPCNT 8开始、可检测到重复。 鉴于微控制器只有12个转换结果存储寄存器、我将从 SAMPCNT 13开始对这一点进行理解。 作为参考、您可以看到在20 µs 采样时间内从测试接收到的第一个测量值。


如果您能提供任何帮助解决这些问题的指导或建议、我将不胜感激。

重要信息:
Code Composer Studio 版本:
12.7.0.00007
MSPM0 SDK 版本:
2.01.00.03
MSPM0G3507版本:
2h
MSPM0G3507器件型号:
BB88h

此致

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

    您好、Alex、

    我建议保持 DMA 的样本计数不变、如果您要将采样时间保持在20us、则将 DMA 触发使能从"MEM10 result loaded interrupt"增加到 MEM11 result loaded interrupt。 DMA 比 ADC 快得多、这就是为什么最初在 ADC FIFO 获取其第10个值后触发 DMA 启用的原因、因为在 DMA 完成从 ADC FIFO 传输前11个值时、第12个值将已经位于 ADC FIFO 中、DMA 将传输最后一个值。 在本例中、如果将 ADC 速度减慢至20us、DMA 将以快于第12个 ADC 样本能够进入 ADC FIFO 的速度传输前11个 ADC FIFO 值。 因此、DMA 最终将在准备好之前抓取 MEMres11 (第12个值)。

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

    尊敬的 Fabrice:

    感谢您的答复。

    我需要1.5 µs 的采样率。 20 µs 数据来源于我最初收集的1024个样本、这使我能够分析整个周期。

    当我需要在"MEM10结果加载中断"和"MEM11结果加载中断"之间进行选择时、面临挑战。 手册中指出 SAMPCNT 是指"DMA 触发时要传输的 ADC 转换样本数"。 因此、理想情况下应该传输6个值。 但是、如表第12行所示、由于存在0、总共传输12个值。

    最初、我仅修改了采样时间、但无法成功重建信号。 在意识到 SAMPCNT 似乎影响采样时间后、我在过去两天进行了调整、最终使我能够重建信号。 唯一潜在的问题是、如果我从 LaunchPad 切换到单个微控制器、采用不同的组合可能会产生更好的结果、但我无法解释为什么会出现这种差异。

    为了以1.5 µs 的采样率成功重建正弦信号、我使用了以下参数并提供了"MEM11结果加载中断":

    • 1.3 µs 采样时间;SAMPCNT 6.
    • 1.4 µs 采样时间;SAMPCNT 7.
    • 1.8 µs 采样时间;SAMPCNT 8

    我测试了两个主时钟源 SYSOSC 和 HFXT、并确认每个源的频率设置都正确。

    此致

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

    您好、Alex、

    我忘记提及的是、DMA 传输 ADC 样本、一次传输两个、这就是为什么采样计数为6的原因、因为它实际上传输12个样本。 所以,这是正常的行为,你正在见证。 DMA 一次传输两个样本、即六次。 6是最小 sampcnt 可以达到的、因为 ADC FIFO 是一个12的数组。 很抱歉我在最初的回复中忘了提到这一点。

    此致!

    Fabrice