0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过蓝牙控制 RGB LED 颜色

刘英 来源:Oo一笑 作者:Oo一笑 2022-08-05 11:00 次阅读

智能灯泡最近越来越受欢迎,并且正在稳步成为智能家居工具包的关键部分。智能灯泡使用户能够通过用户智能手机上的特殊应用程序控制灯光。灯泡可以打开和关闭,颜色可以从应用程序界面更改。在本文中,我们将描述一个实现智能灯泡控制器的项目,该控制器可以通过手动按钮或移动应用程序通过蓝牙进行控制。为了给这个项目添加一些天赋,我们添加了一些功能,允许用户从应用程序界面中包含的颜色列表中选择一种照明颜色。它还可以激活“自动混合”以产生色彩效果并每半秒改变一次照明。用户可以使用 PWM 功能创建他们的颜色混合,该功能也可以用作三种基本颜色(红色、绿色、蓝色)的调光器。我们还在电路中添加了外部按钮,以便用户可以切换到手动模式并通过外部按钮更改灯光颜色。

本文由两部分组成;GreenPAK™ 设计(请参阅其他应用示例)和 Android 应用程序设计。GreenPAK 设计基于使用 UART 接口进行通信。选择 UART 是因为大多数蓝牙模块以及大多数其他外设(例如 WIFI 模块)都支持它。因此,GreenPAK 设计可用于多种连接类型。

为了构建这个项目,我们将使用SLG46620 CMIC、一个蓝牙模块和一个 RGB LED
GreenPAK IC 将成为该项目的控制核心;它从蓝牙模块和/或外部按钮接收数据,然后开始所需的程序以显示正确的照明。
它还生成 PWM 信号并将其输出到 LED。下面的图 1 显示了框图。

poYBAGHFSRaATCc8AAAi0ZI-ak8643.png

图 1:框图

该项目中使用的 GreenPAK 设备在一个 IC 中包含一个 SPI 连接接口、PWM 块、FSM 和许多其他有用的附加块。它还具有体积小、能耗低的特点。这将使制造商能够使用单个 IC 构建小型实用电路,从而与类似系统相比将生产成本降至最低。

在这个项目中,我们将控制一个 RGB LED。为了使该项目具有商业可行性,系统可能需要通过并联多个 LED 并使用适当的晶体管来提高亮度水平;还需要考虑电源电路。该项目得到实施和审查。

GreenPAK 设计

在 GreenPAK Designer 软件中实现的设计由 UART 接收器、PWM 单元和控制单元组成(整个设计文件可以在这里找到)

a) UART 接收器

首先,我们需要设置蓝牙模块。大多数蓝牙 IC 支持 UART 协议进行通信。UART 代表通用异步接收器/发送器。UART 可以在并行和串行格式之间来回转换数据。它包括一个串行到并行接收器和一个并行到串行转换器,它们都单独计时。

蓝牙模块中接收到的数据将传输到我们的 GreenPAK 设备。Pin10 的空闲状态为高电平。发送的每个字符都以逻辑低开始位开始,然后是可配置数量的数据位和一个或多个逻辑高停止位。

UART 发送器发送 1 个 START 位、8 个数据位和 1 个 STOP 位。通常,UART 蓝牙模块的默认波特率为 9600。我们将从蓝牙 IC 发送数据字节到 GreenPAK。SLG46620 的 SPI 模块。

由于 GreenPAK SPI 模块没有 START 或 STOP 位控制,我们将使用这些位来启用和禁用 SPI 时钟信号 (SCLK)。当 Pin10 变低时,我们知道我们收到了一个 START 位,因此我们使用 PDLY 下降沿检测器来识别通信的开始。该下降沿检测器为 DFF0 提供时钟,从而启用 SCLK 信号为 SPI 模块提供时钟。

我们的波特率为每秒 9600 位,因此我们的 SCLK 周期需要为 1/9600 = 104 µs。因此我们将 OSC 频率设置为 2MHz,并使用 CNT0 作为分频器。

