基于ZigBee的無線數(shù)據(jù)采集系統(tǒng)_第1頁
基于ZigBee的無線數(shù)據(jù)采集系統(tǒng)_第2頁
基于ZigBee的無線數(shù)據(jù)采集系統(tǒng)_第3頁
基于ZigBee的無線數(shù)據(jù)采集系統(tǒng)_第4頁
基于ZigBee的無線數(shù)據(jù)采集系統(tǒng)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——基于ZigBee的無線數(shù)據(jù)采集系統(tǒng)

無線數(shù)據(jù)采集控制系統(tǒng)的設(shè)計

課程名稱專業(yè)綜合課程設(shè)計課程設(shè)計總評成績學(xué)生姓名、學(xué)號學(xué)生專業(yè)班級指導(dǎo)教師姓名課程設(shè)計起止日期2023.11.7-2023.12.1

無線數(shù)據(jù)采集控制系統(tǒng)的設(shè)計

第1章需求分析

1.1課程設(shè)計題目

無線電子開關(guān)

1.2課程設(shè)計任務(wù)及要求無線電子開關(guān)的設(shè)計

PC端用java編寫程序通過串口給CC2530模塊A發(fā)送開關(guān)等指令,CC2530模塊A通過射頻模塊將指令以無線方式發(fā)送給CC2530模塊B,CC2530模塊B根據(jù)指令開燈或關(guān)燈。

針對給定的任務(wù),結(jié)合專業(yè)課程和專業(yè)知識完成系統(tǒng)的硬件或軟件設(shè)計,對硬件設(shè)計:要求完成系統(tǒng)和接口設(shè)計,并能動手制作和調(diào)試,對測量結(jié)果進行分析處理。設(shè)計須提供實物成果。對軟件設(shè)計:要求能夠熟悉軟件工具,設(shè)計其算法或者是系統(tǒng)結(jié)構(gòu),實現(xiàn)該算法和軟件,能夠?qū)ζ溆嬎氵^程進行推導(dǎo)或者是說明軟件系統(tǒng)結(jié)構(gòu),并能調(diào)試成功,對試驗結(jié)果進行分析處理。

通過專業(yè)綜合的課程設(shè)計,使學(xué)生能夠綜合把握無線傳感網(wǎng)技術(shù)、java語言程序設(shè)計、數(shù)據(jù)庫等課程的專業(yè)知識,要求學(xué)生經(jīng)過課程設(shè)計的教學(xué)環(huán)節(jié)進一步理解無線傳感器網(wǎng)絡(luò)的結(jié)構(gòu)和組成原理,把握數(shù)據(jù)采集節(jié)點,無線傳輸,串口通信等模塊的基本設(shè)計方法,完成系統(tǒng)應(yīng)用程序的設(shè)計。

通過專業(yè)綜合課程設(shè)計,提高學(xué)生電子信息系統(tǒng)綜合設(shè)計能力。把握電子信息系統(tǒng)的基本開發(fā)過程及應(yīng)用方法。要求學(xué)生經(jīng)過課程設(shè)計的教學(xué)環(huán)節(jié)進一步理解電子信息系統(tǒng)的設(shè)計方法,根據(jù)所選擇的對象進行應(yīng)用系統(tǒng)的硬件和軟件設(shè)計,提高學(xué)生專業(yè)的綜合素質(zhì)及專業(yè)能力。

1.3軟硬件運行環(huán)境及開發(fā)工具

軟件開發(fā)環(huán)境為eclipse+IAREmbeddedWorkbench硬件開發(fā)環(huán)境為CC25301.4主要芯片說明

CC2530是ZigBee無線數(shù)據(jù)傳輸其中的一個核心芯片,它能夠以十分低的總材料成本建立強的網(wǎng)絡(luò)節(jié)點。CC2530芯片有四種不同的閃存版本:分別具32/64/128/256KB的閃存。CC2530芯片工作實具有不同的運行模式,使得它特別適應(yīng)超低功耗要求的系統(tǒng)。運行模式之間的轉(zhuǎn)換時間短進一步確保了低能源消耗。在業(yè)界內(nèi),CC2530結(jié)合了德州儀器的業(yè)界領(lǐng)先的黃金單元ZigBee協(xié)議棧,提供了一個強大和完整的ZigBee解決方案。

