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.

[参考译文] TMS320F28388D:如何根据脉冲宽度过滤 GPIO 引脚上的输入脉冲?

Guru**** 2581275 points
Other Parts Discussed in Thread: TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1259970/tms320f28388d-how-should-one-filter-input-pulses-on-a-gpio-pin-based-on-the-pulse-width

器件型号:TMS320F28388D

您好!

我需要根据  脉冲高部分的宽度过滤 GPIO 上的输入脉冲。 如果高电平脉冲的宽度大于特定的 阈值、则  将执行进一步的操作。 如果高电平脉冲的宽度小于阈值、则不会执行进一步的操作。

我知道、我可以使用 在脉冲上升沿发生的 GPIO 中断来开始某种在倒计时结束后调用中断函数的倒计时(周期等于脉宽阈值的周期)。  "倒计数中断"可以 作为 CPU 计时器中断或 ePWM 中断实现。 如果在倒计时结束后 GPIO 引脚的状态仍然为高电平(并且没有下降沿发生)、则将执行进一步的操作;否则将为不工作。

不过、我想知道是否有更巧妙的方法 来检查 使用较少 F28388D MCU 器件的脉冲宽度。 GPIO 引脚的输入鉴定起初似乎充满希望、但进一步的分析表明、它不足以鉴定真长脉冲宽度。 根据 TMS320F28388D 技术参考手册中的公式、  

5 × 2 ×GPxCTRL[QUALPRDN]×TSYSCLKOUT

使用 GPxCTRL[QUALPRDn] 最大值255和 SYSCLK 频率200 MHz (0.005微秒时钟周期)可以实现的最长6样本采样窗口为12.75微秒。 12.75微秒的窗口不够、因为我需要测量最长100微秒的脉冲。

考虑到我所述的限制条件、如果无法简化该过程、请确认我必须使用某种延时中断(和下降沿触发的中断)来实现 这种滤波逻辑。

此致、

李孝华

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

    您好、Howard、

    您是否曾为此而尝试使用 ECAP? 听起来类似于您想要执行的操作、并显著减少软件开销。

    此致、

    文斯

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

    ECAP 可用于测量脉冲宽度、但如果脉冲宽度无限长(即引脚永远不会恢复为低电平状态)该怎么办? 我仍然需要某种基于时间的中断、以硬性规定在就脉冲作出决定之前需要经过多少时间。

    现在、如果计数器比较中断事件在捕获模式下可用、ECAP 本来是作业的完美选择。 但是、计数器比较事件仅在 ECAP 模块配置为 APWM 模式时可用。

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

    您好、Howard、

    我将就此再次与 ECAP 专家核实、因为我确实相信他们有能力按照您的要求做一些事情。 具体而言、我认为您可以将两个 ECAP 模块路由到同一个引脚、并将 APWM 用于计数器比较中断、而将另一个 ECAP 模块用于测量脉冲宽度。 这就是 ePWM 模块、也可以是带有 ECAP 模块的 ePWM 模块。 让我与他们核对一下、让他们提供一些见解。

    此致、

    文斯

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

    您好、Howard、

    ECAP 具有溢出标志、用于检查 TSCTR 是否达到最大值0xFFFFFFFF。 这可用于检查脉冲宽度是否无限长。  
    在 ISR 内、您可以选择在第二个边沿(或下降沿)发生的中断。 当第二个边沿可用时、您可以获取第二个边沿和第一个边沿之间的时间差来查看已经过去的时间。 如果时间大于100us、您可以实施进一步的逻辑。 如果时间小于100us、则可以继续、如果时间溢出意味着没有接收到脉冲、则可以将其用作事件来生成中断。

    另一个实施建议是 您可以使用2个 eCAP 模块。 一个处于 APWM 模式、另一个处于 CAP 模式。 采用 CAP 模式的稳压器可用于在发生第一个事件时生成中断、并向处于 APWM 模式的 eCAP 发送 SWSYNC。 SWSYNC 可以向 TSCTR 寄存器写入0、这样您就知道在第一个边沿上、eCAP 模块从出现的第一个边沿开始递增计数。  然后、处于 APWM 模式的 eCAP 可以开始向上计数、并且可以在 TSCTR 等于定义的 CMP 值时进行事件检查。 选中 CTR_EQ_CMP (或 TSCTR 达到最大值)后、您可以生成中断并执行必要的操作。  

    此致!

    马瑞安