2 MHz – 1 = 0.5 µs

(104 µs / 0.5 µs) – 1 = 207

因此,我们希望 CNT0 计数器值为 207。为了确保我们不会丢失任何数据,我们需要将 SPI 时钟延迟半个时钟周期,以便 SPI 块在正确的时间被计时。我们通过使用 CNT6、2 位 LUT1 和 OSC 模块的外部时钟来实现这一点。CNT6 的输出直到 DFF0 计时后 52 µs 才会变高,这是我们 104 µs SCLK 周期的一半。当 CNT6 为高电平时,2 位 LUT1 与门允许 2MHz OSC 信号进入 EXT。CLK0 输入,其输出连接到 CNT0。

pYYBAGHFSSGAGqrSAACuwzA-6CY902.png

图 2:系统图

b) PWM 单元

PWM 信号是使用 PWM0 和相关时钟脉冲发生器 (CNT8/DLY8) 生成的。由于脉冲宽度是用户可控的,我们使用FSM0(可以接PWM0)来统计用户数据。

在 SLG46620 中,8 位 FSM1 可以与 PWM1 和 PWM2 一起使用。必须连接蓝牙模块,即必须使用SPI并行输出。SPI 并行输出位 0 到 7 与 DCMP1、DMCP2 和 LF OSC CLK 的 OUT1 和 OUT0 混合。PWM0 从 16 位 FSM0 获得其输出。如果不改变,这会导致脉冲宽度过载。为了将计数器值限制在 8 位,添加了另一个 FSM;FSM1 用作指示计数器何时达到 0 或 255 的指针。FSM0 用于生成 PWM 脉冲。FSM0 和 FSM1 必须同步。由于两个 FSM 都有预设的时钟选项,因此 CNT1 和 CNT3 用作中介将 CLK 传递给两个 FSM。这两个计数器设置为相同的值,本文为 25。我们可以通过改变这些计数器值来改变 PWM 值的变化率。

FSM 的值由来自 SPI 并行输出的信号“+”和“-”增加和减少。

pYYBAGHFSSqAV4lyAAB9NGBN9tQ208.png

图 3:PWM 单元设计

在控制单元内,接收到的字节从蓝牙模块获取到 SPI 并行输出,然后传递给相关的功能。首先,将检查 PWM CS1 和 PWM CS2 输出以查看 PWM 模式是否被激活。如果它被激活,那么它将确定哪个通道将通过 LUT4、LUT6 和 LUT7 输出 PWM。

LUT9、LUT11 和 LUT14 负责检查其他两个 LED 的状态。LUT10、LUT12 和 LUT13 检查手动按钮是否被激活。如果手动模式处于活动状态,则 RGB 输出将根据 D0、D1、D2 输出状态运行,每次按下颜色按钮时这些状态都会更改。它随着来自 CNT9 的上升沿而变化,用作上升沿去抖动器。

引脚 20 配置为输入,用于在手动和蓝牙控制之间切换。

如果禁用手动模式并激活自动混频器模式,则颜色每 500 毫秒改变一次,上升沿来自 CNT7。4 位 LUT1 用于防止 D0 D1 D2 处于“000”状态,因为此状态会导致灯在自动混音器模式期间关闭。

如果手动模式、PWM 模式和自动混频器模式未激活,则红色、绿色和蓝色 SPI 命令流向引脚 12、13 和 14,这些引脚配置为输出并连接到外部 RGB LED。

poYBAGHFSTaAAa9kAADM2QTQ3aA858.png

图 4:系统图

DFF1、DFF2 和 DFF3 用于构建 3 位二进制计数器。计数器值随着在自动混音器模式下通过 P14 的 CNT7 脉冲或在手动模式下来自颜色按钮 (PIN3) 的信号而增加。

安卓应用

在本节中,我们将构建一个 Android 应用程序,它将监视和显示用户的控件选择。该界面由两部分组成:第一部分包含一组具有预定义颜色的按钮,因此当按下这些按钮中的任何一个时,相应颜色相同的 LED 会亮起。第二部分(混合方块)为用户创建混合颜色。

