智能灯泡最近已经越来越流行,并且正稳步成为智能家居工具包的关键部分。智能灯泡使用户可以通过用户智能手机上的特殊应用程序来控制其灯光。可以打开和关闭灯泡,并且可以从应用程序界面更改颜色。在本文中,我们将描述一个实现智能灯泡控制器的项目,该控制器可以通过手动按钮或移动应用程序通过蓝牙进行控制。为了给该项目增加一些个性,我们添加了一些功能,这些功能使用户可以从应用程序界面中包含的颜色列表中选择一种照明颜色。它还可以激活“自动混合”以生成色彩效果并每半秒钟更改一次照明。用户可以使用PWM功能创建其色彩混合,该功能也可以用作三种基本颜色(红色,绿色,蓝色)的调光器。我们还在电路中添加了外部按钮,以便用户可以切换到手动模式并通过外部按钮更改灯的颜色。
本文由两部分组成;GreenPAK™设计(请参阅其他应用程序示例)和Android应用程序设计。GreenPAK设计基于使用UART接口进行通信。选择UART是因为大多数蓝牙模块以及大多数其他外围设备(例如WIFI模块)都支持UART。因此,GreenPAK设计可用于多种连接类型。
为了构建该项目,我们将使用SLG46620 CMIC,蓝牙模块和RGB LED。
GreenPAK IC将成为该项目的控制核心。它从蓝牙模块和/或外部按钮接收数据,然后开始所需的步骤以显示正确的照明。
它还产生PWM信号并将其输出到LED。下面的图1显示了框图。
图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变为LOW时,我们知道我们已经收到一个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 AND门允许2MHz OSC信号进入EXT。CLK0输入,其输出连接到CNT0。
图2:系统图
b)PWM单元
使用PWM0和相关的时钟脉冲发生器(CNT8 / DLY8)产生PWM信号。由于脉冲宽度是用户可控制的,因此我们使用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并行输出的信号“ +”和“-”来增加和减少。
图3:PWM单元设计
在控制单元内,接收到的字节从蓝牙模块获取到SPI并行输出,然后传递给相关的功能。首先,将检查PWM CS1和PWM CS2输出,以查看PWM模式是否被激活。如果它被激活,它将确定哪个通道将通过LUT4,LUT6和LUT7输出PWM。
LUT9,LUT11和LUT14负责检查其他两个LED的状态。LUT10,LUT12和LUT13检查“手动”按钮是否已激活。如果启用了“手动”模式,则RGB输出将根据D0,D1,D2输出状态进行操作,每次按“颜色”按钮都会更改这些状态。它随着来自CNT9的上升沿而变化,CNT9用作上升沿去抖动器。
引脚20被配置为输入,用于在手动和蓝牙控制之间切换。
如果禁用了手动模式并激活了自动混频器模式,则颜色每500毫秒更改一次,且上升沿来自CNT7。4位LUT1用于防止D0 D1 D2处于'000'状态,因为这种状态会导致在自动混频器模式下灯熄灭。
如果未激活手动模式,PWM模式和自动混频器模式,则红色,绿色和蓝色SPI命令将流向配置为输出并连接到外部RGB LED的引脚12、13和14。
图4:系统图
DFF1,DFF2和DFF3用于构建3位二进制计数器。在自动混频器模式下,计数器值随着通过P14的CNT7脉冲或在手动模式下从“颜色”按钮(PIN3)发出的信号而增加。
Android应用程式
在本节中,我们将构建一个Android应用程序,该应用程序将监视和显示用户的控件选择。该界面包括两个部分:第一部分包含一组具有预定义颜色的按钮,以便在按下这些按钮中的任何一个时,相同颜色的LED会点亮。第二部分(MIX正方形)为用户创建混合色。
在第一部分中,用户选择希望PWM信号通过的LED引脚。PWM信号一次只能传递到一个引脚。下部列表在PWM模式下逻辑上控制其他两种颜色的开/关。
自动混音器按钮负责运行自动变光模式,在该模式下,灯光每半秒改变一次。MIX部分包含两个复选框列表,因此用户可以决定将两种颜色混合在一起。
我们使用MIT应用程序发明者网站构建了该应用程序。该站点允许您在没有使用图形软件模块的软件经验的情况下构建Android应用程序。
首先,我们通过添加一组按钮来显示预定义的颜色来设计图形界面,还添加了两个复选框列表,每个列表包含3个元素。每个元素都在其单独的框中概述,如图5所示。
图5:应用程序界面
用户界面中的按钮链接到软件命令:应用程序将通过蓝牙发送的所有命令均采用字节格式,每个位负责特定功能。
表1显示了发送到GreenPAK的命令帧的形式。
表1:位帧表示
前三位B0,B1和B2将通过预定义颜色的按钮在直接控制模式下保持RGB LED的状态。因此,单击它们中的任何一个时,将发送按钮的相应值,如表2所示。
表2:命令位代表
位B3和B4包含“ +”和“-”命令,负责增加和减少脉冲宽度。按下按钮时,位值为1;释放按钮时,位值为0。
B5和B6位负责选择PWM信号将通过的引脚(颜色):这些位的颜色标识如表3所示。最后一位B7负责激活自动混频器。
表3:PWM通道选择位
图6和图7演示了将按钮与编程块链接的过程,这些编程块负责发送先前的值。
图6:按钮编程块
图7:发送“ +”和“-”命令帧
下面的图8显示了顶层电路图
图8:电路图
该控制器已经过成功测试,并且颜色混合以及其他功能都可以正常工作。
结论
在本文中,构建了一个智能灯泡电路以由Android应用程序进行无线控制。该项目中使用的GreenPAK CMIC还有助于缩短照明控制的必要组件并将其嵌入到一个小型IC中。
编辑:hfy
全部0条评论
快来发表一下你的评论吧 !