shineblink控制全彩RGB LED

280 阅读3分钟

全彩RGB Led

一、实现功能

Core直接外接一个共阴极三色全彩RGB Led模块,并动态调整RGB Led的三色值。

二、关于RGB Led控制的一些较深入的理论知识

Core关于RGB Led提供的驱动库接口很简单,如果用户只是想简单的想通过调整RGB灯珠的三色比例进而显示自己想要的比较接近的色彩,则下面的内容完全不需要了解。

(1)如何用PWM线性的控制Led亮度

这个问题看起来简单,但实际上人眼对Led灯珠亮度的感知和PWM占空比并不是呈线性的关系,这里面有一套相关的理论计算公式,感兴趣的同学可以了解下Core网站的中的另一篇文章《基于CIE1931公式实现PWM对LED亮度的线性控制》。

Core已在RGB的驱动库中对PWM的输出根据CIE1931公式进行了相关矫正,所以用户可以不用考虑。

(2)白平衡问题

色彩学上当红绿蓝三原色的比例为3:6:1时才会显示出纯正的白色,所以当选者全彩色LED进行配色前,为了达到最佳亮度和最低地成本,应尽量选择三原色发光强度成大致为3:6:1比例地LED灯珠。但实际中由于各个LED灯珠厂家工艺的差别,会有些不同,所以这里需要调整RGB灯珠的三色比例。LED灯珠的三原色白平衡调节是一个比较复杂的工程,感兴趣的同学可以网上了解一下相关资料,这里仅提供两种比较粗略的仅适用于单颗RGB灯珠白平衡的调节方法以供参考

方法一:通过调整串联在R,G,B灯珠上的电阻阻值来达到三原色在相同色阶下亮度为3:6:1的比例

方法二:在用LIB_RGBledConfig(p1,p2,p3)函数初始化时,调整p1,p2,p3这三个百分比参数来达到白平衡目的。

三、接线图

在这里插入图片描述

四、完整代码

--配置共阴极RGB模块开始工作,模块的R,G,B引脚分别固定占用Core的D0,D1,D2引脚
--R,G,B系数都保持100%,即不考虑白平衡问题
LIB_RGBledConfig(100,100,100)
--设定初始RGB颜色,(255,0,255)为紫色
R = 255
G = 0
B = 255
--开始大循环
while(GC(1) == true)
do
    --每20毫秒更新一次颜色值(R和B不变,G逐渐增大到255后再次返回0)
    LIB_DelayMs(20)
    LIB_RGBledUpdate(R,G,B)
    G = G + 1
    if G >= 255 then
        G = 0
    end
end

五、代码运行结果

可以看到最开始RGB灯珠是紫色,随着绿色的成分逐渐增加,灯珠逐渐变成白色,当白色带到最亮状态后又会回到最初的紫色状态。

下图为RGB灯最初的紫色状态:
在这里插入图片描述
更多详情请参看 shineblink.com官网链接