彭銀橋 戴錦波
摘要 針對傳統(tǒng)照明系統(tǒng)中的燈光控制存在不方便、靈活性差、不易集中管理的問題,設(shè)計了一種基于STM32微控制器和ZigBee無線通信技術(shù)的智能燈光控制系統(tǒng)。詳細分析了STM32主控制器、ZigBee協(xié)調(diào)器節(jié)點與ZigBee終端節(jié)點及其它們之間通信的工作流程,設(shè)計了相應(yīng)的軟件,實現(xiàn)了室內(nèi)LED燈光的開關(guān)控制和亮度調(diào)節(jié)。
【關(guān)鍵詞】STM32 ZigBee CC2530 LED燈光控制
1 引言
隨著經(jīng)濟的不斷發(fā)展及生活水平的提高,人們希望提升自己的生活品質(zhì)。在人們的居住環(huán)境中,照明系統(tǒng)是其中一個必不可少的部分。進入二十一世紀以來,LED燈憑借著“節(jié)能、環(huán)保、壽命長”的優(yōu)勢,漸漸取代了傳統(tǒng)的白熾燈。雖然在傳統(tǒng)的照明系統(tǒng)中,LED燈成為了主流的照明光源,但依舊沒法掩蓋傳統(tǒng)照明系統(tǒng)“管理不便、控制單一、靈活性差”的缺點。傳統(tǒng)照明系統(tǒng)通常采取單獨的或若干個開關(guān)對電路進行通斷操作來開啟或關(guān)閉LED燈,操作極不方便,而且也不能對LED燈的亮度進行調(diào)節(jié),缺乏靈活性。隨著計算機技術(shù)、通信技術(shù)、網(wǎng)絡(luò)技術(shù)不斷發(fā)展,智能燈光控制系統(tǒng)應(yīng)運而生。智能燈光控制系統(tǒng)能夠根據(jù)不同的用戶需求、環(huán)境條件等采取不同的照明方案,甚至能夠根據(jù)當(dāng)前環(huán)境自動調(diào)整照明參數(shù)。同傳統(tǒng)照明系統(tǒng)相比,智能燈光控制系統(tǒng)與無線通信技術(shù)相結(jié)合,能夠?qū)Ρ姸嗟腖ED燈進行統(tǒng)一管理,適用于不同的場景,提高了靈活性。由此可見,新型的智能燈光控制系統(tǒng)能夠進一步提升人們的生活品質(zhì),而且其將成為未來的主流照明系統(tǒng)。
2 系統(tǒng)總體架構(gòu)與硬件設(shè)計
無線LED燈光控制必需用到無線傳輸技術(shù),如ZigBee、WIFI、藍牙、CAN、RS485等,其中ZigBee是基于IEEE802.15.4協(xié)議開發(fā)的新一代無線通信技術(shù),具有穩(wěn)定性強、組網(wǎng)能力強大、網(wǎng)絡(luò)拓撲結(jié)構(gòu)靈活、功耗低、成本低等優(yōu)點,因此采用ZigBee無線通信技術(shù)作為系統(tǒng)的無線傳輸技術(shù)?;赟TM32的無線LED燈光控制系統(tǒng)的總體架構(gòu)如圖1所示。利用多個ZigBee終端節(jié)點組成ZigBee網(wǎng)絡(luò),每個ZigBee終端節(jié)點通過LED驅(qū)動器和繼電器電路與LED燈相連,通過LED驅(qū)動器和繼電器電路的配合對LED燈進行開啟、關(guān)閉、亮度調(diào)節(jié)操作;ZigBee終端節(jié)點將LED燈的狀態(tài)信息數(shù)據(jù),經(jīng)由ZigBee協(xié)調(diào)器傳輸?shù)絊TM32主控制器,主控制器對接收到的數(shù)據(jù)進行分析,然后在LCD屏上顯示。另一方面,主控制器經(jīng)由ZigBee協(xié)調(diào)器節(jié)點將數(shù)據(jù)發(fā)送到ZigBee終端節(jié)點,終端節(jié)點對接收到的數(shù)據(jù)進行分析,然后對LED燈采取對應(yīng)的操作,如開啟、關(guān)閉、增加亮度、降低亮度等操作。
STM32F103RCT6芯片具有功耗低、功能強、價格低等特點,因此選用STM32F103RCT6芯片作為主控制器。CC2530系列芯片支持IEEE802.15.4/ZigBee協(xié)議,通常結(jié)合半開源協(xié)議棧Zstack 2007使用,其成為功能強大的針對ZigBee應(yīng)用的片上系統(tǒng)解決方案;002530芯片采用8051增強型內(nèi)核,其性能強、功耗低,因而選用CC2530F256芯片作為ZigBee應(yīng)用開發(fā)。
系統(tǒng)硬件主要分為主控制器和ZigBee節(jié)點硬件兩部分。主控制器硬件主要包括中央處理器、電源電路、復(fù)位電路、仿真調(diào)試接口電路、LCD屏顯示電路、按鍵和LED電路;ZigBee節(jié)點硬件主要包括CC2530核心板和功能底板兩大部分,功能底板部分包含了電源電路、仿真調(diào)試接口電路、按鍵和LED狀態(tài)燈電路。ZigBee終端節(jié)點通過外圍電路的LED驅(qū)動器和繼電器電路與LED燈具相連。
3 系統(tǒng)軟件設(shè)計
STM32系列芯片軟件開發(fā)采用KeilMDK-ARM,ZigBee節(jié)點軟件開發(fā)采用TI公司的Z-Stack協(xié)議棧,以及IAR EmbeddedWorkbench IDE。該系統(tǒng)軟件設(shè)計分為STM32主控制器、ZigBee協(xié)調(diào)器節(jié)點和ZigBee終端節(jié)點軟件設(shè)計,以及STM32主控制器與ZigBee協(xié)調(diào)器節(jié)點的串口通信和ZigBee協(xié)調(diào)器節(jié)點與ZigBee終端節(jié)點的ZigBee無線協(xié)議通信軟件設(shè)計,設(shè)計方案如圖2所示。
3.1 主控制器軟件設(shè)計
STM32主控制器主要負責(zé)LCD屏菜單顯示、按鍵的響應(yīng)與ZigBee協(xié)調(diào)器節(jié)點的串口通信等。主控制器程序流程如圖3所示。圖中,LED設(shè)備列表菜單用于顯示位于ZigBee網(wǎng)絡(luò)中的所有LED設(shè)備,可進行LED設(shè)備的搜索和選中某個LED設(shè)備;LED設(shè)備控制菜單用于對具體某個LED設(shè)備的控制操作,當(dāng)在上一級的LED設(shè)備列表菜單中選中了某個LED設(shè)備后,便進入此菜單。在此菜單中顯示LED設(shè)備的狀態(tài)信息,如網(wǎng)絡(luò)地址、開關(guān)狀態(tài)和亮度狀態(tài),并且可進行“開/關(guān)…‘增加亮度…降低亮度”控制操作。
3.2 主控制器與ZigBee協(xié)調(diào)器節(jié)點的串口通信
采用STM32主控制器的串口2與ZigBee協(xié)調(diào)器節(jié)點之間進行數(shù)據(jù)傳輸。
3.2.1 主控制器發(fā)送數(shù)據(jù)
設(shè)計結(jié)構(gòu)體Packet來封裝主控制器發(fā)送的數(shù)據(jù),Packet類型的定義如下:
typedef struct Packet{
uint8_t sop;
uint8_t objAddr_L;
uint8_t objAddr_H;
uint8_t objCmd;
uint8_t dataLen;
);
在結(jié)構(gòu)體Packet中,sop是數(shù)據(jù)幀頭,用于接收方識別;objAddr L是ZigBee節(jié)點的16位網(wǎng)絡(luò)地址的低8位;objAddr_H是ZigBee節(jié)點的16位網(wǎng)絡(luò)地址的高8位;objCmd是控制命令碼,有用于控制LED燈的開/關(guān)、增加亮度和降低亮度,以及獲取ZigBee終端節(jié)點的網(wǎng)絡(luò)地址的命令碼等,其命令碼分別用OxOl-Ox06表示,daralen是objAddr_H、objAddr_L和objCmd三者所占的字節(jié)數(shù)。
STM32主控制器以Packet類型數(shù)據(jù)為單位向ZigBee協(xié)調(diào)器節(jié)點發(fā)送數(shù)據(jù),每次發(fā)送一個Packet類型的數(shù)據(jù)包。為了方便數(shù)據(jù)的封裝和發(fā)送,設(shè)計了InPacked和SendPacket函數(shù)來封裝和發(fā)送Packet類型數(shù)據(jù),二者定義如下:
Packet* InPacked(uint16_t *nodeAddr,uint8_t *cmd):
函數(shù)的形參nodeAddr為ZigBee節(jié)點16位網(wǎng)絡(luò)地址變量的內(nèi)存地址,cmd則是命令碼變量的內(nèi)存地址。此函數(shù)可以目標節(jié)點的地址和控制碼封裝在Packet類型的數(shù)據(jù)中,然后返回一個指向這個Packet類型數(shù)據(jù)的指針。
void SendPacket(Packet *packetToSend):
函數(shù)的形參是一個Packet類型的指針,調(diào)用該函數(shù)時只需傳入Packet數(shù)據(jù)包的地址,便可以通過串口發(fā)送給ZigBee協(xié)調(diào)器節(jié)點。
3.2.2 主控制器接收數(shù)據(jù)
STM32主控制器通過串口接收來自ZigBee協(xié)調(diào)器節(jié)點的數(shù)據(jù),二者之間的數(shù)據(jù)收發(fā)遵循一定的格式:數(shù)據(jù)幀頭+數(shù)據(jù)幀長+數(shù)據(jù)+數(shù)據(jù)幀結(jié)束標志。
主控制器接收的數(shù)據(jù)有兩種:一種是接收的數(shù)據(jù)是ZigBee節(jié)點的16位網(wǎng)絡(luò)地址,另一種是包含LED燈的狀態(tài)信息的數(shù)據(jù),兩者定義的數(shù)據(jù)幀頭、數(shù)據(jù)幀長和數(shù)據(jù)幀結(jié)束標志都不同,數(shù)據(jù)幀格式定義見表1。
主控制器使用串口接收中斷的方式接收數(shù)據(jù),串口接收中斷服務(wù)程序流程如圖4所示。串口中斷服務(wù)程序中,根據(jù)不同的狀態(tài)分階段接收若干個數(shù)據(jù)幀,直到完整地接收所有數(shù)據(jù)。當(dāng)串口接收到數(shù)據(jù)時,會根據(jù)當(dāng)前狀態(tài)執(zhí)行不同的操作。從最初的未準備接收數(shù)據(jù)時的空閑狀態(tài)狀態(tài)開始,根據(jù)接收的數(shù)據(jù)幀頭不同,狀態(tài)可能變成接收LED燈狀態(tài)信息數(shù)據(jù)幀長的狀態(tài)或接收ZigBee節(jié)點網(wǎng)絡(luò)地址數(shù)據(jù)幀長的狀態(tài);然后根據(jù)當(dāng)前狀態(tài)接收代表數(shù)據(jù)幀長的字節(jié)數(shù)據(jù),狀態(tài)轉(zhuǎn)變成接收LED燈狀態(tài)信息數(shù)據(jù)的狀態(tài)或接收ZigBee節(jié)點網(wǎng)絡(luò)地址數(shù)據(jù)的狀態(tài)用于接收數(shù)目等于數(shù)據(jù)幀長的若干字節(jié)數(shù)據(jù),直至接收完畢,最后將狀態(tài)轉(zhuǎn)變?yōu)槲礈蕚浣邮諗?shù)據(jù)時的空閑狀態(tài),以便等待下一次的數(shù)據(jù)幀。
3.3 ZigBee節(jié)點的軟件設(shè)計
ZigBee節(jié)點的軟件設(shè)計分為協(xié)調(diào)器節(jié)點軟件設(shè)計和終端節(jié)點軟件設(shè)計。設(shè)計使用了Z-Stack協(xié)議棧,它是通信協(xié)議和用戶之間的一個接口。ZigBee協(xié)議棧將物理層、MAC層、網(wǎng)絡(luò)層、應(yīng)用支持子層和應(yīng)用層的各層協(xié)議封裝在一起,提供API函數(shù)給用戶進行無線數(shù)據(jù)的收發(fā)。Z-Stack協(xié)議棧里運行著一個名為OSAL的小型任務(wù)調(diào)度程序,通過任務(wù)輪詢的方式執(zhí)行各種任務(wù),用戶只需向協(xié)議棧中添加任務(wù)即可。
協(xié)調(diào)器節(jié)點的主要任務(wù)是負責(zé)管理終端節(jié)點的網(wǎng)絡(luò)加入、與STM32串口通信以及向終端節(jié)點發(fā)送數(shù)據(jù),協(xié)調(diào)器節(jié)點程序流程如圖5所示。
終端節(jié)點的作用是接收來自協(xié)調(diào)器節(jié)點的數(shù)據(jù),對數(shù)據(jù)進行分析,執(zhí)行LED控制操作或者發(fā)送LED燈狀態(tài)信息到協(xié)調(diào)器節(jié)點。終端節(jié)點程序流程如圖6所示。
4 結(jié)語
基于STM32F103RCT6微控制器、CC2530F256芯片和ZigBee無線通信技術(shù)設(shè)計了LED智能燈光控制系統(tǒng)。詳細分析了STM32主控制器與ZigBee協(xié)調(diào)器節(jié)點之間串口通信和ZigBee協(xié)調(diào)器節(jié)點與ZigBee終端節(jié)點的ZigBee無線協(xié)議通信及其工作流程,設(shè)計了用于STM32主控制器發(fā)送數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)、封裝和發(fā)送功能函數(shù),以及主控制器接收數(shù)據(jù)的數(shù)據(jù)幀格式。在實際測試中,系統(tǒng)運行良好,很好地實現(xiàn)了室內(nèi)LED燈光的開關(guān)控制和亮度調(diào)節(jié)。
參考文獻
[1]龔兆崗,論LED照明燈具的散熱[J].現(xiàn)代顯示,2012,19 (09):113-116.
[2]申浚,基于ZigBee的室內(nèi)智能照明系統(tǒng)設(shè)計[J].數(shù)字技術(shù)與應(yīng)用,2012, 30 (09):149-150.
[3]吳曼,謝紅福,王曉梅.ZigBee無線通訊技術(shù)在物聯(lián)網(wǎng)系統(tǒng)中的應(yīng)用研究[J].工業(yè)控制計算機,2011,24 (08): 59-60,69.
[4]王旭升.基于ZigBee的智能建筑燈光控制系統(tǒng)設(shè)計[J].機電工程技術(shù),2011,41 (12):22-25,
[5]徐健,楊珊珊.基于CC2530的ZigBee協(xié)調(diào)器節(jié)點設(shè)計[J].物聯(lián)網(wǎng)技術(shù),2012,2 (05):55-57.
[6]黃太波,趙華偉,潘金秋,聶培堯,楊澤軍.ZigBee協(xié)議棧的安全體系綜述[J].山東科學(xué),2012,29 (02): 59-66.