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.

[参考译文] CCS/TMS320F28379D:捕捉正弦输入频率

Guru**** 2752915 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/800210/ccs-tms320f28379d-capture-sine-input-frequency

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

大家好、

我想捕获输入正弦的频率以同步输出频率。

因此、我使用 CMPSS 模块来获取频率。 我使用了以下模块、如下所述:

在 CMPIN1P、我插入输入正弦波。 DACHVALS 设置为输入正弦波 Vpp 的一半。 比较器的结果会将输出 CTRIPH 异步置位。

信号 CTRIPH 通过 ePWM X-Bar 到达 PWM 模块。

信号通过 TRIPIN4向事件过滤发送事件 A QUAL。

在这里、我想使用 CNTVAL 捕获2个边沿之间的时间。 该值应复制到 TBPRD 寄存器。 我尝试在计时图表中显示问题:

直到 DCAEVT1、一切都像我预期的那样正常工作。 DCAEVT1持续10ms (输入正弦20ms 的半正弦周期)。 我想对 DCAEVT1为同步输出 PWM 与输入频率的时间进行计数。 PWM 模块使用 upcount_downcount_mode。

我尝试使用边沿捕获逻辑捕获这段时间。 使用 SW 触发器、我应该能够使用 DCAEVT 的下一个边沿开始测量。 然后计数器开始计数、直至下一个边沿计数。 当我读取寄存器 VCNTVAL 时、它为零。 因此它不成功。

我的 TBCLK 配置为200MHz。 这意味着计数器每5ns 增加一次该值。 随着时间增加10ms (DCAEVT1)、计数值将为2000000。 但计时器仅为16位(65535是最大值)。 当我将 TBCLK 更改为较低频率时、我在生成输出 PWM 时会失去精度。

很抱歉、描述错误、我希望 有解决此问题的办法吗?

此致、

Martin

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

    我认为这实际上有一个更简单的解决方案。 不使用 CMPSS + ePWM、而是使用 CMPSS + ECAP。 ECAP 的主要功能之一是测量频率。 您需要做的是将 CMPSS 输出到 OUTPUTXBAR、并使用 INPUTXBAR 对其进行抽头、然后将其馈送到 ECAP。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Frank、

    感谢您的回答。 这种解决方案比我以前的想法要简单得多。
    但我没有检测到 OUTPUTXBAR 和 INPUTXBAR 之间是否存在将 CMPSS 连接到 ECAP 的内部连接。
    借助 OUTPUTXBAR、我只能在未忽略任何内容的情况下驱动 GPIO。 那么、我是否需要驱动输出 GPIO 并通过通过通过 INPUTXBAR 连接到 ECAP 的物理连接输入 GPIO 进行回读、或者是否有任何其他解决方案可以在内部连接这些外设?

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

    INPUTXBAR 可以抽头每个 GPIO。 在 F28379D 器件上、INPUTXBAR7..12分别转至 ECAP1..6。

    例如、假设您正在通过 OUTPUTXBAR3将 CMPSS 输出路由到 GPIO14、并且您正在使用 ECAP1进行捕获。 只有 INPUTXBAR7进入 ECAP1。 然后、使用(InputXbarRegs.INPUT7SELECT = 14)将 INPUTXBAR7配置为抽头 GPIO14。 如果您需要有关如何配置 ECAP 以测量频率的帮助、我们在 C2000Ware 中提供了一些有用的示例、您可以查看这些示例。 如果不清楚、请告知我们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    如您所述、我通过 OUTPUTXBAR5将信号路由到 GPIO7、并通过 InputXbarRegs.INPUT7SELECT = 7读回该信号。

    我首先尝试在连续模式下测量频率、如《技术参考手册》示例3第16.6.3章中所述。 但测量结果不可用。 它实际上是随机的。

    借助 C2000Ware 的"ECAP_Capture_PWM_cpu01"示例、可以在 OneShot 模式下获得具有良好分辨率的有用结果。 现在、我能够将输出 PWM 频率与输入频率同步。

    感谢你们的帮助:)

    Martin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴为您提供帮助。 如果您遇到更多问题、请告知我们。