最新新闻:

pwm死区是什么意思「死区时间控制」

时间:2022-12-28 10:59:45来源:搜狐

今天带来pwm死区是什么意思「死区时间控制」,关于pwm死区是什么意思「死区时间控制」很多人还不知道,现在让我们一起来看看吧!

在stm32中配置死时间

什么是死时间?PWM是脉宽调制,在电力电子中,最常用的是整流器和逆变器。这就需要使用整流桥和逆变桥。

对于三相电源,需要三个桥臂。以两电平为例,每个桥臂有两个电力电子器件,如IGBT。大致如下图所示;

两个IGBT不能同时导通,否则会出现短路,对系统造成损坏。

那为什么会有同时传导呢?

因为开关元件和严格意义上的不一样。

因此,在驱动一个开关元件的栅极时,需要增加一个延时,以保证另一个开关管在断开开关元件之前完全关断;

上半桥关闭后,下半桥延时开启;

下半桥关闭后,上半桥延时开启;

这样就不会同时导通,避免功率元件烧毁;死区时间控制在通常配备PWM的单片机中都有这样的功能,下面将进一步介绍。

与PWM相比,死区时间是在PWM输出时,上下管不会有输出,当然波形输出会中断,死区时间一般只占周期的百分之几。但是当PWM波本身的占空比较小时,备件大于死区时间,所以死区时间会影响输出纹波,但不应该起决定性作用。

另外,如果死区时间设置太小,但上下管仍然同时导通,因为导通时间很短,电流没有变得大到足以烧毁系统,会导致此时开关元件发热严重,因此选择合适的死区时间尤为重要,死区时间过大或过小。

如何计算合理的死区时间?栅极上升和下降时间通常远小于延迟时间,因此这里不予考虑。死区时间满足;

:最大关闭延迟时间;

:最小开启延迟时间;

:驱动信号传输的最大延迟时间;

:驱动信号传输的最小延迟时间;

其中和上面提到的可以在元器件的数据手册中找到;并且一般由生产厂家给出;

如果是MCU的IO驱动,需要考虑IO的上升时间和下降时间。此外,通常会添加光耦用于隔离。这里也需要考虑光耦的开关延迟。

STM32 配置了死区时间。STM32 的 Tim 高级定时器支持互补 PWM 波形生成。同时支持插入死区时间和制动的配置。

直接看参考手册中的寄存器timx_bdtr,就是配置刹车和死区时间的寄存器;

可以看到死区时间 DT 由 * * UTG [7:0] * 决定。这里的另一个问题是什么?在 timx_CR1 的寄存器可以通过 timx_CKD 决定 CR1 寄存器;

如果这里配置为00,则频率与内部定时器的频率相同,为8m;

结合代码做一个计算;系统频率为72m。以下是时基单元的配置;

#definePWM_ FREQ((u16)16000)//inHz(Nb:patterntypeiscenteraligned)#definePWM_ PRSC((u8)0)#definePWM_ PERIOD((u16)(CKTIM/(u32)(2*PWM_ FREQ*(PWM_ PRSC 1) ))))

TIM_TimeBaseStructInit(&TIM1_TimeBaseStructure);/* TimeBaseconfiguration*/TIM1_TimeBaseStructure.TIM_Prescaler=0x0; TIM1_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_CenterAligned1;TIM1_TimeBaseStructure.TIM_Period=PWM_PERIOD;TIM1_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV2;

PWM的频率为16K。注意这里的PWM是中心对齐模式,所以配置的时钟频率是32K;

当刹车和死区时间低于时,配置了bdtr寄存器,所以这里的CK_int是32m

#defineCKTIM((u32)72000000uL)/*Siliconrunningat72MHzResolution:1Hz*/#defineDEADTIME_ NS((u16)500)//innsec; 范围是[0.. 3500]#defineDEADTIME(u16)((unsignedlonglong)CKTIM/2*(unsignedlonglong)DEADTIME_NS/1000000000uL)

TIM1_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;TIM1_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;TIM1_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_1;TIM1_BDTRInitStructure.TIM_DeadTime=DEADTIME;TIM1_BDTRInitStructure.TIM_Break=TIM_Break_Disable;TIM1_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;TIM1_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Disable;

例如,如果 TDTs = 31ns (32mhz),则可能的死区时间为 0 到 3970ns,如果步进时间为 31ns;如果步进时间为 62 ns,则为 4 000 us 至 8 US;如果步进时间为 250 ns,则为 8 us 至 16 us;16us到32us,如果步进时间为500ns;

如果需要配置1000ns的死区时间和72000000hz的系统频率,则需要将寄存器的值配置为;

直接写成宏定义的形式;

#defineDEADTIME(u16)((unsignedlonglong)CKTIM/2*(unsignedlonglong)DEADTIME_NS/1000000000uL)

声明:文章仅代表原作者观点,不代表本站立场;如有侵权、违规,可直接反馈本站,我们将会作修改或删除处理。

图文推荐

热点排行

精彩文章

热门推荐