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.
工具与软件:
尊敬的 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 计数可从以下函数中获取。
uint32_t ADCGetFIFOWordCount(uint32_t baseAddr, uint32_t fifoNum) { return (HW_RD_REG32(baseAddr + ADC_FIFOCOUNT(fifoNum))); }
如您所见、这只是读取固定地址的寄存器值、因此我们很困惑、在读取不同时间时结果会如何变化。
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 转换,用户可以使用下面的参数轻松地在代码中配置它们。
此致、
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。