本帖最后由 hmf1235789 于 2018-2-2 17:53 编辑
请教大家一个问题,如何实现igbt上下管的pwm互锁,防止上下管同时出现高电平而导通。要求:上管PWMA=1的时候,下管失效PWMB=0;下管PWMB=1的时候,上管失效PWMA=0。用门极或锁存电路实现,因为我最后要用Verilog来写程序。
正常情况下或者在cpld里面分频后是互补的pwm波,加上死区就可以用了。但是如果是外来pwm的情况,为了防止出现同时为高,需要做一个这样的处理。
我自己写了的如下:- //pwm_up_in pwm_dw_in互锁输出always @(posedge clk)
- if(rst)
- pwm_up <= 1'b0;
- else
- if(pwm_up_in && pwm_dw)
- pwm_up <= 1'b0; //
- else
- pwm_up <= pwm_up_in;
-
- always @(posedge clk)
- if(rst)
- pwm_dw <= 1'b0; //
- else
- if(pwm_dw_in && pwm_up)
- pwm_dw <= 1'b0; //
- else
- pwm_dw <= pwm_dw_in;
复制代码
这段代码出现的问题是,在复位时刻pwm_up,pwm_dw都是为0的,程序会进入全1或全0的循环当中。
我也画了这个图,不知道可不可以?
此帖出自
小平头技术问答
- //pwm_up_in pwm_dw_in互锁输出
- always @(posedge clk or posedge rst or posedge pwm_dw)
- if(rst)
- pwm_up <= 1'b0;
- else
- if(pwm_dw)
- pwm_up <= 1'b0; //异步触发,当dw为1时,up恒为0
- else
- pwm_up <= pwm_up_in; //当dw为0时,up无限制
- always @(posedge clk or posedge rst or posedge pwm_up)
- if(rst)
- pwm_dw <= 1'b1; //复位时dw锁定,防止出现up_in=dw_in=1
- else
- if(pwm_up)
- pwm_dw <= 1'b0; //异步触发,当up为1时,dw恒为0
- else
- pwm_dw <= pwm_dw_in; //当up为0时,dw无限制
复制代码一周热门 更多>