针对PWM,官方的解释是这样:PWM,也称脉冲宽度调制,它是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器数字信号对模拟电路进行控制的一种非常有效的技术。


(资料图片)

当然可以这样理解。有5V电源,要控制一台灯的亮度,有一个传统办法,就是串联一个可调电阻,改变电阻,灯的亮度就会改变。还有一个办法,就是PWM调节。不用串联电阻,而是串联一个开关。假设在1秒内,有0.5秒的时间开关是打开的,0.5秒关闭,那么灯就亮0.5秒,灭0.5秒。这样持续下去,灯就会闪烁。

如果把频率调高一点,比如是1毫秒,0.5毫秒开,0.5毫秒灭,那么灯的闪烁频率就很高。我们知道,闪烁频率超过一定值,人眼就会感觉不到。所以,这时你看不到灯的闪烁,只看到灯的亮度只有原来的一半。同理,如果1毫秒内,0.1毫秒开,0.9毫秒灭,那么,灯的亮度就只有原来的10分之一。

这就是PWM的基本原理。总的来说,都是保持一定的电压或电流不变,但改变一定周期内的导通和关断时间。这样等效于保持导通,但改变电压或电流大小。

第一次用的PWM是电机。理论上可以在-UU之间线性调节电压及方向,使电机正反转,对于风扇一般是不改变风向,也就是0u之间调节,直流电机基本采用调电压调速。也就是采用PWM调电压,进而调节速度。

说到PWM,就要说到占空比。那么什么是占空比:pwm占空比就是一个脉冲周期内高电平的所整个周期占的比例。

要想了解PWM首先就要从寄存器

计数器寄存器(TIM_CR1):计数器寄存器是一个16位的寄存器,其中:

1.ARPE位是自动重装载允许位。

2.DIR位是控制计数方式位。

3.URS位是控制事件更新请求源。

4.UDIS位禁止事件更新。

5.CEN使能计数器。

其次是预分频器(TIMx_PSC):预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。在预分频寄存器对主频率分频后,提供给计数器,作为计数器的时钟。它是基于一个在TIMx_PSC寄存器中的16位寄存器控制的16位计数器。

因为这个控制寄存器带有缓冲器,它能够在工作时被改变。但是预分频器的新参数会在下一次更新事件到来时被调用。例如,预分频器的参数从1变到2时,计数器的时序图应该是:

再次是自动重装载寄存器(TIMx_ARR):自动重装载寄存器也是一个16位的寄存器。实际上自动重装载寄存器实际上对应着2个寄存器。一个是程序员可以直接操作的寄存器,一个是程序员看不到的影子寄存器。实际上真正起作用的开始影子寄存器。而这两个寄存器是如何配合工作的,则需要TIMx_CR1寄存器的APRE位设置:

当APRE=0时,预装载寄存器的参数实时的传送给到影子寄存器,并没有实现预装载的功能;

当APRE=1时,在每一次事件更新时,预装载寄存器的参数才会被传送到影子寄存器。

而PWM的频率是通过预分频参数和自动重装载寄存器的参数确定的。预分频的参数确定了计数器的时钟,自动重装载寄存器的参数确定了在这个时钟频率下的计数次数,即周期。举个例子:如果系统主频率是72M,psc=8,那么,计数器的时钟就是72M/(8+1)=8M;arr=2000,那么PWM会在8M的频率下每次计数2000次之后会进入到下一个计数循环。而PWM的占空比精度于预分频参数有关,预分频参数越小,精度越高;反之就越低

从下面的定时器时钟框图可以看出,事件U更新是在预分频后,捕获比较之前,而CC4I是中断和DMA输出。所以PWM在每一个周期之后会有一个中断,在来了中断之后,才会更新事件,这样就保证了PWM的每个周期都能够正常完成,而不会导致波形失真。

推荐内容