STM32F407高级定时器-死区时间研究-STM32CubeMX

news2024/10/7 10:13:18

距离上次写笔记,已经过去好长时间了

中间也折腾过不少东西,但是都没咋整理,主要是这中间都是在干活儿,不是自己想要研究的,也没想着要写。

从去年10月份开始想要学习FOC,10月份研究了一个月,到11月初,实现了SVPWM驱动BLDC电机,使用串口实现开环下转速和力矩调节。基本上算是刚刚入门, 但是后来一直去忙别的各种事情了,搁置了一年,最近想重新捡起来,发现去年的代码折腾的已经跑不起来了,于是重新开始看去年收藏夹里的教程——从最基础的高级定时器开始。高级定时器这块儿的知识,比较基础的就不赘述了,我会在文章末尾附上几个我个人认为比较好的文章,供有需要的同学学习。

之前关于死区时间的设定,一直没搞清楚,CubeMX中DeadTime就一个孤零零的文本框,也没有注释,似乎很不起眼,这次花了点儿时间,研究整理了一下,有理论计算,有上机试验,希望能帮助到有需要的同学吧。

DTG配置死区发生器详解

回归正题!下图截自《STM32F4xx中文编程手册》RM0090,DTG寄存器为TIM1 和 TIM8 断路和死区寄存器 (TIMx_BDTR)的低8位,高八位咱们暂时不用关心哈,咱们只关心低8位。DTG寄存器中的值不同,决定了死区时间的计算方法也不同。DTG寄存器的设置方法非常简单,直接通过CubeMX中DeadTime处写入即可。

 根据上图可以知道,设置死区时间的时候,根据输入到DTG的值不同,会被分为4种情况,分别是:

 1.当最高位为0 低7位为任意值,即CubeMX中DeadTime值输入为0-127时,死区时间为

[0~127]×t_{dtg}t_{dtg}=t_{DTS}

例如CubeMX中 DeadTime输入100时,理论得到死区时间DT=100×1/72MHz=1.38889us

CubeMX设置截图如下,使用TIM8高级定时器,使用通道CH1和CH1N输出互补PWM波,预分频值PSC为72-1,自动重装载值ARR为1000-1(图中DeadTime输入的为十六进制0x64,转为为十进制后即为100)

 将程序下载到正点F103ZET6核心板上,使用示波器检测PC5(CH1)与PA7(CH1N)互补方波的死区时间,得到如下截图

 图中两方波的时间差即为死区时间,测量值为1.38us,与计算值1.38889us几乎一致。

2.当DTG[7:6]为10  而DTG[5:0]为任意值时(10xx xxxx),此时死区时间DT计算公式为

DT=(64+DTG[5:0])xt_{dtg}t_{dtg}=2t_{DTS}

DT= (64+[0~63])xt_{dtg}  ,t_{dtg}=2t_{DTS}

 例如CubeMX中 DeadTime输入0xb9(1011 1001)时,理论得到死区时间 

DT= (64+(0011 1001))xt_{dtg} = (64+57)x 2t_{DTS} = (64+57)x2x1/72MHz=3.61111us

设置CubeMX中DeadTime值为0xb9

 下载烧录,示波器检测死区时间

 实际检测出死区时间为3.36us,与理论时间3.36111us基本吻合。

3.和4. 两种情况与2计算方式基本相同,不过就是需要注意,DTG[7:5]三位值已经固定,DTG[4:0]取值范围缩小至【0~31】,在确定DTG[4:0]取值数值之后,将DTG[7:5]与DTG[4:0]进行按位与操作,组成一个字节,最后将该值填入Cube MX中DeadTime处即可;另外t_{dtg}取值分别变为8倍t_{DTS}与16倍t_{DTS}

实际3 4两种情况试验我都做过了,3不放了,只把第4种情形,DTG[4:0]取值最大的情况贴图在下面吧。

