STM32 TIM高级定时器的互补PWM支持插入死区时间,本文将介绍如何计算以及配置正确的死区时间。

什么是死区时间?

死区时间主要是在逆变电路中,防止一个桥臂的上下两个开关器件同时导通,那么会导致电路电流上升,从而对系统造成损害。因为开关元器件的tdont_{don}tdon​和tdofft_{doff}tdoff​严格意义并不是相同的。所以在驱动开关元器件门极的时候需要增加一段延时,确保另一个开关管完全关断之后再去打开这个开关元器件,这里的延时就是需要施加的死区时间。

数据手册的参数

这里看了一下NXPIRF540的数据手册,门极开关时间如下所示;



然后找到相关的tdont_{don}tdon​,tdfft_{dff}tdff​,trt_rtr​,tft_ftf​的相关典型参数;

  • tdont_{don}tdon​:门极的开通延迟时间
  • tdofft_{doff}tdoff​:门极的关断延迟时间
  • trt_rtr​:门极上升时间
  • tft_ftf​:门极下降时间

下面是一个IGBT的数据手册;



下图是IGBT的开关属性,同样可以找到tdont_{don}tdon​,tdfft_{dff}tdff​,trt_rtr​,tft_ftf​等参数,下面计算的时候会用到;

如何计算合理的死区时间?

这里用tdeadt_{dead}tdead​表示死区时间,因为门极上升和下降时间通常比延迟时间小很多,所以这里可以不用考虑它们。则死区时间满足;

Tdead=[(Tdoffmax−Tdonmin)+(Tpddmax−Tpddmin)]∗1.2T_{dead}=[(T_{doffmax}-T_{donmin})+(T_{pddmax}-T_{pddmin})]*1.2Tdead​=[(Tdoffmax​−Tdonmin​)+(Tpddmax​−Tpddmin​)]∗1.2

  • TdoffmaxT_{doffmax}Tdoffmax​ :最大的关断延迟时间;
  • TdonminT_{donmin}Tdonmin​ :最小的开通延迟时间;
  • TpddmaxT_{pddmax}Tpddmax​ :最大的驱动信号传递延迟时间;
  • TpddminT_{pddmin}Tpddmin​ :最小的驱动信号传递延迟时间;

其中TdoffmaxT_{doffmax}Tdoffmax​ 和TdonminT_{donmin}Tdonmin​正如上文所提到的可以元器件的数据手册中找到;

TpddmaxT_{pddmax}Tpddmax​ 和 TpddminT_{pddmin}Tpddmin​ 一般由驱动器厂家给出,如果是MCUIO驱动的话,需要考虑IO的上升时间和下降时间,另外一般会加光耦进行隔离,这里还需要考虑到光耦的开关延时。

STM32中配置死区时间

STM32的TIM高级定时器支持互补PWM波形发生,具体可以参考之前的文章《STM32 TIM 多通道互补PWM波形输出配置快速入门》《STM32 TIM1高级定时器配置快速入门》,同时它支持插入死区时间和刹车的配置。

直接看参考手册里的寄存器TIMx_BDTR,这是配置刹车和死区时间的寄存器;



可以看到死区时间DTUTG[7:0]决定,这里还有一个问题是TDTST_{DTS}TDTS​是什么?

在TIMx_CR1的寄存器可以得知,tDTSt_{DTS}tDTS​由TIMx_CR1寄存器的CKD决定;如果这里配置成
00
,那么tDTSt_{DTS}tDTS​和内部定时器的频率相同,为8M



结合代码做一下计算;系统频率为72M,下面是时基单元的配置;

#define PWM_FREQ ((u16) 16000) // in Hz  (N.b.: pattern type is center aligned)
#define PWM_PRSC ((u8)0)
#define PWM_PERIOD ((u16) (CKTIM / (u32)(2 * PWM_FREQ *(PWM_PRSC+1))))
  TIM_TimeBaseStructInit(&TIM1_TimeBaseStructure);
/* Time Base configuration */
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

#define CKTIM	((u32)72000000uL) 	/* Silicon running at 72MHz Resolution: 1Hz */
#define DEADTIME_NS ((u16) 500) //in nsec; range is [0...3500]
#define DEADTIME (u16)((unsigned long long)CKTIM/2 \
*(unsigned long long)DEADTIME_NS/1000 000 000uL)
  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;

4000us到8us,若步长时间为62ns;

8us到16us,若步长时间为250ns;

16us到32us,若步长时间为500ns;

如果需要配置死区时间 500ns,系统频率72,000,000Hz,那么需要配置寄存器的值为;

VREG=50031=16
V_{REG} = \cfrac{500}{31} = 16
VREG​=31500​=16

直接写成宏定义的形式

