专家您好,下面是我控制移相全桥电路的开环程序,F28035板子是我自己画的,在板子上放了一个开关进行对软启动程序控制,现在的问题是:当运行程序还未按下开关时,我加了强制拉低语句,但是4路PWM波不能被拉到低电平(epwm3A为低 3B为高,EPWM6A为低,6B为高),当开关按下之后,四路PWM波开始正常出波形,并且实现软启动功能。请专家帮我看一下,为什么在开关为按下去之前,4路pwm波为什么不能拉低?非常感谢您
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.
专家您好,下面是我控制移相全桥电路的开环程序,F28035板子是我自己画的,在板子上放了一个开关进行对软启动程序控制,现在的问题是:当运行程序还未按下开关时,我加了强制拉低语句,但是4路PWM波不能被拉到低电平(epwm3A为低 3B为高,EPWM6A为低,6B为高),当开关按下之后,四路PWM波开始正常出波形,并且实现软启动功能。请专家帮我看一下,为什么在开关为按下去之前,4路pwm波为什么不能拉低?非常感谢您
原因是你的以下代码配置有问题,你是用PWMA输出给DB,DB又反向了,所以不能出低
void Init_EPwm3(void)
{
// Initialization Timer
EPwm3Regs.TBPRD = 300; // Period = 2*300 TBCLK counts
EPwm3Regs.TBPHS. half.TBPHS= 0; // Set Phase register to zero
EPwm3Regs.TBCTR = 0; // clear TB counter
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetric
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Phase loading disabled
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.SYNCOSEL = 00;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR = Zero
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR = Zero
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET; // set actions for EPWM1A
EPwm3Regs.AQCTLA.bit.PRD = AQ_CLEAR; //S1
EPwm3Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm3Regs.AQCTLB.bit.PRD = AQ_SET; //S2
//
//Run Time
// = = = = = = = = = = = = = = = = = = = = = = = =
EPwm3Regs.DBCTL.bit.OUT_MODE=DB_FULL_ENABLE; //11
EPwm3Regs.DBCTL.bit.POLSEL=DB_ACTV_HIC; //10
EPwm3Regs.DBCTL.bit.IN_MODE=00; //选Epwm1A为下降沿和上升沿延迟输入源
EPwm3Regs.DBRED=30; //上升沿延迟时间
EPwm3Regs.DBFED=30; //下降沿延迟时间
/*
// 过流、过压保护
Comp2Regs.DACVAL.bit.DACVAL =200; //过电压参考值
Comp3Regs.DACVAL.bit.DACVAL =270; //过电流参考值
//comp的输出控制,是否反相,是否同步?
Comp2Regs.COMPCTL.bit.CMPINV =0; //不反相,传送比较器的输出
Comp3Regs.COMPCTL.bit.CMPINV =0; //不反相,传送比较器的输出
Comp2Regs.COMPCTL.bit.SYNCSEL =0; //比较器输出被异步传送
Comp3Regs.COMPCTL.bit.SYNCSEL =0; //比较器输出被异步传送
//设置DC模块,comp1out(当短路时,comp1out的输出是1,否则输出是0)产生DCAEVT1的force信号
EALLOW;
EPwm3Regs.DCTRIPSEL.bit.DCAHCOMPSEL=DC_COMP2OUT; //COMP2OUT是数字比较A(DCAH)的输入选择位
EPwm3Regs.DCTRIPSEL.bit.DCBHCOMPSEL=DC_COMP3OUT;
EPwm3Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; //COMP3OUT输出为高电平,DCAL为任意值时,会产生DCAEVT1事件 DCAH = high, DCAL = don't care
EPwm3Regs.TZDCSEL.bit.DCBEVT1 = TZ_DCBH_HI;
EPwm3Regs.DCACTL.bit.EVT1SRCSEL =0; //DCAEVT1 Source Signal Select Source Is DCAEVT1 Signal
EPwm3Regs.DCBCTL.bit.EVT1SRCSEL =0;
EPwm3Regs.DCACTL.bit.EVT1FRCSYNCSEL =1; //DCAEVT1是异步信号,不进行同步,这时是不需要设置TZFRC[DCAEVT1]的,因为是两种使得DCAEVT1force产生的方式,要产生DCAEVT1force这个信号是可以直接用软件实现的。
EPwm3Regs.DCBCTL.bit.EVT1FRCSYNCSEL =1;
EDIS;
//封锁超前管PWM波
EALLOW;
EPwm3Regs.TZSEL.bit.DCAEVT1 = 1; //DCAEVT1是单次触发的故障源
EPwm3Regs.TZSEL.bit.DCBEVT1 = 1;
EPwm3Regs.TZCTL.bit.TZA =TZ_FORCE_LO; //DCAEVT1触发事件发生时,将EPWM1A设置成出错时变低
EPwm3Regs.TZCTL.bit.TZB =TZ_FORCE_LO; //DCBEVT1触发事件发生时,将EPWM1B设置成出错时变低
EPwm3Regs.TZEINT.bit.OST = 1; //使能综合的中断 Enable Interrupt generation; a one-shot trip event will cause a EPWMx_TZINT PIE interrupt
EDIS;
*/
//产生EPWM3INT3中断
EPwm3Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO; //当时基计数器等于0时产生EPWM3INT1中断
EPwm3Regs.ETPS.bit.INTPRD =ET_3RD; //在第3个事件时产生中断
EPwm3Regs.ETSEL.bit.INTEN=1; //EPWM1 INT中断使能
麻烦您再看一下我修改后的程序,我按照您说的使用TZFRC寄存了,但是现在运行程序的结果是:在未按下控制软启动程程的开关之前,EPWM3A 3B没有被拉低,直接发波。epwm6A为高, 6B为低。麻烦您看看哪里有错误
interrupt void epwm3_isr(void);//interrupt关键字的作用是申明一个函数为中断函数,该中断函数的中断号为intr
void Init_EPwm3(void);
void Init_EPwm6(void);
void Init_Gpio(void);
Uint32 ss_count;
Uint16 ss_flag;
long temp1=0;
}