设置CubeMX中DeadTime值为0xff (1111 1111

  DT= (32+(1111 1111))xt_{dtg} = (32+31)x 16t_{DTS} = (32+31)x16x1/72MHz=14.0us

 经过实测,死区时间同样为14us,与计算结果一致。

 非常关键的t_{DTS}的计算方法

有的同学可能会好奇,  t_{dtg}=N倍t_{DTS},那这个t_{DTS}又是怎么来的呢,其实关于t_{DTS}的取值方法,官方的编程手册中同样提到了,我贴上来供大家参考。

 不做特别设置的时候,t_{DTS}=tCK_INT,即与内部时钟相同。即内部时钟频率,72MHz。

参考文章推荐

STM32F407配置STM32CubeMX通过高级定时器TIM8产生PWM互补输出(带死区和刹车)实验_xuechanba的博客-CSDN博客

STM32CUBEMX配置教程(五)高级定时器输出两路PWM波_怡步晓心l的博客-CSDN博客

STM32CubeMX的TIM1互补PWM输出,HAL库(2路,带死区)_小李(李宏松)的博客-CSDN博客

STM32 HAL库PWM回调函数的特性_Wake_Dream_2333的博客-CSDN博客_callback stm32

STM32CubeIDE 统计及控制PWM产生个数_sudaroot的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5学习笔记(一)

XHTML,全称“EXtensible HyperText Mark-up Language(扩展的超文本标记语言)”,它是XML风格的HTML4.01,我们可以称之为更严格、更纯净的HTML4.01。 HTML语法书写比较松散,比较利于开发者编写。但是对于机器…

计算机的种类

文章目录计算机的种类一,模拟计算机二,数字计算机三,混合计算机计算机的种类 《计算机是什么》一节中讲到,根据不同计算机的尺寸,可以将计算机分为微型计算机、小型计算机、大型计算机、工作站和超级计算机5类。实际上…

string类(一)

目录 一、 string类对象的常见构造 二、string类对象的容量操作 2.1 size(返回字符串有效字符长度) 2.2 capacity(返回空间总大小) 2.3 reserve扩空间​编辑 2.4 resize初始化不会覆盖本来的空间​编辑 2.5 对于test_string7中每一句代码进行调试运行 三、string类对象的…

云中网络的隔离:GRE、VXLAN

对于云平台中的隔离问题,前面咱们用的策略一直都是 VLAN,但是我们也说过这种策略的问题,VLAN 只有 12 位,共 4096 个。当时设计的时候,看起来是够了,但是现在绝对不够用,怎么办呢? …

真的,Java并发编程基础入门看这个就够了

Java并发编程学习之02Java并发编程入门指南 真的,Java并发编程入门看这个就够了1. Java天生多线程2. Java启动多线程实现方式2.1 实现代码2.2 Thread和Runnable的区别2.3 start和run方法的区别3. Java如何停止线程呢3.1 已弃用方法3.2 推荐使用4. 守护线程5. 优先级…

JVM的GC算法CMS和G1

GC算法 -XX:UseSerialGC 新生代和老年代都使用串行收集器 串行收集器使用单线程并且是独占式的垃圾回收 -XX:UseParNewGC 新生代使用ParNew垃圾回收器,老年代使用串行收集器 ParNew是串行收集器的多线程版本,只工作在新生代(可以见名知…

jmeter逻辑控制器和定时器

常用逻辑控制器和定时器一、认识逻辑控制器一、作用:⼀个事务会包含并请求二、常见逻辑控制器介绍1、simple controller2、recorder controller3、loop controller4、random controller5、if controller6、module/include controller7、transaction controller三、J…

A Survey on Bias and Fairness in Machine Learning 阅读笔记

论文链接 Section 1 引言 1. In the context of decision-making, fairness is the absence of any prejudice or favoritism toward an individual or group based on their inherent or acquired characteristics. 公平是指基于个人或群体的固有或后天特征而对其没有任何偏…

【sfu】rtc 入口

rtc 入口 入口是 rtc adpter 类。 准备 call模块的所有资源 通过call模块使用webrtc内置 各类 rtcadpter的创建类rtcadpterfactory 是外部创建的 创建adapterfactory的外部类是peerconnection adapter_factory_ = std::move(std::make_unique

融云全球社交泛娱乐洞察,互联网社交换挡期的「社区产品」机遇

一切应用都将社交化。关注【融云全球互联网通信云】回复【融云】抽取高颜值大容量高端可乐保温杯哦~ 融入社交能力,创造增长奇迹。激活用户在不同场景的社交需求,让应用焕发新的生命力,也让“社交X”成为出海最大的浪。 《2022 社交泛娱乐出…

编译原理--基本块的划分

基本块的划分原则有4条 初始语句作为第一个基本块的入口遇到标号类语句,结束当前基本块,标号作为新基本块的入口(标号不在当前基本块中,而是划到下一个基本块)遇到转移类语句时,结束当前当前基本块&#x…

Java反序列化之CommonsCollections(CC1)分析篇

文章目录前言一、过程分析 1.入口点---危险方法InvokerTransformer.transform() 2.触发危险函数TransformedMap.checkSetValue() 3.AnnotationInvocationHandler类 4.ChainedTransformer类 5.ChainedTransformer类前言 本文包括:Java反序列化之CommonsCol…

3DMAX一键生成螺母和螺栓插件使用教程

插件介绍 3DMAX一键生成螺母和螺栓插件,用于创建精缰化的螺母和螺栓模型。这些模型是逼真的,只需单击一下即可生成。有许多参数可以定制模型的外观或尺寸。 主要功能 单击创建螺母、螺栓和垫圈在螺栓顶部创建文本标记(商标)直径…

关于不同长度PEG的丙炔:Pyrene-PEG2/PEG3/PEG4/PEG5-propargyl,1817735-33-3

Pyrene-PEG2-Propargyl中芘用于蛋白质构象和相互作用研究中的荧光探针,降冰片烯很容易与叠氮化物和四嗪反应,可用于用荧光团和功能分子标记细胞,亲水性 PEG 间隔臂可以增加水溶性。包括PEG2、PEG3、PEG4、PEG5等不同长度的PEG。 1、Pyrene-PE…

大数据:Shell的操作

文章目录HDFS常用命令一、创建目录1、创建单层目录2、创建多层目录查看目录三、上传本地文件到HDFS四、查看文件内容五、下载HDFS文件到本地六、删除HDFS文件七、删除HDFS目录HDFS常用命令 启动Hadoop集群命令:start-all.sh 一、创建目录 1、创建单层目录 命令…

Spring Boot Auto-Configuration

Spring 自定义Auto-Configuration Spring Boot 可以根据classpath中依赖关系自动装配应用程序。通过自动装配机制,可以使开发更快、更简单。今天,学习下如何在Spring Boot 中创建自定义 auto-configuration。 代码运行环境 JDK17MYSQL8源码地址 Mave…

[附源码]Python计算机毕业设计大学生心理健康管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

VSCODE编译阿里云HaaS程序时遇到Win32file找不到错误怎么办?

摘要:本文介绍DLL load failed while importing win32file:找不到指定的程序,这个错误的解决方法。使用vscode拉取阿里云HaaS物联网开发案例代码时,可能会遇到编译出错的情况,可能会遇到一些意外的问题,并非…

通过Native Memory Tracking查JVM的线程内存使用(线上JVM排障之九)

很多时候会面对线上内存使用很多,特别是本地内存怎么用的说不太清,就是每一块内存总和和总的Java线程占用内存不匹配。 很多时候如果dump出来内存也没有太大的作用,因为本地内存是看不到。本地内存有很多是线程占用的空间。 以下图为例,这是一个线上的服务的JVM各块内存使…

YOLOV5在deepstream6.1.1上应用

目录 0.前言 1.Yolov5模型 1.1模型生成 1.2模型转换 1.2.1 yolov5模型转换为onnx 1.2.2 onnx模型转换为engine 2.deepstream介绍 2.1简介 2.2安装 2.2.1 dGpu 2.2.2 Jetson 2.3使用方法 3.Yolov5模型在deepstream6.1.1上应用 3.1Yolov5输出与deepstream对接 3.1…