PWM产生原理
PWM的周期t1是一个固定值,如1ms,10ms,100ms等,在一个周期中包含了高电平t2和低电平t3,它们的关系是t2+t3=t1。改变一个周期中高电平的时间,就能达到速度或者功率调整的目的。
定时器生成一路PWM
基于STM32用一个定时器实现一路PWM输出的方法:
1. 定义一个时间基准刻度t,这个也是计时器中断周期,一般在程序中t不改变。PWM的周期、高低电平时间由若干个基准时间t组成;
我们用的单片机是STM32F103VBT6,我们选用TIM2作为基本定时器,CobeMX中的配置如图所示:
TIM2的时钟频率是64MHZ,计数模式选择向上计数,计满之后产生定时中断,中断一次的时间是1毫秒,故基准刻度t是1毫秒。
并开启定时中断
2. 定义一个全局计时变量n,n表示这段时间经过了多少个基准时间t;后期我们在中断中定义一个全局变量CountTimer_2,每终端一次加1,即可得知定时时间。
3. 定义一个全局计时变量n1,n1表示一个PWM的周期包含多少个基准时间t,n1=t1/t。一般在程序中n1,t1是计时周期不改变。
4. 定义一个全局计时变量n2,n2表示一个PWM周期中高电平包含多少个基准时间t,n2=t2/t。由于高电平的时间受其他算法控制改变的,n2也是随时在改变。
程序的流程如下:
①初始化定时器,定时器中断时间设置为t,如设置t为1ms或其他;
②初始化变量:n=0;//计时变量n清零
uint32_t CountTimer_2 = 0;
n1=t1/t; //一个PWM的周期t1包含了多少个基准时间t,假如设PWM周期为1000ms=1s,则n1=1000;
if(CountTimer_2==1000)
n2=t2/t; //计算一个PWM中高电平时间t2由多少个基准时间t组成。t2由其他控制算法改变。
③开始计时,打开定时器中断。定时器中断程序中n++;