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.

[参考译文] TMS320F28379D:C2000 LaunchPad:ePWM 脉宽和周期不匹配寄存器设置

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/593175/tms320f28379d-c2000-launchpad-epwm-pulse-width-and-period-don-t-match-register-settings

器件型号:TMS320F28379D

您好!

我想使用上述封装中的 F2837xD 块来创建四个同步的100kHz、50%占空比 PWM、每个 PWM 相对于其他 PWM 相移。

我使用的方案如下:ePWM12生成一个100MHz 的"主时钟"(频率与 ePWM 时钟相同)、每当计数器到达零时、就会生成一个 SYNCOUT 信号。 我使用该 SYNCOUT 信号来同步其他"从"PWM (ePWM1到 ePWM4)。 后者具有同步功能。 输出设置为"Pass Through (直通)"。  从器件共享主器件的计数器周期值(ePWMLink TBPRD 设置为 ePWM12)。
由于需要高分辨率、我在从 ePWM 模块(而不是主器件)中启用了选项"启用高分辨率 PWM (HRPWM)"。 我以十进制的形式输入相移值(在这种情况下、我尝试了寄存器值10.25、该值应"细分"为 TBPHS 和 TBPHSHR 值)。 TBPHSHR 现在不起作用、但这是另一个故事。

因此、我遇到了一个错误:

对于恰好为100kHz、50%占空比的情况、我必须将 ePWM12计数器周期值更改为991而不是1000、将占空比的计数器比较值更改为492而不是500。 我不向基准计数器(ePWM12)施加相移。 在数学上正确的值与真正需要的值之间出现这种错误的原因是什么?




此致

Matthias
学生(英格斯塔特应用科学大学)


