PWM原理简介
脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用
微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽
度的控制,脉宽调制也叫占空比
这个图中阐述了利用高级定时器产生PWM的原理,其中
- ARR是自动重装载寄存器(TIMx_ARR)的值
- CNT是定时器计数器当前的值
- CCRx是捕获/比较寄存器 x(TIMx_CCRx)的值
每经过一次定时器时钟周期就会+1,通过设置定时器的输出模式,可以实现,当计数器的值CNT,小于设定的CCRx的值时,输出低电平,大于时就输出高电平
PWM波的占空比和周期
可以通过改变CCRx的值来改变占空比,改变ARR的值来改变周期
- CCRx 》占空比
- ARR 》周期,也就是溢出时间
计算公式为:Tout= ((arr+1)*(psc+1))/Tclk;
Tclk为时钟周期,psc为时钟分频因子
PWM波形时间计算
向上计数时,如果此时设置的模式为当计数器的值小于CCRx的值时,输出高电平,也是PWM1模式(可以通过TIMx_CCMR1的OCxM位来配置PWM模式)
- 假设psc分频设置成71,arr的值设置成4999,由公式
Tout= ((arr+1)*(psc+1))/Tclk
得Tout=5ms - 这时候我们又能知道计数器每一次计数的时间为1us
(相当于把公式Tout= ((arr+1)*(psc+1))/Tclk里的arr的值取0所算出来的时间) - 如果要使PWM输出高电平的时间为2.5ms的话,经过计算这时候CCRx的值就要设置成2500
PWM程序
编程步骤:
代码:
#include "stm32f10x.h"
#include "bsp_systick.h"
void TIM8_PWM_Conf