什么是PWM?
PWM:Pulse Width Modulation,脉冲宽度调制。
关于PWM,网上的解释很多,通过下图,你就能够直观地理解PWM,其实就是高低电平组成的脉冲信号。
通过改变其中频率(脉冲周期)、占空比,就能应用在很多场合。
PWM常见输出方式
通过上面描述,PWM就是一个IO口以不同的时间周期输出高、低电平。
1、新手(菜鸟)级别
while循环中,阻塞延时,控制IO口高低输出:
while(1)
{
IO口高电平
Delay阻塞延时
IO口低电平
Delay阻塞延时
}
阻塞延时可以是:软件模拟延时,定时器阻塞延时等。
2、入门(初级)级别
while循环中,非阻赛延时,控制IO口高低输出:
while(1)
{
IO口高电平
Delay非阻塞延时
IO口低电平
Delay非阻塞延时
}
非阻赛延时可以是定时器标识检测、RTOS(系统)延时等。
3、熟悉(中级)级别
定时器中断控制IO高低电平输出:
定时器中断配置——>启动定时器——>响应中断,控制IO高低电平···
4、熟练(中级+)级别
定时器PWM硬件控制输出:
配置PWM对应的IO,以及定时器PWM输出——>启动PWM自动输出···
void AppTask(void *p_arg)
{
PWM_TIM_Configuration();
PWM_Output(频率, 占空比);
while(1)
{
//自己的应用代码
}
}
5、比较
上面几种PWM输出方式,前面三种都会CPU干预PWM的输出,也就是会占用CPU资源,特别是前面两种方式,不仅占用CPU,误差还比较大。
使用第三种中断方式,如果频率比较高,CPU消耗的也比较严重。这种情况适合于没有硬件PWM输出的单片机。
第四种就是单片机自带硬件PWM输出功能,只需要简单配置就可以自动输出PWM波形,无需CPU干预。
|