PWM实现线性调光

文章详细解释了PWM调光的基本原理,通过调整方波占空比来改变光源亮度。线性变化描述了亮度平滑过渡的重要性,以避免视觉不适。通过控制红绿蓝三种LED的亮度混合,可以实现色彩的任意调节。文中还介绍了计算步径的算法和使用中断服务函数实现LED亮度的线性变化,确保在规定时间内平缓完成颜色变换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.PWM调光原理

PWM全称为脉宽调制技术,是通过高精度的计数器对方波的占空比进行编码。

就是这个东西,其实很好理解,高电平的时候才会做功,低电平的时候肯定不亮啊,PWM就是调制高电平的占比。(其实一般是低电平才有效,因为会外接一个12V的电源,这么说是方便理解)

2. 线性变化描述

举个例子,假如你洗澡要用1吨水,你不可能1秒钟把这一吨水全部倒下来把。光变化也是这样,一下子变过来你眼睛受不了。所以要在规定时间内,尽量均匀的变化,保证在规定时间内完成变化,又要保证变化的过程尽量平缓,斜率尽量固定或者变化不大。

3. 光调制原理

知道彩虹不,这世界其实只有三种颜色,红绿蓝,学美术的应该知道,这三种颜色可以组合出各种不同的颜色。所以通过控制R(红色),G(绿色),B(蓝色)(red,green,blue的缩写)这三种LED的亮度就可以产生理论上你想要的任何颜色。

有个类似这种的表,网上能查到

4. 线性变化算法描述

设置过渡时间的信号从LIN总线过来,值的范围是0~255(8位数据,相当于unsigned char),单位是20ms,我把这个值设为 time。

LIN总线上还会传入需要设置的R,G,B三种颜色的值,也是8位的,我用到的PWM寄存器的大小也是八位。设置需要变化的大小为val。分析以下几种情况:

  1. time >val ; 也就是说单位时间变化1个值就可以在规定时间完成。多余的时间无所谓的

  1. time < val; 就是说单位时间需要变化多个值。我们把单位时间需要变化的值叫做步径,如果变化1个值其实就是步径为1,设步径为step

  1. 2*time>val; 步径为2

  1. 。。。

  1. step*time>val;步径为step ,这个过程可以用for循环来实现。

我们可以设置一个20ms的中断,在中断中让PWM的值增加步径,就可以完成LED灯的线性变化啦。

5. 代码

5.1 计算步径
5.2 中断函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值