×
单片机 > 其他资讯 > 详情

STM32-(24):PWM基础

发布时间:2020-06-18 发布时间:
|

PWM是Pulse Width Modulation的缩写,即脉冲宽度调制。其通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制,用来对一个具体模拟信号的电平进行编码。等效的实现是基于采样定理中的一个重要的结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量即指窄脉冲的面积。这里所说的效果基本相同,是指该环节的输出响应波形基本相同。

如把各输出波形用傅里叶变换分析,则它们的低频段特性非常接近,仅在高频段略有差异。


为了实现a的效果,可以通过b这种正弦波去模拟达到这种效果。(通过每一段的面积相同去模拟)

PWM信号是数字的,在给定的任何时刻,满幅值的直流供电要么完全有(0N),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

改变脉冲的周期可以达到调频的效果,改变脉冲的宽度或占空比可以达到调压的效果,因此,采用适当控制方法即可使电压或电流与频率协调变化。

PWM控制技术获得了空前的发展,并且广泛的运用在从测量、通信到功率控制与变换的许多领域中。
PWM具有很多的优点,主要优点如下:
①从处理器到被控系统信号都是数字形式的,无需进行数模转换;
②让信号保持为数字形式可将噪声影响降到最小,噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响,这是PWM用于通信的主要原因。

STM32的定时器除了 TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出!

应用举例:

步进电机驱动
舵机控制器

1) PWM输出模式

STM32的PWM输出有两种模式,模式1和模式2,由TIMx CCMRx寄存器中的OCxM位确定的(“110”为模式1, “111”为模式2)。模式i和模式2的区别如下:

110 PWM模式1一在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(0C1REF=1)。

111: PWM模式2-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。

而从计数模式上来看,PWM也和TIMX在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式。

举例分析:

比如上方 自动重装载寄存器(ARR)、计数器(CNT)、捕获/比较1寄存器(CCR1),比如将ARR的值设为50,然后CNT由0开始数,数到50之后(这里举例默认是向上计数的),又开始从0开始数,又假设CCR1的值设定为25,PWM的输出模式为 110,当计数值CNT小于25时,输出的OC1REF 为高电平,大于25时,输出低电平。这个波形的占空比为1:1,比较有规律,可以通过控制几个寄存器的值来得到我想要的波形。

2) PWM输出管脚

PWM的输出管脚是确定好的:

不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM.
比如说TIM3的第2个通道,在没有重映像的时候,指定的管脚是 PA.7,如果设置部分重映像之后,TIM3_CH2的输出就被映射到 PB.5上了,如果设置了完全重映像的话,TIM_CH2的输出就被映射到 PC.7上了。

3) PWM输出信号

PWM输出的是一个方波信号,信号的频率是由 TIMx 的时钟频率和 TIMx_ARR 预分频器所决定的,具体设置方法在前面一个定时器中有详细介绍。而输出信号的占空比则是由 TIMx_CRRx寄存器确定的。其公式为“占空比 = (TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通过向CRR中填入适当的数来输出自己所需的频率和占空比的方波信号。

4) 操作步骤

1.设罝RCC时钟;
2.设置GPIO时钟;
3.设罝TIMx定时器的相关寄存器;
4.设罝TIMx定时器的PWM相关寄存器。

第2步设置GPIO时钟时,GPIO模式应该设置为复用推挽输出GPIO_Mode_AF_PP,如果需要引脚重映像的话,则需要用GPIO_PinRemapConfig()函数进行设置。

第3步设罝TIMx定时器的相关寄存器时,和之前介绍的一样。

第4步设罝PWM相关寄存器,首先要设罝PWM模式(默认情况下PWM是冻结的),然后设置占空比(根据前面所述公式进行计算),再设置输出比较极性:当设罝为High时,输出信号不反相,当设置为Low时,输出信号反相之后再输出。最重要是是要使能TIMx的输出状态和使能TIMx的PWM输出使能。

相关设置完成之后,就可以通过TIM_Cmd()来打开TIMx定时器,从而得到PWM输出了。

边沿对齐的PWM波形(ARR=8)

分析:向上计数模式,比如自动重装载寄存器(ARR=8),就是计数寄存器(CNT)会从0数到8,当比较单元CCRx=4时,计数器的值小于4时,输出高电平,大于等于时会发生跳变,变为低电平,当计数到8又从0开始计数时又会跳变为高电平。
中央对齐的PWM波形(ARR=8)


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用于相变存储器的GeSbTe MOCVD共形淀积