【STM32】PWM输出功能详细介绍
脉冲宽度调制(pulse width modulation,PWM)是一种对模拟信号电平进行数字编的方法。PWM 技术广泛应用于机械、通信、功率控制等领域,如电机的转速控制、灯光的亮度调节、DC-DC 转换器以及信号调制等场合。
目录
PWM输出功能
脉冲宽度调制(pulse width modulation,PWM)是一种对模拟信号电平进行数字编的方法。PWM 技术广泛应用于机械、通信、功率控制等领域,如电机的转速控制、灯光的亮度调节、DC-DC 转换器以及信号调制等场合。
PWM 信号有两个重要的参数:周期和占空比
•周期(Period)
一个完整 PWM 波形所持续的时间。
•占空比(Duty)
高电平持续时间(Ton)与周期(Period)的比值占空比的计算公式如下:
Duty=( Ton/Period)x 100%
下图给出了 50%、20% 和80% 三种不同占空比的 PWM 信号
在上图中,电压的峰值为 3.3 V,T表示高电平持续时间,T表示信号关断时间虚线表示 PWM信号所对应的平均电压。
根据平均电压的计算公式:平均电压=峰值 x占空比。我们可以计算出:50% 占空比的PWM信号所对应的平均电压为1.65V;2%占空比的PWM信号所对应的平均电压为0.66V;80%占空比的PWM信号所对应的平均电压为2.64V。因此PWM信号能够进行电压调节的基本原理就是不同占空比的PWM信号等效于不同的平均电压。
1.捕获/比较通道
捕获/比较通道负责输入捕获功能和输出比较功能。每个定时器最多可以拥有4个捕获/比较通道,每个通道都有对应的寄存器进行控制也有对应的GPIO引脚作为通道的输入和输出接口。捕获/比较通道的功能框架如下图所示。
捕获/比较通道由三个模块组成:输入捕获单元、捕获/比较寄存器输出比较单元。
1.输入捕获单元
输入捕获单元用于捕获外部脉冲信号,捕获方式可以设置为上升沿捕获、下降沿捕获和双边沿捕获。发生捕获事件时,将计数器的当前计数值锁存到捕获/比较寄存器中,以供用户读取,同时可以产生捕获中断。输人捕获主要用于信号测量,可以测量信号的周期、频率和占空比等参数。
2.捕获/比较寄存器
捕获/比较寄存器TIMx_CCR是捕获/比较通道中最重要的寄存器。在输入捕获模式下用于存放发生捕获事件时的计数值:在输出比较模式下用于存放预设的比较值。该寄存器具备预装载功能,由影子寄存器和预装载寄存器组成,预装载功能可由软件选择开启或关闭。
3.输出比较单元
输出比较单元用于信号输出。定时器通过将预设的比较值与计数器的计数值做匹配比较,从而实现各类输出,如PWM 输出、电平翻转、单脉冲输出和强制输出。预设的比较值存放在捕获/比较寄存器TIMx_CCR中。
使用捕获/比较通道时需要注意以下几点:
① 输入捕获功能和输出比较功能都是由定时功能衍生而来。因此,定时器工作于定时模式,时钟源为内部时钟CK_INT,时基单元的预分频时钟CK_PSC等于定时器的定时时钟TIMx_CLK。
② 每个定时器具备 1~4个独立的捕获/比较通道每个通道具有独立的输入捕获单元、捕获/比较寄存器和输出比较单元,但共享同一个时基单元。
③ 每个捕获/比较通道都可以独立设置为捕获通道(用于输入捕获)或者比较通道(用于输出比较)但是两种功能只能选择其中之一。
④ 每个捕获/比较通道都有对应的通道引脚作为通道的输入/输出接口如TIM_CHn(n表示通道号1~4,下同)。这些通道引脚与GPIO引脚复用用户可以在CubeMX软件的引脚分配图上选择 GPIO引脚的功能为通道引脚。
2.PWM实现原理
要实现PWM信号的输出,需要用到三个寄存器:自动重载寄存器TIMx_ARR,捕获/比较寄存器TIMx_CCRn(n表示通道编号1~4,下同)以及计数器寄存器TIMx_CNT,并通过通道引脚TIMx_CHn输出PWM信号。
为了表述方便,我们将TIMX_ARR寄存器的内容记为自动重载值ARR,TIMx_CCRn寄存器的内容记为捕获/比较值CCR,计数器存器TIMx_CNT的内容记为计数值CNT。整个PWM信号的输出过程下图所示。
图中,我们假定定时器工作在向上计数PWM模式,且当CNT<CCRx时,输出0,当CNT>=CCRx时输出1。那么就可以得到如上的PWM示意图:当CNT值小于CCRx的时候,IO输出低电平(O0),当CNT值大于等于CCRx的时候,IO输出高电平(1),当CNT达到ARR值的时候,重新归零,然后重新向上计数,依次循环。改变CCRx的值,就可以改变PWM输出的占空比,改变ARR的值,就可以改变PWM输出的频率,这就是PWM输出的原理。
根据PWM信号的输出过程,我们可以知道:自动重载寄存器TIMx_ARR用于控制PWM信号的周期捕获/比较寄存器TIMX_CCRn 用于控制PWM信号的占空比。综上所述,我们可以得到 PWM 信号周期及占空比的计算公式
T=(PSC+1) X(ARR+1)/TIMx_CLK
Duty=CCR/(ARR+1)x100%
下面介绍一个具体的应用例子。假设定时器的定时时钟TIM_CLK 为 100 MHz要求输出周期为1ms,占空比为 47.5%的 PWM信号,输出波形如下图所示。
要产生这样一个PWM信号,首先要确保1 ms的周期。根据T=(PSC+1) X(ARR+1)/TIMx_CLK,我们可以设置预分频系数PSC为99,自动重载值ARR为999,从而得到1ms的PWM周期。确定了自动重载值 ARR后,根据Duty=CCR/(ARR+1)x100%,可以得到捕获/比较值 CCR 为475。
定时器的每个捕获/比较通道都具有独立的输入捕获单元捕获/比较寄存器和输出比较单元,可以分别输出PWM信号。对于同一个定时器而言,由于它的多个通道共享同一个自动重载寄存器,而自动重载寄存器的内容决定了PWM 信号的周期。因此,对于同一个定时器的多个通道而言,可以同时输出占空比不同,但周期相同的PWM信号。例如我们使用通道1和通道2同时输出两路PWM信号。假设定时时钟TIM_CLK为 100MHz,自动重载值 ARR为999。
对于通道 1,设置TIMx_CCR1为 475,将在通道引脚CH1 上输出周期为 1 ms占空比为47.5%的PWM信号。
对于通道2,设置 TIMx_CCR2为 700,将在通道引脚CH2 上输出周期为 1ms,占空比为70%的PWM信号。
同一个定时器的多通道 PWM 信号输出如下图所示
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)