PWM控制LED亮度变化的原理
通过ARR寄存器来设定预装载值,以确定循环频率和周期,计数器寄存器CNT从0开始计数,设定一个CCR寄存器的值,来跟CNT的计数值进行比较,当CNT的值小于CCR寄存器,输出低电平,当CNT大于CCR的值,小于ARR(还在这一个周期之内),就输出高电平。
特别注意:这种比较结果是对于PWM2的向上计数而言的,对于PWM1而言是相反的,应该要特别注意!!!!!!!!!
PWM输出模式有两个如下
配置相关的寄存器的位是不同的!
当然我们知道,LED得到低电平发光,高电平不发光!
占空比我们已经知道了,就是高电平的时间占整个周期的比值,占空比越高,LED就越暗,所以我们要控制占空比来控制LED亮暗变化!
来看看正点原子的一段代码
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare2(TIM3,led0pwmval);
}
怎么来控制呢?看到程序里面用设置led0pwmval的值来设定占空比,追根溯源它的那个函数我们看到,它是把led0pwmval(参数为如图Compeare2)的值给了CCR,所以我们看到当led0pwmval值不断从0-300增大时,CCR也不断增大,这也就意味着,低电平占的时间越来越多,所以亮度由暗一直到亮,当然这一个脉冲周期可是很短很短的,所以我们只能看到LED的这种亮度变化了。
以上就是PWM控制LED亮度变化的详细介绍,后续陆续更新,敬请关注!