主题中讨论的其他器件:controlSUITE、 TIDM-HV-1PH-DCAC
我正在尝试在三相208V 逆变器应用中同步 EPWM1-3。 我遵循了 controlSUITE (VSI -单相 HP DC/AC)中提供的示例代码、后者修改了 ePWM 设置脚本。 但是、当我设置 spruhm8g.pdf 的 ePWM IWA 第14章时、我会看到 ePWM 1的 ePWM 2和3中的20ns 延迟(示波器图如下所示、代码段中的选项1)。 这是否被视为同步? 如果没有、我是否未正确设置 ePWM 寄存器?
此外、当我以替代形式(代码段中的选项2)设置寄存器时、与三相电机控制套件随附的 f803xPWM.h 文件中提供的选项类似、我可以使三个 PWM 脉冲精确对齐、 但对于 f28337xD 文档、它似乎不是 IAW。
这两种情况都提供了正确的输出占空比和频率。 任何见解都值得赞赏。
void setup3PPWM (uint16_t inV_pwm_no、uint16_t pwm_period_ticks、uint16_t pwm_dbred_tick、uint16_t pwm_dbfed_ticks)
{
EALLOW;
F2837x 上的// PWM 时钟被除以2
// ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=1
//////////////////////////////////////////////////////////////////////////////////////////////
//时基子模块寄存器
//////////////////////////////////////////////////////////////////////////////////////////////
(* 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_UPDOWN;
(* 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_UPDOWN;
(* ePWM[INV_PWM_NO+1]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
(* ePWM[INV_PWM_NO+1]).TBCTL.bit.CLKDIV = TB_DIV1;
(* ePWM[INV_PWM_NO+2]).TBCTL.bit.PRDLD = TB_SHADOW;
(* ePWM[INV_PWM_NO+2])。TBPRD = PWM_PERIOD_TICKs >>1;// PWM 频率= 1/周期
(* ePWM[INV_PWM_NO+2]).TBPHS.bit.TBPHS = 0;
(* ePWM[INV_PWM_NO+2]).TBCTR = 0;
(* ePWM[INV_PWM_NO+2]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
(* ePWM[INV_PWM_NO+2]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
(* ePWM[INV_PWM_NO+2]).TBCTL.bit.CLKDIV = TB_DIV1;
//Option 1 -类似于 TI 针对 f28377D 的文档
(* ePWM[INV_PWM_no]).TBCTL.bit.PHSEN = TB_DISABLE;
(* ePWM[INV_PWM_NO+1]).TBCTL.bit.PHSEN = TB_ENABLE;
(* ePWM[INV_PWM_NO+2]).TBCTL.bit.PHSEN = TB_ENABLE;
//将 PWM 2和3配置为从器件并使其从 PWM1传递 SYNC IN 脉冲
(* ePWM[INV_PWM_no]).TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//同步"下流"-如示例文档所示,但给出了范围上的相位延迟
(* ePWM[INV_PWM_NO+1]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//-类似示例文档、但给出了范围上的相位延迟
(* ePWM[INV_PWM_NO+2]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//-类似示例文档、但给出了范围上的相位延迟
//选项2 -与 f2803xPWM.h 类似,具有三相电机控制套件
//(* ePWM[inV_PWM_no]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//所有设置均相等-通过-这是电机控制器实现它的方式
//(* ePWM[INV_PWM_NO+1]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//所有设置均相等-通过-这是电机控制器实现它的方式
//(* ePWM[INV_PWM_NO+2]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//所有设置均相等-通过-这是电机控制器实现它的方式
//(* ePWM[INV_PWM_no]).TBCTL.bit.PHSEN = TB_DISABLE;
//(* ePWM[INV_PWM_NO+1]).TBCTL.bit.PHSEN = TB_DISABLE;
//(* ePWM[INV_PWM_NO+2]).TBCTL.bit.PHSEN = TB_DISABLE;
(* ePWM[INV_PWM_no]).TBPHS.bit.TBPHS = 0;
(* ePWM[INV_PWM_NO+1]).TBPHS.bit.TBPHS = 0;
(* ePWM[INV_PWM_NO+2]).TBPHS.bit.TBPHS = 0;
(* ePWM[INV_PWM_no]).TBCTL.bit.PHSDIR = TB_UP;
(* ePWM[INV_PWM_NO+1]).TBCTL.bit.PHSDIR = TB_UP;
(* ePWM[INV_PWM_NO+2]).TBCTL.bit.PHSDIR = TB_UP;
//////////////////////////////////////////////////////////////////////////////////////////////
//计数器比较子模块寄存器
//////////////////////////////////////////////////////////////////////////////////////////////
(* ePWM[INV_PWM_no]).cmpA.bit.cmpA = 0;//初始设置占空比0%
(* ePWM[INV_PWM_no]).cmPCTL.bit.SHDWAMODE = CC_SHADOW;
(* ePWM[INV_PWM_no]).cmPCTL.bit.LOADAMODE = CC_CTR_zero_PRD;//TLB 采样两次?
(* ePWM[INV_PWM_NO+1]).cmpa.bit.cmpA = 0;//最初设置占空比0%
(* ePWM[INV_PWM_NO+1]).cmPCTL.bit.SHDWAMODE = CC_SHADOW;
(* ePWM[INV_PWM_NO+1]).cmPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD;
(* ePWM[INV_PWM_NO+2]).cmpa.bit.cmpA = 0;//开始时设置占空比0%
(* ePWM[INV_PWM_NO+2]).cmPCTL.bit.SHDWAMODE = CC_SHADOW;
(* ePWM[INV_PWM_NO+2]).cmPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD;
//////////////////////////////////////////////////////////////////////////////////////////////
//操作限定符子模块寄存器
//////////////////////////////////////////////////////////////////////////////////////////////
(* ePWM[INV_PWM_no]).AQCTLA.bit.CAU = AQ_CLEAR;// CTR = CMPA@向上,打开 B (GND 输出)
(* ePWM[INV_PWM_NO]).AQCTLA.bit.CAD = AQ_SET;// CTR = CMPA@DOWN,关闭 B (V OUT)
(* ePWM[INV_PWM_NO+1]).AQCTLA.bit.CAU = AQ_CLEAR;// CTR = CMPA@向上,打开 B (GND 输出)
(* ePWM[INV_PWM_NO+1]).AQCTLA.bit.CAD = AQ_SET;// CTR = CMPA@DOWN,关闭 B (V OUT)
(* ePWM[INV_PWM_NO+2]).AQCTLA.bit.CAU = AQ_CLEAR;// CTR = CMPA@向上,打开 B (GND 输出)
(* ePWM[INV_PWM_NO+2]).AQCTLA.bit.CAD = AQ_SET;// CTR = CMPA@DOWN,关闭 B (V OUT)
//开始时,不要将 PWM 配置为执行任何操作
//(* ePWM[inV_PWM_no]).AQCTLA.all = 0;
//(* ePWM[INV_PWM_NO+1]).AQCTLA.ALL = 0;
//(* ePWM[INV_PWM_NO+2]).AQCTLA.ALL = 0;
//////////////////////////////////////////////////////////////////////////////////////////////
//高电平有效互补 PWM -设置死区
//////////////////////////////////////////////////////////////////////////////////////////////
(* ePWM[INV_PWM_no]).DBCTL.bit.IN_MODE = DBA_ALL;
(* ePWM[INV_PWM_no]).DBCTL.bit.out_mode = DB_full_enable;
(* 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_MODE = DB_FUL_ENABLE;
(* 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+2]).DBCTL.bit.IN_MODE = DBA_ALL;
(* ePWM[INV_PWM_NO+2]).DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
(* ePWM[INV_PWM_NO+2]).DBCTL.bit.POLSEL = DB_ACTV_HIC;
(* ePWM[INV_PWM_NO+2])。DBRED = PWM_DBRED_TICKs;
(* ePWM[INV_PWM_NO+2])。DBFED = PWM_DBRED_TICKs;
EDIS;
}