大家好
我对 ePWM 有疑问。 我想单独使用 EPWM1A 和 EPWM1B。 例如、可以激活 EPWM1A 并更改其占空比、同时将 EPWM1B 设置为低电平或高电平、而不更改其占空比。 另外一种工作方式是 EPWM1B、而 EPWM1A 则"等待"。
通过单独操作(禁用任一个)、它们均可按预期工作、具有良好的占空比和输出。 但是、只要我同时使用这两种方法、它们似乎 就会相互走在另一条路上。
我希望在 EPWM1A (顶部)和 EPWM1B (底部)输出上使用不同正弦波作为调制信号的最终信号:
仅仅是他们就像这样工作得很好:

但我同时提出这些问题时,似乎有问题:

我的代码是:
void init_epwm1(void){
EPwm1Regs.TBCTL.bit.FREE_SOFT = 0x02; // free run
// Setup TBCLK
EPwm1Regs.TBPRD = PWR_IN_CNT_PRD; // Set timer period 2500
EPwm1Regs.TBPHS.all = 0;
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;
EPwm1Regs.TBCTR = 0x0000; // Clear counter
// Set Compare values
EPwm1Regs.CMPA.bit.CMPA = 500; // Set compare A
EPwm1Regs.CMPB.bit.CMPB = 1000; // Set Compare B
// Setup counter mode
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Master module enable phase loading
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // Sync A and B disable
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to PWM_CLOCK_FREQ
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// Setup shadowing
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Setup Output A and B with count up and down
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set actions for EPWM1A
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // Set actions for EPWM1B
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_DISABLE; //Disable Dead-band module
// EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO; // Active Low
// EPwm1Regs.DBFED.bit.DBFED = PWM_DEAD_TIME_COUNT; // 100 TBCLKs = 1us
// EPwm1Regs.DBRED.bit.DBRED = PWM_DEAD_TIME_COUNT; // 100 TBCLKs = 1us
// Trip-Zone
// EPwm1Regs.TZSEL.bit.OSHT1 = TZ_ENABLE; // enables TZ1 as a one-shot event source for ePWM1
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // Force EPWMxA to a low state
EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_LO; // Force EPWMxB to a low state
EPwm1Regs.TZFRC.bit.OST = 0x1; // Software Force Trip Zone
}
因此、如果您对我在这里所犯的错误还有任何问题或解决方案、我会很高兴。 谢谢、祝你度过美好的一天
Daniel


