基于數字溫度傳感器的數字溫度計、(完整資料)_第1頁
基于數字溫度傳感器的數字溫度計、(完整資料)_第2頁
基于數字溫度傳感器的數字溫度計、(完整資料)_第3頁
基于數字溫度傳感器的數字溫度計、(完整資料)_第4頁
基于數字溫度傳感器的數字溫度計、(完整資料)_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于數字溫度傳感器的數字溫度計、(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

2014~2015學年第2學期基于數字溫度傳感器的數字溫度計、(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)《單片機應用技術》課程設計報告題目:基于數字溫度傳感器的數字溫度計的設計專業(yè):自動化班級:12自動化1姓名:陳宗國朱海峰王疏華袁繼康指導教師:陸媛宋洪儒電氣工程學院年月日任務書課題名稱基于數字溫度傳感器的數字溫度計的設計指導教師(職稱)陸媛宋洪儒執(zhí)行時間2014~2015學年第2學期第11周學生姓名學號承擔任務陳宗國1209111005課程設計前期資料收集及查找王疏華1209111046Proteus及keil軟件安裝及元器件名稱熟悉袁繼康1209111059Proteus電路圖設計,keil程序編寫及驗證仿真朱海峰1209111068課程設計后期整理設計目的1、進一步熟悉和掌握單片機的結構及工作原理.2、掌握單片機的接口技術及相關外圍芯片的外特性,控制方法。3、通過課程設計,掌握以單片機核心的電路設計的基本方法和技術,了解有關電路參數的計算方法。4、通過程序設計和仿真,逐步掌握模塊化程序設計方法和仿真軟件的使用.5、通過完成一個包括電路設計和程序開發(fā)的完整過程,使學生了解開發(fā)單片機應用系統(tǒng)的全過程,為今后從事相應打下基礎.設計要求利用數字溫度傳感器DS18B20與單片機結合來測量溫度。利用數字溫度傳感器DS18B20測量溫度信號,計算后在LED數碼管上顯示相應的溫度值.其溫度測量范圍為?55℃~125℃,精確到0。5℃。數字溫度計所測量的溫度采用數字顯示,控制器使用單片機AT89C51,測溫傳感器使用DS18B20,用LED數碼管實現(xiàn)溫度顯示.課程設計摘要一、課程設計摘要:DS18B20是一種可組網的高精度數字式溫度傳感器,由于其具有單總線的獨特優(yōu)點,可以使用戶輕松地組建起傳感器網絡,并可使多點溫度測量電路變得簡單、可靠。本文結合實際使用經驗,介紹了DS18B20數字溫度傳感器在單片機下的硬件連接及軟件編程,并給出了軟件流程圖.該系統(tǒng)由上位機和下位機兩大部分組成.下位機實現(xiàn)溫度的檢測并提供標準RS232通信接口,芯片使用了ATMEL公司的AT89C51單片機和DALLAS公司的DS18B20數字溫度傳感器。上位機部分使用了通用PC。該系統(tǒng)可應用于倉庫測溫、樓宇空調控制和生產過程監(jiān)控等領域。二、關鍵字:單片機溫度測量DS18B20數字溫度傳感器AT89S51目錄TOC\o”1—3”\h\z\u_Toc135835881"1.2總體設計框圖理介紹4HYPERLINK\l”_Toc135835875”1。3主控部分4HYPERLINK\l”_Toc135835881"1。4DS18B20數字溫度傳感器5第二章硬件設計82。1單片機系統(tǒng)8HYPERLINK\l”_Toc135835878”2。2溫度測試電路8_Toc135835880”2.4整體電路設計14第三章軟件設計15HYPERLINK\l”_Toc135835884”3。1程序流程圖153。3溫度轉換子程序16HYPERLINK\l”_Toc135835887”3.4計算溫度子程序17HYPERLINK\l”_Toc135835888”3。5顯示數據刷新子程序18HYPERLINK\l”_Toc135835889”第四章總結19參考資料20第一章原理介紹1.1總體設計方案總體設計方案采用AT89C51單片機作控制器,溫度傳感器選用DS18B20來設計數字溫度計,系統(tǒng)由3個模塊組成:主控制器、測溫電路及顯示電路。主控制器由單片機AT89C51實現(xiàn),測溫電路由溫度傳感器DS18B20實現(xiàn),顯示電路由4位LED數碼管直讀顯示。本設計所介紹的數字溫度計與傳統(tǒng)的溫度計相比,具有讀數方便,測溫范圍廣,測溫準確其輸出溫度采用數字顯示,主要用于對測溫比較準確的場所,或科研實驗室使用,該設計控制器使用單片機AT89C51,測溫傳感器使用DS18B20,用4位共陽極LED數碼管以串口傳送數據,實現(xiàn)溫度顯示,能準確達到以上要求。1.2總體設計框圖控制器采用單片機AT89C51,溫度傳感器采用DS18B20,用4位LED數碼管顯示溫度??傮w設計框圖如圖1—1所示。LED顯示單片機復位LED顯示單片機復位主控電路時鐘振蕩溫度傳感器時鐘振蕩溫度傳感器1。3主控制部分本設計采用AT89C51八位單片機實現(xiàn).單片機軟件編程的自由度大,可通過編程實現(xiàn)各種各樣的算術算法和邏輯控制.而且體積小,硬件實現(xiàn)簡單,安裝方便。既可以單獨對多DS18B20控制工作,還可以與PC機通信。運用主從分布式思想,由一臺上位機(PC微型計算機),下位機(單片機)多點溫度數據采集,組成兩級分布式多點溫度測量的巡回檢測系統(tǒng),實現(xiàn)遠程控制。另外AT89C51在工業(yè)控制上也有著廣泛的應用,編程技術及外圍功能電路的配合使用都很成熟。系統(tǒng)采用針對傳統(tǒng)溫度測溫系統(tǒng)測溫點少,系統(tǒng)兼容性及擴展性較差的特點,運用分布式通訊的思想。設計一種可以用于大規(guī)模多點溫度測量的巡回檢測系統(tǒng)。該系統(tǒng)采用的是RS—232串行通訊的標準,通過下位機(單片機)進行現(xiàn)場的溫度采集,溫度數據既可以由下位機模塊實時顯示,也可以送回上位機進行數據處理,具有巡檢速度快,擴展性好,成本低的特點.1.4DS18B20數字溫度傳感器美國Dallas半導體公司的數字化溫度傳感器DS18B20是支持"一線總線"接口的溫度傳感器,在其內部使用了在板(ON—B0ARD)專利技術。全部傳感元件及轉換電路集成在形如一只三極管的集成電路內。一線總線獨特而且經濟的特點,使用戶可輕松地組建傳感器網絡,為測量系統(tǒng)的構建引入全新概念。現(xiàn)在,新一代的DS18B20體積更小、更經濟、更靈活.使你可以充分發(fā)揮“一線總線”的優(yōu)點。DS18B20支持”一線總線"接口,測量溫度范圍為—55°C~+125°C,在-10~+85°C范圍內,精度為±0.5°C。DS1822的精度較差為±2°C.現(xiàn)場溫度直接以"一線總線”的數字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設備或過程控制、測溫類消費電子產品等。與前一代產品不同,新的產品支持3V~5。5V的電壓范圍,使系統(tǒng)設計更靈活、方便。而且新一代產品更便宜,體積更小。DS18B20的主要特性:(1)適應電壓范圍更寬,電壓范圍:3。0~5.5V,在寄生電源方式下可由數據線供電(2)獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊(3)DS18B20支持多點組網功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網多點測溫(4)DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉換電路集成在形如一只三極管的集成電路內(5)溫范圍-55℃~+125℃,在-10~+85℃時精度為±0。5℃(6)可編程的分辨率為9~12位,對應的可分辨溫度分別為0.5℃、0。25℃、0.125℃和0。0625℃,可實現(xiàn)高精度測溫(7)在9位分辨率時最多在93.75ms內把溫度轉換為數字,12位分辨率時最多在750ms內把溫度值轉換為數字,速度更快(8)測量結果直接輸出數字溫度信號,以”一線總線”串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力(9)負壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。圖1—4DS18B20型號數字溫度傳感器DS18B20有兩種供電接法,圖1—2采用的是接入外部電源。這樣做的好處是I/O線上不需要加強上拉,而且總線控制器用在溫度轉換期間總保持高電平。這樣在轉換期間可以允許在單線總線上進行其他數據的往來。另外,在單總線上可以掛任意多片DS18B20,而且如果它們都使用外部電源的話,就可以先發(fā)一個SkipROM命令,再接一個ConvertT命令,讓它們同時進行溫度轉換。注意當加上外部電源時,GND引腳不能懸空。第二章硬件設計2.1單片機系統(tǒng)方案采用AT89S52單片機作為控制器,完成所有的控制功能,包括:溫度傳感器DS18B20的初始化和讀取溫度值LED顯示溫度存儲及讀取單片機系統(tǒng)的電路如圖2—1。圖2-1-a89C51的核心電路框圖2。2溫度測試電路這里我們用到溫度芯片DS18B20.DS18B20是DALLAS公司生產的一線式數字溫度傳感器,具有3引腳TO-92小體積封裝形式。測溫分辨率可達0。0625℃,被測溫度用符號擴展的16位數字量方式串行輸出。其工作電源既可在遠端引入,也可采用寄生電源方式產生。CPU只需一根端口線就能與諸多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。DS18B20支持“一線總線”接口,測量溫度范圍為-55至+125℃,在—10至+85℃范圍內,精度為0.5C?,F(xiàn)場溫度直接以“一線總線”的數字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設備或過程控制、測溫類消費電子產品等。圖2-2DS18B20內部結構圖圖2-2DS18B20內部結構圖圖2-3圖2-3硬件連接電路圖本系統(tǒng)是基于DS18B20溫度芯片的溫度測試。DS18B20采用外部供電方式,理論上可以在一根數據總線上掛256個DS18B20,但時間應用中發(fā)現(xiàn),如果掛接25個以上的DS18B20仍舊有可能產生功耗問題。另外單總線長度也不宜超過80M,否則也會影響到數據的傳輸.在這種情況下我們可以采用分組的方式,用單片機的多個I/O來驅動多路DS18B20。在實際應用中還可以使用一個MOSFET將I/O口線直接和電源相連,起到上拉的作用。對DS18B20的設計,需要注意以下問題:(1)對硬件結構簡單的單線數字溫度傳感器DS18B20進行操作,需要用較為復雜的程序完成。編制程序時必須嚴格按芯片數據手冊提供的有關操作順序進行,讀、寫時間片程序要嚴格按要求編寫。尤其在使用DS18B20的高測溫分辨力時,對時序及電氣特性參數要求更高.(2)有多個測溫點時,應考慮系統(tǒng)能實現(xiàn)傳感器出錯自動指示,進行自動DS18B20序列號和自動排序,以減少調試和維護工作量。(3)測溫電纜線建議采用屏蔽4芯雙絞線,其中一對線接地線與信號線,另一組接VCC和地線,屏蔽層在源端單點接地。DS18B20在三線制應用時,應將其三線焊接牢固;在兩線應用時,應將VCC與GND接在一起,焊接牢固。若VCC脫開未接,傳感器只送85。0℃的溫度值。(4)實際應用時,要注意單線的驅動能力,不能掛接過多的DS18B20,同時還應注意最遠接線距離。另外還應根據實際情況選擇其接線拓撲結構。2.3顯示電路本設計用LED數碼管顯示溫度值,且為共陽極。LED是由多個發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。LED數碼管常用段數一般為7段有的另加一個小數點,共陽極數碼管的內部電路如圖所示,下面將介紹常用LED數碼管內部引腳圖。圖1這是一個7段兩位帶小數點10引腳的LED數碼管圖2-3—a7SEG–COM–ANODE型號數碼管每一筆劃都是對應一個字母表示DP是小數點.

數碼管分為共陽極的LED數碼管、共陰極的LED數碼管兩種。LED數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數位,因此根據LED數碼管的驅動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。

一、靜態(tài)顯示驅動:靜態(tài)驅動也稱直流驅動。靜態(tài)驅動是指每個數碼管的每一個段碼都由一個單片機的I/O口進行驅動,或者使用如BCD碼二—十進位轉換器進行驅動.靜態(tài)驅動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O口多,如驅動5個數碼管靜態(tài)顯示則需要5×8=40根I/O口來驅動,要知道一個89S51單片機可用的I/O口才32個呢。故實際應用時必須增加驅動器進行驅動,增加了硬體電路的復雜性.

二、動態(tài)顯示驅動:數碼管動態(tài)顯示介面是單片機中應用最為廣泛的一種顯示方式之一,動態(tài)驅動是將所有數碼管的8個顯示筆劃”a,b,c,d,e,f,g,dp”的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決于單片機對位元選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開,該位就顯示出字形,沒有選通的數碼管就不會亮.

透過分時輪流控制各個LED數碼管的COM端,就使各個數碼管輪流受控顯示,這就是動態(tài)驅動。在輪流顯示過程中,每位數碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極體的余輝效應,盡管實際上各位數碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示資料,不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O口,而且功耗更低。2.4總體電路設計總電路的設計是基于單片機的基本電路,DS18B20數字溫度傳感器和LED顯示與其簡單連接構成??傮w連接如圖所示。2-4-aProteus電路仿真電路圖第三章軟件設計(一)、概述整個系統(tǒng)的功能是由硬件電路配合軟件來實現(xiàn)的,當硬件基本定型后,軟件的功能也就基本定下來了.從軟件的功能不同可分為兩大類:一是監(jiān)控軟件(主程序),它是整個控制系統(tǒng)的核心,專門用來協(xié)調各執(zhí)行模塊和操作者的關系.二是執(zhí)行軟件(子程序),它是用來完成各種實質性的功能如測量、計算、顯示、通訊等。每一個執(zhí)行軟件也就是一個小的功能執(zhí)行模塊.這里將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進行功能定義和接口定義.各執(zhí)行模塊規(guī)劃好后,就可以規(guī)劃監(jiān)控程序了。首先要根據系統(tǒng)的總體功能選擇一種最合適的監(jiān)控程序結構,然后根據實時性的要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調度關系。(二)、主程序模塊主程序需要調用2個子程序,分別為數碼管顯示程序,溫度測試及處理子程序,報警子程序,中斷設定子程序。各模塊程序功能如下:●數碼管顯示程序:向數碼的顯示送數,控制系統(tǒng)的顯示部分?!駵囟葴y試及處理程序:對溫度芯片送過來的數據進行處理,進行判斷和顯示。系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉換命令子程序,計算溫度子程序,顯示數據刷新子程序等。3.1主程序流程圖主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內測量一次被測溫度,其程序流程見圖3。1所示:初始化初始化調用顯示子程序1S到?初次上電讀出溫度值溫度計算處理顯示數據刷新發(fā)溫度轉換開始命令NYNY圖3.1主程序流程圖3。2讀出溫度子程序流程圖讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數據的改寫.其程序流程圖如圖3。2所示:YY發(fā)DS18B20復位命令發(fā)跳過ROM命令發(fā)讀取溫度命令讀取操作,CRC校驗9字節(jié)完?CRC校驗正?確?移入溫度暫存器結束NNY圖3.2溫度子程序流程圖3.3溫度轉換命令子程序流程圖溫度轉換命令子程序主要是發(fā)溫度轉換開始命令,當采用12位分辨率時轉換時間約為750ms,在本程序設計中采用1s顯示程序延時法等待轉換的完成.溫度轉換命令子程序流程圖如上圖,圖3.3所示:發(fā)DS18B20復位命令發(fā)DS18B20復位命令發(fā)跳過ROM命令發(fā)溫度轉換開始命令結束圖3。3溫度轉換命令子程序流程圖3。4計算溫度子程序流程圖計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定,其程序流程圖如圖3。4所示:開始溫度零下開始溫度零下?溫度值取補碼置“—”標志計算小數位溫度BCD值計算整數位溫度BCD值結束置“+”標志NY圖3。4溫度子程序流程圖3.5顯示數據刷新子程序流程圖顯示數據刷新子程序主要是對顯示緩沖器中的顯示數據進行刷新操作,當最高顯示位為0時將符號顯示位移入下一位。程序流程圖如圖3.5所示:溫度數據移入顯示寄存器十位數0?百位數0?十位數顯示符號百位數不顯示百位數顯示數據(不顯示符號)結束NNYY溫度數據移入顯示寄存器十位數0?百位數0?十位數顯示符號百位數不顯示百位數顯示數據(不顯示符號)結束NNYY圖3.5顯示數據刷新子程序流程圖第四章總結總結:本次課設的任務是采用AT89C2051單片機作控制器,溫度傳感器選用DS18B20來設計數字溫度計,系統(tǒng)由3個模塊組成:主控制器、測溫電路及顯示電路.主控制器由單片AT89C2051實現(xiàn),測溫電路由溫度傳感器DS18B20實現(xiàn),顯示電路由4位LED數碼管直讀顯示.通過本次課設使我學會了很多東西,通過自己找材料,向老師答疑,與同學討論,自己修改,研究,最終完成本次課設。在這個過程中,不但使我對單片機課程所學的知識有了更深入的了解,而且還培養(yǎng)了我的自學能力.有些不懂的問題通過向老師請教得到解決,使我受益匪淺。課設的過程是艱辛的,但是收獲是巨大的。首先,我再一次的加深鞏固了對已有的知識的理解及認識;其次,我第一次將課本知識運用到了實際設計,使得所學知識在更深的層次上得到了加深。再次,因為這次課程設計的確在某些方面存有一定難度,這對我來講都是一種鍛煉,培養(yǎng)了我自學、查閱搜集資料的能力;再有,計算操作工程中,我們曾經面臨過失敗、品味過茫然,但是最終我還是堅持下來了,這就是我意志、耐力和新年上的勝利,在今后的日子里,它必將成為我的寶貴財富。參考文獻[1]張毅剛。單片機原理及應用。北京。高等教育出版社,2010[2]李光飛。單片機C程序設計實例指導.北京.北京航空航天大學出版社,2005[3]劉文濤.單片機語言C51典型應用及設計。北京。人民郵電出版社[4]DALLAS公司.DS18B20數據手冊[Z]。[5]余永權.ATMEL89系列單片機應用技術[M].(第三版)。北京:北京航空航天大學出版社,2002.答辯記錄及評分表課題名稱基于數字溫度傳感器的數字溫度計的設計答辯教師(職稱)陸媛宋洪儒答辯時間2014~2015學年第2學期第11周答辯記錄問;硬件電路中數碼管的顯示內容及原理?答;通過AT89C51型號單片機,由P1和P2兩組I/O引腳分別控制兩個7SEG–COM–ANODE型號數碼管,分十位控制和個位控制,達到顯示60秒倒計時的目的。問;數碼管使用的電流與電壓?答;靜態(tài)時,推薦使用10—15mA;動態(tài)時,16/1動態(tài)掃描時,平均電流為4—5mA,峰值電流50-60mA.問;AT89C51芯片的概述?答;AT89C51是一個低功耗,高性能CMOS8位單片機,片內含4kBytesISP(In-systemprogrammable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統(tǒng)及80C51引腳結構,芯片內集成了通用8位中央處理器和ISPFlash存儲單元。評分表學生姓名學號評分陳宗國1209111005王疏華1209111046袁繼康1209111059朱海峰1209111068基于FPGA的數字溫度設計摘要:本設計有效的克服了傳統(tǒng)的數字溫度計的缺點,采用EDA技術自上而下的設計思路,繪制出了具體的邏輯電路,最后又在硬件上通過對其進行調試和驗證。基于FPGA在QuartusII9。0sp2軟件下應用VHDL語言編寫程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片進行了計算機仿真,并給出了相應的仿真結果。該電路能夠實現(xiàn)很好的測溫功能。關鍵字:數字溫度計;EDA;FPGA;VHDL;QuartusII9。0sp2;EP2C8Q208ThedesignofdigitalthermometerbasedonFPGAAbstract:

Thisdesigneffectivelyovercomesthetraditionaldigitalthermometer’sweaknessesandtakesatop—downapproachtodesign。Drawoutaparticularlogiccircuits,andfinallypassthecircuitstothehardwaretodebugandverifyit。ThisdesignisbasedonFPGAusingVHDLlanguagetowriteprograminQuartusIIsoftware,adoptingEP2C8Q208chipofCyclone—IIseriesofALTRAcompanyforcomputersimulationandatthesametimeshowingthecorrespondingsimulationresult。Thiscircuitisabletocarryoutexcellenttemperature—measurementfunction.KeyWords:Digitalthermometer;EDA;FPGA;VHDL;QuartusII;EP2C8Q208引言檢測是控制的基礎和前提,而檢測的精度必須高于控制的精確度,否則無從實現(xiàn)控制的精度要求。不僅如此,檢測還涉及國計民生各個部門,可以說在所以科學技術領域無時不在進行檢測??茖W技術的發(fā)展和檢測技術的發(fā)展是密切相關的.現(xiàn)代化的檢測手段能達到的精度、靈敏度及測量范圍等,在很大程度上決定了科學技術的發(fā)展水平。同時,科學技術的發(fā)展達到的水平越高,又為檢測技術、傳感器技術提供了新的前提手段.目前溫度計技術的發(fā)展很快,從原始的玻璃管溫度計發(fā)展到了現(xiàn)在的熱電阻溫度計、熱電偶溫度計、數字溫度計、電子溫度計等等。目前的溫度計中傳感器是它的重要組成部分,它的精度靈敏度基本決定了溫度計的精度、測量范圍、控制范圍和用途等[1].傳感器應用極其廣泛,目前已經研制出多種新型傳感器。1.設計要求現(xiàn)代社會的標志之一就是信息產品的廣泛使用,而且是產品的性能越來越強,復雜程度越來越高,更新步伐越來越快。支撐信息電子產品高速發(fā)展的基礎就是微電子制造工藝水平的提高和電子產品設計開發(fā)技術的發(fā)展。前者以微細加工技術為代表,而后者的代表就是電子設計自動化(electronicdesignautomatic,EDA)技術[5]。本設計采用的VHDL是一種全方位的硬件描述語言,具有極強的描述能力,能支持系統(tǒng)行為級、寄存器傳輸級和邏輯門級三個不同層次的設計;支持結構、數據流、行為三種描述形式的混合描述、覆蓋面廣、抽象能力強,因此在實際應用中越來越廣泛。ASIC是專用的系統(tǒng)集成電路,是一種帶有邏輯處理的加速處理器。而FPGA是特殊的ASIC芯片,與其他的ASIC芯片相比,它具有設計開發(fā)周期短、設計制造成本低、開發(fā)工具先進、標準產品無需測試、質量穩(wěn)定以及可實時在線檢測等優(yōu)點[2]。溫度的數字化給人們生產生活帶來了極大的方便。因此,研究數字溫度計及其應用,有著非?,F(xiàn)實的意義.1。1選題背景本節(jié)將從FPGA嵌入式應用開發(fā)技術與溫度計發(fā)展的客觀實際出發(fā),通過對該技術發(fā)展狀況的了解,以及課題本身的需要,指出研究基于FPGA的芯片系統(tǒng)與設計——數字溫度計的設計與實現(xiàn)的必要性[3]。課題相關技術的發(fā)展當今電子產品正向功能多元化,體積最小化,功耗最低化的方向發(fā)展。它與傳統(tǒng)的電子產品在設計上的顯著區(qū)別師大量使用大規(guī)??删幊踢壿嬈骷?,使產品的性能提高,體積縮小,功耗降低。同時廣泛運用現(xiàn)代計算機技術,提高產品的自動化程度和競爭力,縮短研發(fā)周期.EDA技術正是為了適應現(xiàn)代電子技術的要求,吸收眾多學科最新科技成果而形成的一門新技術。美國ALTERA公司的可編程邏輯器件采用全新的結構和先進的技術,加上MaxplusII(或最新的QUARTUS)開發(fā)環(huán)境,更具有高性能,開發(fā)周期短等特點,十分方便進行電子產品的開發(fā)和設計[4].EDA技術以大規(guī)??删幊踢壿嬈骷樵O計載體,以硬件描述語言為系統(tǒng)邏輯描述主要表達方式,以計算機、大規(guī)??删幊踢壿嬈骷拈_發(fā)軟件及實驗開發(fā)系統(tǒng)為設計工具,通過有關的開發(fā)軟件,自動完成用軟件的方式設計的電子系統(tǒng)到硬件系統(tǒng)的邏輯編譯,邏輯化簡,邏輯分割,邏輯映射,編程下載等工作.最終形成集成電子系統(tǒng)或專用集成芯片的一門新技術[5]。1.1。2課題研究的必要性新產品、新技術層出不窮,電子技術的發(fā)展更是日新月異.可以毫不夸張的說,電子技術的應用無處不在,電子技術正在不斷地改變我們的生活,改變著我們的世界。近些年,隨著科技的發(fā)展和社會的進步,人們對溫度計的要求也越來越高,不管在哪里,人們都想知道此刻的溫度和天氣狀況等一些信息,傳統(tǒng)的溫度計由于它的局限性以及不方便性,已不能滿足人們的需求。溫度計亟待一次革命,不管在性能還是在樣式上它都將發(fā)生質的變化,于是數字溫度計的時代悄然來臨了。1。2課題研究的內容本設計主要研究基于FPGA的數字溫度計設計,要求溫度采集準確精確,精確度達到0.0625攝氏度,對溫度的采集由4×1矩形鍵盤進行控制.2。FPGA簡介2。1FPGA概述FPGA是現(xiàn)場可編程門陣列(FieldProgrammableGateArray)的簡稱,與之相應的CPLD是復雜可編程邏輯器件(ComplexProgrammableLogicDevice)的簡稱,兩者的功能基本相同,只是實現(xiàn)原理略有不同,所以有時可以忽略這兩者的區(qū)別,統(tǒng)稱為可編程邏輯器件或CPLD/PGFA。CPLD/PGFA幾乎能完成任何數字器件的功能,上至高性能CPU,下至簡單的74電路。它如同一張白紙或是一堆積木,工程師可以通過傳統(tǒng)的原理圖輸入或硬件描述語言自由的設計一個數字系統(tǒng).通過軟件仿真可以事先驗證設計的正確性,在PCB完成以后,利用CPLD/FPGA的在線修改功能,隨時修改設計而不必改動硬件電路。使用CPLA/FPGA開發(fā)數字電路,可以大大縮短設計時間,減少PCB面積,提高系統(tǒng)的可靠性。這些優(yōu)點使得CPLA/FPGA技術在20世紀90年代以后得到飛速的發(fā)展,同時也大大推動了EDA軟件和硬件描述語言HDL的進步[4]。2.2FPGA基本結構FPGA具有掩膜可編程門陣列的通用結構,它由邏輯功能塊排成陣列,并由可編程的互連資源連接這些邏輯功能塊來實現(xiàn)不同的設計。FPGA一般由3種可編程電路和一個用于存放編程數據的靜態(tài)存儲器SRAM組成。這3種可編程電路是:可編程邏輯模塊、輸入/輸出模塊(IOB--I/OBlock)和互連資源??删幊踢壿嬆KCLB是實現(xiàn)邏輯功能的基本單元,它們通常規(guī)則的排列成一個陣列,散布于整個芯片;可編程輸入/輸出模塊(IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長度的連接線段和一些可編程連接開關,它們將各個CLB之間或CLB、IOB之間以及IOB之間連接起來,構成特定功能的電路。(1)CLB是FPGA的主要組成部分.圖2-1是CLB基本結構框圖,它主要由邏輯函數發(fā)生器、觸發(fā)器、數據選擇器等電路組成。CLB中3個邏輯函數發(fā)生器分別是G、F和H,相應的輸出是G’、F’和H’。G有4個輸入變量G1、G2、G3和G4;F也有4個輸入變量F1、F2、F3和F4。這兩個函數發(fā)生器是完全獨立的,均可以實現(xiàn)4輸入變量的任意組合邏輯函數。邏輯函數發(fā)生器H有3個輸入信號;前兩個是函數發(fā)生器的輸出G’和F’,而另一個輸入信號是來自信號變換電路的輸出H1。這個函數發(fā)生器能實現(xiàn)3輸入變量的各種組合函數.這3個函數發(fā)生器結合起來,可實現(xiàn)多達9變量的邏輯函數。CLB中有許多不同規(guī)格的數據選擇器(四選一、二選一等),通過對CLB內部數據選擇器的編程,邏輯函數發(fā)生器G、F和H的輸出可以連接到CLB輸出端X或Y,并用來選擇觸發(fā)器的激勵輸入信號、時鐘有效邊沿、時鐘使能信號以及輸出信號。這些數據選擇器的地址控制信號均由編程信息提供,從而實現(xiàn)所需的電路結構.CLB中的邏輯函數發(fā)生器F和G均為查找表結構,其工作原理類似于ROM.F和G的輸入等效于ROM的地址碼,通過查找ROM中的地址表可以得到相應的組合邏輯函數輸出。另一方面,邏輯函數發(fā)生器F和G還可以作為器件內高速RAM或小的可讀寫存儲器使用,它由信號變換電路控制。(2)輸入/輸出模塊IOB.IOB提供了器件引腳和內部邏輯陣列之間的連接。它主要由輸入觸發(fā)器、輸入緩沖器和輸出觸發(fā)/鎖存器、輸出緩沖器組成.每個IOB控制一個引腳,它們可被配置為輸入、輸出或雙向I/O功能。當IOB控制的引腳被定義為輸入時,通過該引腳的輸入信號先送入輸入緩沖器。緩沖器的輸出分成兩路:一路可以直接送到MUX,另一路經延時幾納秒(或者不延時)送到輸入通路D觸發(fā)器,再送到數據選擇器.通過編程給數據選擇器不同的控制信息,確定送至CLB陣列的I1和I2是來自輸入緩沖器,還是來自觸發(fā)器。圖2—1CLB基本結構當IOB控制的引腳被定義為輸出時,CLB陣列的輸出信號OUT也可以有兩條傳輸途徑:一條是直接經MUX送至輸出緩沖器,另一條是先存入輸出通路D觸發(fā)器,再送至輸出緩沖器.IOB輸出端配有兩只MOS管,它們的柵極均可編程,使MOS管導通或截止,分別經上拉電阻接通Vcc、地線或者不接通,用以改善輸出波形和負載能力。(3)可編程互連資源IR??删幊袒ミB資源IR可以將FPGA內部的CLB和CLB之間、CLB和IOB之間連接起來,構成各種具有復雜功能的系統(tǒng).IR主要由許多金屬線段構成,這些金屬線段帶有可編程開關,通過自動布線實現(xiàn)各種電路的連接.2.3FPGA系統(tǒng)設計流程一般說來,一個比較大的完整的項目應該采用層次化的描述方法:分為幾個較大的模塊,定義好各功能模塊之間的接口,然后各個模塊再細分去具體實現(xiàn),這就是TOPDOWN(自頂向下)的設計方法.目前這種高層次的設計方法已被廣泛采用。高層次設計只是定義系統(tǒng)的行為特征,可以不涉及實現(xiàn)工藝,因此還可以在廠家綜合庫的支持下,利用綜合優(yōu)化工具將高層次描述轉換成針對某種工藝優(yōu)化的網絡表,使工藝轉化變得輕而易舉。CPLD/FPGA系統(tǒng)設計的工作流程如圖2-2所示[6]。圖2—2CPLD/FPGA系統(tǒng)設計流程流程說明:(1)工程師按照“自頂向下”的設計方法進行系統(tǒng)劃分。(2)輸入VHDL代碼,這是設計中最為普遍的輸入方式。此外,還可以采用圖形輸入方式(框圖、狀態(tài)圖等),這種輸入方式具有直觀、容易理解的優(yōu)點。(3)將以上的設計輸入編譯成標準的VHDL文件。(4)進行代碼級的功能仿真,主要是檢驗系統(tǒng)功能設計的正確性。這一步驟適用于大型設計,因為對于大型設計來說,在綜合前對源代碼仿真,就可以大大減少設計重復的次數和時間。一般情況下,這一仿真步驟可略去。(5)利用綜合器對VHDL源代碼進行綜合優(yōu)化處理,生成門級描述的網絡表文件,這是將高層次描述轉化為硬件電路的關鍵步驟。綜合優(yōu)化是針對ASIC芯片供應商的某一產品系列進行的,所以綜合的過程要在相應的廠家綜合庫的支持下才能完成.(6)利用產生的網絡表文件進行適配前的時序仿真,仿真過程不涉及具體器件的硬件特性,是較為粗略的。一般的設計,也可略去這一步驟。(7)利用適配器將綜合后的網絡表文件針對某一具體的目標器件進行邏輯映射操作,包括底層器件配置、邏輯分割、邏輯優(yōu)化和布局布線。(8)在適配完成后,產生多項設計結果:(a)適配報告,包括芯片內部資源利用情況,設計的布爾方程描述情況等;(b)適配后的仿真模型;(c)器件編程文件。根據適配后的仿真模型,可以進行適配后時序仿真,因為已經得到器件的實際硬件特性(如時延特性),所以仿真結果能比較精確的預期未來芯片的實際性能。如果仿真結果達不到設計要求,就修改VHDL源代碼或選擇不同速度和品質的器件,直至滿足設計要求[7]。最后將適配器產生的器件編程文件通過編程器或下載電纜載入到目標芯片CPLD/FPGA中。2。4FPGA開發(fā)編程原理硬件設計需要根據各種性能指標、成本、開發(fā)周期等因素,確定最佳的實現(xiàn)方案,畫出系統(tǒng)框圖,選擇芯片,設計PCB并最終形成樣機。CPLD/FPGA軟件設計可分為兩大塊:編程語言和編程工具。編程語言主要有VHDL和Verilog兩種硬件描述語言;編程工具主要是兩大廠家Altera和Xilinx的集成綜合EDA軟件(如MAX+plusII、QuartusII、Foundation、ISE)以及第三方工具(如FPGAExpress、Modelsim、SynposysSVS等)。具體的設計輸入方式有以下幾種[8]:(1)HDL語言方式.HDL既可以描述底層設計,也可以描述頂層的設計,但它不容易做到較高的工作速度和芯片利用率。用這種方式描述的項目最后所能達到的性能與設計人員的水平、經驗以及綜合軟件有很大的關系。(2)圖形方式。可以分為電路原理圖描述,狀態(tài)機描述和波形描述3種形式。有的軟件3種輸入方法都支持,如Active-HDL。MAX+plusII圖形輸入方式只支持電路原理圖描述和波形描述兩種。電路原理圖方式描述比較直觀和高效,對綜合軟件的要求不高.一般大都使用成熟的IP核和中小規(guī)模集成電路所搭成的現(xiàn)成電路,整體放到一片可編程邏輯器件的內部去,所以硬件工作速度和芯片利用率很高,但是但項目很大的時候,該方法就顯得有些繁瑣;狀態(tài)機描述主要用來設計基于狀態(tài)機思想的時序電路[9]。在圖形的方式下定義好各個工作狀態(tài),然后在各個狀態(tài)上輸入轉換條件以及相應的輸入輸出,最后生成HDL語言描述,送去綜合軟件綜合到可編程邏輯器件的內部。由于狀態(tài)機到HDL語言有一種標準的對應描述方式,所以這種輸入方式最后所能達到的工作速度和芯片利用率主要取決于綜合軟件;波形描述方式是基于真值表的一種圖形輸入方式,直接描述輸入與輸出的波形關系.這種輸入方式最后所能達到的工作速度和芯片利用率也是主要取決于綜合軟件[10]。2.5DS18B20的性能特點(1)DS18B20的性能特點:①采用單總線專用技術,既可通過串行口線,也可通過其它I/O口線與微機接口,無須經過其它變換電路,直接輸出被測溫度值(9位二進制數,含符號位),②測溫范圍為-55℃—+125℃,測量分辨率為0。0625℃,③內含64位經過激光修正的只讀存儲器ROM,④適配各種系統(tǒng),⑤用戶可分別設定各路溫度的上、下限,⑥(2)DS18B20內部結構圖2-3DS18B20內部結構DS18B20內部結構主要由四部分組成:64位光刻ROM,溫度傳感器,掉電后仍能保存的溫度報警觸發(fā)器TH和TL(存儲在EEPROM),高速暫存器。DS18B20的管腳排vccdqgnd.64位光刻ROM是出廠前被光刻好的,它是該DS18B20的序列號。每一個DSl820包括一個唯一的64位長的序號[12]。開始8位是產品類型編碼(DS18B20編碼均為10H)。接著的48位是每個器件唯一的序號最后8位是前面56位的CRC(循環(huán)冗余校驗)碼。DS18B20中還有用于存儲測得的溫度值的兩個8位存貯器RAM,編號為0號和1號。1號存貯器存放溫度值的符號如果溫度為負,則1號存貯器8位全為1,否則全為0。0號存貯器用于存放溫度值的補碼,LSB(最低位)的1表示0.5℃DS18B20有兩種供電方式即數據總線供電方式和外部供電方式采取數據總線供電方式可以節(jié)省一根導線但完成溫度測量的時間較長采取外部供電方式則多用一根導線但測量速度較[13].3。設計過程3.1總體方案設計3。1。1FPGA控制DS18B20FPGA需要完成DS18B20的初始化、讀取DS18B20的48位ID號、啟動DS18B20溫度轉換、讀取溫度轉化結果。讀取48位ID號和讀取溫度轉換結果過程中,F(xiàn)PGA還要實現(xiàn)CRC校驗碼的計算,保證通信數據的可靠性[14].以上操作反復進行,可以用狀態(tài)機來實現(xiàn)。狀態(tài)機的各種狀態(tài)如下:RESET1:對DS18B20進行第一次復位,然后進入等待,等待800μs后,進入下一狀態(tài)。CMD33:對DS18B20發(fā)出0×33命令,讀取48位ID值.GET_ID:從DS18B20中讀取48位ID值。RESET2:對DS18B20進行第二次復位,然后進入DELAY狀態(tài)等待800μs后,進入CMDCC狀態(tài)。CMDCC:向DS18B20發(fā)出忽略ROM命令,為進入下一狀態(tài)作準備.CMD44:向DS18B20發(fā)出啟動溫度轉換命令,然后進入等待,900ms后進入下一狀態(tài)。RESET3:對DS18B20進行第三次復位。CMDCC2:向DS18B20發(fā)出忽略ROM命令,為了進入下一狀態(tài)作準備.GET_TEMP:從DS18B20中讀取溫度測量數值。DELAY:等待狀態(tài)。WRITE_BIT:向DS18B20中寫入數據位狀態(tài)。READ_BIT:從DS18B20中讀取數據位狀態(tài)。在該狀態(tài)中每讀取1位數據,同時完成該數據位的CRC校驗計算[15]。所有數據都讀取后,還要讀取8位CRC校驗位。這8位校驗位也經過CRC校驗計算,如果通信沒有錯誤,總的CRC校驗結果應該是0。這時可將通信正確的數據保存到id和temp_data寄存器中。3.2單元電路設計3.2。1DS18B20溫度采集在開發(fā)板上的原理圖圖3-1開發(fā)板上輸出顯示的按鍵原理圖圖3-2開發(fā)板上的按鍵實物圖圖3—3發(fā)板上DS18B20實物圖4。裝調與測試4.1EP2C8Q208FPAG開發(fā)板裝調圖4—1開發(fā)板實物圖核心系統(tǒng):(1)CycloneII核心:EP2C8Q208:(2)SDRAM:64Mbit為滿足用戶海量存儲:(為做SOPC或者NIOSII系統(tǒng)提供足夠的內存);(3)Flash:16Mbit能滿足大中小型開發(fā),為用戶配置NIOS的鏡像文件:(4)EPCS4配置芯片:(5)提供配置模式:JTAG和AS.此外配置管腳通過插針引出:(6)核心板的有源時鐘為50Mhz):(7)將所有IO、Avalon總線、配置管腳等都通過3排插針引出,可以充分自由發(fā)揮,擴展更靈活:(擴展I/O完全考慮了電磁兼容的問題,滿足信號完整性)(8)FPGA供電系統(tǒng):外接5V的直流電:4。2外圍I/O資源(1)6位LED發(fā)光二極管(做流水等實驗)(2)8位LED數碼管(做動態(tài)或靜態(tài)數碼管顯示實驗,頻率計;秒表.。。。)(3)一路蜂鳴器(用作發(fā)聲實驗)(4)4只獨立按鍵(做按鍵控制實驗)(5)I2C串行EEPROM24C04(做IIC總線實驗)(6)VGA接口(做VGA實驗)(7)MAX232專用串口通訊電路(做和其他系統(tǒng)的串口通訊實驗)(8)1602LCD字符型液晶接口(做字符顯示實驗)(9)12864LCD圖形液晶接口(做圖形漢字等顯示實驗)(10)雙PS/2鍵盤接口(做PS/2鍵盤實驗)(11)SD卡接口。可以讀取SD卡的數據:例如圖片。(12)DS1302時鐘芯片,(13)DS18B20溫度傳感器(14)紅外線接收頭4。3開發(fā)板源程序測試libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED。ALL;entityds18B20isport(clk:instd_logic;-—原程序可能為50MHzdq:inoutstd_logic;—-temp_h:outstd_logic_vector(7downto0);—-temp_l:outstd_logic_vector(7downto0);LED:outstd_logic;LED2:outstd_logic;LED3:outstd_logic;rst:instd_logic;---—--—-—-—----—dataout:outstd_logic_vector(7downto0);seg:outstd_logic_vector(5downto0));endds18B20;architectureBehavioralofds18B20isTYPESTATE_TYPEis(RESET,CMD_CC,WRITE_BYTE,WRITE_LOW,WRITE_HIGH,READ_BIT,CMD_44,CMD_BE,WAIT800MS,GET_TMP,WAIT4MS);signalSTATE:STATE_TYPE:=RESET;signalclk_temp:std_logic:='0';signalclk1m:std_logic;--分頻后得到的1M時鐘signalwrite_temp:std_logic_vector(7downto0):="00000000”;signalTMP:std_logic_vector(11downto0);signaltmp_bit:std_logic;signalWRITE_BYTE_CNT:integerrange0to8:=0;signalWRITE_LOW_CNT:integerrange0to2:=0;signalWRITE_HIGH_CNT:integerrange0to2:=0;signalREAD_BIT_CNT:integerrange0to3:=0;signalGET_TMP_CNT:integerrange0to13:=0;signalcnt:integerrange0to100001:=0;--—-—--******************************signalcnt2:integerrange0to4000001:=0;signalseg_temp:std_logic_vector(5downto0);—-signaltemp_h:std_logic_vector(7downto0);--signaltemp_l:std_logic_vector(7downto0);signaltemp:std_logic;signaldata_temp0:std_logic_vector(15downto0);signaldecimal0:std_logic_vector(15downto0);signaldecimal1:std_logic_vector(15downto0);signaldecimal2:std_logic_vector(15downto0);signaldecimal3:std_logic_vector(15downto0);signaldata_temp1:std_logic_vector(7downto0);signalinteger0:std_logic_vector(7downto0);signalinteger1:std_logic_vector(7downto0);signalinteger2:std_logic_vector(7downto0);signalinteger3:std_logic_vector(7downto0);signalinteger4:std_logic_vector(7downto0);signalinteger5:std_logic_vector(7downto0);signalinteger6:std_logic_vector(7downto0);signalsign:std_logic_vector(7downto0);——----———--****************signalcount:integerrange0to51:=0;signalWRITE_BYTE_FLAG:integerrange0to4:=0;beginClkDivider:process(clk,clk_temp)beginifrising_edge(clk)thenif(count=24)thencount<=0;clk_temp〈=notclk_temp;elsecount〈=count+1;endif;endif;clk1m〈=clk_temp;endProcess;STATE_TRANSITION:process(STATE,clk1m)beginifrising_edge(clk1m)thenif(rst=’0')thenSTATE〈=RESET;elsecaseSTATEiswhenRESET=>—-**********LED2〈='0';--*************-LED3〈=’0';-—*********if(cnt〉=0andcnt<500)thendq<=’0';cnt<=cnt+1;STATE〈=RESET;elsif(cnt>=500andcnt<510)thendq<='Z’;cnt〈=cnt+1;STATE〈=RESET;elsif(cnt〉=510andcnt<750)thentemp<=dq;if(cnt=580)thentemp〈=dq;if(temp=’1’)thenLED<='0';elseLED<='1';endif;endif;cnt<=cnt+1;STATE<=RESET;elsif(cnt>=750)thencnt<=0;STATE〈=CMD_CC;endif;whenCMD_CC=〉LED2<=’1';LED3<='0';write_temp〈="11001100”;STATE<=WRITE_BYTE;whenWRITE_BYTE=>caseWRITE_BYTE_CNTiswhen0to7=>if(write_temp(WRITE_BYTE_CNT)='0')thenSTATE<=WRITE_LOW;LED3〈='1’;elseSTATE<=WRITE_HIGH;endif;WRITE_BYTE_CNT〈=WRITE_BYTE_CNT+1;when8=〉if(WRITE_BYTE_FLAG=0)then--第一次寫0XCC完畢STATE〈=CMD_44;WRITE_BYTE_FLAG<=1;elsif(WRITE_BYTE_FLAG=1)then-—寫0X44完畢STATE<=RESET;WRITE_BYTE_FLAG<=2;elsif(WRITE_BYTE_FLAG=2)then--第二次寫0XCC完畢STATE<=CMD_BE;WRITE_BYTE_FLAG〈=3;elsif(WRITE_BYTE_FLAG=3)then——寫0XBE完畢STATE<=GET_TMP;WRITE_BYTE_FLAG<=0;endif;WRITE_BYTE_CNT<=0;whenothers=>STATE〈=RESET;endcase;whenWRITE_LOW=>LED3<='1';caseWRITE_LOW_CNTiswhen0=>dq<='0';if(cnt=70)thencnt〈=0;WRITE_LOW_CNT〈=1;elsecnt<=cnt+1;endif;when1=>dq<=’Z';if(cnt=5)thencnt〈=0;WRITE_LOW_CNT〈=2;elsecnt<=cnt+1;endif;when2=>STATE<=WRITE_BYTE;WRITE_LOW_CNT<=0;whenothers=>WRITE_LOW_CNT〈=0;endcase;whenWRITE_HIGH=>caseWRITE_HIGH_CNTiswhen0=>dq<=’0’;if(cnt=8)thencnt<=0;WRITE_HIGH_CNT<=1;elsecnt<=cnt+1;endif;when1=>dq〈=’Z’;if(cnt=72)thencnt<=0;WRITE_HIGH_CNT<=2;elsecnt<=cnt+1;endif;when2=>STATE<=WRITE_BYTE;WRITE_HIGH_CNT<=0;whenothers=>WRITE_HIGH_CNT〈=0;endcase;whenCMD_44=>write_temp<="01000100”;STATE<=WRITE_BYTE;whenCMD_BE=>write_temp〈=”10111110”;STATE<=WRITE_BYTE;whenREAD_BIT=>caseREAD_BIT_CNTiswhen0=>dq<=’0';if(cnt=4)thenREAD_BIT_CNT<=1;cnt〈=0;elsecnt<=cnt+1;endif;when1=〉dq<='Z';if(cnt=4)thenREAD_BIT_CNT<=2;cnt〈=0;elsecnt<=cnt+1;endif;when2=〉dq〈=’Z';TMP_BIT<=dq;if(cnt=1)thenREAD_BIT_CNT<=3;cnt〈=0;elsecnt<=cnt+1;endif;when3=〉———---——---—----—----dq〈=’Z’;--—-—-—--—---------——if(cnt=55)thencnt<=0;READ_BIT_CNT〈=0;STATE〈=GET_TMP;elsecnt<=cnt+1;endif;whenothers=>READ_BIT_CNT<=0;endcase;whenWAIT800MS=>if(cnt>=100000)thenSTATE<=RESET;cnt<=0;elsecnt〈=cnt+1;STATE<=WAIT800MS;endif;whenGET_TMP=>caseGET_TMP_CNTiswhen0=〉STATE<=READ_BIT;GET_TMP_CNT<=GET_TMP_CNT+1;when1to12=〉STATE〈=READ_BIT;TMP(GET_TMP_CNT—1)<=TMP_BIT;GET_TMP_CNT〈=GET_TMP_CNT+1;when13=〉GET_TMP_CNT〈=0;STATE<=WAIT4MS;endcase;whenWAIT4MS=>if(cnt>=4000)then--STATE<=WAIT4MS;STATE〈=RESET;cnt<=0;elsecnt<=cnt+1;STATE〈=WAIT4MS;endif;whenothers=〉STATE<=RESET;LED〈=’0';LED2〈='0’;LED3<='0';endcase;endif;endif;endprocess;-—temp_h〈=TMP(11downto8);--temp_h(7downto4)<="1111";--temp_l<=TMP(7downto0);--——--—-——-**************************--temp_h〈='0'&TMP(11downto5);——temp_l〈="0000"&TMP(4downto1);--—---—--—--—--—-—-—----—-—------—-———----——-——---——-—---——--—-—----—-——-———-----—-————---process(seg_temp,clk)—-,temp_l,temp_h)beginifrising_edge(clk)thenif(seg_temp="111110”)then—-”1110")then-—"11110")thencaseTMP(3downto0)is-—temp_l(3downto0)isWHEN"0000"=>dataout〈="11000000";-—0WHEN"0001”=>dataout〈=”11111001”;--1WHEN”0010”=>dataout<=”10100100”;--2WHEN”0011”=〉dataout<="10110000";—-3WHEN"0100”=〉dataout〈="10011001";--4WHEN"0101"=〉dataout<="10010010";—-5WHEN"0110"=>dataout〈="10000010";-—6WHEN”0111"=>dataout<=”11111000";--7WHEN"1000"=〉dataout<=”10000000";——8WHEN”1001"=>dataout〈="10010000";--9WHEN"1010"=>dat(yī)aout<=”10001000”;—-aWHEN"1011”=〉dataout<="10000011";-—bWHEN”1100"=>dataout〈="11000110";—-cWHEN"1101”=>dataout<=”10100001";——dWHEN”1110”=>dataout<="10000110";--eWHEN"1111"=>dataout<=”10001110";--fWHENothers=>dataout<=”11000000";——0endcase;elsif(seg_temp=”111101")then--”1101")then--”11101”)thencaseTMP(7downto4)is--temp_l(7downto4)isWHEN”0000"=>dataout<=”11000000”;--0WHEN"0001"=〉dataout〈="11111001";--1WHEN"0010”=>dataout〈="10100100";——2WHEN"0011"=〉dataout<="10110000";--3WHEN"0100”=〉dat(yī)aout<="10011001";-—4WHEN”0101"=>dat(yī)aout<=”10010010”;—-5WHEN"0110"=>dataout<=”10000010";--6WHEN"0111”=>dat(yī)aout<=”11111000”;--7WHEN”1000"=>dataout〈="10000000";-—8WHEN"1001"=〉dataout<="10010000";——9WHEN"1010"=〉dataout<="10001000”;—-aWHEN”1011"=〉dat(yī)aout<="10000011";-—bWHEN"1100”=>dataout<="11000110";-—cWHEN"1101"=〉dataout<=”10100001";—-dWHEN"1110”=>dataout〈="10000110";--eWHEN"1111"=〉dataout〈="10001110";—-fWHENothers=>dataout〈="11000000”;-—0endcase;elsif(seg_temp=”111011")then——"1011”)then——”11011")thencaseTMP(11downto8)is-—temp_h(3downto0)isWHEN"0000"=>dat(yī)aout<="11000000";--0WHEN”0001"=〉dataout<=”11111001”;--1WHEN"0010"=>dataout<="10100100";—-2WHEN"0011”=〉dataout〈=”10110000";—-3WHEN"0100"=>dataout<="10011001";—-4WHEN”0101"=>dataout<=”10010010”;—-5WHEN”0110"=>dataout<=”10000010”;-—6WHEN"0111”=>dataout<="11111000";—-7WHEN"1000”=>dat(yī)aout<="10000000";--8WHEN"1001"=>dataout〈=”10010000";-—9WHEN"1010"=>dataout<="10001000";-—aWHEN"1011”=>dat(yī)aout〈=”10000011”;--bWHEN”1100”=〉dataout〈="11000110”;—-cWHEN"1101"=>dataout<="10100001";--dWHEN"1110”=>dataout<="10000110";—-eWHEN"1111”=〉dat(yī)aout<="10001110”;--fWHENothers=〉dataout<="11000000”;--0endcase;endif;endif;endprocess;seg<=seg_temp;process(clk1m)beginifrising_edge(clk1m)thenif(cnt2〈20)thencnt2<=cnt2+1;seg_temp〈=”111110";-—"1110”;--"11110";elsif(cnt2〈40ANDcnt2>=20)thencnt2〈=cnt2+1;seg_temp<=”111101”;—-”1101";—-"11101”;elsif(cnt2〈60ANDcnt2>=40)thencnt2〈=cnt2+1;seg_temp<=”111011”;--"1011”;—-"11011";elsecnt2〈=0;seg_temp<=”111110";--”1110";—-”11110";endif;endif;endprocess;endBehavioral;5實驗結論與研究展望5。1實驗結論將設計程序下載到實驗箱上運行調試后,最終結果與預期效果基本一致.DS18b20能夠正常的進行數據采集,并且由開發(fā)板顯示電路正常顯示。效果良好.在此次的數字溫度計設計過程中,更進一步地熟悉有關數字電路的知識和具體應用。學會了利Max+plus和QuarterII軟件進行原理圖的繪制,硬件描述語言VHDL的編寫,程序的仿真等工作。并能根據仿真結果分析設計的存在的問題和缺陷,從而進行程序的調試和完善。在設計電路中,往往是先仿真后連接實物圖,但有時候仿真和電路連接并不是完全一致的,例如在對具體模塊的仿真的過程中,往往沒有考慮到整體設計的層面以及與上下模塊接口的設計。再加上器件對信號的延時等問題,實際下載到實驗箱上后會出現(xiàn)一系列的問題,因此仿真圖和電路連接圖還是有一定區(qū)別的.此次的數字溫度計設計重在于按鍵的控制和各個模塊代碼的編寫,雖然能把鍵盤接口和各個模塊的代碼編寫出來,并能正常顯示,但對于各個模塊的優(yōu)化設計還有一定的缺陷和不足。總的來說,通過這次的設計實驗更進一步地增強了實驗的動手能力,對數字溫度計的工作原理也有了更加透徹的理解。5。2研究展望本設計是采用硬件描述語言和FPGA芯片相結合進行的數字溫度計的研究,從中可以看出EDA技術的發(fā)展在一定程度上實現(xiàn)了硬件設計的軟件化。設計的過程變的相對簡單,容易修改等優(yōu)點,相信隨著電子技術的發(fā)展,數字溫度計的功能會更加多樣化,滿足人們的各種需要.參考文獻:[1]陳躍東。數字秒表系統(tǒng)設計[J]。自動化與儀器儀表,2006,270(1):65~97。[2]廖常初.可編程序控制器應用技術(第三版)[M].重慶:重慶大學出版社,2000:85~153。[3]俞一鳴.Altera可編程邏輯器件的

溫馨提示

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

評論

0/150

提交評論