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.

[参考译文] TMS320F2.8377万S:ePWM软件同步不工作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/573037/tms320f28377s-epwm-software-sync-not-working

部件号:TMS320F2.8377万S

大家好,我们遇到了2个ePWM模块之间的软件同步问题。 我们已使用以下代码初始化ePWM2和ePWM3:

// PWM2B,1KHz
EPwm2Regs.TBCTL.bit.PRDLD = TB_shadow;
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_DOWN;
EPwm2Regs.SYCTL.bit.PHTB= TB_enable;CTwm2Regs.PCCTL.bit.EPCCL_SE_DIV
= DEV2.TB_DEV
= EPmSION_SE_DEV =
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm2Regs.TBPRD = 5万; //设置计时器周期,TBCLK / 5万 = 1ms --> 1kHz
EPwm2Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0
EPwm2Regs.TBCTR = 0x0000; //清除计数
器EPwm2Regs.CMPB.bit.CMPB = 2.5万; // Duty 50 %
EPwm2Regs.AQCTLB.bit.PRD = AQ_SET;
EPwm2Regs.AQCTLB.bit.CBB = AQ_CLEAR;
EPwm2Regs.TBCTL2.bit.PRDLDSYNC = 2;
EPwm2Regs.CMPCTL.bit.LOADBPWNC = 2;

// SYMPWNC 2kHz
EPwm3Regs.TBCTL.bit.PRDLD = TB_shadow;
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_DOWN;
EPwm3Regs.TBCTL.bit.PHSEN = TB_enable;EPwm3Regs.CTCL.bit.PCNCOTB= EPw_DIV2.TB_DIV=


EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm3Regs.TBPRD = 2.5万; //设置计时器周期,TBCLK / 5万 = 1ms --> 1kHz
EPwm3Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0
EPwm3Regs.TBCTR = 0x0000; //清除计数
器EPwm3Regs.CMPA.bit.CMPA = 1.25万; // Duty 50 %
EPwm3Regs.AQCTLA.bit.PRD = AQ_SET;
EPwm3Regs.AQCTLA.bit.CAD = ASYAQ_CLEAR;
EPwm3Regs.TBCTL2.bit.PRDLDSYNC = 2;
EPwm3Regs.CMPCTL.bit.LOADNC = 2;

在代码中的某个时刻,我们需要使用软件同步模式更新频率和占空比。 我们发布频率和软件同步的更改,如下所示:

EPwm2Regs.TBPRD = 2.5万; //设置计时器周期ePWM2B
EPwm2Regs.CMPB.bit.CMPB = 1.25万;// Duty 50 %
EPwm3Regs.TBPRD = 1.2万; //设置计时器周期ePWM3A
EPwm3Regs.CMPA.bit.CMPA = 6000; // Duty 50 %

EPwm2Regs.TBCTL.bit.SWFSYNC = 1;//相位软件同步

我们预期PWM信号从每个ePWM单元中的周期值开始,但仅ePWM2重新启动。ePWM3继续以相同频率进行。

有人能帮我们吗? 出什么问题了?

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

    您是否尝试过像为ePWM2那样为ePWM3设置SWFSYNC位?

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

    您好,Massimo:

    我查看了您的设置,您似乎已经设置了软件同步从EPWM2传播到EPWM3的正确方式。 似乎没有生成SYNCO,尽管这是基于您所描述的EPWM3行为。

    编辑:我怀疑SWFSYNC有问题。  作为一项测试,您是否可以将EPWM2的SYNCOSEL设置为0x1,而不是执行SWFSYNC并查看EPWM2的TBCTR =0时EPWM3是否同步?  如果SYNCOSEL的另一个值更方便,您也可以使用它。

    您的系统中EPWMCLK的频率是多少(注意这不是TBCLK,而是SYSCLK/EPWMCLKDIV)?


    此致,
    克里斯

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

    请您回复。

    是的,我们尝试同步这两个装置,它工作正常。 我们将此方法用于我们的目的,但我们想知道为什么第一种方法不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们测试此选项,似乎它起作用:ePWM3波形在ePWM2的TBCTR =0时重新启动。 我们的EPWMCLK为100 MHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Massimo,

    我正在使用您的确切代码,我看到SWFSYNC正在工作。

    您如何在设备上检查此项?  我看到,如果我单步执行SWFSYNC指令或在表达式窗口中写入SWFSYNC指令,它将不会生效。  我右键单击并在SWFSYNC指令上执行了"移至行",然后在某些NOP的末尾设置断点并看到它成功执行。

    我没有示波器,所以我的验证方法是将EPWM3上的TBCTR修改为远不同步的内容,并验证执行以下操作后计数器是否恢复同步。

    EPwm2Regs.TBCTL.bit.SWFSYNC = 1;  //移至行
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    ASM (" NOP");
    asm (" NOP");  //设置断点

    此致,

    克里斯