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.
本人在使用中需要四路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
你好。现在我系统用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.