STM32死区计算和配置

这篇具有很好参考价值的文章主要介绍了STM32死区计算和配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

死区简介

定时器相关时钟系统

STM32中配置死区时间

明确自己定时器系统时钟

TIMx_BDTR寄存器


死区简介

        通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥,每个桥的上半桥和下半桥是是绝对不能同时导通的。但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。

        PWM输出时的Dead Zone(死区)作用是在电平翻转时插入一个时间间隔,避免关闭前一个设备和打开后一个设备时因为开关速度的问题出现同时开启状态而增加负荷的情况(在没有彻底关闭前打开了后一个设备),尤其是电流过大时容易造成短路等损坏设备。

stm32死区设置,嵌入式硬件,stm32

 文章来源地址https://www.toymoban.com/news/detail-705736.html

        当比较单元的比较操作被使能,就会产生波形PHx。PHx经过死区单元,就会输出两路互补的带有死区的PWM波形DTPHx和DTPHx_。PHx、DTPHx、DTPHx_之间的关系如上图,如果没有死区,那么DTPHx和DTPHx_应该是完全互补的。DTPHx的导通时刻是在PHx的基础上延时了1个死区时间,而关闭时刻未变。DTPHx_是在PHx取反的基础上,也将导通时间延迟了1个死区时间,而关断的时间没有发生改变。

        高级定时器的才带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能(同时保持高电平),从这些看来高级定时器的pwm天生就是用来控制电机的。STM32H7系列芯片中,TIM1、TIM8、TIM12和TIM15是高级别定时器,支持死区控制功能。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。

定时器相关时钟系统

        高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1和APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。通用定时器时钟信号完整的路线应该是下面这样的:

AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟信号CK_INT(72mhz)。定时器接下来还有一个分频寄存器:TIMX_PSC(输入时钟频率CK_PSC一般等于CK_INT)经过他的分频后,才是定时器计数的频率CK_CNT。所以真正的计时器时钟频率CK_CNT应该是72mhz/(TIMX_PSC-1)。pwm主要就是控制频率和占空比的:这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样pwm的频率就是tim_frequency/(TIMX_ARR-1)。在计数时会不停的和CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于CCRX值的话电平极性反相。所以这也就控制了占空比。

在STM32H7系列芯片中,PWM死区时间的设定是通过TIM_BreakDeadTimeConfigTypeDef结构体中的DeadTime参数来实现的,DeadTime参数的单位是计数器时钟周期。

STM32中配置死区时间

明确自己定时器系统时钟

AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟频率CK_INT(CK_PSC)(72mhz)。

TIMx_BDTR寄存器

STM32的TIM高级定时器支持互补PWM波形发生,同时它支持插入死区时间和刹车的配置。直接看参考手册里的寄存器TIMx_BDTR,这是配置刹车和死区时间的寄存器;

stm32死区设置,嵌入式硬件,stm32

 DTG寄存器为死区时间存储值。设DTG[7:0] = k;

stm32死区设置,嵌入式硬件,stm32 

DT:死区时间;为系统时钟周期时长;Tdtg为系统周期时长乘以倍数,这个值用于计算最终死区时间,也叫作步长。

在72M的定时器时钟下, = 1/72M = 13.89ns。

