模拟死区时间

在buck-boost电路中,如果不为互补PWM加死区时间,在电平翻转时,可能会出现同时为高电平。同时高电平的时间很短,示波器难以捕捉。在极短时间内(30ns左右),上下两个MOS管同时导通,导致MOS管烧毁,为解决该问题,需要引入死区时间。但是,部分芯片没有死区时间功能,为此需要开发者自己实现死区功能。
buck-boost无死区时间

不互补PWM

在T1时刻可以通过,减小PWM2占空比,给PWM电平翻转流出足够的时间,避免出现同时高电平现象。为尽可能保证Vout=VinDuty1(Duty1:PWM1占空比;Duty2:PWM2占空比),需要合理的设置PWM占空比Duty2,既要保证T(1-Duty1-Duty2)>Tr(Tr:PWM电平翻转所需最小时间,包含MOS管开断时间;T:PWM周期),又要时1-Duty1-Duty2尽可能小。这样可以保证T1时刻PWM工作正常,不会同时高电平,T2时刻有待继续处理。
不互补PWM

延时

为保证T2时刻,PWM工作正常,需要为PWM1添加延时。延时需要大于Tr(50ns),小于PWM1,PWM2高电平持续时间差值(n62.5ns),且n62.5-Delay>50ns,这样可以产生类似死区时间的效果。下图比较夸张,实际要做时,可能PW2占空比50%,PWM2占空比为48%,前后各延时1%占空比即可满足需求。
模拟死区时间

实操结果

最后,放两张实际的PWM波形图及代码。使用nop语句做的延时,与预估时间有些出入,T2时刻时间差171ns,T1时刻时间差50ns,1-Duty1-Duty2=5%。16M时钟频率,定时器分频1,定时器计数上限80,16MHz/80=200KHz,周期5us,差值时间250ns,PWM1,PWM2极性相反。200KHz PWM,64MHz时钟频率,STM32F103生成的死区时间比较漂亮,T1,T2时间差值几乎相等。
死区时间
模拟死区时间效果图

	hal_pwm_module_init();
	pwm_ch_t pwm_channel[3];		
    for(int i = 0; i < 2; i++)
    {
        pwm_channel[i].pwmN = (PWMN_e)(PWM_CH0 + (PWMN_e)i);
        pwm_channel[i].pwmDiv = PWM_CLK_NO_DIV;
        pwm_channel[i].pwmMode = PWM_CNT_UP;
        pwm_channel[i].pwmPolarity = PWM_POLARITY_RISING;        
        pwm_channel[i].cntTopVal = 80;         // 256 ybz   8000*62.5ns=500us    80*62.5ns=5us

    }
	pwm_channel[0].pwmPin = 0;
	pwm_channel[1].pwmPin = 4;
	
	pwm_channel[0].cmpVal = 22;   // 24-20 171.88ns 62.48ns  250ns
	pwm_channel[0].pwmPolarity = PWM_POLARITY_RISING;	
			
	pwm_channel[1].pwmPolarity = PWM_POLARITY_FALLING;	
	pwm_channel[1].cmpVal = 18;
	
	hal_pwm_ch_start(pwm_channel[0]);
	__asm("nop");  //ideal:62.5ns, in fact:171ns
//		__asm("nop");
	hal_pwm_ch_start(pwm_channel[1]);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值