混合与数学:一种使用Bluetooth®低功耗通信实现RGBA混色的方法

  作者:Swathi Sridhar Namrata Dalvi 时间:2018-10-25来源:电子产品世界

编者按:本文说明了如何使用16位PWM精确控制每个LED亮度。它还使用Bluetooth 4.1低功耗模块来进行通信,因此用户可向RGBA板发送PWM值以输出所需颜色。

作者 / Swathi Sridhar Namrata Dalvi Microchip Technology Inc.资深应用工程师

摘要:本文说明了如何使用16位PWM精确控制每个LED亮度。它还使用Bluetooth 4.1低功耗模块来进行通信,因此用户可向RGBA板发送PWM值以输出所需颜色。

  使用8位单片机和Bluetooth® 4.1低功耗模块来控制红色、绿色、蓝色和alpha(RGBA)颜色空间,从而以无线方式精确控制发光二极管(LED)的颜色平衡。

  图1给出的演示板有四个LED——分别为红色、绿色、蓝色和琥珀色。通过脉冲宽度调制(PWM)占空比控制各个LED的亮度。

  这可以通过Microchip的PIC16F1579单片机实现,该单片机具有四个用于驱动LED的16位PWM。这些16位PWM可精确控制各色LED的强度,还能通过混合不同亮度的RGBA呈现不同的颜色。

  使用mTouch®电容式触摸传感技术可操作两个电容式触摸滑动条。板上RN4020蓝牙模块用于通过Bluetooth低功耗通信从Android™移动应用程序或桌面程序接收PWM值。演示板通过1.5V AAA电池供电。

1 照明

  LED产生的光会因多种因素发生变化。不同类型的LED以及相同类型的各个LED的亮度(以流明为单位测得)都有所不同。对于彩色LED,根据色度值测得的特定颜色因LED而异。

  我们对少量特定品牌LED的样本进行了测量以开发亮度和色度配置文件。随后会在硬件设计和软件色度计算中将这些值用作典型值。此过程称为颜色调节。

  每种颜色的电阻值是固定的,以便产生相同的流明数。各个LED串联电阻的阻值如下:红色820Ω、蓝色400Ω、绿色500Ω以及琥珀色500Ω。

2 工作模式

  有两种工作模式:第一种是色相饱和度值加白色(HSVW)和亮度滑动条模式;第二种是使用蓝牙低功耗的色度选择器模式。

  电路板在模式1下初次上电。电路板上有两个电容式触摸滑动条:一个用于输入颜色,另一个用于控制亮度。

  如果在滑动条模式下触摸第一个滑动条,则滑动条上选择的颜色将在LED上输出。在接收到另一个输入之前,将一直显示所选颜色。可以使用另一个滑动条控制特定颜色的亮度。

  对于第二种模式,使用基于Android的移动应用程序或基于Windows的桌面应用程序选择颜色值(PWM)。然后通过蓝牙连接将相应的PWM值发送到电路板。应用程序使用CIE 1931 XY色度图,请参见图2。将计算所选颜色和亮度的精确PWM值,并通过蓝牙连接发送到RGBA板。电路板上的蓝牙模块随后会接收PWM值,RGBA板固件将使用这些值来显示所选颜色。

  色度选择器应用程序GUI包含CIE 1931 xy色度图。CIE 1931颜色空间按色度(x)和亮度(y)显示各种颜色。映射到CIE颜色空间的红色、绿色和蓝色LED的颜色和亮度定义了一个三角形,此三角形内包含了三个器件的输出可产生的所有可能的颜色明暗;此三角形称为色域。

  为获得更宽的颜色范围,添加了一个琥珀色LED。琥珀色LED的xy数据被映射到CIE 1931 xy颜色空间。这在红色、琥珀色和绿色坐标之间定义了另一个三角形。如果按照不同的比例混合红色、琥珀色和绿色,我们将获得图2中的色域内的颜色。

  在该模式下使用的PC GUI和Android应用程序通过实现此混色算法来计算产生选定颜色所需的PWM占空比值。

  色度选择器应用程序通过蓝牙连接发送PWM值。此连接模块将能够与包含Bluetooth v4.0(及更高版本)收发器的手机和PC进行通信。此模块主要用于从运行色度选择器应用程序的主设备接收占空比值。单片机和BLE模块之间的引脚连接配置如图3所示。

