STM32实战-高级定时器带死区的互补PWM输出

article/2025/10/14 5:15:25

前言:

平时我们设计点击驱动电路时,一般会采用npn和pnp三极管,来控制电机的导通和关闭,但是三级管内部自带电容,断电后不会立马断掉,会经过很小的一段时间才会放电完毕,这时候要留有死区给电容放电,这就有了互补pwm波。

  同时,当电机出现故障,如果利用软件控制信号输出响应断电的话会有时间上的延时,相应的也就出现的刹车的概念,利用硬件电路直接断电,减少时间延时。如下图所示:

程序主要实现的功能如下:

1、上电后,输出带死区的互补PWM;

2、触摸按键1调节PWM占空比;

3、刹车引脚高电平触发。

最终在示波器上的波形如下图所示:


目录

1.硬件电路 

 2.技术讲解

2.1高级定时器

2.2框图 

2.2.1重复计数

2.2.2死区 

2.2.3刹车 

3.软件编程 

 3.1HAL库函数

 3.2cubemax初始化

3.3编程函数 

3.3.1初始化函数

 3.3.2回调函数



1.硬件电路 

 2.技术讲解

2.1高级定时器

高级控制定时器(TIM1)由一个 16 位的自动装载计数器组成,它由一个可编程预分
频器驱动。
它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形
(输出比较, PWM,嵌入死区时间的互补 PWM 等)。
使用定时器预分频器和 RCC 时钟控制预分频器,可以实现脉冲宽度和波形周期
从几个微秒到几个毫秒的调节。

高级控制(TIM1)和通用(TIMx)定时器是完全独立的,它们不共享任何资源。它们
可以同步操作。

主要特性:

TIM1 定时器的功能包括:
● 16 位上,下,上/下自动装载计数器
● 16 位可编程预分频器,计数器时钟频率的分频系数为 1~65535 之间的任意数值
● 4 个独立通道:
- 输入捕获
- 输出比较
- PWM 生成(边缘或中间对齐模式)
- 单脉冲模式输出
- 死区时间可编程的互补输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 在指定数目的计数器周期之后更新定时器寄存器
刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
● 如下事件发生时产生中断/DMA:
- 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
- 触发事件(计数器启动,停止,初始化或者由内部/外部触发计数)
 

2.2框图 

 

2.2.1重复计数

之前我们在设置自动重装载之后,定时器会在设置的时间进入中断,高级定时器新增了重复次数计数器,设置重复次数,每到达设置时间计数一次,当满足计数阈值,就会响应中断。

2.2.2死区 

死区 为了给三极管电容放电的时间,我们可以通过软件控制pwm波形上升沿,或者下降沿的响应时间,一般设置在几微妙,需要通过示波器调节。调整前后图形一般如下所示:

2.2.3刹车 

高级定时器带有刹车检测功能,相比软件检测,硬件强制停止,对实时性要求更高,图解如下图所示:

 

3.软件编程 

 3.1HAL库函数

  本次我们新增的库函数是互补pwm波的输出,具体函数如下:

 

 

 3.2cubemax初始化

 

3.3编程函数 

 整体框架都一样,只是回调函数中修改为互补pwm波形输出,只要有按键按下,响应中断,进入回调函数,初始化函数部分上电启动pwm互补函数库。具体代码如下:

3.3.1初始化函数

