摘要:基于NXP公司LPC1100系列處理器設計了一種溫度檢測網絡節點。介紹了網絡系統的整個設計方案和溫度檢測網絡節點的硬件設計,并給出功耗管理、溫度傳感器和ZigBee三個軟件模塊的具體軟件設計方法。
關鍵詞:LPC1100;功耗;溫度傳感器;LCD;CC2500;ZigBee
引言
Cortex-MO是32位ARM處理器中一款低功耗、小體積的處理器。它完美地融合了超低功耗、較高效率和低門數等優勢,這些特性決定了它適合作為無線傳感器網絡節點的處理器。本文介紹一種基于LPC1114設計一個溫度檢測網絡節點的方案。
1 溫度檢測系統簡介
一個溫度檢測無線網絡由若干個溫度檢測節點組成,各個溫度檢測節點之間使用無線傳感器通信。所有的溫度檢測節點使用ZigBee技術組成一個無線網絡。各個節點的功能包括采集溫度,并通過ZigBee網絡發送出去。本系統采用TI公司提供的精簡版本的ZigBee協議中的Simp-liciTI協議來組建一個星型網絡。網絡由一個訪問接入節點(AP)和若干個終端節點(ED)組成。其中,AP相當于全功能設備,負責建立整個網絡,并接收ED端采集的溫度信息。所有溫度檢測節點都使用電池設備供電。
2 溫度檢測節點的硬件設計
溫度檢測節點主要由LPC1100系列處理器(這里使用的是LPC1114)、溫度傳感器、ZigBee模塊、LCD顯示屏等組成,如圖1所示。溫度傳感器使用National Semiconductor公司的I2C接口的LM75,ZigBee模塊使用TI公司的SPI接口的CC2500芯片,LCD顯示屏使用LCD1602字符顯示屏幕。整個節點使用電池設備供電,考慮到功耗的因素,LCD屏采用插槽設計,不需要顯示的部分節點可以不連接LCD。除以上各主要部分外,還有一些可選的單元,例如UART串口、通用I/0接口的LED、按鍵、蜂鳴器BEEP等。
3 溫度檢測節點的軟件設計
溫度檢測節點的功能如下:
◆通過設置定時器來定期地檢測溫度,并在LCD上顯示當前的溫度值;
◆將檢測到的溫度值通過ZigBee模塊發送出去;
◆當溫度過高時,蜂鳴器長鳴一定時間報警;
◆溫度檢測和發送之外時間,節點處于睡眠模式;
◆定時器每隔1 s將處理器喚醒一次,進行溫度檢測和傳送。
根據這些功能,將整個溫度節點的軟件劃分為如下幾個模塊:功耗管理模塊、LCD模塊、溫度傳感器模塊、ZigBee模塊。
本節將重點介紹功耗管理模塊、溫度傳感器模塊和ZigBee模塊。
3.1 功耗管理模塊
LPC1100系列芯片的功耗管理有3種模式,即睡眠模式、深度睡眠模式、深度掉電模式。
3.1.1 3種模式的進入和退出
3種模式的進入和退出方式如表1所列。
3.1.2 三種模式的區別
在睡眠模式下,如果軟件中提供外設時鐘,則外設功能在睡眠模式下仍然可以執行,而且可以產生中斷來引起處理器恢復運行。在深度睡眠模式下,用戶可以配置深度睡眠時的掉電模塊以及喚醒后的上電模塊。在這兩種睡眠模式下,處理器狀態、寄存器、外設寄存器、內部SRAM值被保持,引腳的邏輯電平也不變。深度睡眠使用13個喚醒中斷來喚醒,其優勢在于用戶可以關閉時鐘發生模塊,從而比睡眠模式降低更多的動態功耗。
在深度掉電模式下,除了WAKEUP引腳外,整個芯片上的電源和時鐘都關閉,SRAM中的內容也不能保持,但是可以使用4個通用的寄存器保存數據。若想在深度掉電模式下把芯片喚醒,必須通過外部連接部件給WAKEUP引腳接上一個低電平。
3.1.3 選擇睡眠模式
本系統中,溫度檢測節點的主要功能是每間隔一定時間檢測一次溫度,故在采集溫度的間隔期內使芯片進入睡眠模式。當需要采集溫度時,通過一個定時器中斷將其喚醒。例如,每間隔1 s采集一次溫度,采集溫度并發送后設置一個定時器中斷,然后調用WFI指令使芯片處于睡眠模式。為了便于觀察,設置一個LED燈閃爍以指示采集溫度的頻率。同時,如果檢測到溫度過高,則使用蜂鳴器報警。如果連接了液晶屏幕,也可在液晶屏幕上顯示溫度值。
main函數中的主要代碼如下:
調用WFI指令后程序就停止運行,等到定時器中斷發生后就可以將處理器喚醒,程序接著運行WFI指令后的代碼。定時器中斷的代碼如下:
3.2 溫度傳感器模塊
溫度傳感器LM75使用標準的I2C接口。本節點中,LPC1114與LM75的硬件接口如圖2所示。
LM75的地址線A0~A2都接地,0S引腳懸空,故本節點僅僅使用其基本的溫度測量功能。LM75內部有5個寄存器:指針寄存器、配置寄存器、溫度寄存器、溫度設定寄存器和溫度滯后寄存器。通過指針寄存器來選擇其余4個寄存器進行操作。本節點主要是讀取溫度寄存器中的溫度值,溫度寄存器中高9位值為有效的溫度值。該寄存器讀出的值是以二進制補碼的格式給出的,其LSB(最低有效位)每一個單位表示0.5℃,例如+0.5℃對應001H。其可表示的范圍為-55~+125℃。
在使用該溫度傳感器時,需要調用以下兩個API函數:
3.3 ZigBee模塊
本節點的ZigBee模塊使用T1公司的CC2500芯片,使用SimpliciTI協議來組建網絡。其硬件連接如圖3所示。
在使用CC2500時,首先需要配置LPC1114的SPI各個引腳。另外,還需要將引腳GD00與GDO1配置為MCU中斷,用來控制收發網絡數據包。再按照CC2500的初始化時序來初始化CC2500芯片,然后交給上層的組網函數去調用。CC2500的初始化步驟如下:
①與MCU相連的SPI接口初始化;
②SCLK=1,SI=O;
③CSn=0;
④CSn-1,延時40μs;
⑤CSn=0;
⑥等待S0引腳變低;
⑦在SI引腳上發命令SRES;
⑧等待SO引腳再次變低。
此時如果能正常地讀寫相應寄存器,則表示CC2500初始化成功。
CC2500初始化成功后,需要配置CC2500的寄存器,以及設置數據包的收發中斷。由于CC2500寄存器較多,請參考CC2500官方網站的參考代碼。數據包的收發中斷是根據配置寄存器的值來控制的。通過設置這些寄存器的值,可將GDO0、GDO1配置為收發數據。這里,配置IOCFG0寄存器的值為0x6,即在開始接收或者發送一個數據包時,在GDO0引腳產生一個高電平跳變;接收或者發送完后,再變回低電平。因此,將GDO0引腳即PIO2_5配置為輸入引腳,上升沿中斷。代碼如下所示:
此時,如果發送或者接收到數據,就可以產生中斷。如果是接收數據,則在中斷處理函數PIOINT2-IRQHan-dler中就必須調用一個接收函數。
還有一些涉及到底層通信的地方需要修改,例如:
將底層與硬件相關的函數都修改好后,就可以使用上層的組網函數了。CC2500組網API函數主要包括如下幾個函數:
進行組網時需要先調用SMPL_Init進行初始化,然后根據節點的功能來調用SMPL_Link或者SMPL_LinkListen函數組成一個無線網絡。最后調用SMPL_Receive以及SMPL_Send函數就可以收發數據了。
結語
本文介紹了一種基于LPC1114的溫度檢測網絡節點設計方法。LPC1114芯片具有低功耗和高性能的特色,加上標準的I2C、SSP等接口,為很多標準接口部件的移植提供了方便。I2C接口的溫度傳感器,也可以替換成I2C接口的濕度傳感器、氣敏傳感器等,以建立一個基于ZigBee的無線傳感器網絡。該設計方案對無線環境監控網絡、無線抄表網絡等無線傳感器網絡中的節點設計具有一定參考價值。