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.

[参考译文] TMS320F28069M:使用 ADC 测量模拟信号时的延迟

Guru**** 2546020 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/841364/tms320f28069m-delay-in-measuring-analog-signal-using-the-adc

器件型号:TMS320F28069M

您好!

首先、感谢上周在该论坛中提供的帮助、以正确设置 ADC、使其正常工作、并使用三角波形对其进行测试、以确保其按预期工作。

但是... 我现在有一个问题。 转换后的 ADC 信号似乎延迟了几十 μ s。 这将破坏我们程序中的控制环路。 我每10秒执行一次一系列转换。 转换在大约2us 内立即完成、我在剩余8us 内处理它们。 没关系。 但是、我在程序中得到的值似乎被延迟了大约40us (10 us 定时器中断的4次调用)。

我缺少什么? 提前感谢。

谢谢。 Bhaktha

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

    Bhaktha、

    您是否能够确认问题在于转换延迟而不是转换错误?

    如何将 ADC EOC 与数据处理例程同步?

    您是否对可能引入相位延迟的通道进行了信号调节?

    Tommy

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

    Tommy、

    1.我已经用三角波进行了独立的单元测试、以确保 ADC 转换正常。 在处理实际信号时、 当我查看缓冲器中的转换值和示波器上的模拟信号时、会有延迟。

    2、这是我的程序流程。

    计时器中断每20us 唤醒一次。 定时器中断还启动转换序列、总计9。 最后一个第14个 ADC 通道触发 ADC ISR。 计时器例程还会清除表示 ADC 转换结束的标志、

    在计时器中断中、我执行初始预处理、然后等待标志(全局变量)设置为信号 ADC 转换完成。

    在 ADC ISR 中、我将所有值从结果寄存器复制到全局变量、然后设置标志全局变量以发出 ADC 转换结束信号。

    在定时器中断中、在标志被 ADC ISR 设置为信号完成后、完成转换值的处理并采取适当的操作。  

    好的。 这听起来有点复杂、也许有一种更简单的方法来实现这一点。 请告诉我您的想法。

    我们检查了模拟信号的信号调节、AFAIK 应该是好的、但这是我们要看的。  

    对我来说,可能是错的,似乎有一个很大的延迟,这可能是由于方案逻辑缺陷而不是其他可能性造成的。

    谢谢。 Bhaktha

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

    Bhaktha、

    典型配置是仅启用 ADC ISR 以进行中断服务和数据处理。  计时器中断似乎增加了不必要的复杂性。

    在第一次转换时触发 ADC ISR、您可以获得与当前方案几乎相同的行为。  此外、还可以根据启用的任何 SOC 灵活地提前(转换前)或延迟(转换后)触发 ADC ISR。

    最简单的方法是管理 ADC ISR 在最后一次转换时延迟触发的系统、因为它可以确保在到达 ISR 时完成所有结果。  如果您不需要提前触发所需的额外处理时间、建议这样做。

    是否在 INTSEL 寄存器中清除了连续模式?  这将有助于在 INTCONT=0时检测 ADC 中断溢出。

    确保确认您的 ACQPS 窗口能够处理您的任何信号调节。

    Tommy

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

    Tommy、

    感谢您的回复。  

    我们的产品要求是、我们需要定期唤醒、监控物理信号、处理值、采取措施并返回空闲状态。 我想这不是很不寻常的要求。 为了实现这一点、我们有计时器中断、计时器启动 ADC 转换、我们处理数字值、采取适当的操作并返回空闲状态。 这有道理吗? 或者我是否使它比它更复杂。 要求部分是正确的、实施当然会发生更改/重新设计。

    我已经在 INTSEL 寄存器中设置了连续模式、这一点很好、我将清除它、进行更改并重新检查。  

    对 ACQPS 设置有疑问、也会检查该设置。

    谢谢。 Bhaktha

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

    Bhaktha、

    您正在正确使用计时器来唤醒器件并触发 ADC 转换。  在计时器 ISR 中等待 ADC 结果也是可以接受的。  只要方案有效、就无需更改方案。

    我的意见与其说是绝对的对或错,不如说是主观的看法。  作为最佳实践、我们尝试尽可能减少 ISR 中花费的周期数、以便在实时期限内最大限度地提高系统中断的周期可用性。  如果您仅在计时器 ISR 中等待 ADCINT 标志的几个周期、则当前的实现将是最佳的。  如果等待循环为数百个周期、则处理周期将丢失。  另一方面、如果此周期性唤醒过程是您对器件具有的唯一功能、那么它就非常好了。

    Tommy

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

    Bhaktha、

    自上次更新以来已经有一段时间了。  我假设您能够解决您的问题。

    如果没有、请回复此主题。  如果该线程由于超时而锁定、请创建一个描述问题当前状态的新线程。

    Tommy