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.

[参考译文] TMDSCNCD2.8379万D:HV-1PH-DCAC

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/574249/tmdscncd28379d-hv-1ph-dcac

部件号:TMDSCNCD2.8379万D

大家好,

我正在尝试对我的逆变器实施单极正弦PWM。 调制方案如下所示。 我正在DSP的输出处获得所需的PWM信号。 但是,我从具有高频噪声的直流总线中获取电流,这会导致板上的高无功功率。 这不是硬件问题。 因为硬件正在使用另一个PWM方案。 每个ISR中的PWM设置和更新代码 如下所示。 出现此问题的原因可能是什么?  

void setupInvertPWM (uint16_t inv_PWM_no,uint16_t PWM_Period_tick,uint16_t PWM_dbred_ticks,uint16_t PWM_dbfed_ticks)

EALLOW;

// F2837x上的PWM时钟除以2
// ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=1
// Deadband需要为0.5us => 10ns*50=500ns
//时基子模块寄存器
(*ePWM[inv_PWM_no]).TBCTL.bit.PRDLD = TB_shadow;
(*ePWM[inv_PWM_NO])。TBPRD = PWM_Period_Ticks >>1;// PWM频率=1/周期
(* ePWM[inv_PWM_no]).TBPHS.bit.TBPHS = 0;
(* ePWM[inv_PWM_no]).TBCTR = 0;
(*ePWM[inv_PWM_NO]).TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;
(* ePWM[inv_PWM_NO]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
(* ePWM[inv_PWM_NO]).TBCTL.bit.CLKDIV = TB_DIV1;

(*ePWM[inv_PWM_NO+1]).TBCTL.bit.PRDLD = TB_shadow;
(*ePWM[inv_PWM_NO+1])。TBPRD = PWM_Period_Ticks >>1;// PWM频率=1/周期
(*ePWM[inv_PWM_NO+1]).TBPHS.bit.TBPHS = 0;
(* ePWM[inv_PWM_NO+1]).TBCTR = 0;
(*ePWM[inv_PWM_NO+1]).TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;
(* ePWM[inv_PWM_NO+1]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
(* ePWM[inv_PWM_NO+1]).tbctl.bit.CLKDIV = TB_DIV1;

//计数器比较子模块寄存器
(*ePWM[inv_PWM_NO]).CMPA.bit.CMPA = 0;//最初设置占空比0 %
(* ePWM[inv_PWM_no]).CMPCTL.bit.SHDWAMODE = CC_SHAMODE;
(* ePWM[inv_PWM_NO]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

(*ePWM[inv_PWM_NO+1]).CMPA.bit.CMPA = 0;//最初设置占空比0 %
(* ePWM[inv_PWM_NO+1]).CMPCTL.bit.SHDWAMODE = CC_SHAMODE;
(* ePWM[inv_PWM_NO+1]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

//操作限定符子模块寄存器
//假设正半周期优先,即DHL>0
(*ePWM[inv_PWM_NO]).AQCTLA.bit.CAU = AQ_SET;// CTR = CMPA@UP,设置为1
(*ePWM[inv_PWM_no]).AQCTLA.bit.cad = AQ_clear;// ctr = CMPA@down,切换
(* ePWM[inv_PWM_no]).AQCTLA.bit.ZRO = AQ_NO_ACTION;// ctor=0,清除为0

//要开始,请不要将PWM配置为执行任何操作
(*ePWM[inv_PWM_no]).AQCTLA.all=0;

//(*ePWM[inv_PWM_NO+1]).AQCTLA.ALL = 0;//设置为不执行任何操作
(*ePWM[inv_PWM_NO+1]).AQCTLA.bit.CAU = AQ_SET;// ctr = CMPA@DOWN,清除
(*ePWM[inv_PWM_NO+1]).AQCTLA.bit.cad = AQ_Clear;// ctr = CMPA@down,切换
(* ePWM[inv_PWM_NO+1]).AQCTLA.bit.ZRO = AQ_NO_ACTION;// cTR=0,清除为0

//有源高互补PWM -设置死区
(*ePWM[inv_PWM_no]).DBCTL.bit.in_mode = DBA_All;
(*ePWM[inv_PWM_no]).DBCTL.bit.out模式= DB_FULL启用;
(*ePWM[inv_PWM_NO]).DBCTL.bit.POLSEL = DB_ACTV_HIC;
(*ePWM[inv_PWM_NO])。DBRED = PWM_dbred_ticks;
(*ePWM[inv_PWM_NO])。DBFED = PWM_dbred_ticks;

(*ePWM[inv_PWM_NO+1]).DBCTL.bit.in_mode = DBA_All;
(*ePWM[inv_PWM_NO+1]).DBCTL.bit.out模式= DB_FULL启用;
(*ePWM[inv_PWM_NO+1]).DBCTL.bit.POLSEL = DB_ACTV_HIC;
(*ePWM[inv_PWM_NO+1]).DBRED = PWM_dbred_ticks;
(*ePWM[inv_PWM_NO+1])。DBFED = PWM_dbred_ticks;

(*ePWM[inv_PWM_NO]).TBCTL.bit.PHSEN = TB_DISABLE;
(* ePWM[inv_PWM_no]).TBCTL.bit.SYNCOSEL = TB_CTR _zero;//同步"下流"

//将PWM 2配置为从属,并让它从PWM1传递同步输入脉冲
ePWM[inv_PWM_NO+1]->TBCTL.bit.SYNCOsel=TB_SYNC_IN;
ePWM[inv_PWM_NO+1]->TBCTL.bit.PHSEN=TB_ENE;
ePWM[inv_PWM_NO+1]->TBPHS.bit.TBPHS=2;
ePWM[inv_PWM_NO+1]->TBCTL.bit.PHSDIR=TB_UP;

EDIS;
}

内联空更新反向PWM (uint16_t inv_PWM_NO)

half_period=(*ePWM[inv_PWM_no]).tbprp>>1;

invDuty=_IQ24bumpy(Half_Period,_IQ24bumpy(invDutyPU,_iQ24(-IQ24(-IQ24))))+Half_Period; 1.0 //_IQ24bumpy(*ePWM[inv_PWM_NO]).TBPRD,(1-_IQ24abs (DutyPU)))最初
invDuty2=_IQ24bumpy(sper_period,invDutyPU)+Half_period;


(*ePWM[inv_PWM_no]).cmpa.bit.cmpa= invDuty;//(*ePWM[inv_PWM_no]).cmpa.bit.cmpa= invDuty;

(* ePWM[inv_PWM_NO+1]).CMPA.bit.CMPA = invDuty2;//(* ePWM[inv_PWM_no]).TBPRD


//等待PWM开始倒计时
如果(EPwm1Regs.TBSTS.bit.CTRDIR==0)//确保PWM最初为0倒计时

toggleLED();


(*ePWM[inv_PWM_NO]).AQCTLA.bit.CAU = AQ_SET;// CTR = CMPA@UP,设置为1
(*ePWM[inv_PWM_no]).AQCTLA.bit.cad = AQ_clear;// ctr = CMPA@down,切换
(* ePWM[inv_PWM_no]).AQCTLA.bit.ZRO = AQ_NO_ACTION;// ctor=0,清除为0
(*ePWM[inv_PWM_NO+1]).AQCTLA.bit.CAU = AQ_SET;// ctr = CMPA@DOWN,清除
(*ePWM[inv_PWM_NO+1]).AQCTLA.bit.CAD = AQ_CLEAR;//由我添加
(*ePWM[inv_PWM_NO+1]).AQCTLA.bit.ZRO = AQ_NO_ACTION;//由我添加

}
}

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

    如果您对PWM系列感到满意,我不确定我们可以提供哪些帮助,您可能需要检查硬件并查看是否有任何问题。