Other Parts Discussed in Thread: C2000WARE
用的F28035写的过流保护,发现当过流时,必须在管子脉冲为下降沿时才会将脉冲封掉,下面是比较器与epwm配置程序,怎么样修改才能让在过流时立马将脉冲封掉,而不是等待该时刻脉冲关闭时封掉。
void InitComp3() //用于过流保护
{
EALLOW;
Comp3Regs.COMPCTL.bit.SYNCSEL = 1; //比较器输出同步传送
Comp3Regs.COMPCTL.bit.QUALSEL = 2; //持续四个系统时钟
Comp3Regs.COMPCTL.bit.CMPINV =0; //比较器输出反相关闭
Comp3Regs.COMPCTL.bit.COMPSOURCE = 0; //反相输入源 选择DAC
Comp3Regs.COMPCTL.bit.COMPDACEN = 1; //使能DAC
Comp3Regs.DACVAL.all = 868; //0~1023对应0~3.3
EDIS;
}
void EPwm6Set(void)
{
// Setup TBCLK
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 增计数
EPwm6Regs.TBPRD =e6PRD ; // 设置计时器周期 20kHz
EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位加载
EPwm6Regs.TBPHS.half.TBPHS = 0x0000; // 相位为0
EPwm6Regs.TBCTR = 0x0000; // 清除计数器
EPwm6Regs.TBCTL.bit.HSPCLKDIV = 0x0; // Clock ratio to SYSCLKOUT
EPwm6Regs.TBCTL.bit.CLKDIV = 0x0;
// Setup shadow register load on ZERO
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set Compare values
EPwm6Regs.CMPA.half.CMPA =e6cmpa;
EPwm6Regs.CMPB = e6PRD-e6cmpa; // Set Compare B value
EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET; // 计数到0时PWM1A输出高电平
EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR; // 增计数到比较值A时PWM1A输出低电平
EPwm6Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // 计数到0时PWM1B输出低电平
EPwm6Regs.AQCTLB.bit.CBU = AQ_SET; // 增计数到比较值B时PWM1B输出高电平
EALLOW;
EPwm6Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP3OUT; //COMP3OUT 输入
EPwm6Regs.TZDCSEL.bit.DCAEVT1= 2; //0:高阻状态,1:
EPwm6Regs.DCACTL.bit.EVT1SRCSEL = 0; //DCAEVT1 Source Signal
EPwm6Regs.DCACTL.bit.EVT1FRCSYNCSEL = 1; //DCAEVT1 Force Async Signal
EPwm6Regs.TZSEL.bit.DCAEVT1= 1; //One-shot DCAEVT1 select
EPwm6Regs.TZCTL.bit.TZA =2; //当外部触发事件发生时,定义EPMxA所采取的动作0:高阻态,1:高电平,2:低电平,3:保持
EDIS;
}