3 蓝牙通信

  有两种类型的蓝牙设备——蓝牙经典和蓝牙低功耗。蓝牙低功耗设备只能与另一个BLE设备或同时具备蓝牙经典和蓝牙低功耗功能的蓝牙双模设备进行通信。因此,为了能够与RGBA板上使用的RN4020模块进行通信,主机设备必须是BLE或蓝牙双模设备。

  该模块符合蓝牙核心规范v4.1并由用户通过输入/输出线和UART接口控制。UART支持ASCII命令,可针对基于应用的任何要求控制或配置模块。

4 应用软件

  电路板工作在模式2下时,所需LED颜色从来自RGBA混色桌面应用程序或RGBA混色Android应用程序的色度选择器应用程序内的色度图中选择。红色、蓝色、绿色和琥珀色PWM占空比通过应用程序计算。占空比值通过蓝牙低功耗连接传送给电路板。使用的桌面应用程序是使用Visual Studio C#.NET开发的。应用程序遵循MVC原则,具有以下几类:

  RGBA视图控制器类用作GUI或视图管理器,也可用作应用程序的控制器。该类位于层级顶部,负责编译各类新对象和执行依赖注入。此外,它还处理所有GUI事件并调用相应的方法。

  RGBA计算类负责确定选定点处于RGB或RGA三角形的内部还是外部,并为所有LED计算每种颜色的占空比。

  矩阵3x3类实现了所有3x3矩阵的数学运算,例如逆矩阵、行列式、转置、余因子和乘法。向量3类实现了大小为3的列向量,该列向量用于矩阵3x3类的矩阵数学运算。RGBA数据类为自定义数据类型,用于存储所有颜色的占空比值。

  在无线通信包装类中,该接口包含无线通信要实现RGBA应用所需的全部方法。任何无线通信方法(例如蓝牙低功耗和蓝牙经典等)都可以使用该接口。为RGBA板实现该接口后,使用RN4020 PICtail™卡通过RS232通信即可完成蓝牙低功耗通信。

  编程人员可通过Visual Studio中的内置蓝牙低功耗库或第三方库编译新类以实现无线通信。该接口会将通信的实现与实际控制器分离,这样一来,当实现新的通信时,视图控制器和其他类不会发生变化。

  采用RN4020器件类的RGBA蓝牙低功耗通信实现了无线通信包装接口,可与RGBA板进行蓝牙低功耗通信。使用PICtailTM卡,并通过UART或RS232端口将其连接至PC。建立串行通信并发送命令以实现蓝牙低功耗通信。

  蓝牙低功耗设备信息类存储有关远程连接设备的基本信息(即,名称、地址和支持的服务器服务)。这些信息用于识别和连接远程设备。

  在搜索结果委托类中,该委托在结束设备搜索且设备可以列表形式供用户选用时处理来自蓝牙低功耗类的事件。搜索操作需要十秒钟时间。

  在连接状态变化委托类中,该委托处理来自蓝牙低功耗类的事件,用于确定主PICtailTM卡是否已连接至远程设备,并为用户显示当前连接状态。

  常量类存储应用程序所需的所有常量,例如RN4020模块命令和响应、服务以及特性UUID等。Android操作系统的Java™应用程序类同样严格遵循MVC原则,采用与桌面应用程序结构类似的Android活动类。但是,Android应用程序使用Android手机的内置蓝牙低功耗硬件。Android操作系统通过所有必需事件和回调为蓝牙低功耗通信提供所有必要的库。RGBA视图活动类与桌面上的视图控制器类相似,只是GUI控件在XML文件(而非类)中定义。

5 结论

  本文章说明了如何使用16位PWM精确控制每个LED的亮度。文中介绍的RGBA LED混色板具有电容式触摸滑动条按钮,可实现颜色输入和亮度控制功能。它还使用Bluetooth 4.1低功耗模块来进行通信,因此用户可向RGBA板发送PWM值以输出所需颜色。颜色在Windows桌面或Android手机上的色度选择器应用程序中选择。

  参考文献:

[1]Sridhar S,Tiwari A,Dalvi N. RGBA Color Mixing with Bluetooth® Low Energy Communication[R/OL].http://ww1.microchip.com/downloads/en/AppNotes/00002026A.pdf

  本文来源于《电子产品世界》2018年第11期第21页,欢迎您写论文时引用,并注明出处。

关键词: Microchip 16位PWM精确控制 201811

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版