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:初始 PWM 脉冲看起来很短

Guru**** 2539500 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1406908/tms320f28379d-initial-pwm-pulse-looks-very-short

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARESysConfig

工具与软件:

大家好!

我有一个有关 ePWM 的(哑)问题。 我将使用 ePWM1并在此处输出高电平有效互补脉冲。 不过、我发现、开始运行代码时会有一个很短的脉冲(图片中以红色圆圈显示)、然后 PWM 波形看起来正常。 是否应该有短脉冲? 还是有什么问题?

谢谢!

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

    Justin、您好!

    您如何初始化 PWM 以及何时启动 PWM 外设时钟(TBSYNC 位)?

    您是否已使用我们的某个 C2000Ware EPWM 软件示例和/或使用示例中的初始化作为参考?

    此致、

    Allison

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

    您好、Allison、

    是的、我根据 C2000Ware 示例设置 ePWM。 请查看如何设置:

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增计数
    EPwm1Regs.TBPRD = 1000;//设置计时器周期
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loading (禁用相位加载)
    EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;// Phase 为0
    EPwm1Regs.TBCTR = 0x0000;//清除计数器
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;//时钟与 SYSCLKOUT 的比率
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;

    //将影子寄存器加载设置为零
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;// Enable shadow mode (启用影子模式)
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//当时基计数器等于零时更新寄存器
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

    //设置比较值
    EPwm1Regs.CMPB.bit.CMPB = 500;//设置比较 B 值

    //设置操作
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;//将 PWM1A 设置为零
    EPwm1Regs.AQCTLA.bit.CBU = AQ_clear;//在事件 B 上清除 PWM1A

    //设置死区时间
    EPwm1Regs.DBCTL.bit.out_mode = DB_FULL_ENABLE;
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
    EPwm1Regs.DBCTL.bit.in_mode = DBA_ALL;
    EPwm1Regs.DBRED.bit.DBRED = 40;
    EPwm1Regs.DBFED.bit.DBFED = 40;

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;

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

    Justin、您好。

    感谢您的跟进。    本周我将尝试查看此信息、但可能会有几天的响应延迟。 感谢您的耐心等待。

    此致、

    Allison

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

    您好、Allison、有任何这方面的更新吗?

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

    Justin、您好。

    很抱歉耽误我的时间、我已经离开办公室了很多时间。 您能否尝试删除死区配置、而只生成独立的通道 A 和 B 互补信号(为通道 B 添加动作限定符)、看看您是否看到具有相同的行为?  

    您看到初始脉冲打开的通道(A 或 B)? 您只使用通道 A、然后使用死区互补信号生成输出 B、对吗?

    此致、

    Allison

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

    您好、Allison、感谢您的回复。 通道 B 是我看到初始脉冲开启的通道。 基本上、如果我不使用死区配置并手动设置 A 和 B、问题就会消失。 这可能与死区模块相关吗?

    另外还有一个单独的问题、当我想相对于 PWM 1对 PWM 4进行相移时、指定该参数的最佳方法是什么? 现在、我只知道使用 EPwm4Regs.TBCTL、bit.SYNCOSEL = TB_SYNC_IN、但如何指定来自 PWM 1的 SYNC_IN? 我看不到相关选项。

    谢谢!

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

    Justin、您好。

    是的、死区模块负责该初始脉冲。

    您看到这种行为的原因是通道 A 和通道 B 输出从低电平开始。 当您将死区配置为反转通道 A 以生成通道 B (在启动 ePWM 计数器之前)时、这种更改将 在输出端实现、并导致通道 B 最初变为高电平-这是在计数器从0开始计数之前、然后可以将 EPWMA 驱动为高电平、EPWMB 为低电平。 您可以尝试在需要时通过在输出上启用上拉/下拉来改变这种行为。

    关于第二个问题、可以使用 EPWM1同步输出脉冲来同步 EPWM4和 EPWM1。 如果您需要一张可视图、可在 TRM 中找到同步方案图:  

    可以使用 SYNCSELECT 寄存器选择 EPWM4同步源信号。 此信息也可在器件 TRM 中找到:

    因此、默认情况下、如果启用相移、则选择 EPWM1SYNCOUT 脉冲用作 EPWM4的同步源。

    此致、

    Allison

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

    感谢您发送编修。

    要跟进相移 PWM:SYNCSELECT.EPWM4SYNCIN 的完整代码是什么? 只需键入此行便会出现错误。 我猜 SYNCSELECT 之前有什么东西吗?

    另外、ePWM1处于递增模式、SYNCOSEL 为零。 但是当我用公式 TBPRD*PHASE/PI 设置 ePWM 2的相位时、却没有给我想要的相位。 在某些情况下是否需要修改此公式? 谢谢。

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

    Justin、您好。  

    同步选择寄存器实际上来自系统控制同步寄存器、因此我认为您应该有这样的结果:

    •   SyncSockRegs.SYNCSELECT.bit.EPWM4SYNCIN = 0;

    额外信息、但我想强调的是、您还可以使用以下方法之一来设置 EPWM4同步源:

    • 使用 Driverlib 函数:  SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM4, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
      • 来自 sysctl.h 文件({C2000Ware}\driverlib\f2837xd\driverlib\sysctl.h)的代码片段:

    • 使用 SysConfig

    关于您帖子的后半部分:

    • 我建议查看我们的 ePWM 开发人员指南: https://www.ti.com/lit/an/sprad12a/sprad12a.pdf
    • 我还要尝试在这里解释一下:相移 TBPHS 参数需要'TBCLK'周期中的一个值-与 TBPRD 一样。 当 EPWM1 TBCTR = 0上出现同步脉冲时、TBPHS 值被加载到 EPWM4的 TBCTR 中。 下面是一个示例场景:
      • EPWM1周期为300、CTR 上的 SYNCOUT = 0
      • EPWM4周期为300、SYNCIN 源为 EPWM1 SYCNOUT
        • 如果您想要180度的相移、则可以使用 TBPHS = 150。 当 EPWM1计数器达到0时、EPWM4计数器将跳转至150并继续计数。
        • 如果希望 EPWM1、EPWM2、EPWM4相互偏移120度、且同步脉冲源 EPWM1 CTR = 0、则可以使用 EPWM2 TBPHS = 100、EPWM4 TBPHS = 200。 这样、当 EPWM1 CTR = 0时、EPWM2 CTR = 100、EPWM4 CTR = 200。  

    希望这 对您有所帮助!

    此致、

    Allison

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

    谢谢 Allison,这解决了我所有的问题!