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.

[参考译文] TMS320F28335:在我的工作代码中添加 ePWM 一段时间作为已连接硬件的启动信号

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1265455/tms320f28335-adding-epwm-in-my-working-code-for-sometime-as-start-up-signal-for-my-connected-hardware

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

尊敬的社区成员:

我几天前发布了一个主题、涉及 EPWM、eCAP 和 pid 例程代码实现、其中 EPWM 是主要问题。 此线程已解决、我的代码也用于某项任务。(请查找以下代码)。 这次我需要稍微改变一下。  

首先 我希望 ePWMA 和 ePWMB 临时运行大约2-3秒、  

则 必须转移到正常工作代码、正常运行的代码 (其中、eCAP 从函数发生器获取周期或占空比信号、然后它在 main 函数中处理 pid 例程代码的 while 循环、然后一次相应地生成 EPWM 信号)。

这样做的原因是、在不捕获信号的情况下、首先生成2-3秒的启动 ePWM 信号、以便连接的硬件将平稳运行一段时间、然后在2-3秒之后、启动信号应停止并开始使用 ECAP 从函数发生器接收信号。  

问题是我对应该在我的主函数中添加这个启动 ePWM 例程代码的地方感到困惑(我猜就在 Setup_ePWM1之后); 第85行)、然后延迟3秒钟、在此延迟之后、 启动 ePWM 例程代码 将不再运行、因为启动信号会初始化连接的硬件、然后它必须移动/移动到我的正常工作代码以获得进一步的指令(eCAP > pid_while _ePWM 同时运行)。 (请记住:此启动信号必须运行一次且不应再次执行。)

对于延迟、我想 延迟(...) ;在术语代码中使用。

工作代码附在此处:

请根据相关建议

此致

阿尔萨兰

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

    尊敬的 Arsalan:

    我应该在我的主函数中添加此启动 ePWM 例程代码 (我想就在 Setup_ePWM1()之后; 第85行)、然后延迟3秒钟、在此延迟之后、 启动 ePWM 例程代码 将不再运行、因为启动信号将初始化连接的硬件、然后它必须移动/移动到我的正常工作代码以获得进一步的指令

    这是一个很好的方法、因为 while 循环外部的任何内容都应该只运行一次。 设置 ePWM 后、您可以调用启动例程。

    Unknown 说:
    请记住:此启动信号必须运行一次且不能再次执行。

    while 循环之前的任何内容只会运行一次、添加延迟应该可以解决您的问题。

    此致!

    mA

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

    您好、Ryan、

    感谢您的答复。 总是乐于助人!

    我测试了我的代码(请在下面随附)。 对于延迟、 我使用行90行129的"for loop"在 EPWM (Setup_EPWM1、2 ();)初始化之后启动 EPWM 信号。 Loop 之后的下一行是 ECAP 初始化(Setup_ECAP ();。

    结果:调试后、我有 PWM 信号作为启动时的第一个(绿色按钮)。 然后、打开函数发生器以捕获正常工作任务的信号(eCAP -> pid->PWM)。 这工作正常。 谢谢。

    问题是关于我的 for Loop、

    对于(j = 0;j<90000;j++);…… 选择90000意味着延迟多少秒? 因为我尝试了 j 的几个值、但并非所有值都在循环中有效。 我只需要3秒的延迟。 那么、如何计算3s 的 j 值?  

    此外、 您是否可以在生成延迟的代码方面建议延迟例程或函数行? 我之前从未在编程中使用过延迟函数。 我可以选择使用 delay 函数而不是 For Loop。

    代码附在此处:

    请提出相应建议。

    此致

    阿尔萨兰

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

    尊敬的 Arsalan:

    如何计算3秒的此 j 值?

    您是否曾尝试使用 C:\ti\cc2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\common\include\DSP2833x_Examples.h 中定义的名为 delay_US ()的宏来代替此循环(3s 计算可能会发生变化)?

    使用此延迟的一个示例是在 C:\ti\c2000\c2000\C2000Ware_5_00_00\device_support\F2833x\examples\sci_autobaud\example_2833x Sci_Autobaud .c 下。

    此致!

    mA

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

    您好、Ryan、

    感谢您的答复。

    从以下示例中删除了: C:\ti\c2000\C2000Ware_5_00_00\device_support\F2833x\examples\sci_autobaud\example_2833x Sci_Autobaud .c

    其中 L 表示时钟速率为纳秒(如150MHz,6.67L>6.67nano 秒)。 因此、在我的代码中、我使用该函数  DELAY_US (3000000000L); -> 3秒。

    首先、这会给我警告。  

    其次是此函 数 DELAY_US (3000000000L);我在主函数中的启动 PWM 信号生成之后使用。 该示波器显示了启动 PWM 信号、但不会在3秒的时间之后。 之后、我需要停止该信号或关闭我的启动 ePWM。 (为此、我 需要编写一些代码、以便在延迟功能之后停用 ePWM、 DELAY_US (3000000000L);  您能否建议我如何 执行此操作来停用 ePWM? 然后、它必须转移到我的下一个例程代码(设置 eCAP --pid while loop..ePWM 等)。

    代码附在此处:

    请提出相应建议。

    谢谢

    阿尔萨兰

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

    尊敬的 Arsalan:

     DELAY_US (3000000000L); [/报价]

    出现警告的原因是您得到的值过大。 如果您想要3s 延迟、您可以尝试

    DELAY_US (3000000L);

    请在此行设置一个断点、在您执行此操作时、记录经过大约多少秒后它才能转至下一行。 在 PWM 初始化之后、这应该会给您~3秒的延迟。

    您能建议如何 停用 ePWM 吗? [/报价]

    是的、您可以在完成3s 延迟后使用软件一次性跳闸关闭 PWM、从而关闭 PWM。 请查看 C2000WARE 中的 Example_2833xEPwmTripZe.c。

    此致!

    mA

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

    您好、Ma、

    感谢您的答复。

    请在此行设置一个断点、在进行步越时、记录大约多少秒后转到下一行。 这应该会在 PWM 初始化后~3秒的延迟。

    delay 函数在断点处工作、我可以记下延迟。  

    是的,您可以在3秒延迟后使用软件一次性跳闸关闭 PWM 来关闭 PWM。 请查看 C2000WARE 中的 Example_2833xEPwmTripZe.c

    我很快会检查并处理此部件。 在我解决该问题的那段时间内。

    谢谢

    此致

    阿尔萨兰