#define DEADTIME  (u16)((unsigned long long)CKTIM/2 \
*(unsigned long long)DEADTIME_NS/1000 000 000uL)

用示波器验证了一下,结果正确;当时图片忘记保存,下次更新的时候再上图吧。

STM32 TIM高级定时器死区时间的计算的更多相关文章

  1. 第32章 TIM—高级定时器—零死角玩转STM32-F429系列

    第32章     TIM—高级定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  2. STM32 TIM1高级定时器RCR重复计数器的理解

    STM32 TIM1高级定时器RCR重复计数器的理解 TIMx_RCR重复计数器寄存器,重复计数器只支持高级定时器TIM1和TIM8,下面看标准外设库的TIM结构体的封装: typedef struc ...

  3. STM32 TIM1高级定时器配置快速入门

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 重点内容 时基单元 计 ...

  4. TIM—高级定时器

    本章参考资料:< STM32F4xx 参考手册>.< STM32F4xx 规格书>.库帮助文档< stm32f4xx_dsp_stdperiph_lib_um.chm&g ...

  5. Stm32高级定时器(三)

    Stm32高级定时器(三) 1 互补输出和死区插入 1.1 死区:某个处于相对无效状态的时间或空间 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步.但为了安全考虑,以 ...

  6. Stm32高级定时器(四)

    Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根 ...

  7. Stm32高级定时器(一)

    Stm32高级定时器(一) 1 定时器的用途 2 高级定时器框图 3 时基单元 4 通道 1 定时器的用途 已知一个波形求另一个未知波形(信号长度和占空比) 已知波形的信号长度和占空比产生一个相应的波 ...

  8. stm32高级定时器的应用——spwm

    用过stm32定时器的朋友都知道,定时器的CCR寄存器,可以用来配置PWM的输出,但同样也可以用来配置spwm.废话不多说,直接上代码. 首先,你得考虑一下几个因素: 1.同步调制还是异步调制.  2 ...

  9. Stm32高级定时器(二)

    Stm32高级定时器(二) 1 主从模式:主?从? 谈论主从,可知至少有两个以上的触发或者驱动信号,stm32内部有多个定时器,可以相互之间驱动或者控制. 主模式:定时器使能只受驱动时钟控制或者输出控 ...

随机推荐

  1. App的数据如何用python抓取

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. App中的数据可以用网络爬虫抓取么 答案是完全肯定的:凡是可以看到的APP数 ...

  2. 最短路径变形 POJ 2253

    Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sit ...

  3. 开源软件SoftEther使用

    最近在寻找比较好用的开源VPN,感觉SoftEther很符合我的需求.一方面是SoftEther属于开源软件并且一直在更新,另一方面是功能强大,好用. VPN支持路由功能和NAT功能,还支持多种类型的 ...

  4. XSS语义分析的阶段性总结(一)

    本文作者:Kale 前言 由于X3Scan的研发已经有些进展了,所以对这一阶段的工作做一下总结!对于X3Scan的定位,我更加倾向于主动+被动的结合.主动的方面主要体现在可以主动抓取页面链接并发起请求 ...

  5. SpringCloud-Hystrix 服务降级、熔断

    Hystrix 是什么? Hystrix 是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,Hystrix 能够保证在一个依赖出问题的情况下 ...

  6. 浏览器插件之王-Tampermonkey(油猴脚本)

    大家电脑都在使用浏览器,相信大家对浏览器插件也不陌生,浏览器插件是安装在浏览器里面,对浏览器功能进行拓展的脚本,现在的主流浏览器都有各种各样的插件如图: 这些插件让我们的上网方便了许多,有去广告的插件 ...

  7. Nmap详细用法

    探测主机存活 (1)-sP :进行ping扫描 (2) -sn: ping探测扫描主机, 不进行端口扫描 (3)-sA     发送ACK探测存活 端口扫描 (1) -sS :半开放扫描 (2) sT ...

  8. 2019-2020-1 20199310《Linux内核原理与分析》第九周作业

    1.问题描述 在前面的文章中,学习了译链接的过程和ELF可执行文件格式,对Linux内核装载和启动一个可执行程序,本次内容围绕对进程调度的时机和进程切换进行,分析进程的调度时机,调度策略和算法,并跟踪 ...

  9. Copy ArrayList的四种方式

    目录 简介 使用构造函数 使用addAll方法 使用Collections.copy 使用stream 总结 Copy ArrayList的四种方式 简介 ArrayList是我们经常会用到的集合类, ...

  10. 【思科】OSI和TCP/IP分层

    OSI参考模型 20世纪70年代,ISO创建OSI参考模型,希望不同供应商的网络能够相互协同工作 OSI:开放系统互联 open system interconnection ISO:国际标准化组织  ...