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.

[参考译文] TMS320F280039:关于 ePWM 的相移和同步问题

Guru**** 2529790 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1533239/tms320f280039-about-the-phase-shift-and-synchronization-issues-of-epwm

器件型号:TMS320F280039


工具/软件:

尊敬的专家:

请参阅随附的图像。 通道 1 对应于 PWM1A、通道 2 对应于 PWM1B、通道 3 对应于 PWM2A、通道 4 对应于 PWM2B。

  • PWM1 和 PWM2 之间的同步问题:
    如图 1 所示、通道 1 和通道 3 之间没有同步错误。 然而、在之前的测试期间、观察到了大约 16ns 的同步误差、这是无法消除的。 此行为与当前观察结果不同。


    根据文档、预计会出现同步错误。
    问题在于此同步错误是否持久且无法消除、或者是否不确定—有时存在、有时不存在、且无法控制。

  • PWM1 和 PWM2 之间的相移问题:
    如上面的配置代码所示、已经配置了相移。 但是、通道 1 和通道 3 的第一个 PWM 周期并不反映相移。 配置的相移仅从第二个 PWM 周期开始出现。
    有关详细信息、请参阅图 2 和图 3。


    此行为是否正常、或者配置是否存在问题?

代码配置(部分):

   /*----- ePWM1A/B------ */

   //配置计数器模式

   EPwm1Regs.TBCTL.BIT.CTRMODE = TB_COUNT_UPdown;

   EPwm1Regs.TBCTL.BIT.PHSEN = TB_DISABLE;

   EPwm1Regs.TBCTL.BIT.HSPCLKDIV = EPWM_HSCLOCK_DIVIDER_1

   EPwm1Regs.TBCTL.BIT.CLKDIV = EPWM_CLOCK_DIVIDER_1

 

//   EPwm1Regs.TBCTL.bit.SWFSYNC = 0U;

   EPwm1Regs.EPWMSYNCOUTEN.bit.ZEROEN = 1;

//   EPwm1Regs.EPWMSYNCOUTEN.bit.SWEN = 0;

 

   EPwm1Regs.TBCTL.BIT.PRDLD = TB_SHADOW;           //设置影子加载

   //period = 120M /Freq_PWM。 Period100k = 120M/100K=1200、TBPRD = Period/2 +1 = 601;

   EPwm1Regs.TBPRD = PWM_PERIOD_100K;//PSFB_peroid_normal-1;

   EPwm1Regs.TBPHS.bit.TBPHS = 0U;

   EPwm1Regs.TBCTR = 0U;

   EPwm1Regs.CMPA.bit.CMPA = PWM_PERIOD_100K>>>1;//(PSFB_peroid_normal-1)>>>1;             //将占空比固定为 50%

//   EPwm1Regs.CMPB.bit.CMPB = EPwm1Regs.CMPA.bit.CMPA;//EPwm1Regs.CMPA.bit.CMPA - 10

   //配置影子寄存器、当 CTR =0 时加载 CMP

   EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

   EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;

//   EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//   EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

   //配置动作限定器寄存器

   EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;             //当 TBCTR=0 时输出高电平

   EPwm1Regs.AQCTLA.bit.cad = AQ_CLEAR;           //当 TBTCR=CMPA 时输出低电平

 

   //配置死区寄存器

   EPwm1Regs.DBCTL.BIT.IN_MODE = DBA_ALL;

   EPwm1Regs.DBCTL.BIT.POLSEL = DB_ACTV_HIC;

   EPwm1Regs.DBCTL.BIT.OUT_MODE = DB_FULL_ENABLE;

   EPwm1Regs.DBRED.bit.DBRED = 0U;        //上升沿延时时间

   EPwm1Regs.DBFED.bit.DBFED = 0U;        //falling edge time delay

 

   /*----- ePWM2A/B------ */

   //配置计数器模式

   EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;

   EPwm2Regs.TBCTL.BIT.PHSEN = TB_ENABLE;

   EPwm2Regs.TBCTL.BIT.HSPCLKDIV = EPWM_HSCLOCK_DIVIDER_1

   EPwm2Regs.TBCTL.BIT.CLKDIV = EPWM_CLOCK_DIVIDER_1

 

   EPwm2Regs.TBCTL.bit.PHSDIR = 0;

 

//   EPwm2Regs.TBCTL.bit.SWFSYNC = 0U;

   EPwm2Regs.EPWMSYNCOUTEN.bit.ZEROEN = 1;

   EPwm2Regs.EPWMSYNCINSEL.bit.SEL = 1;

 

   EPwm2Regs.TBCTL.BIT.PRDLD = TB_SHADOW;           //设置影子加载

   //period = 120M /Freq_PWM。 Period100k = 120M/100K=1200、TBPRD = Period/2 +1 = 601;

   EPwm2Regs.TBPRD = PWM_PERIOD_100K;//PSFB_peroid_normal-1;

   EPwm2Regs.TBPHS.bit.TBPHS = 100;

   EPwm2Regs.TBCTR = 0;

 

EPwm2Regs.CMPA.bit.CMPA = 300u;

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

    您好:

    确保不要将 TBPHS 移位加载设置为零、而是至少设置为 2 以考虑延迟同步。

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

    这里有两个问题:第一个问题与 PWM 相移有关、第二个问题与 PWM 之间的同步有关。 您能否对第一个问题作出答复?

    关于 PWM 之间的同步问题、与 PWM1 相比、PWM2 已经延迟了大约 2 个系统时钟周期。 配置两个 TBPHS 值时、是否应在 PWM1 或 PWM2 上配置它们?

    客户已经对此进行了测试、发现在 PWM1 上配置 TBPHS 不会改善 PWM2 和 PWM1 之间的延迟。 如果在 PWM2 上配置、延迟是否会恶化?

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

    您好:

    其中一个 PMWS 将是主设备、第二个处于从设备模式。 PWM1(主器件)发送 SyncOut 脉冲、PWM2(从器件)启用相移负载、该相移负载应至少为 2。 您不应在两个 PWM 上启用相移负载、而是仅在从 PWM 上启用相移负载。 希望这有所帮助。

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

    尊敬的 Stevan:

    我们的客户有关于使用 PWM 同步的以下咨询。 您能否帮助确认所述的 PWM 同步方法在长期运行和各种条件(例如车载充电场景,高 CPU 负载和其他恶劣环境)下是否可靠且安全?

    数据表提到、同步 PWM 信号相对于同步源信号将具有 2 个系统时钟周期的延迟。 我们的测试确认了这种行为:当 PWM1 用作同步源、并且其输出用作 PWM2、PWM3 和 PWM4 的同步源时、测试结果表明 PWM2、PWM3 和 PWM4 已同步、相对于 PWM1、全部延迟 2 个系统时钟周期。

    为了在 PWM1、PWM2、PWM3 和 PWM4 之间实现同步、我们尝试使用 PWM6 作为同步源(PWM6 不输出波形,仅用作同步源)。 PWM6 的输出用作 PWM1、PWM2、PWM3 和 PWM4 的同步源。 测试结果表明 PWM1、PWM2、PWM3 和 PWM4 同步。

    虽然该方法似乎可以在 PWM1、PWM2、PWM3 和 PWM4 之间实现同步、但我们想确认该方法是否可靠且安全。 具体来说、使用 PWM6(这是一个后期的 PWM 模块,不输出波形作为同步源)是否安全?

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

    您好 Lawrence、

    两个时钟周期延迟始终存在。 可以可靠地使用 PWM1 作为主源并将其他 PWM 同步到 PWM1。 您可以选择任何 PWM 作为主源。