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:HRPWM 在通过 Simulink 生成代码时不起作用(具有 C2000支持包)

Guru**** 2539500 points
Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/593168/tms320f28379d-c2000-launchpad-hrpwm-doesn-t-work-when-generating-code-from-simulink-with-c2000-support-package

器件型号:TMS320F28379D

您好!

由于我不知道是谁准确设计了 C2000 Simulink 块集、我在这里提出我的问题。

我想使用上述封装中的 F2837xD 块来创建四个同步的100kHz、50%占空比 PWM、每个 PWM 相对于其他 PWM 相移。
目标是实现相移双半桥直流/直流转换器的控制。 因此、PWM 1和2必须是180°异相、PMWS 3和4也是如此。 硬部件可精细控制 PWM1和 PWM3之间的相位(实际上控制转换器)。
我构建了一个在 LaunchPad C2000 TMS320F28379D 上运行的实验模型。 ePWM 时钟速率设置为100MHz (SYSCLKOUT/2)、每个 ePWM 模块中的时基时钟预分频器为1。

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

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

代码生成器不会生成代码来使用相移值更新 TBPHSHR 寄存器。 它只将 TBPHSHR 初始化为零。 因此、我看不到十进制、因此我要说输出信号中相移的"高分辨率"部分。 我使用200MHz 示波器和500MHz 探针直接测量引脚上的信号。 我只看到一个与正常 TBPHS 寄存器相对应的相移(相移的整数部分)。  
是否有解决方法或修复程序?



此致

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MathWorks 编写了此支持。 我会将您的错误报告转发给开发团队、并报告我了解的任何其他信息。

    谢谢、
    -Brian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是哪个版本的 MathWorks 软件?

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

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

    我确认开发团队 正在研究这一点。 当我了解更多信息时、我会发布。

    -b.

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

    您好、Matthias、

    我被告知您正在与 MathWorks 高级支持部门合作解决此问题。  请继续通过该渠道工作-这是前进的最佳/最快方式。

    谢谢、

    -Brian

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

    您好 Devin、


    目前这只是一个临时修复、但我已经获得了一些文件、这些文件可以通过 Simulink Blockset 启用 HRPWM。

    它通常可以工作、但仍有2个问题:

    测量的 PWM 相移与寄存器值不完全匹配。 这不是由于测量误差(示波器)、因为当我线性增加 TBPHSHR 寄存器值时、相移不会线性增加。 误差(实际相移减去理想相移)随相移增大。
    2.相移的"小数部分"(如为5.25)从"整数部分"减去。 当相移值超过整数边界时、这会导致"跳转"。

     这将导致以下相移寄存器值和测量的相移(显示为基准 PWM 和移位 PWM 之间的时间差)。 PWM 频率为100kHz。

     4.00 -> 40.2ns
     4.25 -> 37.8ns
     4.50 -> 35.4ns
     4.75 -> 32.9ns
     5.00 -> 50.3ns
     5.25 -> 47.8ns
     5.50 -> 45.4ns
     5.75 -> 43.0ns
     6.00 -> 60.2ns
     
     预期值为
     
     4.00 -> 40.0ns
     4.25 -> 42.5ns
     4.50 -> 45.0ns
     4.75 -> 47.5ns
     5.00 -> 50.0ns
     等等
     
     您可以清楚地看到实际值和理想值会偏离。 此外、还有这个"跳转"问题。
     所有时间偏移都直接在 LaunchPad 的引脚上测量、示波器的 GND 鳄鱼夹连接到 LaunchPad 上的一个公共 GND 引脚。
     
     
    我还应该补充一点、相移为负(即相移信号在基准之前切换为"高电平")。
    首先、我预期会出现正相移(即移位信号相对于主器件/基准 PWM 被延迟)、但如果问题1和2不会发生、这不会是一个问题。

    您能否解释为什么会发生这种情况(至少是行为的一部分)? 这是我的最终故障吗?


    Matthias

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我应该补充的是、我之前直接在 Code Composer Studio 中写入 TBPHSHR 寄存器、以调试由 Simulink 生成的代码。
    在这里、它还显示了 TBPHSHR 寄存器值和实际相移之间的差异不断增大。 这是什么原因?

    Simulink 代码中定期更新每个 ePWM 模块的 TBPHSHR 寄存器值的部分当前如下所示:

    110{
    111.extern int MEP_ScaleFactor;
    112REAL_T TBPHSf = Converter_DHB2_PWM_LaunchPad_B.phi1_val;//从 Simulink 块获取(最大计数*相移/360)
    113TBPHSf = EPwm4Regs.TBPHS.bit.TBPHS;
    114TBPHSf *= MEP_ScaleFactor;
    115EPwm4Regs.TBPHS.bit.TBPHSHR =((uint16_T) TBPHSf <8)+ 0x80;
    116}

    就我所见、这与《F28379D 参考手册》第1852页的说明相匹配。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mathworks 的临时修复解决了 Simulink 的 ePWM 代码生成问题。

    但是、PWM 信号仍然不会按预期输出。 我认为这是我的误解。

    从技术上讲、这是一个新问题、与 Simulink 无关、因此我将打开另一个线程。

    Matthias