CC2530芯片共包含了40個引腳,引腳的排布如圖1所示:圖1:cc2530引腳圖

1

CC2530芯片模塊大致可以分為三類:CPU和內(nèi)存相關(guān)的模塊;外設(shè)、時鐘和電源管理相關(guān)的模塊以及無線電相關(guān)的模塊。

(1)CPU和內(nèi)存:CC253x芯片系列中使用的8051CPU內(nèi)核是一個單周期的8051兼容內(nèi)核。

(2)調(diào)試接口:執(zhí)行一個專有的兩線串行接口,用于內(nèi)電路調(diào)試。(3)I/O控制器:負責(zé)所有通用I/O引腳。

(4)五通道DMA控制器:系統(tǒng)可以使用一個多功能的五通道DMA控制器,使用XDATA存儲空間訪問存儲器,因此能夠訪問所有物理存儲器。

(5)定時器1:是一個16位定時器,具有定時器PWM功能。。(6)內(nèi)置MAC定時器:是專門為支持IEEE802.15.4,MAC或軟件中其他時槽的協(xié)議設(shè)計。(7)定時器3和定時器4:是8位定時器,具有定時器/計數(shù)器/PWM功能。

(8)睡眠定時器:是一個超低功耗的定時器,計算32kHz晶振或32kHzRC振蕩器的周期。

(9)看門狗:一個內(nèi)置的看門狗,允許CC2530在固件掛起的狀況下復(fù)位自身。

第2章系統(tǒng)總體設(shè)計

2.1系統(tǒng)組成方案

由eclipse編寫上位機程序,TAR編寫下位機程序,通過無線方式發(fā)送命令。如圖2

light1:1101Blight2:1011串口AC圖2:設(shè)計方案2.2系統(tǒng)工作原理

上位機程序以輪詢方式通過PC串口向ZigBee節(jié)點A發(fā)送命令light:1011,節(jié)點A通過無線方式向節(jié)點B轉(zhuǎn)發(fā)命令light:1011,節(jié)點B接收到命令后點亮藍燈,黃燈和綠燈(1點亮,0熄滅)。

上位機程序以輪詢方式通過PC串口向ZigBee節(jié)點A發(fā)送命令light:1011,節(jié)點A通過無線方式向節(jié)點C轉(zhuǎn)發(fā)命令light:1011,節(jié)點C接收到命令后點亮藍燈,紅燈和綠燈(1點亮,0熄滅)。

2.3系統(tǒng)構(gòu)建

PC端用java編寫程序通過串口給CC2530模塊A發(fā)送開關(guān)等指令,CC2530模塊A通過射頻模塊將指令以無線方式發(fā)送給CC2530模塊B和模塊C,CC2530模塊B和模塊C根據(jù)指令開燈或關(guān)燈。

2

根據(jù)指令(light1或light2)第5位判斷后綴為1或者為2,節(jié)點B和節(jié)點C分別依據(jù)指令開燈或者關(guān)燈

第3章系統(tǒng)硬件設(shè)計

3.1主模塊電路設(shè)計

本系統(tǒng)采用TI公司生產(chǎn)的CC2530為核心器件。CC2530是一個真正的片上系統(tǒng)(SoC)解決方案,它能夠以十分低的材料成本建立強大的網(wǎng)絡(luò)節(jié)點,它結(jié)合了領(lǐng)先的RF收發(fā)器的優(yōu)良性能、業(yè)界標(biāo)準(zhǔn)的加強型8051CPU、系統(tǒng)內(nèi)可編程閃存、8KBRAM、A/D轉(zhuǎn)換器以及大量其他強大的功能,并且其具有不同的運行模式,使得它特別適應(yīng)超低功耗要求的系統(tǒng)。圍圍著CC2530芯片,系統(tǒng)大致可分為三大模塊:CPU和內(nèi)存相關(guān)的模塊,外設(shè)、時鐘和電源管理相關(guān)的模塊以及無線電相關(guān)的模塊。3.2顯示模塊電路設(shè)計

設(shè)計通過A發(fā)送的指令來控制4個LED燈的亮滅,LED模塊電路及燈的引腳圖,如圖3、圖4所示。

圖3:LED模塊電路

圖4:LED燈對應(yīng)引腳