static void Peripheral_Set()
{Timer6.Timer6_Start_IT(); //启动定时器6//启动定时器1pwm互补输出HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
}

 3.3.2回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == KEY1_Pin){LED.LED_Flip(LED2);/***调整pwm占空比,用于测试重复计数器功能,***/if(TIM1->CCR1 == 50){TIM1->CCR1 = 80; //调整占空比80%}else{TIM1->CCR1 = 50; //调整占空比为50%}}
}

 


http://chatgpt.dhexx.cn/article/wHiMxJv7.shtml

相关文章

暂时性死区(TDZ)

常见js面试题之一: 提示:又是一道常见的前端面试题,什么是暂时性死区? 问题描述: console.log(a);var a 1; 日志输出:undefined console.log(a);let a 1; 下面我们可以看到这里的日志输出出现了报错&am…

PWM死区(Dead Zone)的作用和意义

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

死区时间和消隐时间

1 死区时间 PWM是脉冲宽度调制,常用到整流和逆变,这就需要用到整流桥和逆变桥。对于三相电,需要三个桥臂。以高低电平为例,每个桥臂上有两个电子器件,比如IGBT,大致如下图所示: 这两个IGBT不能同…

stm32关于带死区时间的互补PWM输出

1.互补PWM输出简介 在使用stm32输出PWM波形时,笔者所用的stm32f103zet6中的高级定时器TIM1和TIM8可以输出互补的PWM波形,使用互补的PWM波常见与一些半桥电路和全桥电路控制中,使用MCU自带的高级时钟可以简便的解决互补PWM输出问题。 笔者在控制半桥电路中应用了MCU自带的TIM1时…

PWM互补输出,以及死区时间计算

本文基于野火例程进行解说 实验内容 本次实验输出一对互补的pwm波,且进行死区时间的计算说明。 代码 互补输出对应的定时器初始化代码: bsp_advance_tim.c /********************************************************************************* fi…

死区补偿---学习笔记

最近调试中发现,死区补偿对电流谐波和电流带宽影响挺大,于是对死区补偿产生浓厚兴趣,找来几篇文章粗读并做一下笔记。 传统做法 无非就是根据电流方向补偿,假如svpwm计算出的A相理论导通实践为T1,死区时间是Td&#…

什么是PWM“死区”?

关注、星标公众号,不错过精彩内容 来源:传感器与检测技术 编辑整理:strongerHuang PWM是脉宽调制,在电力电子中,最常用的就是整流和逆变。这就需要用到整流桥和逆变桥。对三相电来说,就需要三个桥臂。以两电…

死区时间的分析与设置

出现死区的主要原因是因为MOS管的源极和栅极之间的结电容。现在在栅极加上一个门电路。当门电路输出的信号跳变的瞬间,电流是非常大的,会导致MOS管发热,所以需要在门电路后面再串联一个电阻,这个电阻很小,一般在10Ω左…

什么是暂时性死区(TDZ)?

常见js面试题之一: 提示:又是一道常见的前端面试题,什么是暂时性死区? 问题描述: console.log(a);var a 1;日志输出:undefined console.log(a);let a 1;下面我们可以看到这里的日志输出出现了报错&#…

2021-02-04

一、死区初认识: 死区又称不作用区,是指控制系统的传递函数中对应输出为零的输入信号范围。 也就是说,输入信号在这个范围内,输出始终为零。输入没法影响输出,没法发挥作用,所以叫不作用区,或者…

死区4个状态分析,以及死区时间计算

死区时间的作用主要在于两点: 1)通过上下开关的时间差防止了 H 桥直通问题。 2)为开关两端的缓冲电容提供一个充放电时间,来实现开关的零电压开通(ZVS)以降低传输功率过程中的损耗,提高传输效率。 现在注重死区分析的很大一部分原因是现在…

扇入和扇出系数

扇出系数是门电路输出低电平时允许带同类门电路的个数。(输出电流能驱动负载数目)扇入系数是指门电路允许的输入端数目。(最大能承受电流条件下,能允许的输入负载数目)

镂空数学符号空心体数学符号

https://www.zhihu.com/question/297453597 word 或 WPS里,插入 -> 符号 -> 其他符号,在字体里选择 Cambria Math,然后下拉到中部可以看到:

小符号 大影响

项目场景&#xff1a; 用函数实现判断100~200之间的素数 问题描述&#xff1a; 写代码过程成中在if (1 is_prime(i))语句后面加上了;(分号&#xff09; 从而导致代码运行结果出现偏差。 #include<stdio.h> #include<math.h> int is_prime(int i) {int j 0;fo…

FPGA 扇入扇出

最近在学习有关FPGA方面的知识&#xff0c;在看一些FPGA的datasheet时&#xff0c;看到fan-out和fan-in这样的字眼&#xff0c;乍一看还真不知所云&#xff0c;继续往下看还是云里雾里&#xff0c;于是用Google在线翻译了一下&#xff0c;上面赫然是扇入扇出&#xff0c;不用想…

特殊符号组成的图案

在命令行利用特殊符号变成代码图案 各位博客们大家好啊&#xff0c;初次与大家会面&#xff0c;我就以图案的形式跟大家见面&#xff0c;接下来我会经常更新我个人的博客&#xff0c;提一些经常用到的技术点&#xff0c;也希望能够帮助大家在工作以及学习中有很好的帮助&#…

AD_BGA扇出

Fanout: 将贴片器件的引脚&#xff0c;引出一小段线加入过孔&#xff0c;使得信号线可以通过其他层完成&#xff1b; BGA_Fanout Step 1> 规则设置1.1> 过孔规则1.2> 间距规则1.3> 线宽规则 Step 2> 自动扇出> 外层打孔 Step 1> 规则设置 1.1> 过孔规…

用计算机打出小星星,怎样打出一个小星星和更多的符号?

满意答案 gldi70 2014.06.28 采纳率&#xff1a;54% 等级&#xff1a;11 已帮助&#xff1a;4806人 全在这里了~~自己找把~ ! " # $ % & ( ) * , - . / 0 1 2 3 4 5 6 7 8 9 : ; < > A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ a …

编程的扇入与扇出

大家都知道模块化编程&#xff0c;也就是重复代码尽量提炼成函数&#xff0c;自己可以用&#xff0c;别人也可以用&#xff0c;但是提炼出什么样的函数才算好呢&#xff1f;这就要用到扇入与扇出的概念。 模块的扇出是指本模块的直属下层模块的个数。如图&#xff1a; 模块A的扇…

Altium Designer BGA 扇孔/扇出

1.创建Room 2.设置间距规则 3.设置线宽规则 4.设置过孔 5.扇出 按照需求扇出&#xff0c;如无网络引脚是否扇出&#xff0c;外面2列是否扇出等