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.

[参考译文] AM2432:使用 ADC 电压采样时、FIFO 读取中的 FIFO 字异常

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1424959/am2432-fifo-words-in-fifo-reading-is-abnormal-when-using-adc-voltage-sampling

器件型号:AM2432

工具与软件:

尊敬的 TI 专家:

客户正在使用 AM243x。

客户使用 ADC 单次触发模式进行电压采样。

他们发现 FIFO 读取显示读取的实际 FIFO 字大于实际配置值。

下面提供了它们的配置。

他们连续读取 频率为8k 的 FIFO 数据、如下所示。

下面提供了来自客户的4个问题。

1)上面讨论的 ADC 配置是否有任何问题?

2)  在实际应用中、当  FIFO 为0、时、ADC 采样将完全异常、数据不再刷新、采样值如下所示不正确。

3) 为什么下面显示的 FIFO 有较大的波动?

4 μ s 当、为0 μ s 时、)重新启动 ADC、我们可以再次进行采样以使系统正常吗?

非常感谢、

Kevin

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

    Kevin 老师、您好!

    我正在查看您的问题,您可能会在一两天内得到回复。

    此致、

    Anil。

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

    尊敬的 Anil:

    今天,我现场客户办公室,以调试这个问题. 下面让我总结更多详情、供您参考、谢谢!

    与我们的默认编码相比、客户编码只有2处差异。 首先、客户未使用他们认为会影响性能的硬件中断。 其次、客户在默认编码之上添加了 while 循环、因为他们需要连续读取唯一两个不同点的 FIFO 值。

    对于此问题、我们在下面提供了一些更新。

    1:配置的 FIFO 字数为6、但如上所述、该默认编码之上有一个 while 循环、因此我们发现读出的 FIFO 字计数可能不等于6、某个时大于6、某个时甚至可能为0。 当 FIFO 字计数为0时、ADC 采样会完全异常。

    下面是示波器上看到的内容、红线表示 FIFO 字数为6 (正如预期的那样)的大多数情况、但您可以看到它超过6、有时它会降为0、从而导致该问题。

    然后我们深入了解详情、FIFO num 计数可从以下函数中获取。

    Fullscreen
    1
    2
    3
    4
    uint32_t ADCGetFIFOWordCount(uint32_t baseAddr, uint32_t fifoNum)
    {
    return (HW_RD_REG32(baseAddr + ADC_FIFOCOUNT(fifoNum)));
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    如您所见、这只是读取固定地址的寄存器值、因此我们很困惑、在读取不同时间时结果会如何变化。

    2:我们认为此问题可能是由于硬件支持的 FIFO 读取速度存在一些限制。 所以我们进行了两次实验。 实验1将电压采样 频率从8k 降低到1k、方法是降低异常情况的可能性、但有时仍然会发生。 实验2中、我们在 FIFO 读数之前增加了15us 的延时时间、这进一步降低了出现问题的可能性、但我们仍有时间能够发现问题。

    在我个人的意见中、我建议你可以看看下面两个要点、并提供一些早期的建议、让我们继续下去。

    1:FIFO 读取中的硬件中断是否满足必需要求? 客户将尝试重新添加硬件中断、稍后查看结果。

    2:我们的实验表明、出现此问题的可能性与 FIFO 速度密切相关、降低采样频率和增加延时时间均可提高性能。 您能否帮助检查我们在 ADC 单次触发模式下的 FIFO 读数是否确实有一些限制?

    客户告诉我、这个项目将在今年年底完成 SOP、这是他们目前遇到的唯一问题。 因此、他们迫切需要掌握调试的线索。

    非常感谢、

    Kevin

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

    Kevin 老师、您好!

    这些是我最初的分析点。

    在我看来、FIFO 字不只是实际的输入。

    还有一个问题、即当客户想要 连续读取 ADC 数据时、应直接进入连续模式、而现在使用 while (1)条件不是正确方法的短时模式。

    我假设这 while (1)条件与单触发模式一起产生了一个问题。

    我很想知道是否应该在所有 ADC 采样转换完成后调用这种短模式。 那么、这里客户是如何在没有中断模式的情况下确认 ADC 采样约定已完成的呢?

    我建议在下面使用一个测试案例、  

    输入信号并使用相同的 MCU+SDK 示例,请参阅结果。 这 为我们提供了线索。

    仅供参考、我将在下周的星期一和星期二休假。

    此致、

    Anil。

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

    尊敬的 Anil:

    感谢您的支持!

    基于此连续模式解决方案、客户仍有以下3个问题、您能帮忙回答吗、谢谢!

      1 μ s 在)模式下、我们是否需要在 ADC 读取 FIFO 数据时检查 FIFO 状态? 是否存在任何时序偏差会导致数据异常或错位?

      2 μ s 在)模式下是否可以在无中断的情况下触发?

      3)是否有可供我们参考和验证的详细演示?

    谢谢!

    Kevin

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

    尊敬的 Kevin:

    指定的专家目前不在办公室。 因此、对该线程的响应可能会延迟。 感谢您的耐心。

    此致、

    Tushar

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

    Kevin 老师、您好!


    我们的内部 Webex 讨论总结如下。

    在客户项目中、使用 ADC 需要满足以下几个要求:

    1.在单次触发模式下使用。

    2.每次 ADC 转换时使用6个样本。

    3.每8 kHz 获得一次采样结果。


    我已根据客户要求更新了代码。

    ADC 时钟在60MHz 运行。

    每6个样本设置一次 ADC 完成、6个通道均已配置为将 FIFO 阈值设置为6个样本。


    如果客户希望在8kHz (0.125ms)内完成 ADC、则用户需要相应地配置开路延迟和采样延迟功能。

    要在8kHz 范围内获得转换结果、请遵循以下步骤:


    在下面的示例中、启用中断代码并测量6个通道从 ADC 启动到 ADC 中断的时间。

    如果这在8kHz 范围内、则不执行任何操作并使用相同的示例代码。

    如果此代码不满足8kHz 要求、请调整开路延迟和采样延迟功能。

    这些延迟被插入到每个通道的 ADC 转换,用户可以使用下面的参数轻松地在代码中配置它们。

    e2e.ti.com/.../adc_5F00_singleshot_5F00_am64x_2D00_evm_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

    此致、

    Anil。

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

    尊敬的 Anil:

    如前所述、客户在上一个答复中提供了基于您的示例的上述代码。 今天、客户尝试了更多时间、但仍然看到来自 ADCGetFIFOWordCount 函数的 FIFO 可能符合以下两个不可接受的结果。

    1:有时可能等于0

    2:有时大于配置的值6

    客户还尝试了添加 SampleDelay、但仍然没有帮助、请参阅下面的结果。

    a) SampleDelay = 2:  

    b) SampleDelay = 6:

    您可以看到、 来自 ADCGetFIFOWordCount 函数的 FIFO 有时仍可能大于配置的6或等于0。 您能尽快为我们提供一些建议吗?

    非常感谢、

    Kevin

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

    大家好、 未来的 读者:

    与 Kevin 进行内部讨论并给出建议  停止 ADC   每个 ADC 阶跃启用前都要更改。

    实际上、如果用户进入单次触发模式来连续读取 ADC 样本、我们将在上面的示例中启用步骤并稍后启动 ADC。

    因此、根据 TRM、我们需要在执行步骤启用之前检查 ADC FSM 是空闲还是禁用。 上述示例中没有此步骤。

    我建议在启动 ADC 之前添加停止 ADC。

    请看下面的图片。  

    此致、

    Anil。