目录
什么是PWM
输出比较模式
PWM模式
区别与联系
PWM示波器上的效果
前言
本篇文章是在使用示波器时,无法输出正常的PWM占空比的波形而写的,其原因就是输出比较模式与PWM模式所导致的。
正文
什么是PWM
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PWM是定时器扩展出来的一个功能,本质上是使用一个比较计数器的功能。
STM32没有专门的PWM引脚,所以使用IO口的复用模式。
配置过程一般为选定定时器、复用GPIO口、选择通道(传入比较值)、使能相应系统时钟、设定相应的预分频、计数周期、PWM模式(有两种)、电平极性等。
在STM32中,定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出。
ARR寄存器是用来配置计数器溢出周期(也就是计数器计数最大值,比如定时器使用时周期),也就是定时器定时周期或者作为pwm输出时的周期/频率,而TIMx_CCR捕获比较寄存器则是在作输出时作为计数器响应值,也就是pwm时改变占空比(波形)时使用的。
输出比较模式
STM32定时器输出比较模式是STM32定时器的一种工作模式,它可以通过改变ARR(自动重装载寄存器)和CCR(捕获比较寄存器)寄存器的值来控制输出的占空比,从而控制输出的电平。在输出比较模式下,CCR寄存器的值是固定的,而占空比是通过改变ARR寄存器(自动重装载值)的值来实现的。此外,每个通道可以产生不同频率的信号。
在STM32CubeMX中的配置:
通道选择Output Compare CH1,下面给触发器使能即可。
PWM模式
PWM模式是一种定时器的工作模式,可以通过改变ARR和CCR寄存器的值来控制输出的占空比,从而控制输出的电平。
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。
在TIMx_CCMRx寄存器中的OCxM位写入'110'(PWM模式1)或'111(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。
在STM32CubeMX中的配置:
通道选择PWMCompare CH1,下面给触发器使能即可。
如果想在PWM模式下改变周期/频率,只需要将Parameter Settings 中的 auto-reload preload使能即可。
区别与联系
PWM模式和输出比较模式都是STM32定时器的工作模式。它们都是通过改变定时器的计数值来控制输出的占空比,从而控制输出的电平。
两者的区别在于(这里的固定都是在初始状态下,也是可以通过其他方法来调节的):
PWM模式下,定时器的计数值是固定的,而占空比是通过改变CCRx寄存器的值来实现的;
输出比较模式下,CCR寄存器的值是固定的,而占空比是通过改变ARR寄存器的值来实现的。
此外,PWM模式下,所有通道产生的频率都是相同的;而在输出比较模式下,每个通道可以产生不同频率的信号。
我们通过图进一步了解一下这两个模式的区别。
PWM模式下:
PWM示波器上的效果
在STM32CubeMX中的配置
示波器中的波形
可以看到频率是200Hz(80MHz/(400*100)),符合我们上面的设置,占空比为20%,同样符合我们上面的设置。