跳到主要内容

全彩 RGB Led 灯控制

一、实现功能

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

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

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

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

    这个问题看起来简单,但实际上人眼对Led灯珠亮度的感知和PWM占空比并不是呈线性的关系,这里面有一套相关的理论计算公式,感兴趣的同学可以了解下另一篇文章《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这三个百分比参数来达到白平衡目的。

三、接线图

layout

四、材料清单

名称推荐购买链接(或者您可以自己制作)模块/芯片硬件资料下载
共阴极RGB三色LED灯RGB三色灯珠模块下载地址
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

product

product1

您可以根据上面的原理图,自己做一个模块,但需要注意灯珠的工作电流、限流电阻阻值、以及需选型共阴极型的LED灯珠。

五、完整代码

--配置共阴极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
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

六、代码运行结果

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

下图为RGB灯最初的紫色状态:

result