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.

[参考译文] TMS570LC4357:使用 ePWM 或 N2HET 在特定时间内保持特定占空比

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1501508/tms570lc4357-using-epwm-or-n2het-to-hold-a-specific-duty-cycle-for-a-specific-time

器件型号:TMS570LC4357

工具/软件:

我有一个 LTC2644 DAC 连接到共享 ePWM/N2HET 引脚。  我希望在该输出上生成占空比在1ms 至2ms 之间变化的低频 PWM 输出(50Hz)、用于伺服控制。  我想避免主板上的任何硬件更改(例如移除 LTC2644)。  其原理是、由于输出频率较低、我们可以通过保持 LTC2644来实现这一点。

LTC2644通过 PWM 进行控制、并根据输入信号的占空比产生电压电平。  当外部电压基准为5V 时、1%的输入占空比会产生0.05V 电压、而当99%时、它会跳至4.95V。  任一方向的稳定时间均为8us。

要产生占空比为1ms 的50Hz PWM 输出、 必须迭代以下代码:

-以99%的占空比向 LTC2644提供输入 PWM 信号 1ms

- 1ms 后, 提供一个占空比为1%的输入 PWM 信号,并在20ms 周期的剩余时间内保持该信号- 19ms

伺服控制将需要稳定的1ms 至2ms 占空比、并相应地调整方向。

由于我可以选择使用 EPWM 或 NHET --一个比另一个更适合运行上述在1-2ms 范围内具有严格时序要求的程序吗?

您能否分享可以实现这一点的示例代码?

谢谢!

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

    我在想,如果你有一个指针?

    ePWM 模块是否可用于实现以下目标:
    -我们必须能够在1到2毫秒的时间间隔内设置一个特定的时间 T_high "从外部"。 这是将在主程序中不时更新并由 ePWM 模块使用的一个参数。
    - EPWM 将执行以下操作:它将交替使用99%和1%的占空比,并精确地保持99%的占空比以达到上述 T_HIGH。 然后持续(20ms - T_HIGH)、它将保持1%占空比。
    -重复相同的模式,直到 T_HIGH 被更改为另一个值。
    - PWM 信号的频率是固定的,例如10 kHz。

    我在 TRM 中有点迷失了如何实现这一点。 在硬件中、通过使用 AQ 模块和/或影子寄存器交换99%和1%的占空比、这是否完全可以实现、或者这是否需要对 CPU 进行中断?

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

    您好 、很棒、

    我真诚地道歉的反应延迟,我休息了几天,所以没有得到任何时间来处理这个问题。

    [引述 userid="586213" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1501508/tms570lc4357-using-epwm-or-n2het-to-hold-a-specific-duty-cycle-for-a-specific-time

    由于我可以选择使用 EPWM 或 NHET --一个比另一个更适合运行上述在1-2ms 范围内具有严格时序要求的程序吗?

    您能否分享可以实现这一点的示例代码?

    [/报价]

    这些要求可以  通过 EPWM 或 NHET 来实现。 两者都可以支持这一点、但与涉及另一个专用计时器内核的 NHET 相比、EPWM 是实现 PWM 的更简单方法。

    您可以通过以下链接访问 Hercules 演示:

    (+)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    下面突出显示的示例基于 ePWM:

    在本例中、我们生成周期为6.25us 的 PWM、您可以将其作为参考、并根据您的要求更改参数。

    --
    此致、
    Jagadish。

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

    谢谢、jagadish gundavarapu。  根据我们的要求、 周期是恒定的、但我们需要在特定的精确时间(例如1ms)内应用99%的占空比、然后在该时间之后立即应用1%的占空比(例如、持续19ms)。  该图案会在之后重复出现。  时间(1ms)可在其运行期间通过程序进行调整。  您有什么建议如何最好地实现此目标?  我想中断可能不够精确、无法实现这一点。    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但我们需要在特定的精确时间(例如1ms)内应用99%的占空比、然后在该时间之后立即应用1%的占空比(例如、持续19ms)。

    之后立即意味着您只想在下一个周期中执行该操作。

    我的意思是、在第一个周期中、您希望 tON=19ms 且 tOFF=1ms、在第二个周期中、您希望 tON=1ms 且 tOFF=19ms、这样您就希望继续采用此模式。 这是您的要求吗?

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

    抱歉、这是更精确的要求:

    - PWM 周期始终相同(比方说50 Hz)

    -让我们呼叫99%占空比处于活动状态的时间。 我们将 toff 称为1%占空比处于活动状态的时间。  TOFF 始终为(20ms - ton)。   

    -让我们把20毫秒的"周期"

    -以99%的占空比开始"周期",持续时间为吨。  之后、在 TOFF 的持续时间内切换到1%占空比。

    感谢你的帮助。

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

    您好 、很棒、

    我认为中断可能不够精确、无法实现这一点。    [/报价]

    在 EPWM 中、周期和占空比将由 TBPRD 和 CMPA 寄存器的值决定。

    例如、以下是50%占空比的值:

    因此、您可以在这里创建一个小型 API 来根据输入更新占空比。

    例如、

    void etpwmSetDutyCycle(etpwmBASE_t *etpwm, uint8 dutycycle)
    
    {
    	uint16_t dutycycle_value;
    	if(dutycycle > 100)
    	{
    		return; /*Duty cylce should be between 0 to 100*/
    	}
    	dutycycle_value = ((etpwm->TBPRD * dutycycle) / 100);
    	etpwm->CMPA  = dutycycle_value;
    }

    因此、每当需要使用所需百分比更新信号的占空比时、您可以调用上述 API。

    --
    此致、
    Jagadish。

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

    谢谢 Jagadish gundavarapu。  我认为中断不够准确: 例如、让计时器到期(在 tON = 1ms 后)、触发中断、更新 PWM 设置、然后继续 TOFF = 19ms、中断、更改设置、然后重复。  是否有方法在硬件中实现这一点?  大概 N2HET 具有该功能、但 EPWM 不具有该功能?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为中断不够精确: 例如、让计时器到期(tON = 1ms 后)、触发中断、更新 PWM 设置、然后持续 TOFF = 19ms、中断和更改设置、然后重复。  是否有方法在硬件中实现这一点?  大概 N2HET 具有该功能、但 EPWM 不是?

    我想您也可以尝试使用中断、因为在这里、我们正在运行 ms 的实习生、中断速度足够快、可以在这段时间内执行 int。

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

    谢谢、 jagadish gundavarapu。 您是否有关于中断的准确程度的任何建议?  对于伺服控制、TON 将在1ms 到2ms 之间变化。  在1ms 到2ms 之间的范围将被映射到(至少) 100个步长、因此分辨率和精度将为 10微秒。

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

    你(们)好  

    对延迟的回复表示歉意。

    我在下面的主题中提到了这些器件中的中断延迟。

    (19) TMS570LC4357:portYIELD_INDY_API 行为-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    如果 GCLK 是300MHz、则中断延迟将<=(47/300m)。

    即<=156nS。

    --

    此致、
    Jagadish。