在第一部分,用户选择他们希望PWM信号通过的LED引脚;PWM 信号一次只能传递到一个引脚。下面的列表在 PWM 模式期间逻辑地控制其他两种颜色的开/关。

自动混音器按钮负责运行自动换光模式,每半秒换一次光。MIX 部分包含两个复选框列表,以便用户可以决定将哪两种颜色混合在一起。

我们使用 MIT 应用程序发明者网站构建了该应用程序。这是一个允许使用图形软件块构建 Android 应用程序而无需先前软件经验的站点。

起初,我们设计了一个图形界面,通过添加一组负责显示预定义颜色的按钮,我们还添加了两个复选框列表,每个列表有 3 个元素;每个元素都在其单独的框中概述,如图 5 所示。

poYBAGHFSUCARiW_AAAyP7b__eg746.png

图 5:应用程序界面

用户界面中的按钮与软件命令相关联:应用程序将通过蓝牙发送的所有命令都是字节格式,每一位负责特定的功能。
表 1 显示了发送到 GreenPAK 的命令帧的形式。

pYYBAGHFSUyAR5iyAAAf5KqAHL8766.jpg

表 1:位帧表示

前三位 B0、B1 和 B2 将通过预定义颜色的按钮在直接控制模式下保持 RGB LED 的状态。因此,当单击其中任何一个时,都会发送按钮的相应值,如表 2 所示。

pYYBAGHFSViAXLJaAABjJPVz4V4778.jpg

表 2:命令位代表

位 B3 和 B4 保存“+”和“-”命令,负责增加和减少脉冲宽度。按下按钮时位值为 1,松开按钮时位值为 0。

B5 和 B6 位负责选择 PWM 信号将通过的引脚(颜色):这些位的颜色指定如表 3 所示。最后一位 B7 负责激活自动混合器。

pYYBAGHFSWKAB1DDAAA3RgSYFyo207.jpg

表 3:PWM 通道选择位

图 6 和图 7 演示了将按钮与负责发送先前值的编程块链接的过程。

poYBAGHFSW6ALtDAAAEYxGTT3AA108.png

图 6:按钮的编程块

pYYBAGHFSXuAD30lAADS0csfvMk883.png

图 7:发送“+”和“-”命令帧

下图8为顶层电路图

poYBAGHFSYWAXj_cAABSW7lSpDE042.png

图 8:电路图

控制器已成功测试,颜色混合以及其他功能显示正常工作。

结论

在本文中,构建了一个智能灯泡电路,由 Android 应用程序进行无线控制。该项目中使用的 GreenPAK CMIC 还有助于将几个用于光控制的基本组件缩短并嵌入到一个小型 IC 中。

Dialog Semiconductor 的 Anas Ajaj

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23252

    浏览量

    660573
  • 照明
    +关注

    关注

    11

    文章

    1511

    浏览量

    131354
  • 蓝牙
    +关注

    关注

    114

    文章

    5809

    浏览量

    170188
  • RGB
    RGB
    +关注

    关注

    4

    文章

    798

    浏览量

    58461
