赞
踩
PWM 全称是 PulseWidth Modulation,也就是脉冲宽度调制。
它有什么用呢?利用它我们可以控制灯光的亮度、电机的转速、屏幕背光亮度等等。
假如一个IO高电平可以点亮一盏led灯,那么此时的亮度是最亮,当输出低电平时led熄灭。如果不停的开关led灯,那么只要速度足够快,我们人眼就无法发现led灭了,但是可以发现亮度改变。利用这种原理我们就可以控制屏幕背光的亮度。
PWM的两个关键术语:频率和占空比。
频率: 就是开关的速度,在一秒内可以开关多少次。把一次开关叫做一个周期。
占空比: 在一个周期内高电平所占的比例。一个周期内高电平的时间越长占空比就越大,对于高电平点亮的灯来说,占空比越大,灯也就越亮。占空比是相对于周期的。
一个周期内高电平时间=周期*占空比。
PWM外设实际上和计时器很相似,拥有计数功能(记时),中断功能等。
如上图I.MX6ULL的PWM外设可选择3路时钟源、一个12位的分频器、16位的向上计数器、16位的周期寄存器、16位的采样寄存器,4个FIFO,比较中断和FIFO空中断。
16位计数器: 按一定的频率计数从0x0000开始向上计数。
16位周期寄存器: 存储着一个数值x,当计数器大于x+1时就会滚回0x0000,所以从0数到x+1的时间就是一个周期的时间。
16位采样寄存器: 存储着占空值y,控制占空比。I.MX6ULL的PWM默认输出高电平,当计数等于y+1时就会输出低电平,直到新的一个周期开始输出高电平,也就是计数值>x+1时。
I.MX6UUU的PWM外设拥有4个FIFO,对采样计数器写数据其实就是对FIFO写数据,每次计数器比较的时候读一次FIFO的数据就会空,可以设置多少个FIFO空的时候触发FIFO空中断,再中断函数中对FIFO写数据,这样就一直有数据啦。
通过上面两个寄存器就可以设置I.MX6ULL的占空比和频率,但并不是这么简单就可以使用,还要对pwm做一些初始化,这里忽略,只讲简单的原理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。