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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 如何設計基于ARM的智能測溫系統(tǒng)?

          如何設計基于ARM的智能測溫系統(tǒng)?

          作者: 時間:2018-08-01 來源:網(wǎng)絡 收藏

          本文引用地址:http://www.ex-cimer.com/article/201808/384918.htm

          在簡單中 , 一般采用前 、 后臺編程方式設計軟件,但在復雜的中,前后臺方式的軟件設計方法無法滿 足的要求,需要網(wǎng)絡協(xié)議棧支持、文件系統(tǒng)支持、多進 程支持后,前、后臺軟件由于其超循環(huán)編程方法的限制很 難實現(xiàn)系統(tǒng)的功能要求,因此復雜的嵌入式系統(tǒng)往往加入 了嵌入式操作系統(tǒng)的支持。 目前,常用嵌入式操作系統(tǒng)有 VxWorks、WinCE、Linux等。這里我選用的是Linux,它是開 放源代碼的類UNIX操作系統(tǒng)。目前經(jīng)過長期的發(fā)展Linux已 成為世界領先的操作系統(tǒng),可以運行在服務器、大型機和超 級計算機, 由于Linux的可剪裁性和可移植性,目前也廣泛 應用在嵌入式設備上,如消費電子產(chǎn)品、交換設備、工業(yè)控 制等。

          Linux具備良好的多進程與多線程支持,并且支持多種 網(wǎng)絡協(xié)議、具備豐富的文件系統(tǒng),并且其開源代碼的特性受 到廣大的開發(fā)者支持。

          在本系統(tǒng)中采用L inu x操作系統(tǒng)能夠充分利用嵌入式 Linux中成熟的網(wǎng)絡協(xié)議簇以及模塊化的剪裁方法,降低系 統(tǒng)軟件的開發(fā)難度,提高了系統(tǒng)設計的靈活性。

          1.5 系統(tǒng)軟件架構

          平臺設計的軟件采用分層以及模塊化的方式進行設計。由于采用嵌入式Linux操作系統(tǒng)作為解決方案。因此, 將軟件劃分為應用層、系統(tǒng)層、驅動層;系統(tǒng)層軟件需要完 成Linux在操作系統(tǒng)上的移植和各個模塊的驅動;應用層軟 件需要完成溫度采集模塊、顯示模塊以及網(wǎng)絡通信模塊的軟 件設計。軟件層次示意圖如圖2所示。

          2 系統(tǒng)各主要接口硬件電路設計


          圖7 PWM接口蜂鳴器電路連接圖

          2.1 S5PC100存儲系統(tǒng)設計

          設計的目標平臺中需要擴展三種類型的存儲介質(zhì),分 別為DDR2 SDRAM、NAND FLASH以及SD卡電路。下面按 照三種存儲介質(zhì)在系統(tǒng)中的功能分別進行闡述。

          (1)DDR2 SDRAM電路

          S5PC100 SDRAM控制器通過向外部16位或32位SDRAM

          提供接口來擴展芯片存儲能力。本平臺采用2片K4T1G164

          16位寬度DD2 SDRAM組成32位內(nèi)存,容量256MB,如圖3。

          (2)NANDFLASH電路與SD卡存儲電路 由于系統(tǒng)需要運行Linux系統(tǒng),系統(tǒng)代碼較為復雜,需

          要一定容量的存儲器存放Linux操作系統(tǒng)源代碼以及應用程 序,由于S5PC100內(nèi)置了NAND FL ASH控制器,因此平臺 采用K9F2G08 256MB NAND FLASH直接與S5PC100 NAND FLASH控制器接口連接。SD卡可通過S5PC100內(nèi)置SDIO1總 線直接連接。其NAND FLASH電路原理圖如圖4所示、SD卡 的原理圖如圖5所示。

          2.2 溫度傳感器接口

          平臺設計了采用DS18B20一線制溫度傳感器接口。采用 S5PC100處理器GPIO引腳接口控制溫度傳感器DS18B20的溫 度測量,LCD屏輸出測量溫度,原理圖如圖6所示。

          2.3 溫度報警電路

          本 設 計 采 用 軟 件 處 理 報 警 , 利 用 無 源 蜂 鳴 器 進 行 報 警,當所測溫度超限后輸出PWM信號,驅動蜂鳴器報警, 其電路原理圖如圖7所示。

          3 系統(tǒng)軟件設計


          3.1 Linux操作系統(tǒng)移植

          完整的嵌入式linux系統(tǒng)由bootloader、kernel、rootfs等

          3個基本部分組成。其中bootloader用于引導和裝載操作系統(tǒng)、kernel為linux內(nèi)核程序、rootfs為文件系統(tǒng),如圖8。

          3.1.1 交叉編譯環(huán)境

          嵌入式開發(fā)系統(tǒng)受到自身硬件以及軟件資源的限制, 無法完成代碼的本地編譯,其開發(fā)需要在宿主機上建立交叉 開發(fā)環(huán)境。

          交叉開發(fā)環(huán)境是包含了編輯器、編譯器、連接器、調(diào) 試器和libc庫等的程序環(huán)境。在開發(fā)嵌入式Linux相關軟件 時,常用的交叉開發(fā)工具是GNU工具鏈。系統(tǒng)中宿主機使 用的開發(fā)環(huán)境為ubuntu12.04操作系統(tǒng),目標板內(nèi)核版本號為 標準linux-2.6.35,使用到的交叉編譯器是arm-linux-gcc-4.5.1。

          3.1.2 Bootloader程序設計

          Bootloader是在操作系統(tǒng)運行前運行的一段專用程序, 可以完成平臺硬件設備的初始化,并能完成引導和調(diào)試操作 系統(tǒng)。 Bootloader依賴CPU體系結構,一般將Bootloader按功 能劃分為兩個階段,其中第1階段實現(xiàn)基本硬件電路的初始 化,為操作系統(tǒng)的運行準備環(huán)境。在平臺中,由于使用的是 微控制器,因此第一階段需要實現(xiàn)設置處理器進入管 理模式、關閉處理器中斷與快中斷、設置處理器主頻、高速 總線主頻與告訴外設主頻、CPU關閉MMU與數(shù)據(jù)Cache,初 始化內(nèi)存控制器,代碼由存儲器自搬運至內(nèi)存,設置運行程 序需要的臨時堆棧、BSS段清零等工作。第2階段主要實現(xiàn) 進入交互模式或者自引導模式,實現(xiàn)操作系統(tǒng)的加載,一般 要根據(jù)操作系統(tǒng)與硬件平臺的需要實現(xiàn)相關硬件的初始化工 作, 如初始化GPIO、串口、網(wǎng)口等外部設備,完成向內(nèi)核 傳遞啟動參數(shù)等功能。

          3.1.3 Linux內(nèi)核的定制

          Linux目前已經(jīng)支持了x86、、MIPS等多種處理器 架構,支持的平臺類型多達3000多種。各種處理器的 設計廠商為了更好地推廣處理器的使用,都會Linux中添加補丁, 使得該處理器能夠在L i nu x 行正常運行。 平臺選用Linux-2.6.35版本,面對大規(guī)模的Linux源代碼,我們需要對Linux進行剪裁移植。

          Linux源代碼采用模塊化的組織方式,可以通過條件編 譯的方式對Linux源碼的功能進行剪裁,但是條件編譯法裁 剪的是功能模塊,對于具體的硬件驅動和優(yōu)化就需要對源代 碼進行細微的修改了。

          3.1.4 根文件系統(tǒng)的建立

          根文件系統(tǒng)是存放各種工具軟件、庫文件、腳本、配 置文件的地方,任何包括這些Linux系統(tǒng)啟動所必須的文件 都可以成為根文件系統(tǒng)。Linux支持jffs2,nfs,cramfs,yaffs2 等多種文件系統(tǒng)。在本系統(tǒng)中使用的Ramdisk文件系統(tǒng),實 際上是把內(nèi)存劃出一部分當作硬盤使用,使得程序運行效率 更高。系統(tǒng)中的工具集合采用BusyBox完成,BusyBox 將許多 具有共性的小版本的UNIX工具結合到一個單一的可執(zhí)行文 件。這樣的集合可以替代大部分常用工具比如GNU fileuTIls, shelluTIls等工具,BusyBox提供了一個比較完善的環(huán)境,可 以適用于任何嵌入式設備。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();