这个计算比较复杂,主要思想就是把DTG的八位,掰成两部分用。一部分决定步长(DTG[7:5],决定步长Tdtg是·的几倍,另一部分是与步长相乘的乘数(不同的步长对应不同的公式),乘数可以自行设定,步长*乘数=死区时间。至于步长与乘数从哪里分开,看上表。

周期13.89ns时,死区范围ns 0~1764 1778~3528 3556~7000 7112~14001

        可以看到死区时间DT由DTG[7:0]决定,这里还有一个问题是·是什么?在TIMx_CR1的寄存器可以得知,由TIMx_CR1寄存器的CKD决定;

stm32死区设置,嵌入式硬件,stm32

接下来举例说明表格怎么用。

定时器时钟为72MHz,时钟分频因子为1分频。定时器的时钟周期:TDTS=1/tDTS=1/tCK_INT=1/72MHz=13.89ns.

根据公式可算出可能的死区时间范围如下四种情况:

1.DT=DTG[7:0]×Tdtg,Tdtg=TDTS

DT=(0~127)×13.89ns=0~1763.89ns

2.DT=(64+DTG[5:0])×Tdtg =(64+DTG[7:0] -128)×Tdtg , Tdtg=2×TDTS

DT=(64+(0~63))×2×13.89ns=1777.92ns~3528.06ns

3.DT=(32+DTG[4:0])×Tdtg = (32+DTG[7:0]-192)×Tdtg, Tdtg=8×TDTS

DT=(32+(0~31))×8×13.89ns=3555.84ns~7000.56ns=3.56us~7us

4.DT = (32+DTG[4:0])×Tdtg =(32+DTG[7:0] - 224)×Tdtg  ,Tdtg=16×TDTS

DT=(32+(0~31))×16×13.89ns=7111.68ns~14001.12ns=7.11168us~14us

假如 定时器的工作时钟频率72MHz,时钟分频因子1分频,死区时间设置为2us。则DTG寄存器值为多少?

因为:死区时间2us属于情况2,DTG[7:6] = 0b10,DTG[5:0]寄存器值=2000ns÷(13.89ns*2)-64=7.994240460763139≈8. 二进制为:0x001000.综上所述:DTG[7:0] = 0b10001000 = 0x88=136

假如3us的死区时间,那么属于情况2,DTG[7:6] = 0b10,步长=27.78,需要的乘数 = 3000÷27.78-64=108-64=44=0b101100,DTG[7:0]=0b10101100=0xAC=172。DTG寄存器为死区时间存储值。

实际的系统中,死区的时间一般由硬件的响应速度决定

 

到了这里,关于STM32死区计算和配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32的时钟系统(嵌入式学习)

    时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。因此时钟对于计算机系统是至关重要的,通常时钟系

    2024年02月16日
    浏览(47)
  • 嵌入式 STM32 通讯协议--MODBUS

    目录 一、自定义通信协议 1、协议介绍 2、网络协议 3、自定义的通信协议  二、MODBUS通信协议 1、概述 2、MODBUS帧结构  协议描述 3、MODBUS数据模型   4、MODBUS事务处理的定义 5、MODBUS功能码  6、功能码定义   7、MODBUS数据链路层 8、MODBUS地址规则  9、MODBUS帧描述 10、MODBUS两种

    2024年02月11日
    浏览(62)
  • 嵌入式——新建STM32工程(标准库)

    目录 一、初识标准库 1.CMSIS标准及库层级关系 2.库文件介绍 (1)Libraries文件夹 ①CMSIS文件夹 ②STM32F10x_Std_Periph_Driver文件夹 ③ 在用库建立一个完整的工程时,还需要添加stm32f10x_it.c、 stm32f10x_conf.h 和 system_stm32f10x.c文件 (2)Project文件夹 (3)Utilities文件夹 3.库各文件之间的关

    2024年01月23日
    浏览(53)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(67)
  • 嵌入式C语言基础(STM32)

    前言:一条混迹嵌入式3年的老咸鱼,想到自己第一次接触到stm32的库函数时,c语言稀碎,痛不欲生的场景,该文章为萌新指条明路。 位操作在嵌入式中常用于直接对芯片的寄存器进行操作,当时作为初学者的我看着一脸懵逼,至于为什么这样修改,下面好好分析一下。  一

    2024年02月02日
    浏览(56)
  • STM32的中断系统详解(嵌入式学习)

    中断是处理器中的一种机制,用于响应和处理突发事件或紧急事件。当发生中断时,当前正在执行的程序会被暂时中止,处理器会跳转到中断处理程序(也称为中断服务例程),对中断事件进行处理。处理完中断后,处理器再返回到被中断的程序继续执行。 中断可以分为内部

    2024年02月12日
    浏览(69)
  • 嵌入式学习笔记——STM32的时钟树

    在之前的所有代码编程的过程中,似乎每次都绕不开一个叫做时钟使能的东西,当时我们是在数据手册上直接看其挂接在那条时钟线上的,那么STM32内部的时钟到底是怎么一个构型呢,本文来对此做一个介绍。 老规矩,一个新的名词出现,首先需要搞清楚它是个啥,下图中对

    2024年02月02日
    浏览(53)
  • 嵌入式学习笔记——STM32硬件基础知识

    上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程,这都是解决的电脑端的开发环境问题,还没有到实际的开发板上,我们的单片机是都是焊接在开发板上的,PCB上有着它所需的工作电路。并不是直接给供电电压就可以让其工作的,本文主要是简介一下

    2024年01月22日
    浏览(68)
  • 【嵌入式】openmv与stm32的串口通信

    参考:(文中部分图/文字/代码来自以下文章,部分内容由于时间久远已经找不到原作者,可联系注明或删除) PYTHON串口数据打包发送STM32接收数据解析 openmv中文文档 这里以openmv循迹代码为例 main.py 关于struct.pack: 函数原型:struct.pack(fmt, v1, v2, …) fmt是格式字符串 v1,v2是要转

    2024年02月14日
    浏览(40)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包