PS:我正在使用 C2000 Simulink 块集生成代码、但我认为这不会导致问题。 我确认代码仅将从 Simulink 接收到的值复制到相应的寄存器中。

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

    如果 ePWM 频率关断约1%、我猜是您使用内部振荡器为器件计时。 如果您需要绝对频率非常精确、则应使用外部 XTAL 或单端振荡器。 该 LaunchPad 提供10MHz XTAL、其精确度应达到约30ppm。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Devin、

    我已经确保使用外部振荡器(通过取消选中 Simulink 中"硬件实现"设置中的"使用内部振荡器"选项)。
    这一点由生成的代码确认、该代码不访问相应的 CLKSRCCTL1寄存器。 因此、它仍然处于复位值("晶振(外部)振荡器打开")。

    在第1561页的 ePWM 参考手册(SPRUHM8F、2016年12月修订)中、它指出主从延迟为2个 EPWMCLK 周期。 还有其他可能的延迟来源吗? 我猜、多个延迟的总和可能导致我不得不使用太小的计数器比较值。 但这不会解释计数器周期值。

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

    您好、Matthias、

    您是否始终希望频率恰好为100kHz?  在这种情况下、我认为您不必更新从机定时器周期、只更新相位和比较值?

    您似乎也可以通过仅使用4个 ePWM 模块来实现这一点。  您能否更详细地解释一下为什么将 ePWM12用作主器件以及此同步方案的工作原理?  此外、ePWM12如何充当主器件。  基于同步。 链我看不出这是怎么可能的...您是否将 ePWM12输出回路到用作同步的引脚。 输入?

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

    在我的应用(直流/直流转换器)中、频率和占空比是参数、即我为每个参数选择一个值并保留它们。
    另一方面、相移是一个变量、也就是说、它必须在程序执行期间可改变。 因此、它是我的 PWM 信号最重要的属性(它控制我的直流/直流转换器传输的功率量)。

    我不会将任何引脚回路到另一个引脚、即我不使用 EXTSYNCIN 信号。

    至于为什么我使用 ePWM12作为所有 PWM 信号的基准:我最初只咨询了 Simulink Blockset wiki (de.mathworks.com/.../c280xc2802xc2803xc2805xc2806xc2833xc2834xf28m3xf2807xf2837xdf2837xsepwm.html )
    因此、我犯了不查找上面的同步方案的错误。 正如您所说、我最初只想使用4个 PWM、但无法使 ePWM 1到4同步。 我的一位同事还尝试了相同的块集、并通过使用 ePWM12生成 PWM 信号并将从机模块的"ePWMLink TBPRD"设置为 ePWM12来使其正常工作。 从器件的同步输出设置为"直通"。

    对于上述图片、这是否意味着我应该能够使用 ePWM1和4、5、6来同步4个 PWM、并且您可以同步的最大 ePWM 数为6、即 ePWM1、4、7、10、 11、12?

    我将尝试使用 ePWM1、4、5和6并返回报告。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Matthias、

    如果你想使用1个主器件和 X 个从器件、你实际上可以使用 ePWM1作为图中所有内容的主器件。 这是因为同步信号具有扇出功能...您不必仅通过菊花链实现同步。

    例如、如果 ePWM1是主器件、则可以将 ePWM2设置为直通、以使 ePWM2和 ePWM3同步到 ePWM 1。 然后、您可以将 ePWM4 syncin MUX 设置为也使用 ePWM1同步信号、然后将 ePWM4和 ePWM5设置为直通、以使 ePWM4、5和6与 ePWM1同步。

    如果/您执行菊花链的位置、我们将菊花链中的最大模块数指定为4。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Devin、

    您的建议非常有帮助。 例如、如果我使用 ePWM1作为主器件、使用4、5、6作为从器件、则其工作方式如上所示。
    再次查看参考手册、我还看到、建议不要同步超过4个串联的 ePWM 模块。
    这仅适用于最长的"链"、对吧?
    例如、对于8个同步 PWM、是否可以使用 ePWM1作为"光主控并同步从器件 ePWM4、5、6、7、8、9、10?

    现在、我只需要额外使 HRPWM 工作、我就达到了我的目标。


    仅供您参考(或将来阅读此主题的任何人):我现在使用的方案
    -所有 ePWM 计数器都向上计数并计时为100MHz
    -所有计数器使用 ePWMA 并在 COUNTER=CMPA 时设置 PWM、在 COUNTER=PRD 时清除。 因此、我可以对 PWM 上升沿进行相移、从而能够补偿主器件到从器件的延迟(请参阅下文)。
    -主 ePWM:
    ->对于一个 T 周期、使用计数器周期值 PRD = T- 1
    ->对于占空比 D,使用计数器比较值 CMPA =(1-D)*T - 1
    -从器件 ePWM:
    ->由于主器件到从器件的延迟为2个时钟周期(请参阅 TRM 第1561页)、将从器件的 PRD 和 CMPA 值设置为小于主器件的计数。

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

    谢谢! 我想这个主题的原始问题现在已经得到了解答。
    您指向上述图片的指针是解决方案的关键。 我建议您将相应的帖子作为答案。

    关于 HRPWM 的使用、我将尝试在 Mathworks 的支持下找到答案。
    问题似乎出在 Blockset 中的某个位置和一段丢失的生成代码。

    我将等待给出"答案帖子"的建议、直到我使 HRPWM 正常工作。 如果 HRPWM 和正常 ePWM 之间的交互存在其他问题、就可以这样做。

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

    很高兴现在大部分事情都在工作!

    这4个模块实际上仅指最长的链、因此我认为这对您来说不是问题。

    我将对 Mathworks 执行 ping 操作、并要求他们使用他们提供的任何解决方案来回复此主题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Devin、

    由于 ePWM 模块本身已经工作了一周以上、我将结束此主题。感谢您的帮助!


    与此同时、我让 HRPWM 与 Simulink Blockset 一起工作(Mathworks 为我提供了热修复)。 它的相移仍然不符合预期、但这是另一个主题: e2e.ti.com/.../2180056

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Matthias
    我正在使用三端口直流/直流转换器-我想编写用于为三桥电路生成6个 PWM 信号的程序。 请帮帮我。 这是我的规格:频率20kHz,占空比=50%。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matthias

    您能给我提供您的 Simulink 文件吗...我想看看 problem....psher@rediffmail.com 是什么

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

    你(们)好

    我尝试将我使用的 Simulink 文件附加到此帖子。

    从此处开始、您只需复制 ePWM 块、对其进行"重新布线"并更改其值(最重要的是、PWM 模块编号)、即可构建任意数量的 PWM 信号。 e2e.ti.com/.../PWM_5F00_LaunchPad.zip

    每个块值的含义由每个块上方的文本描述。 您可以直接更改这些值、也可以使用滑块将其更改为"实时"(在 Simulink 的"外部模式"中)。 如果模型太慢、请移除滑块。

    请注意,模型中的“系统初始化”和“空闲任务”块据说通过定期调用函数“update_MepScaleFactor()”来帮助避免问题,但它们似乎并不重要。 您可以根据需要尝试添加/删除它们。

    PS:我在接下来的两周内不会上网。 抱歉。