收藏 人收藏

    评论

    相关推荐

    蓝牙4.0 RGB LED灯iPhone5控制方案

    通过手机蓝牙控制灯光,二是除了控制灯泡开关之外,还可以利用RGB灯的特性调节灯光颜色。想象一下,
    发表于 03-21 11:22

    LEDRGB蓝牙4.0控制方案

    LEDRGB蓝牙4.0控制方案1.蓝牙4.0为3合1蓝牙技术,其中包含传统
    发表于 02-14 14:59

    怎样通过KEY1键控制RGB-LED中红灯的亮度呢

    通过KEY1和KEY2的配合,控制RGB-LED颜色。KEY1负责切换RGB-LED每个像素的亮度(如上题所示),KEY2负责切换KEY1
    发表于 02-18 06:10

    RGB流转灯怎样在RGB-LED上实现三种颜色轮流变化

    1 基础能力训练一、设计任务1.基础RGB流转灯在RGB-LED上实现三种颜色轮流变化,变化间隔时间为1S。2.手动RGB流转灯通过按键KE
    发表于 02-18 07:45

    如何通过MQTT控制RGB LED

    灯条驱动板。如果我将一个简单的草图上传到控制 PWM 的 WeMos,我的 RGB LED 灯带会在颜色之间淡化。所以所有硬件都在工作。我已将 OpenHAB 设置为使用 Color
    发表于 05-23 06:44

    如何使用MS51 PWM来控制UART的RGB LED

    样本代码使用 MS51 PWM 来控制 RGB LED , 通过与 PWM 任务相应的 UART 输入来控制
    发表于 08-29 06:03

    RGB LED的详细介绍如何通过一个RGB小灯随机产生不同的炫彩颜色

    现在介绍一种新的LED——RGB LED。 它是由红(Red)、绿(Green)和蓝(Blue)三色组成。我们电脑的显示器也是由一个个小的红、绿、蓝点组成的。可以通过调整三个
    发表于 07-23 08:00 57次下载
    <b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>的详细介绍如何<b class='flag-5'>通过</b>一个<b class='flag-5'>RGB</b>小灯随机产生不同的炫彩<b class='flag-5'>颜色</b>

    易于设计RGB多种颜色LED驱动器方案

    视频简介:安森美半导体推出一种创新的、易于设计的RGB(红绿蓝)LED驱动器方案,使实现基于混合RGB的1600万种颜色成为可能,以创建多种汽车内部光
    的头像 发表于 03-12 06:02 5926次阅读

    如何使用电位计更改阳极RGB LED颜色

    RGB LED表示红色,蓝色和绿色LEDRGB LED产品将这三种颜色结合在一起,可产生超过
    的头像 发表于 12-11 17:11 4464次阅读

    用自己声音或智能手机控制RGB LED灯带实现梦幻效果

    本项目将使用智能手机设置RGB LED灯带的颜色,这些RGB灯带内建蓝牙功能,可接收智能手机上的android应用程序发送的指令。这样,我们
    的头像 发表于 07-15 09:11 6434次阅读
    用自己声音或智能手机<b class='flag-5'>控制</b><b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>灯带实现梦幻效果

    使用电视遥控器控制RGB LED颜色

    电子发烧友网站提供《使用电视遥控器控制RGB LED颜色.zip》资料免费下载
    发表于 11-22 10:52 0次下载
    使用电视遥控器<b class='flag-5'>控制</b><b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>的<b class='flag-5'>颜色</b>

    RGB LED淡出不同的颜色

    电子发烧友网站提供《让RGB LED淡出不同的颜色.zip》资料免费下载
    发表于 12-19 11:14 1次下载
    让<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>淡出不同的<b class='flag-5'>颜色</b>

    Arduino RGB Led控制通过PC

    电子发烧友网站提供《Arduino RGB Led控制通过PC.zip》资料免费下载
    发表于 02-09 11:30 0次下载
    Arduino <b class='flag-5'>RGB</b> <b class='flag-5'>Led</b><b class='flag-5'>控制</b><b class='flag-5'>通过</b>PC

    使用PWM或脉冲宽度调制管理LED亮度和RGB LED颜色

    电子发烧友网站提供《使用PWM或脉冲宽度调制管理LED亮度和RGB LED颜色.zip》资料免费下载
    发表于 07-12 09:13 0次下载
    使用PWM或脉冲宽度调制管理<b class='flag-5'>LED</b>亮度和<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b><b class='flag-5'>颜色</b>

    如何使用Arduino控制RGB LED

    在本指南中,您将学习如何使用Arduino控制RGB LEDRGB(红-绿-蓝)LED可以通过
    的头像 发表于 02-11 10:28 4907次阅读
    如何使用Arduino<b class='flag-5'>控制</b><b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>