若要點亮LED燈,CC2530的通用IO口需要配置三個寄放器:P1SEL,P1DIR,P1INP,P2INP功能選擇寄放器PxSEL,其中x為端口標(biāo)號0~2,用來設(shè)置端口的每個引腳為通用I/O或外部設(shè)備I/O。默認(rèn)為通用I/O。

方向寄放器PxDIR,其中x為端口標(biāo)號0~2,用來設(shè)置端口的每個引腳為輸入或輸出。默認(rèn)為輸入。

輸入模式寄放器P1INP,用來設(shè)置P1端口用作輸入時為上拉、下拉模式或三態(tài)模式。默認(rèn)為上、下拉模式。具體是上拉還是下拉,由P2INP來設(shè)置。

3

輸入模式寄放器P2INP,用來設(shè)置P0、P1、P2端口用作輸入時為上拉、下拉模式。默認(rèn)為上拉模式。完整配置:

?P1SEL//P1_0、P1_1通用IO?P1DIR|=0x03;//P1_0、P1_1輸出?P1INP//P1_0、P1_1上下拉?P2INP//P1上拉簡化配置:

?P1DIR|=0x03;//P1_0、P1_1輸出3.3通信模塊電路設(shè)計

CC2530是符合802.15.4標(biāo)準(zhǔn)的無線收發(fā)芯片,但是本設(shè)計并沒有遵守802.15.4協(xié)議規(guī)則,在發(fā)送過程中忽略了網(wǎng)絡(luò)ID、源地址和目標(biāo)地址等參數(shù),在接收的過程中阻止了幀過濾。通過發(fā)送和接收過程的處理使得CC2530無線部分的使用完可能的簡單明了,通過最少的代碼說明問題。無線芯片的調(diào)試具有一定的難度,一般存在發(fā)送設(shè)備和接收設(shè)備。為了通過最簡單的代碼說明無線芯片的使用,只編寫一個設(shè)備的代碼同時實現(xiàn)發(fā)送和接收功能。設(shè)備代碼的功能也相對簡單,CC2530從串口接收數(shù)據(jù)并把數(shù)據(jù)通過RF部分原分不動地發(fā)送出去,于此同時CC2530把從RF部分接收的數(shù)據(jù)原分不動的通過串口發(fā)送出去,通過這樣的方式實現(xiàn)無線串口。發(fā)送的數(shù)據(jù)編號以及控制指令,來控制燈的亮度和開關(guān)。

串口數(shù)據(jù)屬于“流〞型數(shù)據(jù)包,RF部分屬于“幀〞型數(shù)據(jù)包。在串口數(shù)據(jù)處理與分析中,一般采用特定的串口頭和長度的方式解析數(shù)據(jù),但是本文采用通過串口時間間隔的方式解析數(shù)據(jù),這種方法等同于modbus-RTU串口數(shù)據(jù)處理的方法。通過這種檢測字節(jié)數(shù)據(jù)時間間隔的方法使得CC2530的串口部分可以接收無特別格式要求的數(shù)據(jù),真正實現(xiàn)無線串口功能。

第4章系統(tǒng)軟件設(shè)計

4.1上位機程序設(shè)計

上位機程序通過兩個類來實現(xiàn),第一個SerialPort類用來實現(xiàn)控制程序面板,其次個DSerialPort類來實現(xiàn)串口通信。圖5所示為Java的兩個類:

圖5:Java的兩個類

SerialPort類中,通過網(wǎng)格布局管理器來實現(xiàn)面板的布局,設(shè)置各個標(biāo)簽以及文本框,復(fù)選框,組合框,窗口的大小位置以及標(biāo)題等。

4個燈的設(shè)置大致一致,通過jcheckbox來表示燈選中以及未選中時的設(shè)置。

