PWM

       脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用
微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽
度的控制。
       计数器寄存器(TIMx_CR1):计数器寄存器是一个16位的寄存器,其中:
1.ARPE位是自动重装载允许位。

2.DIR位是控制计数方式位。
PWM_第1张图片
3.URS位是控制事件更新请求源。
PWM_第2张图片
4.UDIS位禁止事件更新。
PWM_第3张图片
5.CEN使能计数器。
PWM_第4张图片


       其次是预分频器(TIMx_PSC):预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。在预分频寄存器对主频率分频后,提供给计数器,作为计数器的时钟。它是基于一个在TIMx_PSC寄存器中的16位寄存器控制的16位计数器。因为这个控制寄存器带有缓冲器,它能够在工作时被改变。但是预分频器的新参数会在下一次更新事件到来时被调用。例如,预分频器的参数从1变到2时,计数器的时序图应该是:
PWM_第5张图片
PWM_第6张图片

        再次是自动重装载寄存器(TIMx_ARR):自动重装载寄存器也是一个16位的寄存器。实际上自动重装载寄存器实际上对应着2个寄存器。一个是程序员可以直接操作的寄存器,一个是程序员看不到的影子寄存器。实际上真正起作用的开始影子寄存器。而这两个寄存器是如何配合工作的,则需要TIMx_CR1寄存器的APRE位设置:
当APRE=0时,预装载寄存器的参数实时的传送给到影子寄存器,并没有实现预装载的功能;
当APRE=1时,在每一次事件更新时,预装载寄存器的参数才会被传送到影子寄存器。
PWM_第7张图片
        而PWM的频率是通过预分频参数和自动重装载寄存器的参数确定的。预分频的参数确定了计数器的时钟,自动重装载寄存器的参数确定了在这个时钟频率下的计数次数,即周期。举个例子:如果系统主频率是72M,psc=8,那么,计数器的时钟就是72M/(8+1)=8M;arr=2000,那么PWM会在8M的频率下每次计数2000次之后会进入到下一个计数循环。而PWM的占空比精度于预分频参数有关,预分频参数越小,精度越高;反之就越低。 
        我们从下面的定时器时钟框图可以看出,事件U更新是在预分频后,捕获比较之前,而CC4I是中断和DMA输出。所以PWM在每一个周期之后会有一个中断,在来了中断之后,才会更新事件,这样就保证了PWM的每个周期都能够正常完成,而不会导致波形失真。 
        PWM_第8张图片 
        调节PWM的占空比
        通过捕获/比较寄存器(TIMx_ CCRx),在TIMx_CR1的APRE位没有选择预装载特性时,写入的值会立即被传送到捕获/比较寄存器中。当TIMx_CR1的APRE位选择了预装载功能特性,只有当更新事件发生时,预装载之才会被传送到捕获/比较寄存器。然后捕获/比较寄存器会拿当前值与计数器TIMx_CNT进行比较,当达到捕获/比较寄存器的值时,PWM的电平会发生一次跳变。
       关于PWM的其他基本配置,主要也就是一下几点:
1.计数模式:向上计数(计数器从0计数到自动加载值TIMx_ARR计数器的值);向下计数(计数器从自动装入值TIMx_ARR的值开始向下计数到0);中央对其(计数器从0开始计数到自动加载值TIMx_ARR寄存器-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件,然后再从0开始重新计数)。
2.PWM模式: PWM模式1(OCxM=110,在向上计数时,如果TIMx_CNT < TIMx_CCR1时为高电平,否则为低电平);PWM模式2(OCxM=111,在向上计数时,如果TIMx_CNT < TIMx_CCR1时为低电平,否则为高电平)。
3.要使用PWM必须要开启其相对应的时钟线。

你可能感兴趣的:(嵌入式)