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:控制單元設計