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.

[参考译文] CCS/TMS320F280049:280049相移问题

Guru**** 2527660 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/906026/ccs-tms320f280049-280049-phase-shift-problem

器件型号:TMS320F280049

工具/软件:Code Composer Studio

我要执行两相交错、因此我需要对两个 PWM 进行相移。 我将 PWM1设置为主器件、而 PWM2、PWM5和 PWM8从器件。 当我更改 EPwm2Regs.TBPHS.bit.TBPHS 时、PWM2可以执行相移。 但我无法更改 PWM5和 PWM8的相位。 此外、当我测试 PWM5/PWM8和 PWM1波形时、我发现 PWM5/PWM8的相位随 PWM1不断变化。 我对 PWM2、PWM5和 PWM8具有完全相同的配置。 以下是我的配置代码。

(* ePWM[j]).TBCTL.bit.PRDLD = TB_SHADD;//设置立即负载
(* ePWM[j])。TBPRD =周期-1;// PWM 频率= 100M /(周期-1)在向上计数模式
//(* ePWM[j])下;* CMPRD =周期0.0.5;// PWM 频率= 100M = 1 (*
。pA = 1)在初始时间(* ePWM[100M = 1)。
//初始化 HRPWM 扩展
(* ePWM[j])。CMPB.bit.CMPB = PERIOD*0.1;//初始设置占空比50%
(* ePWM[j])。CMPB.ALL |=(1 << 8);//初始化 HRPWM 扩展
(* ePWM[j])。TBPHS.all = 0 (* ePWM=tb








= 1);tb.tb.tb = 1 (* ePWM=tb.tb = 1);tbtb.tb = ePWM=t.t.tb = 1


(* ePWM=tb.tb = 1);tb.tb.tb.tb.tb = 1 (* ePWM=tb.tb.tb = 1);tb.tb.tb.tb.tb = 1 (* ePWM=ePWM=eTb.t.tb = 1);tb.tb.tb = ePWM=e //相位延迟180度
//(* ePWM[j])。TBPHS.bit.TBPHS = 2;
(* ePWM[j])。TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
(* ePWM[j])。TBCTL.TSN = TB_ENABLE;
}

