搜索
写经验 领红包

图解边沿对齐,中心对齐PWM....

在说边沿对齐,中心对齐前,我们先来段铺垫,PWM又称脉冲宽度调制,我们通过调节脉冲的占空比,我们可以控制电压的大小(比如我们满占空比时电压为12V,我们可以通过调节占空比让电压变为7V、5V甚至变为0V,实现输出电压可控)。

调节占空比后,输出电压怎么就变化了呢?可以用等效面积法来解释,例如在1ms周期里,满占空比时输出电压为12V,50%占空比时(即高低电平各占时间为0.5ms)高电平在整个周期的面积只有原来的1/2了,此时输出电压就等效为12*1/2=6V,那么通过调节不同的占空比,也就实现了输出电压调节。如图:

图解边沿对齐,中心对齐PWM....

那STM32中是怎么生成PWM波的呢?时钟是芯片的心脏,没有时钟,芯片就是一块“废物”,有了时钟,芯片才能有条不紊的工作,那时钟跟我们要讲的PWM有什么关系呢?请看下图,STM32内部的定时器框图,看看它是如何生成PWM的。

图解边沿对齐,中心对齐PWM....

方框内部的CNT Counter计数器会根据输入的时钟沿跳变来进行递加/减,时钟的频率决定了计数器递加/减的频率,这个计数器的值同时会和Auto-reload register(控制周期)、Capture/Compare x register(控制占空比)进行比较,当与控制占空比的寄存器值发生匹配时则控制输出引脚TIMx_CHx发生电平反转,当与控制周期寄存器值发生匹配时,周期结束,引脚电平置位,再次重复如上动作,就在引脚上输出了变化不同的电平,这个就是我们需要的PWM。

这个定时器模块可以根据软件编程设置出不同的PWM模式,定时器内部CNT Counter可被编程为向上、向下、向上向下运行,我们说的边沿对齐,和中心对齐就要从这个计数方式上切入,下面我们先来看三种不同的计数方式。

1.当CNT被设置为向上计数时,计数器从0递增向上计数到自动重载值(Auto-reload register),然后计数器又回到0,重新开始。

图解边沿对齐,中心对齐PWM....

图解边沿对齐,中心对齐PWM....

2.当CNT被设置向下计数时,计数器从自动重载值递减向下计数,计数到0,计数器又回到重载值,重新开始。

图解边沿对齐,中心对齐PWM....

图解边沿对齐,中心对齐PWM....

3.当CNT被设置向上向下计数时,计数器从0递增向上计数到自动重载值,然后计数器从自动重载值递减向下计数,计数到0然后又开始递增向上计数。

图解边沿对齐,中心对齐PWM....

图解边沿对齐,中心对齐PWM....

那这三种模式和2种PWM又是什么关系呢?PWM是怎么从引脚上输出的呢?请看下图:

1.向上/下计数模式PWM生成(只展示出了向上计数,向下计数同理):

图解边沿对齐,中心对齐PWM....

图解边沿对齐,中心对齐PWM....

2.向上向下计数模式PWM生成:

图解边沿对齐,中心对齐PWM....

图解边沿对齐,中心对齐PWM....

上文中提到的向上计数/向下计数,这两种生成PWM的方式,我们通常称为边沿对齐PWM;既向上又向下这种生成PWM的方式,我们称为中心对齐PWM。当然,发生匹配的时候引脚电平如何变化,是变高还是变低,这个可以通过软件编程来设置。

通过PWM调节输出电压,比如可以控制做呼吸灯,也可以实现电机的调速,不同的调速算法,会用到不同的PWM等等。