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.8379万D:F2.8379万D中ePWM同步的任何规则...? 我们如何同步ePWM以满足相移要求。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/571321/tms320f28379d-any-rules-for-synchronization-of-epwm-in-f28379d-how-can-we-synchronized-epwm-for-phase-shift-requirement

部件号:TMS320F2.8379万D

您好,

我将EPWM4作为主控,EPWM5,EPWM6,EPWM7作为从控,然后使用EPWM4将相位转换给所有人。

EPWM5带EPWM4180度相移。

EPWM6,带EPWM4 90度相移。

EPWM7,带EPWM4270度相移。

在这里,EPWM4,EPWM5,EPWM6正确通信,但EPWM7不正确通信。 EPWM7与EPWM4具有相同的相位。

因此,任何解决方案 ??????

这是我的ePWM初始化。

void InitEPwm4example()

EPwm4Regs.ETSEL.ALL = 0;
EPwm4Regs.ETSEL.bit.inten =1;//启用ePWM5中断
EPwm4Regs.ETSEL.bit.INTSEL = 2;// CMPA向下匹配
EPwm4Regs.etps.bit.INTPRD = 1;//第一个事件

EPwm4Regs.TBPRD = 1万;//设置计时器周期801 TBCLK
EPwm4Regs.TBPHS.bit.TBPHS = 0;//0x0000;//相位为0
EPwm4Regs.TBCTR = 0x0000;//清除计数器

EPwm4Regs.CMPA.bit.CMPA = 5000;// set比较值


EPwm4Regs.TBCTL.bit.CTRMODE = 2;//上/下模式
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm4Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1;

EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;

//设置阴影
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZE;//零加载


// EPwm4Regs.AQCTLA.ALL = 0x0060;
EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;


//活动低PWM -设置死区
EPwm4Regs.DBCTL.bit.out模式= DB_FULL启用;
EPwm4Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm4Regs.DBCTL.bit.in_mode = DBA_All;
EPwm4Regs.DBRED.bit.DBRED = 100;
EPwm4Regs.DBFED.bit.DBFED = 100;


}

void InitEPwm5example()

EPwm5Regs.TBPRD = 1万;//设置计时器周期801 TBCLK
EPwm5Regs.TBPHS.bit.TBPHS = 1万;//0x0000;//相位为0
EPwm5Regs.TBCTR = 0x0000;//清除计数器

EPwm5Regs.CMPA.bit.CMPA = 5000;// set比较值


EPwm5Regs.TBCTL.bit.CTRMODE = 2;//上/下模式
EPwm5Regs.TBCTL.bit.PHSEN = TB_enable;//TB_disable;
EPwm5Regs.TBCTL.bit.PHSDIR = TB_DOWN;
EPwm5Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm5Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1;

EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

//设置阴影
EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//零负载

// EPwm5Regs.AQCTLA.ALL = 0x0060;
EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;

//活动低PWM -设置死区
EPwm5Regs.DBCTL.bit.out模式= DB_FULL启用;
EPwm5Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm5Regs.DBCTL.bit.in_mode = DBA_All;
EPwm5Regs.DBRED.bit.DBRED = 100;
EPwm5Regs.DBFED.bit.DBFED = 100;

}

void InitEPwm6example()

EPwm6Regs.TBPRD = 1万;//设置计时器周期801 TBCLK
EPwm6Regs.TBPHS.bit.TBPHS = 5000;//0x0000;//相位为0
EPwm6Regs.TBCTR = 0x0000;//清除计数器

EPwm6Regs.CMPA.bit.CMPA = 5000;// set比较值


EPwm6Regs.TBCTL.bit.CTRMODE = 2;//上/下模式
EPwm6Regs.TBCTL.bit.PHSEN = TB_enable;//TB_disable;
EPwm6Regs.TBCTL.bit.PHSDIR = TB_DOWN;
EPwm6Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm6Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1;

EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

//设置阴影
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//零负载

// EPwm6Regs.AQCTLA.ALL = 0x0060;
EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR;

//活动低PWM -设置死区
EPwm6Regs.DBCTL.bit.out模式= DB_FULL启用;
EPwm6Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm6Regs.DBCTL.bit.in_mode = DBA_All;
EPwm6Regs.DBRED.bit.DBRED = 100;
EPwm6Regs.DBFED.bit.DBFED = 100;

}


void InitEPwm7example()

EPwm7Regs.TBPRD = 1万;//设置计时器周期801 TBCLK
EPwm7Regs.TBPHS.bit.TBPHS = 5000;//0x0000;//相位为0
EPwm7Regs.TBCTR = 0x0000;//清除计数器

EPwm7Regs.CMPA.bit.CMPA = 5000;// set比较值


EPwm7Regs.TBCTL.bit.CTRMODE = 2;//上/下模式
EPwm7Regs.TBCTL.bit.PHSEN = TB_enable;//TB_disable;
EPwm7Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm7Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm7Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1;

EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

//设置阴影
EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//零负载


// EPwm7Regs.AQCTLA.ALL = 0x0060;
EPwm7Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR;

//活动低PWM -设置死区
EPwm7Regs.DBCTL.bit.out模式= DB_FULL启用;
EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm7Regs.DBCTL.bit.in_mode = DBA_All;
EPwm7Regs.DBRED.bit.DBRED = 100;
EPwm7Regs.DBFED.bit.DBFED = 100;

}

PLZ建议了一些解决方案。对于任何值,我都不能使用EPWM4获得EPWM7正确的相位移。使用EPWM4时始终获得相同的相位。

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

    您好,Jaimin,

    请查看器件TRM中提供的F2837xD的时基计数器同步方案。

    在它中,您可以看到PWM4可以直接成为PWM5/PWM6的主控。  PWM7也可以与PWM4同步,但可能需要更改寄存器设置。  请查看SYNCSELECT[EPWM7SYNCIN]的注册字段定义。  

    我相信编辑它将解决您的问题。


    谢谢!
    Brett

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

    我已经尝试了你的建议,它运作良好。 谢谢你。