<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Avalon總線SHT11溫濕度傳感器自定義IP核的開發(fā)流程

          基于Avalon總線SHT11溫濕度傳感器自定義IP核的開發(fā)流程

          作者: 時(shí)間:2013-12-31 來源:網(wǎng)絡(luò) 收藏

            2.2 接口模塊的設(shè)計(jì)

            根據(jù)的描述,確定該模塊與Avalon所需要的接口信號。通過使用較少的信號來處理讀寫。系統(tǒng)通過時(shí)鐘線、數(shù)據(jù)線和相連,根據(jù)時(shí)鐘的時(shí)序向數(shù)據(jù)線寫命令,通過數(shù)據(jù)線輸出數(shù)據(jù)。設(shè)計(jì)模塊的輸入信號為:clk,sysclk, n_rest, data_i,data_o,wr,rd, addr。輸出信號為:SCK,DATA(DATA是雙向數(shù)據(jù)線)。端口信號的部分說明如下:

            moduleSHT11(

            clk,//系統(tǒng)時(shí)鐘

            n_rest,//系統(tǒng)復(fù)位

            data_i,//Avalon寫數(shù)據(jù)總線

            data_o,//Avalon讀數(shù)據(jù)總線

            wr,//Avalon寫請求

            rd,//Avalon讀請求

            sysclk,//系統(tǒng)時(shí)鐘

            addr,//Avalon地址總線

            SCK,//時(shí)鐘線輸出

            DATA,//數(shù)據(jù)輸入輸出(雙向)

            );

            2.3 行為模塊的實(shí)現(xiàn)

            行為模塊實(shí)現(xiàn)的是SHT11的功能。該部分是整個(gè)設(shè)計(jì)的核心,實(shí)現(xiàn)對SHT11的控制。設(shè)計(jì)時(shí)必須根據(jù)驅(qū)動(dòng)控制的規(guī)范以及時(shí)序的要求來編寫。設(shè)計(jì)的過程中,信號的控制較為復(fù)雜,但在時(shí)序邏輯中,這又十分重要??梢栽O(shè)定一系列的寄存器,作為訪問硬件的通道[7?8]。

            根據(jù)其驅(qū)動(dòng)規(guī)范,不同的命令實(shí)現(xiàn)相應(yīng)的功能。傳輸開始時(shí),應(yīng)該發(fā)出啟動(dòng)信號。啟動(dòng)信號包括時(shí)鐘線為高,數(shù)據(jù)線由高變低,并在下一個(gè)時(shí)鐘線為高的時(shí)候?qū)?shù)據(jù)線變高。當(dāng)啟動(dòng)信號開始后,輸入相應(yīng)指令(包含3位地址和5位命令),通過數(shù)據(jù)線,確定接收到ACK信號后,表示SHT11已經(jīng)正確接收命令。待一定的時(shí)間后,當(dāng)數(shù)據(jù)線由高拉低后開始信號的傳輸。系統(tǒng)通過確認(rèn)數(shù)據(jù)線上的ACK來確定每個(gè)字節(jié)的傳輸。數(shù)據(jù)傳輸完畢,進(jìn)行CRC校驗(yàn)。校驗(yàn)完畢后,ACK為高,結(jié)束傳輸。

            在進(jìn)行設(shè)計(jì)時(shí),采用嵌套狀態(tài)機(jī)來實(shí)現(xiàn)驅(qū)動(dòng)邏輯。根據(jù)驅(qū)動(dòng)控制器的讀寫命令及讀寫時(shí)序,采取不同狀態(tài)機(jī)來實(shí)現(xiàn),如圖2所示。輸入命令之后,根據(jù)不同的讀寫請求,進(jìn)入不同的狀態(tài)機(jī)。

          圖2 狀態(tài)機(jī)

            圖2 狀態(tài)機(jī)

            通過rd和wr以及地址addr控制數(shù)據(jù)線的讀寫。當(dāng)addr=1wr,則向數(shù)據(jù)線寫數(shù)據(jù)(data_i),data_i的輸入格式是crc(1位)wr_data(16位)command(2位),當(dāng)addr=0wr,進(jìn)入狀態(tài)機(jī);當(dāng)addr=2 amp;rd,從數(shù)據(jù)線讀取數(shù)據(jù)data_o。

            設(shè)內(nèi)部寄存器command,根據(jù)不同的命令,進(jìn)入不同的狀態(tài)機(jī)循環(huán):若command為01,通過數(shù)據(jù)線向寄存器寫數(shù)據(jù);若command為10,通過數(shù)據(jù)線從寄存器讀數(shù)據(jù);若command為其他,則讀取數(shù)據(jù)。當(dāng)傳送8位數(shù)據(jù)后,需判斷雙向數(shù)據(jù)線DATA的ACK信號的高低,當(dāng)接收到ACK信號時(shí),再根據(jù)相應(yīng)的命令,進(jìn)行數(shù)據(jù)的傳輸。當(dāng)數(shù)據(jù)傳輸完畢后,需要經(jīng)行CRC校驗(yàn)。圖3是仿真時(shí)序圖,實(shí)現(xiàn)向寄存器寫數(shù)據(jù)的功能。

            2.4 軟件設(shè)計(jì)

            該部分可以直接在SOPC Builder 中添加設(shè)計(jì)好的和Verilog HDL 語言描述的文件,并根據(jù)Avalon 總線傳輸規(guī)范設(shè)置好相關(guān)的信號線,如圖4所示。這里要注意,使用的是從端口。完成后,將添加至SOPC中,建立內(nèi)嵌系統(tǒng),并編譯下載到FPGA 器件中。

           圖3 時(shí)序仿真圖

            圖3 時(shí)序仿真圖

          圖4 Avalon接口信號

            圖4 Avalon接口信號

            由于在NiosII IDE 環(huán)境下可直接編寫用戶程序,所以可以不用編寫驅(qū)動(dòng)程序。在NiosII IDE 環(huán)境下,可直接調(diào)用函數(shù)IOWR (BASE,OFFSET,DATA) 和IORD(BASE ,OFFSET) 對內(nèi)部寄存器進(jìn)行讀寫。在wr和rd的控制下進(jìn)行讀寫。

            3 測試

            農(nóng)業(yè)智能大棚(該花卉的適宜溫度是18 ℃,適宜濕度是58 RH),也就是棚內(nèi)維持在作物適宜生長的溫度、濕度等。若有變化,其將會(huì)調(diào)節(jié)相應(yīng)的外圍設(shè)備,來保持最佳環(huán)境。在大棚中,在測試節(jié)點(diǎn)上,SHT11監(jiān)測實(shí)時(shí)的溫度和濕度,將數(shù)據(jù)送到nRF24L01,數(shù)據(jù)通過基站最終到達(dá)終端虛擬控制中心。其所獲得的數(shù)據(jù)變化曲線如圖5、圖6所示。

            

          圖5 溫度隨時(shí)間的變化曲線圖圖6 濕度隨時(shí)間的變化曲線圖

            圖5 溫度隨時(shí)間的變化曲線圖  圖6 濕度隨時(shí)間的變化曲線圖

            結(jié)語

            本文介紹了基于SHT11自定義的開發(fā)流程,利用有限狀態(tài)機(jī)設(shè)計(jì)了驅(qū)動(dòng)硬件邏輯,并且基于NiosII嵌入式處理器構(gòu)建了一個(gè)用戶定制的嵌入式系統(tǒng)。在SOPC中,設(shè)計(jì)人員可以靈活添加IP核,減輕設(shè)計(jì)負(fù)擔(dān),避免重復(fù)工作。

          土壤濕度傳感器相關(guān)文章:土壤濕度傳感器原理
          溫濕度控制器相關(guān)文章:溫濕度控制器原理

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();