if (MODE = tBIT.tb.tb.tpwm

= t.t.t.tb








)(* ePWM=tb = tb.tb.tb = tb.tb.tb = tb.tb (* ePWM=t.tb.tb.tb)(* ePWM=tb.t.tb.tb.tb = tb.tb = 1)(* ePWM[tb.tb.tb.tp.t.t.tp.tp.tp.tp.tp.tp.tp.tb = 1)(* eP=tb.tp.tb.tb = tb.tb.tp.

(ePWM[j]).CMPCTL.bit.SHDWAMODE = CC_SHADODE;
(* ePWM[j]).CMPCTL.bit.SHDMODE = CC_SHADD;

//(* ePWM[j]).AQCTLA.bit.ACQ=AQPWM.j.eHR=ePWM=eQ=eHRFM.j.ePWM=ePWM=eQ=eQ.eHR.j.ePWM=eQ=ePWM=eQ.eQ.j.ePWM=eQ=ePWM=eHR.eQ.j.j.j.j.ePWM=eHR.eQ.eQ.ePWM=eQ=ePWM=eQ=ePWM=eQ=eQ.j.j.eQ=eQ.ePWM=ePWM=eQ=eQ.ePWM=eQ=eQ.ePWM=ePWM=ePWM=eQ=eQ.eQ.e









//下降沿上的 MEP 控制
(* ePWM[j]).HRCNFG.bit.CTLMODEB = HR_CMP;
(* ePWM[j]).HRCNFG.bit.HRLOADB = HR_CTR_ZERO _PRD;
//#if (AUTOCONVERT)
(* ePWM[j]).HRCNFG =自动


转换1 /自动转换周期/ePWM=/#/ePWM=/ePWM1/自动转换周期/#./ePWM=/ePWM=/ePWM=/#./ePWM=/ePWM=/#.tr./ePWM=/ePWM=/ePWM=

(* ePWM[j]).HRPCTL.bit.TBPHSHRLOADE = 1;//启用 TBPHSHR SYNC
(* ePWM[j]).HRMSTEP.ALL = MEP_ScaleFactor;
EDIS;

(* ePWM[j])。DBCTL.BIT.IN_MODE = DBA_ALL;/DBM3A.DDEP[*上升沿和下降
沿/ DP.DP.DPWM=D](*延迟时间)。 10n * DBRED
(* ePWM[j]).DBFED.bit.DBFED =死区时间;//下降沿延迟计数。 ED10n DBFED
(* ePWM[j]).DBCTL.bit.POLSEL = 0x02;//EPWM3B 反相
(* ePWM[j]).DBCTL.bit.out_mode = 0x3;//两个 EPWM3A EPWM3B 都有死区函数

EALLOW;
(* ePWM[j];



* eTRM[tZ1.j]= t.t1.tpwm.j);* eTRC = t.t.t1.t.t.twm.t1.t.twm.j](* eTRPm.t.t.t.t.t.t.t.t.j = t.t.t.twm.tb


void configHRPWM5 (uint16_t j、uint16_t 周期、uint16_t 死区时间、uint16_t 模式)
{
(* ePWM[j]).TBCTL.bit.PRDLD = TB_SHADD;//设置立即负载
(* ePWM[j])。TBPRD =周期-1;//在 ePWM=100m

周期(* ePWM=100m = 1)/ePWM=100m 周期(*频率)/ePWM=100m 周期数(*在 ePWM=100m = 1)/ ePWM=100m 周期数(* 1)/ePWM=100m 周期数(* 1) //初始设置占空比50%
(* ePWM[j]).cmpa.bit.cmpaHR =(1 << 8);//初始化 HRPWM 扩展
(* ePWM[j]).cmpb.cmpb =周期计数0.1;//初始设置占空比50%
(
* ePWM[j]).cmpwm = t.tb (* ePWM=eTb.eTb.j


);[ePWM=eTb.eTb.ePWM=0 = 0 (
* eTb.t.tb.tp.r.r.tpwm = 1);(* eTb.tb = ePWM=eTb.tb = eTb.tb = eTb.t.tb = eTb.tb = 0);(* eTb.tb.tb = eTb.tb.


(ePWM[j]).TBCTL.bit.PHSEN = TB_DISABLE;
}
if (mode = 0)
{
//(* ePWM[j]).TBPHS.bit.TBPHS = PERIOD* 0.5;//相位延迟180度
(* tpwm[j]).tbpwm.t.tb
= 0;

* tbtpwm.t.t.tb =

tb (* tb.tpwm.t.t.t.t.tb = 1



)(* epwm.t.t.t.t.t.t.tb = tb = tb = 1)(* epwm.t.t.t.t.tb = tb = tb.tb.t.tb = tb = 1)(* epwm.t.t.t.t.t.t.t.tb = t.tb = tb = tb = tb (* epwm.t.t.t.t.t.t.t.tb

(ePWM[j]).CMPCTL.bit.SHDWAMODE = CC_SHADODE;
(* ePWM[j]).CMPCTL.bit.SHDMODE = CC_SHADD;

//(* ePWM[j]).AQCTLA.bit.ACQ=AQPWM.j.eHR=ePWM=eQ=eHRFM.j.ePWM=ePWM=eQ=eQ.eHR.j.ePWM=eQ=ePWM=eQ.eQ.j.ePWM=eQ=ePWM=eHR.eQ.j.j.j.j.ePWM=eHR.eQ.eQ.ePWM=eQ=ePWM=eQ=ePWM=eQ=eQ.j.j.eQ=eQ.ePWM=ePWM=eQ=eQ.ePWM=eQ=eQ.ePWM=ePWM=ePWM=eQ=eQ.eQ.e









//下降沿上的 MEP 控制
(* ePWM[j]).HRCNFG.bit.CTLMODEB = HR_CMP;
(* ePWM[j]).HRCNFG.bit.HRLOADB = HR_CTR_ZERO _PRD;
//#if (AUTOCONVERT)
(* ePWM[j]).HRCNFG =自动


转换1 /自动转换周期/ePWM=/#/ePWM=/ePWM1/自动转换周期/#./ePWM=/ePWM=/ePWM=/#./ePWM=/ePWM=/#.tr./ePWM=/ePWM=/ePWM=

(* ePWM[j]).HRPCTL.bit.TBPHSHRLOADE = 1;//启用 TBPHSHR SYNC
(* ePWM[j]).HRMSTEP.ALL = MEP_ScaleFactor;
EDIS;

(* ePWM[j])。DBCTL.BIT.IN_MODE = DBA_ALL;/DBM3A.DDEP[*上升沿和下降
沿/ DP.DP.DPWM=D](*延迟时间)。 10n * DBRED
(* ePWM[j]).DBFED.bit.DBFED =死区时间;//下降沿延迟计数。 ED10n DBFED
(* ePWM[j]).DBCTL.bit.POLSEL = 0x02;//EPWM3B 反相
(* ePWM[j]).DBCTL.bit.out_mode = 0x3;//两个 EPWM3A EPWM3B 都有死区函数

EALLOW;
(* ePWM[j];* eZRC.tpwm=t1.j](
* eTRC.t.t1.tpwm=t1.t1.t1.t1.tpwm=t1.t1.t1.j]);(* eTRPm=t.t.t.t.t.t.t1.t.t.t.t1.twm=t.t1.

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

    您好!

    您能否提供有关项目中配置的同步链的更多详细信息? 同步链中是否应包含 EPWM1、EPWM2、EPWM5和 EPWM8? 为了在 PWM 模块之间实现所需的相移、需要遵循同步方案。  此外、请确保同步链传播路径的 PWM 实例不应超过4个。

    请参阅器件 TRM 中的"时基计数器同步方案"、了解需要配置的 PWM、以实现上述 PWM 实例之间的相移。