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

article/2025/10/14 5:49:16

1.互补PWM输出简介

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

2.互补PWM波输出设置

/*** @brief 	互补的PWM输出初始化.* @param  	arr:计数总数;psc:预分频;ccr1_val:计数ccr1后翻转电平;deadtime:死区时间.* @retval 	None.* @msg	   	PWM输出频率为72MHz/(arr+1)*(psc+1)此处设置PWM频率为100KHz;死区时间设置为16*1/72us=222.2ns(0x10).*/
void TIM1_PWM1_DeadtimeInit(u16 arr,u16 psc,u16 CCRx_val,u16 deadtime)
{GPIO_InitTypeDef GPIO_InitSturcture;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;TIM_BDTRInitTypeDef TIM_BDTRInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitSturcture.GPIO_Pin = GPIO_Pin_8 ;GPIO_InitSturcture.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitSturcture.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitSturcture);GPIO_InitSturcture.GPIO_Pin = GPIO_Pin_13 ;GPIO_InitSturcture.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitSturcture.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitSturcture);TIM_TimeBaseInitStructure.TIM_Period = arr;      	  					/*设置在自动重装载周期值*/TIM_TimeBaseInitStructure.TIM_Prescaler = psc;	 	  					/*设置预分频值*/TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;			/*向上计数模式*/TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;				/*死区、输入滤波、输入采样不分频*/TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0x00;    				/*重复计数器设置为0*/TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;			 			/*PWM1输出方式*/TIM_OCInitStructure.TIM_Pulse = CCRx_val;								/*计数到CCRx_val电平反转,即设置CCRx的值*/TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;				/*输出通道电平极性配置,决定输出的有效电平*/TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;				/*互补输出通道电平极性配置,决定输出的有效电平*/TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 			/*输出使能*/TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;			/*互补输出使能*/TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;			/*输出通道空闲电平极性配置(刹车后为空闲状态)*/TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;  			/*互补输出通道空闲电平极性配置*/TIM_OC1Init(TIM1, &TIM_OCInitStructure);								/*根据TIM指定的参数初始化外设TIM1 OC1*/TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);						/*使能TIM1在CCR1上的预装载寄存器*//*刹车和死区设置*/TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; 			/*OSSR:运行模式下“关闭状态”选择*/TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; 			/*OSSI:空闲模式下“关闭状态”选择*/TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; 					/*锁定设置,级别为1*/TIM_BDTRInitStructure.TIM_DeadTime = deadtime;							/*死区延时时间*/TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;					/*禁止刹车输入*/TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low; 		/*刹车输入极性*/TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; /*自动输出使能*/TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);TIM_ARRPreloadConfig(TIM1,ENABLE);										/*设置ARR值(周期值)在当前周期即改变*/TIM_Cmd(TIM1, ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE);										/*主输出使能,高级定时器专用*/							TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE); 								/*TIM1 DMA请求使能,注:TIM1_Update请求对应DMA通道为DMA1_chanel5*/
}
  • 此处是笔者所初始化的一段互补PWM波形输出,通过此段初始化代码可以简单的看到互补PWM输出只需要通过相应的设计即可完成,不需要额外配置其他硬件电路,将两个3.3v的互补PWM接到相应的硬件电路与即可完成。
  • 关于死区时间计算可以仔细研读一下stm32的手册

死区时间设置


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

相关文章

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列是否扇出等

关于扇出(Fanout)(二)

原文发布时间&#xff1a;2010-12-30 作者&#xff1a;毛毛虫 在《关于扇出&#xff08;Fanout&#xff09;&#xff08;一&#xff09;》中&#xff0c;提到了设置数据集扇出的相关内容。现在针对这一问题举一个例子。 现在我有一个dwg文件&#xff0c;想使用一个含有多个多…

关于 扇出 Fanout

数字系统中的扇出 在一些数字系统中&#xff0c;必须有一个单一的TTL逻辑门来驱动10个以上的其他门或驱动器。这种情况下&#xff0c;被称为缓冲器的驱动器可以用在TTL逻辑门与它必须驱动的多重驱动器之间。这种类型的缓冲器有25至30个扇出信号。逻辑反向器&#xff08;也被称为…

扇出和扇入

在软件设计中&#xff0c;扇入和扇出的概念是指应用程序模块之间的层次调用情况。 按照结构化设计方法&#xff0c;一个应用程序是由多个功能相对独立的模块所组成。 扇入&#xff1a;是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程序高。 扇出&#xff1a;是指…

扇入和扇出

扇出&#xff08;fan-out&#xff09;是一个定义单个逻辑门能够驱动的数字信号输入最大量的专业术语。大多数的TTL逻辑门能够为10个其他数字门或 驱动器提供信号。所以&#xff0c;一个典型的TTL逻辑门有10个扇出信号。 在一些 数字系统中&#xff0c;必须有一个单一的TTL逻辑门…