jlabel1=newJLabel(\全關(guān)1:\jcheckbox1=newJCheckBox(\綠\jcheckbox2=newJCheckBox(\紅\jcheckbox3=newJCheckBox(\黃\jcheckbox4=newJCheckBox(\藍\jlabel2=newJLabel(\全關(guān)2:\jcheckbox5=newJCheckBox(\綠\jcheckbox6=newJCheckBox(\紅\jcheckbox7=newJCheckBox(\黃\jcheckbox8=newJCheckBox(\藍\

4

//燈一的設(shè)置

jcheckpanel1=newJPanel();

gridbagconstraints.anchor=GridBagConstraints.EAST;gridbagconstraints.gridwidth=1;

gridbaglayout.setConstraints(jlabel1,gridbagconstraints);add(jlabel1);

gridbagconstraints.anchor=GridBagConstraints.WEST;

gridbagconstraints.gridwidth=GridBagConstraints.REMAINDER;

gridbaglayout.setConstraints(jcheckpanel1,gridbagconstraints);add(jcheckpanel1);

jcheckpanel1.add(jcheckbox4);jcheckpanel1.add(jcheckbox3);jcheckpanel1.add(jcheckbox2);jcheckpanel1.add(jcheckbox1);

//燈一開關(guān)的設(shè)置

jcheckbox1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){if(getLightState1().equals(\jlabel1.setText(\全關(guān)1:\elseif(getLightState1().equals(\jlabel1.setText(\全開1:\elsejlabel1.setText(\開燈1:\}});

通過switch語句,串口開啟后輪番發(fā)送Data的參數(shù)以及設(shè)置參數(shù)異常時的命令:

voidstartRun(){Timertimer=newTimer();TimerTasktask=newTimerTask(){inti=0;

publicvoidrun(){if(com_open){//串口開啟則發(fā)送try{switch(i){case0:{sp.write(lightcommand1+getLightState1());break;}case1:{sp.write(lightcommand2+getLightState2());break;}}if(i==2){i=0;}elsei++;}catch(Exceptione){System.out.println(\發(fā)送異常\}}}};timer.schedule(task,1000,200);//在200毫秒后執(zhí)行此任務(wù),每次間隔2秒執(zhí)行一次,假使傳遞一個Data參數(shù),就可以在某個固定的時間執(zhí)行這個任務(wù).}

串口通信DSerialport類中,通過listport方法,列出了所有可用的串口,并設(shè)置返回值類型為void:

5

publicvoidlistPort(JComboBoxjcombox1){CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();System.out.println(\:\while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL){jcombox1.addItem(cpid.getName());System.out.println(cpid.getName()+\cpid.getCurrentOwner());}}}

通過selectport方法,選擇一個端口,設(shè)置返回值類型void:

publicvoidselectPort(StringportName,intrate){mPort=null;CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIALbreak;}}openPort(rate);}

通過openPort方法,開啟SerialPort,設(shè)置返回值類型void:

privatevoidopenPort(intrate){if(commPort==null)System.out.println(String.format(\無法找到名字為'%1$s'的串口!\commPort.getName()));else{System.out.println(\端口選擇成功,當(dāng)前端口:\現(xiàn)在實例化SerialPort:\try{serialPort=(SerialPort)commPort.open(appName,timeout);System.out.println(\實例SerialPort成功!\}catch(PortInUseExceptione){thrownewRuntimeException(String.format(\端口'%1$s'正在使用中!\commPort.getName()));}try{serialPort.setSerialPortParams(rate,8,1,0);//設(shè)置波特率等參數(shù)}catch(UnsupportedCommOperationExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();

6

}

}}

通過checkport方法檢查端口是否正確連接:

privatevoidcheckPort(){if(commPort==null)thrownewRuntimeException(\沒有選擇端口,請使用\\方法選擇端口\if(serialPort==null){thrownewRuntimeException(\對象無效!\}}

通過write方法向端口發(fā)送數(shù)據(jù),在調(diào)用此方法前需要先選擇端口并確定serialport正常開啟。

publicvoidwrite(Stringmessage){checkPort();try{outputStream=serialPort.getOutputStream();}catch(IOExceptione){thrownewRuntimeException(\獲取端口的OutputStream出錯:\}try{outputStream.write(message.getBytes());System.out.println(\信息發(fā)送成功!\}catch(IOExceptione){thrownewRuntimeException(\向端口發(fā)送信息時出錯:\}finally{try{outputStream.close();}catch(Exceptione){}}}

通過startread開始監(jiān)聽從端口中接受的數(shù)據(jù):

publicvoidstartRead(inttime){checkPort();try{inputStream=serialPort.getInputStream();}catch(IOExceptione){thrownewRuntimeException(\獲取端口的InputStream出錯:\}try{serialPort.addEventList

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論