利用高级定时器产生6路互补PWM波形输出

STM32的MCU产品自带定时器资源十分丰富,既有专门用于电机控制的高级定时器(TIMER1/TIMER8),又有仅定时用的基本定时器(TIMER6/TIMER7) 和通用定时器(TIMER2/3/4/5/14/15/16/17) ,还有2个看门狗定时器和一个Systick定时器,真是十分强大哈。
这一篇文章就来讲解一下利用高级定时器TIMER1产生6路互补PWM波形输出。第一部分讲解用到的定时器基本内容和定时器库函数介绍;第二部分,讲解6路互补PWM输出的代码实现。
一、PWM和STM32-072RB定时器及库函数内容介绍
脉宽调制(PWM:(Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。简易理解,就是对输出脉冲高低电平宽度的调制!STM32-072RB MCU 有12个定时器,其中有高级定时器、通用定时器和基本定时器及系统定时器。在这其中,有一个高级定时器TIMER1可以产生7路PWM(CH1/CH2/CH3/CH4/CH1N/CH2N/CH3N), 通用定时器TIMER2/TIMER3可以分别产生4路PWM (CH1/CH2/CH3/CH4),通用定时器TIMER15能产生3路 PWM(CH1/CH2/CH1N),通用定时器TIMER14/TIMER16/TIMER17各能产生1路PWM(CH1),这样,总共能产生 21路PWM。 
高级定时器TIMER1专为电机控制而生,可以产生3对6路互补PWM输出,还带有死区时间设置和刹车功能。要利用STM32的定时器来产生PWM,需要用到定时器相关的寄存器。这些寄存器在下面内容介绍。对于不同的定时器,所在时钟总线是不同的,高级定时器是APB2时钟总线提供时钟,其它通用定时器是APB1时钟总线提供时钟。
STM32的定时器主要参数跟下面三个定时器有关,学习前要先看一下
TIMx_CCMRx 寄存器:选择PWM模式 
TIMx_ARR 寄存器: PWM的周期
TIMx_CCRx 寄存器: PWM占空比 
下面看一下定时器详细库函数资源介绍:
1、定时器结构体成员变量 
产生PWM,要用到三个结构体,分别是 
TIM_TimeBaseInitTypeDef基本定时结构体 
TIM_OCInitTypeDef输出比较结构体 
TIM_BDTRInitTypeDef刹车和死区配置结构体 
利用三个库函数来实现将结构体赋值到STM32内部寄存器中 
TIM_TimeBaseInit (); TIM_OCInit () TIM_BDTRConfig()
下面分别看一下三个结构体的定义:




这三个结构体具体内容看一下stm32f0xx_tim.h文件。下面看一下几个常用的定时器库函数
TIM_OCxPreloadConfig (); 
TIM_ARRPreloadConfig ();
TIM_Cmd();
TIM_CtrlPWMOutputs();
TIM _ITConfig ();
TIM_ARRPreloadConfig ();
TIM_ForcedOC1Config ();
TIM_GetITStatus ()
TIM_ClearITPendingBit() 
TIM_CCPreloadControl();
TIM_SelectOCxM();
TIM_CCxCmd();
TIM_CCxNCmd();
TIM_GenerateEvent();
通过这些库函数来配置出PWM波形。下面看一下在STM32-NUCLEO-072开发平台上PWM输出引脚的配置。
2、PWM引脚配置
在STM32F072RBT6上采用了TIMER1高级定时器的3对6路引脚(CH1/CH1N,CH2/CH2N,CH3/CH3N)分别是PA8/PA9/PA10 和/PB13/PB14/PB15

在硬件上是这样:

下面看一下具体的代码实现。
二、Keil-mdk工程文件及代码实现
1、Keil-mdk工程模板中加入PWM.C文件,在includes.h文件中加入PWM.H头文件 

2、在PWM.H头文件实现宏定义 

3、6路PWM引脚端口初始化PWM_GPIO_Init()代码实现 

4、高级定时器初始化Timer1_Init()代码实现 
这个就是对定时器三个结构体的配置,这里采用了简单的公式,实现PWM周期和占空比的设置。这里显示是8KHZ,三路占空比30%,40%和50%



这个就是对端口和三个定时器相关结构体的配置。
5、主函数代码main.c代码实现 

在main.c里面加入定时器初始化代码,上电复位后,就可以输出6路PWM波形了。下面的图片是利用示波器的数字通道采集的波形图。




代码地址链接
https://www.eeboard.com/bbs/thread-39696-1-1.html
摩尔吧视频地址链接
https://www.moore8.com/courses/306

stm32开发板nucleopwmstm32f072

### 回答1: STM32高级定时器(PWM互补输出)是指通过使用STM32系列微控制器的高级定时器模块,以实现PWM互补输出功能。 PWM互补输出是一种常见的电控制技术,可以用于调节电压、电流或动力系统中的电机速度和方向等应用。这种技术通过在一个周期内交替地激活一个信号的正向和负向来实现输出。 STM32系列微控制器的高级定时器模块支持多通道的PWM输出功能,能够同时控制多个输出通道的PWM信号。而在PWM互补输出模式下,这些通道中的一对通道将被配置为互补输出,在一个周期内交替激活正向和负向信号。 通过使用PWM互补输出,我们可以实现更高级别的电机控制,比如进行电机的前进和倒退运动。在使用PWM互补输出时,我们需要定义适当的参数,如PWM周期、占空比等,来实现所需的电控制。 通过配置和编程STM32高级定时器的寄存器和相关寄存器以及使用适当的算法和控制策略,我们可以在STM32系列微控制器上实现PWM互补输出。这种技术在许多电机控制应用中具有广泛的应用前景,如无人机、机器人、电动车等。 总之,STM32高级定时器PWM互补输出功能是一种非常有用的技术,可以在电机控制和其他电控制应用中实现更高级别和更灵活的功能。 ### 回答2: STM32高级定时器PWM互补输出功能是指可以通过配置定时器工作模式和输出比较通道来实现互补输出PWM波形。 在互补输出模式下,我们需要设置两个定时器输出通道作为互补输出。其中一个通道称为主输出通道,另一个通道称为从输出通道。两个通道的输出互补的,也就是一个通道在高电平时,另一个通道处于低电平。 首先,我们需要选择一个高级定时器(如TIM1或TIM8)来使用。然后,设置定时器的工作模式为互补模式。在这种模式下,主输出通道用于产生PWM信号,而从输出通道则产生互补PWM信号。 接下来,我们需要设置定时器输出比较通道。通过设置主输出通道和从输出通道的比较值,可以控制PWM波形的占空比和频率。我们可以使用定时器的寄存器来设置通道的比较值,以达到我们期望的PWM波形。 最后,我们还可以设置互补输出的极性,以及死区时间来避免互补输出通道之间的冲突。通过配置极性,我们可以选择保持主输出通道为正电平,还是保持从输出通道为正电平。而通过设置死区时间,可以在互补输出切换时增加一段延时,以防止输出。 总的来说,STM32高级定时器PWM互补输出功能可以通过配置定时器工作模式、设置输出比较通道、设置极性和死区时间等参数来实现。这种互补输出功能可以应用于很多领域,比如电机控制、电源控制等需要互补PWM的应用场景。 ### 回答3: STM32高级定时器提供了PWM互补输出功能,可以方便地实现PWM信号的互补输出PWM互补输出是指同时输出两个互补PWM波形,一个为高电平,一个为低电平。通过互补输出,可以达到高精度的控制,尤其适合用于驱动电机等需要精确控制的应用。 在STM32的高级定时器中,实现PWM互补输出需要以下步骤: 1. 配置定时器的工作模式为PWM模式,并设置计数器的自动重载值。通过设置自动重载值,可以决定PWM信号的周期。 2. 配置定时器输出比较通道,设置PWM信号的占空比。通过设置比较寄存器的值,可以决定PWM信号的高电平持续时间。 3. 配置另一个输出比较通道,设置互补PWM信号的占空比。通过设置比较寄存器的值,可以决定互补PWM信号的低电平持续时间。 4. 配置定时器互补输出使能位。通过使能互补输出,可以使得两个比较通道的PWM信号互补输出。 通过以上步骤,就可以实现STM32高级定时器PWM互补输出。需要注意的是,在配置互补输出时,还需要设置极性,决定PWM信号和互补PWM信号的极性关系。 PWM互补输出在工业控制、机器人和无人机等领域有广泛的应用。通过高级定时器PWM互补输出功能,可以实现精确的电机控制、灯光控制等应用,提高系统的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值