关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

通过蓝牙控制智能LED调光器(二)

2020.10.05

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。

通过蓝牙控制智能LED调光器

图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,以保持同步,在两个计数器上保持相同的值。

通过蓝牙控制智能LED调光器

图3:控制单元设计


推荐
关闭