LPC1766與Si4432的無線數(shù)據(jù)傳輸系統(tǒng)設計
掃描二維碼
隨時隨地手機看文章
摘要:本文設計了一種基于微功率無線收發(fā)芯片Si4432的遠程數(shù)據(jù)傳輸系統(tǒng)。該系統(tǒng)采用ARM Cortex—M3核芯片LPC1766,通過SSP控制器操作射頻收發(fā)芯片,詳細論述了芯片基于時序的編程方法。該方案的運用可以實現(xiàn)無線數(shù)據(jù)的可靠收發(fā),具有良好通信效果。
關(guān)鍵詞:微功率;無線數(shù)據(jù)傳輸;遠程控制
引言
隨著社會的發(fā)展,空調(diào)系統(tǒng)廣泛應用于現(xiàn)代辦公大樓及高層建筑中,空調(diào)在改善和提高建筑物內(nèi)部環(huán)境質(zhì)量的同時,也帶來了巨大的能源消耗。在現(xiàn)代樓宇建筑中,每年的夏冬兩季建筑物的大部分能耗被空調(diào)所占據(jù),因此如何通過科學的方法降低空調(diào)能耗,是一個亟待解決的問題。
積極地開發(fā)與合理地運用節(jié)能控制技術(shù),將分散的空調(diào)進行集中統(tǒng)一的管理是降低空調(diào)能耗的有效途徑。隨著傳感器技術(shù)、網(wǎng)絡技術(shù)、計算機技術(shù)的發(fā)展,各種信息數(shù)據(jù)的檢測、傳送、分析處理都具備了實現(xiàn)的條件和手段,促進了物聯(lián)網(wǎng)核心技術(shù)的迅猛發(fā)展,使分體空調(diào)控制的集中化、網(wǎng)絡化成為可能。
通過研究物聯(lián)網(wǎng)的構(gòu)成及實際應用模式,探索將其引入到分體空調(diào)集中控制系統(tǒng)中來,構(gòu)建一套基于物聯(lián)網(wǎng)的分體空調(diào)節(jié)能控制系統(tǒng)。由于各個感知節(jié)點分布較廣,傳統(tǒng)單一的有線傳輸方式在某些應用中存在傳輸不穩(wěn)定、人機交互性不夠好、控制實時性不強、網(wǎng)絡不夠融合、布線不方便等缺點。因此,信息傳輸網(wǎng)絡應建成基于物聯(lián)網(wǎng)技術(shù)的有線和無線相結(jié)合的混雜網(wǎng)絡架構(gòu),將數(shù)據(jù)匯聚至集中器統(tǒng)一管理,實現(xiàn)分體空調(diào)系統(tǒng)運行狀態(tài)、能耗以及環(huán)境狀況等數(shù)據(jù)準確、穩(wěn)定的傳輸。其系統(tǒng)結(jié)構(gòu)如圖1所示。
1 LPC1766和Si4432芯片簡介
LPC1766是NXP公司推出的基于Cortex—M3內(nèi)核的LPC1700系列微控制器,集成10/100M Ethemet MAC、CAN總線通道、SPI接口、I2C總線接口、ADC模塊等,其擁有豐富的外圍接口,適用于要求高度集成和低功耗的嵌入式場合。硬件組成主要包括以太網(wǎng)模塊、RS485模塊、傳感器模塊、繼電器模塊等。
射頻收發(fā)采用的是Silicon Labs公司的Si4432芯片,該芯片集成度高、體積小、功耗低,具有-118 dBm的超高靈敏度,可提供極佳的鏈路質(zhì)量,在擴大傳輸范圍的同時將功耗降至最低。其工作頻段范圍為240~930 MHz,最高輸出功率可達+20 dBm,傳輸距離遠。Si4432內(nèi)部集成了天線分集、休眠喚醒定時器、64字節(jié)收發(fā)FIFO等功能。同時,Si4432芯片還具有跳頻和信道信號強度評估等功能。其外圍電路僅需要一個30 MHz晶振及若干個電阻、電容、電感等,電路設計簡單、成本低廉。因此非常適用于對尺寸和成本敏感的大批量生產(chǎn)中的應用。
2 硬件設計
LPC1700系列具有兩個可以兼容SPI、SSI和Microwire總線的SSP接口,可以根據(jù)應用靈活進行配置。本套系統(tǒng)中LPC1766與Si4432芯片通過SSP1相連,LPC1766通過SSP接口配置Si4432內(nèi)部寄存器,并實現(xiàn)數(shù)據(jù)的讀寫。芯片的PORT0和PORT3口具有中斷功能,當引腳電平符合設置值時,就會觸發(fā)中斷,在此,將P0.5引腳連接到SDN,用來控制Si4432進入非關(guān)斷(SHUTDOWN)狀態(tài)。
而P0.4引腳連接nIRQ,Si4432即可通過這個引腳通知LPC1766進行中斷處理。Si4432的TX引腳為射頻信號發(fā)送端,RXp引腳為差分信號接收端,因為采用單天線進行數(shù)據(jù)的破收,所以射頻信號的發(fā)射和接收端必須要通過RF開關(guān)芯片UPG2164與天線相連,對發(fā)射和接收狀態(tài)進行切換。GPIO0高電平而GPI01為低電平時為發(fā)送狀態(tài);GPIO0低電平而GPIO1為高電平時為接收狀態(tài)。其電路如圖2所示。
3 軟件設計
3.1 無線的基本原理
Si4432芯片狀態(tài)轉(zhuǎn)換圖如圖3所示。芯片有關(guān)斷、掛起、發(fā)射和接收4種狀態(tài)。芯片在收/發(fā)狀態(tài)間轉(zhuǎn)換時,一般先經(jīng)過掛起狀態(tài),這里所指的掛起狀態(tài)一般是指預備模式和調(diào)諧模式。在預備模式,晶振保持啟動狀態(tài),這樣芯片在掛起狀態(tài)切換到收/發(fā)模式時可以消除晶振的啟動時間。在調(diào)諧模式下,PLL保持使能,這種模式下芯片收/發(fā)轉(zhuǎn)換時間響應最快,但是電流消耗很高。
3.2 SSP接口編程時序
在將Si4432的驅(qū)動程序移植到不同的MCU平臺上時,最為關(guān)鍵的就是要保證MCU可以讀寫Si4432內(nèi)部寄存器的值。Si4432和MCU之間可以通過標準的3線SPI接口通信:SCLK、SDI和nSEL。而主機MCU則通過Si4432的SDO輸出引腳獲取數(shù)據(jù)。LPC1766具有2個可以兼容SPI總線的SSP總線接口。但是,SSP與SPI接口在硬件原理上是存在差異性的。SSP帶有硬件FIFO,而SPI不具備。以下著重介紹應用LPC1766的SSP1接口和Si44 32進行交互的方法。
3.2.1 引腳初始化配置
為了方便P0.6引腳對Si4432進行片選操作,通過宏定義的方式,指定名字記號LVL_H和LVL_L的替換文本內(nèi)容,分別為控制引腳的高低電平變換:
#define LVL_H(GPIO0->FIOSET|=(0x01<<6))
//將P0.6電平拉高
#define LVL_L(GPIO0->FIOCLR|=(0x01<<6))
//將P0.6電平拉低
配置引腳功能選擇寄存器,將P0.5引腳指定為GPIO默認的輸出低電平,將其連接到Si4432的SDN引腳,用來控制Si4432進入非關(guān)斷(SHUTDOWN)狀態(tài)。初始化P0.7、P0.8、P0.9為SSP1接口引腳:
指定P0.4引腳為GPIO中斷,連接Si4432的nIRQ引腳,當Si4432有相應的中斷條件出現(xiàn)時,可通知LPC1766執(zhí)行中斷處理程序:
3.2.2 寫模式
函數(shù)vSpiWriteRegister的功能是向Si4432內(nèi)部寄存器reg寫入值value。片選之后,首先讀取SSP1的狀態(tài)寄存器,確認發(fā)送FIFO未滿。在發(fā)送寄存器地址之前,需要將reg的最高位置1,此后檢測SSP1控制器是否空閑。發(fā)送value值的過程相似,其程序代碼如下:
3.2.3 讀模式
函數(shù)bSpiReadRegister的功能是讀取Si4432內(nèi)部寄存器reg的值。
這里需要注意的是,因為SSP控制器具有收/發(fā)FIFO,在進行正常的讀模式通信之前,需要先將接收FIFO中的“垃圾”數(shù)據(jù)讀出丟棄。同理,參照圖4所示的讀模式時序圖可知,因為SSP是全雙工的,在SDI引腳發(fā)送寄存器地址的時候,SDO引腳處于低電平狀態(tài),那么接收FIFO中將首先保存0x00,此后接收的第2個字節(jié)才是Si4432指定寄存器的值。其程序代碼如下:
3.3 無線數(shù)據(jù)發(fā)送和接收
3.3.1 射頻芯片初始化及參數(shù)設置
Si4432有兩個只讀類型的寄存器:Reg00(內(nèi)部地址為00h的寄存器)表示設備類型碼,Reg01表示版本代碼,其值在芯片出廠時已固定,后期不可更改。在此,可以在初始化時通過讀取Reg00和Reg01的值,來判斷Si4432是否已正常啟動。
首先初始化LPC1766,啟動SSP1控制器。讀取Si4432的Reg03和Reg04,將自動清除中斷標志,并釋放nIRQ引腳。向Reg07寫入0x80,即最高位置1,將復位所有的內(nèi)部寄存器為默認狀態(tài),延時10 ms等待Si4432正常工作后,統(tǒng)計啟動次數(shù)。在Reg00和Reg01的值均滿足條件之后,再往相應的寄存器中填入通信參數(shù),隨后立即進入接收狀態(tài)。其流程如圖5所示。
3.3.2 無線發(fā)送程序
在發(fā)送數(shù)據(jù)之前,先將芯片設置為掛起(IDLE)狀態(tài)。指定待發(fā)送數(shù)據(jù)包的長度,再向發(fā)送FIFO中填入相應字節(jié)數(shù)的數(shù)據(jù)。配置中斷返回類型為“數(shù)據(jù)包發(fā)送完畢中斷”,即在Si4432將數(shù)據(jù)成功發(fā)送出去之后,通過中斷通知LPC1766。隨后使能發(fā)送,Si4432將自動在數(shù)據(jù)幀中添加同步字等參數(shù)。其流程如圖6所示。
3.3.3 無線接收程序
當Si4432接收到數(shù)據(jù)時,將通過中斷觸發(fā)的方式,通知LPC1766來處理。首先獲取中斷狀態(tài),判斷中斷的類型。如果是“數(shù)據(jù)包發(fā)送完畢中斷”,則將射頻切換到接收狀態(tài);如果是“有效數(shù)據(jù)包接收中斷”,則讀取數(shù)據(jù)包的長度值,然后在FIFO中取出指定長度值的數(shù)據(jù)。重新配置“有效數(shù)據(jù)包接收中斷”,復位接收FIFO,設置模塊處于接收狀態(tài)。當中斷處理函數(shù)結(jié)束之后,重新返回到中斷前處理的程序。其流程如圖7所示。
結(jié)語
本文介紹了一種基于LPC1766和Si4432的無線通信系統(tǒng)。對具體的硬件電路連接和軟件系統(tǒng)的設計進行了詳細的介紹,著重論述了通過SSP控制器與Si4432交互的時序編程方法。經(jīng)過大量的實驗證明,該系統(tǒng)通信可靠、穩(wěn)定性強,具有良好的工程應用效果。