如何实现上下管pwm互锁???

2019-03-25 07:17发布

本帖最后由 hmf1235789 于 2018-2-2 17:53 编辑

请教大家一个问题,如何实现igbt上下管的pwm互锁,防止上下管同时出现高电平而导通。要求:上管PWMA=1的时候,下管失效PWMB=0;下管PWMB=1的时候,上管失效PWMA=0。用门极或锁存电路实现,因为我最后要用Verilog来写程序。
正常情况下或者在cpld里面分频后是互补的pwm波,加上死区就可以用了。但是如果是外来pwm的情况,为了防止出现同时为高,需要做一个这样的处理。
我自己写了的如下:
  1. //pwm_up_in pwm_dw_in互锁输出always @(posedge clk)
  2.         if(rst)
  3.                 pwm_up <= 1'b0;
  4.         else
  5.                 if(pwm_up_in && pwm_dw)
  6.                         pwm_up <= 1'b0;                                                                                                        //
  7.                 else
  8.                         pwm_up <= pwm_up_in;
  9.                
  10. always @(posedge clk)
  11.         if(rst)
  12.                 pwm_dw <= 1'b0;                                                                                                                //
  13.         else
  14.                 if(pwm_dw_in && pwm_up)
  15.                         pwm_dw <= 1'b0;                                                                                                        //
  16.                 else
  17.                         pwm_dw <= pwm_dw_in;
复制代码
这段代码出现的问题是,在复位时刻pwm_up,pwm_dw都是为0的,程序会进入全1或全0的循环当中。
我也画了这个图,不知道可不可以?


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
hmf1235789
2019-03-25 16:57
用两个d触发器进行互锁,其中一路在变成1之前监测另一路的输出,如果另一路输出为1,则本路强制输出0;如果另一路输出为0,则本路=输入变化。另一路也做相同的判断。这样在任意时刻都只有一路为1,但是如果是在复位时刻, pwm_up和pwm_dw都会被清为0,然后寄存器保持,如果复位后两路pwm_in=1,则会出现误判,所以只要将其中一路 pwm_dw <= 1'b1; 就可以避免复位导致同时为0。另外d触发器用异步清零和置位。

一周热门 更多>