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.

28335中ECAP用作APWM时,EACP1和ECAP4的相位问题

本人在使用中需要四路APWM,分别用ECAP1,ECAP2,ECAP4,ECAP5做,四路pwm之间又需要移相,用于控制四路boost电路,其中ECAP1和ECAP2,ECAP4和ECAP5移相都没问题,但是ECAP1和ECAP4之间没法移相,出来的波形一直都是同步的。不知道为什么,是不是他们之间没法移相?

下面是我的代码:

ECap1Regs.TSCTR = 0x0;
ECap1Regs.ECCTL2.bit.APWMPOL = 0;
ECap1Regs.ECCTL2.bit.CAP_APWM = 1;
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;//0; //1 Ecap1 同步信号使能 跟随Epwm1。 0不同步
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 1;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;

ECap2Regs.TSCTR = 0x0;
ECap2Regs.ECCTL2.bit.APWMPOL = 0;
ECap2Regs.ECCTL2.bit.CAP_APWM = 1;
ECap2Regs.ECCTL2.bit.SYNCI_EN = 1; // Eca2 同步信号使能 跟随Ecap1
ECap2Regs.ECCTL2.bit.SYNCO_SEL = 0;
ECap2Regs.ECCTL2.bit.TSCTRSTOP = 1;


ECap4Regs.TSCTR = 0x0;
ECap4Regs.ECCTL2.bit.APWMPOL = 0;
ECap4Regs.ECCTL2.bit.CAP_APWM = 1;
ECap4Regs.ECCTL2.bit.SYNCI_EN = 0;
ECap4Regs.ECCTL2.bit.SYNCO_SEL = 1;
ECap4Regs.ECCTL2.bit.TSCTRSTOP = 1;

ECap5Regs.TSCTR = 0x0;
ECap5Regs.ECCTL2.bit.APWMPOL = 0;
ECap5Regs.ECCTL2.bit.CAP_APWM = 1;
ECap5Regs.ECCTL2.bit.SYNCI_EN = 1;
ECap5Regs.ECCTL2.bit.SYNCO_SEL = 0;
ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1;

//BUCK
ECap1Regs.CAP1 = 12000; //Set period value
ECap1Regs.CTRPHS = 0;
ECap1Regs.CAP2 = 3000; //Set Duty cycle

ECap2Regs.CAP1 = 12000; //Set period value
ECap2Regs.CTRPHS = 6000;
ECap2Regs.CAP2 = 3000; //Set Duty cycle


ECap4Regs.CAP1 = 12000; //Set period value
ECap4Regs.CTRPHS = 3000;                                                  /*ECAP4这里设置移相值没有任何变化*/
ECap4Regs.CAP2 = 3000; //Set Duty cycle

ECap5Regs.CAP1 = 12000; //Set period value
ECap5Regs.CTRPHS = 6000;
ECap5Regs.CAP2 = 3000; //Set Duty cycle

  • 从系统框图上看,ECAP1和ECAP4是同时被外部信号同步的,而且ECAP4不能接收ECAP1的同步输出,因此此处你应该需要使能:

    ECap4Regs.ECCTL2.bit.SYNCI_EN = 0;

    为:

    ECap4Regs.ECCTL2.bit.SYNCI_EN = 1;

    否则它们都是以默认的时基在进行计数,看上去就像一直在同步一样。

  • 你好。现在我系统用EPWEM做15K频率的,APWM做12.5K的pwm。如果我使能ECap4Regs.ECCTL2.bit.SYNCI_EN = 1;  那APWM出来的频率也会变成EPWM的频率15K。

  • 那么你的ECAP1模拟的EPWM的频率是多少呢?

    实现移相时,4个APWM频率本身应该就是一样的吧?

    ECAP1进来的同步信号,是由EPWM1产生的,还是外部GPIO进来后bypass过来的?

  • ECAP1,ECAP2,ECAP4,ECAP5做APWM的频率是多少都是12.5K。EPWM1是15K。

    ECAP1和ECAP4没有做同步输入使能ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;ECap4Regs.ECCTL2.bit.SYNCI_EN = 0;

    我试了如果使能频率就不是我要的12.5K了。变成EPWM的频率了15K

  • Okay,那么这样APWM1和APWM4是不能同步,不能移相的,因为你没有使用同一个同步信号,请仔细查看上面我发的截图,只有当它们都使用EPWM1的同步信号,或者由外部传入到EPWM1并bypass过来的同步信号,才能实现1和4的同步。

    你可以试试在使用EPWM1的同步信号,频率为15k的情况下,APWM1和APWM4是否可以同步,或者移相。

  • 试了程序,确实是都使用EPWM1的同步信号后,APWM1和APWM4才能同步。这样就必须设置EPWM和APWM的频率一致。不完美啊。因为实际电路中通常EPWM和APWM控制不同拓扑的电路。

    谢谢指导

  • 在使用ECAP实现APWM的过程中,它的同步机制本身就是存在两种,第一是所有APWM全部同步,那么只能使用EPWM1传递过来的同步信号,它可以是由EPWM1直接产生的,也可以是外部GPIO输入后由EPWM1 bypass过来的,第二种是部分同步,即APWM1~3同步,4~6同步,那么它们是ECAP内部同步。这些都可以从我上面提供的连接图看出来。

    如果你有很严格的同步或移相需求,那么建议不要使用ECP来模拟,而需要使用更多EPWM通道的芯片来实现,比如F28377D.

x 出现错误。请重试或与管理员联系。