术语和定义
CMIC:可配置混合信号IC(Configurable Mixed-Signal Integrated Circuits)
UART:通用异步收发器(Universal asynchronous receiver-transmitter)
LED:发光二极管(Light-emitting diode)
SPI:串行外设接口(Serial Peripheral Interface)
PWM:脉冲宽度调制(Pulse-width modulation)
FSM:有限状态机(Finite-state machine)
LUT:查找表(Look-up table)
DFF:D触发器(D-type flip-flop)
引言
本应用笔记介绍了如何使用Dialog GreenPAK™ SLG46620V创建智能数字调光器设计。调光器是住宅、酒店和许多建筑中常用的照明开关。较旧版本的调光开关是手动的,一般包含一个旋转开关(电位计)或多个按钮来控制照明水平。本应用笔记介绍了如何创建可以通过两种方法(智能手机和物理按钮)控制照明亮度的数字调光器。这两种模式可以无缝地协同工作,用户可以通过按钮或智能手机来调高或调低照明亮度。该项目采用了SLG46620V 可配置混合信号IC(CMIC)、HC-06蓝牙模块、按钮和LED。
我们将使用SLG46620V CMIC,它有助于将分立器件数量降到最少。GreenPAK IC体积小,含有多用途组件,有助于设计人员减少产品设计的元件数量和增加新功能。此外,项目的成本也随之降低。SLG46620V这颗小巧的芯片中包含一个SPI连接接口、多个PWM模块、有限状态机(FSM)以及很多有用的附加模块。这些组件有助于设计工程师创建可以通过蓝牙设备或墙壁按钮进行控制的实用智能调光器,支持延时调光,并提供额外的可选功能,而无需使用微控制器或昂贵的元件。
项目特点:
1. 两种控制方法:移动app和实体按钮
2. 平滑的灯光开关过渡。这对消费者来说更健康,也给人一种更豪华的感觉,这对酒店和其他服务行业很有吸引力。
3. 睡眠模式功能。这是此应用的一项附加价值,当用户开启这个模式时,灯光亮度会在10分钟内逐渐降低。这有助于患有失眠症的人,它也适用于儿童卧室和零售店(关闭时)。
项目界面
该项目界面有四个按钮,作为GreenPAK输入:
开/关:打开和关闭灯光(软启动/关闭)
调亮:调高灯光亮度
调暗:调低灯光亮度
睡眠模式:开启睡眠模式时,灯光亮度会在10分钟内逐渐降低。这给用户睡前一些时间,并确保灯光不会整夜都亮着。
系统将输出一个PWM信号,该信号将传送到外部LED和睡眠模式LED指示灯。
GreenPAK芯片
图1:调光器框图
该GreenPAK设计由4个主要功能块组成。第一个是UART接收器,它从蓝牙模块接收数据,提取命令,并将它们发送到控制单元。第二个功能块是一个控制单元,它接收来自UART接收器或外部按钮的命令。控制单元决定所需的操作(打开/关闭、调亮、调暗、启用睡眠模式)。该单元使用LUT实现。
第三个功能块是时钟(CLK)发生器。在此项目中,采用了一个FSM计数器来控制PWM。FSM的值将根据3个频率(高、中和低)给出的命令而变化(升高、降低)。在这个部分中,将生成三个频率,所需的时钟信号根据要求的顺序传输给FSM;在打开/关闭操作时,高频信号传输到FSM来进行软启动/停止。在调光期间,中频信号通过。低频信号在睡眠模式通过,从而更慢速地降低FSM值。然后,灯光亮度也会缓慢下降。第四个功能块是PWM单元,它向外部LED生成脉冲。
GreenPAK设计
使用GreenPAK创建调光器设计的最佳方法是使用8 bit FSM和一个PWM。在SLG46620中,FSM1包含8 bits,可与PWM1和PWM2一起使用。必须连接蓝牙模块,这意味着必须使用SPI并行输出。SPI并行输出bits 0到7连接与DCMP1、DMCP2和LF OSC CLK、OUT1、OUT0 OSC输出复用。PWM0从FSM0(16 bits)获得其输出。FSM0不会停在255;它可以增加到16383。为了将计数器值限制在8 bits,增加了另一个FSM;FSM1用来指示计数器何时达到0或255。FSM0用于生成PWM脉冲。由于必须同时更改两个FSM的值来确保它们具有相同的值,因此设计变得有点复杂,两个FSM都具有预定义的、有限的、可选CLK。使用CNT1和CNT3作为介体将时钟信号传送到两个FSM。
设计包含以下部分:
1.UART接收器
首先,我们需要设置HC06蓝牙模块。HC06使用UART协议进行通信。UART代表通用异步接收器/发射器。UART可以在并行和串行格式之间来回转换数据。它包括一个串行到并行接收器和一个并行到串行转换器,它们的时钟是分开的。HC06中接收到的数据将传输到我们的GreenPAK器件。引脚10的空闲状态为HIGH。发送的每串数据都以逻辑低启动位,随后是可配置数量的数据位,以及一个或多个逻辑高停止位。
HC06发送1个起始位、8个数据位和一个停止位。它的默认波特率是9600。我们将从HC06发送数据字节到GreenPAK SLG46620V的SPI模块。
由于Silego SPI模块没有起始位或停止位控制,因此这些位用于使能和禁用SPI时钟信号(SCLK)。当引脚10变为LOW时,IC已经接收到一个起始位,所以我们使用PDLY下降沿检测器来识别通信的开始。该下降沿检测器为DFF0提供时钟,使SCLK信号能够为SPI模块提供时钟。
我们的波特率为每秒9600位,所以我们的SCLK周期是1/9600 = 104 µs。因此,我们将OSC频率设置为2 MHz,并使用CNT0作为分频器。
2 MHz-1 = 0.5 µs
(104 µs / 0.5 µs) - 1 = 207
因此,我们希望CNT0计数器值为207。为确保不丢失数据,在SPI时钟上增加半个时钟周期延迟,从而SPI功能块在正确的时间进行计时。这是通过使用CNT6、2-bit LUT1和OSC模块的外部时钟来实现的。CNT6的输出在DFF0计时52 µs后才会变高,这恰好是我们SCLK周期104 µs的一半。当它变高时,2-bit LUT1 与门允许2 MHz OSC信号进入EXT. CLK0输入,其输出连接到CNT0。
图2:UART接收器
2.控制单元
在这部分中,将根据UART接收器接收的字节或根据来自外部按钮的信号执行命令。引脚12、13、14、15被初始化为输入,并连接到外部按钮。
每个引脚内部连接到OR门输入,门的第二个输入端通过蓝牙连接来自智能手机的相应信号,该信号将出现在SPI并行输出上。
DFF6用于激活睡眠模式,其输出变为高,上升沿来自2-bit LUT4,而DFF10用于维持照明状态,其输出从低变为高,当每个上升沿来自3-bit LUT10输出时反之亦然。
FSM1是一个8-bit计数器;当它的值达到0或255时,它在输出上给出一个高脉冲。因此,它用于防止FSM0(16-bit)的值超过255,它的输出复位DFF,并且它将DFF10状态从开启变为关闭。如果照明由按钮 + 和 - 控制,并且已达到最大/最小值,亦是这样。
连接到FSM1输入的信号keep、up将通过P11和P12到达FSM0,以保持同步,在两个计数器上保持相同的值。
图3:控制单元设计
3.时钟发生器和复用器
在这部分中,将生成三个频率,但只有一个频率将在任一时候为FSM计时。第一个频率是RC OSC,它从矩阵0到P0取出。第二频率是LF OSC,它也从矩阵0到P1取出。第三个频率是CNT7输出。
根据3-bit LUT14输出,3-bit LUT9和3-bit LUT11允许一个频率通过。之后,所选择的时钟通过CNT1和CNT3发送到FSM0和FSM1。
图4:时钟发生器设计
4. PWM
最后,FSM0值转换为PWM信号,通过引脚20出现,引脚20初始化为输出,并连接到外部LED。
图5:PWM功能块
安卓app
安卓app具有类似于真实界面的虚拟控制界面。它有五个按钮:ON/OFF、UP、DOWN、睡眠模式和连接。该安卓应用程序将按钮按动操作转换为命令,并将命令发送到蓝牙模块来执行。
这个app是用MIT App Inventor制作的,不需要任何编程经验。App Inventor允许开发人员使用网页浏览器连接编程模块来为安卓OS设备创建应用程序。您可以将我们的App导入MIT App Inventor,具体步骤为:单击我的计算机上的项目 - 》 导入项目(.aia),然后选择此App Note中包含的.aia文件。
要创建安卓应用程序,必须启动新项目。需要五个按钮:一个是蓝牙设备的列表选择器,其他是控制按钮。我们还需要添加蓝牙客户端。图6是我们的安卓app用户界面的截屏。
添加按钮后,我们将为每个按钮分配软件功能。我们将使用4 bits来代表按钮的状态。每个按钮一个bit, 因此,当您按下按钮时,一个特定的数字将通过蓝牙发送到实际电路。
图6:按钮的编程模块
这些数字如表1所示:
表1:指令-Bit表示
图7:按钮编程模块
图8:电路原理图
图9:原型界面
总结
本应用笔记介绍了一种可以通过两种方式(安卓app和实体按钮)控制的智能调光器。介绍了GreenPAK SLG46620V内部四个独立的功能块,用于控制增加或减少灯光PWM的工作流程。此外,还介绍了睡眠模式功能,作为该应用中可选的额外调制的示例,该示例是低电压的,也可以更改成高电压的功能。