主题中讨论的其他器件:C2000WARE
尊敬的先生:
我们正在基于 C2000 28376S 开发电机控制 器,我们需要 每相创建互补 PWM 信号(共3相)
2.每个相位将连接到 PWM 模块(1、2、3),信号 A 将用于高侧 MOSFET ,信号 B 将用于低侧 MOSFET (信号通过适当的栅极驱动器连接)
PWMXA 和 PWMXB 应是具有适当死区时间的互补信号,我们可以成功配置
我们的问题是将 THHSE 信号设为高分辨率 PWM 互补信号
我的问题是,是否可以实现此类配置(互补高分辨率 PWM 信号)?
下面是用于进行高分辨率 PWM 信号的排印的代码片段
EALLOW;
EPwmRegHandle->TBPRD = ePWM_TIMER_TBPRD;//设置定时器周期
EPwmRegHandle->TBCTL.bit.PHSEN =TB_ENABLE;//启用相位加载
EPwmRegHandle->TBCTL.bit.PHSDIR = TB_UP;//同步后向上计数
EPwmRegHandle->TBCTL.bit.PRDLD = TB_SHADOW;
EPwmRegHandle->TBCTL2.bit.PRDLDSYNC=0;// PRD ON CTR=0且同步
EPwmRegHandle->TBPHS.bit.TBPHS = 0;//相位始终为0°
EPwmRegHandle->TBCTR = 0x0;//清除计数器
EPwmRegHandle->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//递减计数
EPwmRegHandle->TBCTL.bit.HSPCLKDIV = TB_DIV1;//高速时钟与 SYSCLKOUT 的比率
EPwmRegHandle->TBCTL.bit.CLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwmRegHandle->TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//输出同步连接到输入同步
EPwmRegHandle->CMPCTL.bit.SHDWAMODE = CC_SHADODE;//使用影子模式
EPwmRegHandle->CMPCTL.bit.SHDWBMODE = CC_SHADOW;//使用影子模式
EPwmRegHandle->CMPCTL.bit.LOADAMODE = CC_CTR_zero_PRD;//每零或每周期加载一次寄存器
EPwmRegHandle->CMPCTL.bit.LOADBMODE = CC_CTR_zero_PRD;//每零或每周期加载一次寄存器
/*高分辨率 PWM */
EPwmRegHandle->CMPA.bit.CMPAHR = 0;
EPwmRegHandle->CMPB.bit.CMPBHR = 0;
EPwmRegHandle->TBPHS.bit.TBPHSHR = 0x0;
/*清除高分辨率配置*/
EPwmRegHandle->HRCNFG.ALL = 0x0;
/*启用高分辨率 CH-A */
EPwmRegHandle->HRCNFG.bit.EDGMODE = HR_REP;
EPwmRegHandle->HRCNFG.bit.CTLMODE = HR_CMP;
EPwmRegHandle->HRCNFG.bit.HRLOAD = HR_CTR_zero_PRD;
//*启用高分辨率 CH-B (如果使用死区)
EPwmRegHandle->HRCNFG.bit.EDGMODEB = HR_FEP;
EPwmRegHandle->HRCNFG.bit.CTLMODEB = HR_CMP;
EPwmRegHandle->HRCNFG.bit.HRLOADB = HR_CTR_zero_PRD;
EPwmRegHandle->HRPCTL.bit.TBPHSHRLOADE = 1;
EPwmRegHandle->HRPCTL.bit.HRPE = 0;//必须禁用占空比控制
EPwmRegHandle->HRMSTEP.bit.HRMSTEP = 32;
/*操作限定符*/
EPwmRegHandle->AQCTLA.bit.CAU = AQ_SET;//在 CAU 上设置 PWM1A
EPwmRegHandle->AQCTLA.bit.CAD = AQ_CLEAR;//清除 CAD 上的 PWM1A
EPwmRegHandle->AQCTLB.bit.CBU = AQ_SET;//在事件 B 上设置 PWM1B,向上计数
EPwmRegHandle->AQCTLB.bit.CBD = AQ_CLEAR;//在事件 B 上清除 PWM1B,倒计数
/*禁用死区*/
EPwmRegHandle->DBCTL.bit.OUT_MODE = DB_DISABLE;
/*清除跳闸区域配置*/
EPwmRegHandle->TZCTL.All=0;
EPwmRegHandle->TZSEL.All=0;
EPwmRegHandle->TZDCSEL.All=0;
EPwmRegHandle->DCTRIPSEL.All=0;
/*如果启用则确保死区模块(相对于 ePWMxA 的 OUTA/OUTB 的死区时间+极性)*/
/*高分辨率死区时间*/
EPwmRegHandle->DBCTL.bit.out_mode = DB_full_enable;//fed+RED
EPwmRegHandle->DBCTL.bit.POLSEL =死区带极性;//与 CMD B 反相
EPwmRegHandle->DBCTL.bit.in_mode = DBA_ALL;//A 是下降沿和上升沿的源
EPwmRegHandle->DBCTL.bit.SHDWDBREDMODE = 1;
EPwmRegHandle->DBCTL.bit.SHDWDBFEDMODE = 1;
EPwmRegHandle->DBCTL.bit.LOADREDMODE = 0;//计数器上的加载= 0
EPwmRegHandle->DBCTL.bit.LOADFEDMODE = 0;//计数器加载= 0
EPwmRegHandle->DBCTL.bit.HALFCYCLE = 1;//需要高分辨率死区
EPwmRegHandle->DBRED.bit.DBRED = ePWM_DB_RED_DLY;//RE DELAY DBRED*TCLK/2
EPwmRegHandle->DBREDHR.bit.DBREDHR = 0x0;//val *256 (其中 val 是步数)
EPwmRegHandle->DBFED.bit.DBFED = ePWM_DB_FED_DLY;//FE 延迟 DBFED*TCLK/2
EPwmRegHandle->DBFEDHR.bit.DBFEDHR = 0x0;//val *256 (其中 val 是步数)
EPwmRegHandle->HRCNFG2.bit.EDGMODEPB = HR_BEP;//HR_BEP;// DBREDHR 和 DBFEDHR
EPwmRegHandle->HRCNFG2.bit.CTLMODEDBRED = 0;// ZRO 上的负载
EPwmRegHandle->HRCNFG2.bit.CTLMODEDBFED = 0;// ZRO 上的负载
EDIS;
在各种测试中,我仅在中成功地获得了高分辨率互补 PWM 信号
1.设置通道 A 的边沿模式到上升边沿(例如 MEP 机制)
2.se针对通道 B 至下降沿的 t Edge 模式
…
当我更新 PWM 命令时(如果我不更新 EPwm1Regs.CMPB.bit.CMPBHR ,我会看到高分辨率的差异)
EPwm1Regs.CMPA.bit.CMPA <=粗分辨率
EPwm1Regs.CMPA.bit.CMPAHR <=精细分辨率
EPwm1Regs.CMPB.bit.CMPBHR <=微调
即使是很难,它也能正常工作,我在某些方面看到抖动和奇怪的行为
您能就此事提出建议吗?