基于c51恒溫水箱及其收費系統(tǒng)設計 【畢業(yè)論文】_第1頁
已閱讀1頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)論文(設計)</p><p>  論文題目:恒溫水箱及其收費系統(tǒng)設計</p><p>  (英文) Design of constant temperature water tank and charge system</p><p>  所在學院 </p><p

2、>  專業(yè)班級 電氣工程及其自動化 </p><p>  學生姓名 學號 </p><p>  指導教師 職稱 </p><p>  完成日期 年 月 日</p><p><b>  摘 要<

3、;/b></p><p>  隨著現(xiàn)代工業(yè)的飛速發(fā)展,溫度控制已成為工業(yè)控制中必不可少的一部分。智能控制系統(tǒng)理論的快速發(fā)展及廣泛應用,使恒溫控制的智能溫控的實現(xiàn)成為可能。以51單片機為控制核心,由DS18B20承擔測溫以及數(shù)模轉(zhuǎn)換任務,單片機的輸出量通過繼電器控制恒溫控制設備的加熱與制冷,來實現(xiàn)水箱里的水溫恒定。同時單片機還通過繼電器來控制電磁閥開關,來決定是否需要放水。收費系統(tǒng)的設計是根據(jù)使用對象而設計的

4、。體現(xiàn)了恒溫水箱的商用價值。通過單片機接口電路的合理擴展系統(tǒng)可以根據(jù)誤差范圍自動調(diào)節(jié)控制量,從而提高溫度控制精度,通過霍爾開關來模擬收費系統(tǒng)中的刷卡收費,檢測水的使用時間來計算出需要收取的費用并顯示在數(shù)碼管上,同時具有人工輸入設定、顯示實時溫度等功能。</p><p>  關鍵詞:單片機;霍爾傳感器;恒溫控制;智能;商用開水器</p><p><b>  Abstract<

5、/b></p><p>  With the rapid development of modern industry, the temperature control has become an indispensable part of industrial control. The rapid development and wide application of intelligent contro

6、l systems theory, thermostat-controlled intelligent temperature control possible to achieve.51 single-chip microcomputer to control core, borne by the DS18B20 temperature measurement and digital-analog conversion tasks,

7、monolithic integrated circuit control through the relay output weight constant temperatur</p><p>  Key Words: Single-chip; Hall sensors; Constant temperature control; Intelligence; Commercial water he

8、ater</p><p><b>  目 錄</b></p><p><b>  1 引言1</b></p><p><b>  2 總體設計2</b></p><p><b>  3 硬件設計3</b></p><p> 

9、 3.1 單片機最小系統(tǒng)3</p><p>  3.1.1 復位電路4</p><p>  3.1.2 時鐘電路4</p><p>  3.2 矩陣鍵盤模塊5</p><p>  3.3 數(shù)碼管顯示模塊6</p><p>  3.3.1 數(shù)碼管驅(qū)動電路6</p><p>  3.3.

10、2 74HC573鎖存器電路7</p><p>  3.4 繼電器控制輸出模塊7</p><p>  3.5 DS18B20溫度測量模塊8</p><p>  3.5.1 DS18B20的特性9</p><p>  3.5.2 DS18B20的初始化和讀寫操作9</p><p>  3.5.3 DS18B20

11、內(nèi)部存儲內(nèi)容11</p><p>  3.6 霍爾傳感器電磁感應電路14</p><p><b>  4 軟件設計17</b></p><p>  4.1 總體程序流程圖17</p><p>  4.2 初始化流程圖17</p><p>  4.3 DS18B20軟件流程圖18<

12、/p><p>  4.3.1 DS18B20初始化19</p><p>  4.3.2 向DS18B20讀寫數(shù)據(jù)程序20</p><p>  4.3.3 溫度轉(zhuǎn)換程序22</p><p>  4.4 數(shù)碼管顯示流程圖24</p><p>  4.4.1 實時顯示程序26</p><p>

13、  4.4.2 設定值顯示程序28</p><p>  4.4.3 計費額顯示程序29</p><p>  4.5 矩陣鍵盤掃描流程圖30</p><p>  4.6 繼電器控制流程圖34</p><p><b>  致 謝39</b></p><p><b>  參考文獻

14、40</b></p><p>  附錄1 系統(tǒng)實物圖41</p><p>  附錄2 實驗原理圖42</p><p>  附錄3 畢業(yè)設計作品說明書43</p><p>  附錄4 PCB制作圖44</p><p>  附錄5 程序源代碼45</p><p><

15、;b>  1 引言</b></p><p>  隨著微電子技術和計算機技術的迅猛發(fā)展以及自動化控制理論和設計方法發(fā)展以及應用,溫度控制系統(tǒng)發(fā)展迅速,并在智能化、自適應、參數(shù)自整定方面取得一定成果。而當今,隨著電子行業(yè)的迅猛發(fā)展,計算機技術和傳感器技術的不斷改進,計算機和傳感器的價格也日益降低,可靠性逐步提高,用信息技術來實現(xiàn)水溫控制并提高控制的精確度不僅是可以達到的而且是容易實現(xiàn)的。用高新技術來

16、解決工業(yè)生產(chǎn)問題,排除生活用水問題,實施對水溫的控制已成為我們的任 </p><p>  務,此來加強工業(yè)化建設,提高人民的生活水平。</p><p>  采用單片機對溫度進行控制,不僅具有控制方便、簡單和靈活性大等優(yōu)點,而且可以大幅度提高被控溫度的技術指標,目前這種溫控技術在工農(nóng)業(yè)的科研生產(chǎn)和日常生活中得到廣泛應用。其中水溫測控溫度控制系統(tǒng)的功能可以實現(xiàn)常溫開始對自來水加溫,加熱到人

17、工設定的溫度的恒溫控制。而語音報警的溫度監(jiān)控</p><p>  儀可以通過控制晶閘管對溫度進行自動調(diào)節(jié),使被控環(huán)境的溫度達到要求的范</p><p>  圍,并能實現(xiàn)對所控區(qū)域環(huán)境溫度的自動監(jiān)控的遠程調(diào)控系統(tǒng)。</p><p><b>  2 總體設計</b></p><p>  恒溫控制系統(tǒng)在很多領域都有廣泛的應用,

18、例如恒溫水箱,大棚恒溫控制,暖房及其電熱水器等[1]。一般要求控制系統(tǒng)能夠準確的進行溫度檢測并顯示,并設定溫度上下限采取相應的措施:當溫度達到溫度的上限或者下限是分別控制繼電器采取不同措施實現(xiàn)對外部加熱設備以及制冷設備的控制, 能根據(jù)溫度變化的情況進行有序地升溫或降溫。</p><p>  本文所設計的恒溫控制系統(tǒng)主要由顯示部分、鍵盤設定部分、熱得快控制以及計費部分等四部分組成。顯示部分采用數(shù)字傳感器DS18B2

19、0作為溫度采集并將數(shù)據(jù)送到數(shù)碼管顯示;鍵盤部設定部分采用矩陣鍵盤,將輸入的數(shù)字送到數(shù)碼管顯示;熱得快控制部分CPU對當前溫度與設定溫度進行比較,對電磁閥進行開關操作;計費系統(tǒng)對外界是否有輸入進行判斷,來控制電磁閥的開關狀態(tài)。</p><p>  整體設計思路為一個閉環(huán)過程控制系統(tǒng),輸入量為鍵盤設定值,與之進行比較的是當前的輸出溫度,采用負反饋方式,前饋通道為PID調(diào)節(jié),控制對象水箱里的水溫[5]。為了對水箱里的水

20、溫進行實時檢測與控制,采用DS18B20進行溫度檢測。對于計費系統(tǒng),采用計時的計費方式,通過霍爾傳感器來模擬電磁刷卡系統(tǒng)的輸入感應環(huán)節(jié),一旦檢測到脈沖,電磁水閥打開,同時進行計費,當檢測第二個脈沖時,水閥關閉并且停止計費,顯示本次用水所花的費用。</p><p><b>  3 硬件設計</b></p><p>  本系統(tǒng)硬件主要有六大模塊組成:單片機最小系統(tǒng)、矩陣鍵

21、盤模塊、數(shù)碼管顯示模塊、繼電器控制輸出模塊、DS18B20溫度測量電路和霍爾傳感器電磁感應電路。系統(tǒng)總體的硬件結構如圖3-1.</p><p>  圖3-1 系統(tǒng)設計硬件原理結構</p><p>  3.1 單片機最小系統(tǒng)</p><p>  本系統(tǒng)的微處理器采用STC89C52芯片,是51系列單片機的其中一種。STC89C52是一種低功耗、高性能CMOS8位微控制

22、器,具有 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復位電路,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結構,全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)

23、邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選。</p><p>  所謂單片機最小系統(tǒng),或者稱為最小應用系統(tǒng),是指用最少的元器件組成的單片機可以工作的系統(tǒng)。對51系列單片機而言,最小系統(tǒng)一般包括:單片機、晶

24、振電路、復位電路。下圖3-2為單片機最小系統(tǒng)電路圖。</p><p>  圖3-2 單片機最小系統(tǒng)電路圖</p><p>  3.1.1 復位電路</p><p>  如圖3-3是典型51單片機復位電路,由電容串聯(lián)電阻組成,根據(jù)“電容電壓不能突變”的性質(zhì),當系統(tǒng)電壓一上電,RST引腳就會出現(xiàn)高電平,這個高電平持續(xù)的時間由電路中的RC值來決定。典型的51單片機當RST

25、腳的高電平持續(xù)兩個機器周期以上就會復位,所以,取適當?shù)腞C值就可以保證可靠的復位。根據(jù)數(shù)據(jù)手冊,一般推薦C取10u,R取1k。在這里我們是根據(jù)上述的值取得的。</p><p>  圖3-3 單片機復位電路</p><p>  3.1.2 時鐘電路</p><p>  每個單片機系統(tǒng)里都有晶振,全程是叫晶體震蕩器,在單片機系統(tǒng)里晶振的作用非常大,他結合單片機內(nèi)部的電

26、路,產(chǎn)生單片機所必須的時鐘頻率,單片機的一切指令的執(zhí)行都是建立在這個基礎上的,晶振的提供的時鐘頻率越高,那單片機的運行速度也就越快。</p><p>  典型的晶振若用于串口通訊的場合取11.0592MHz,因為可以準確地得到9600波特率和19200波特率,若用于產(chǎn)生精確的us級時鐘取12MHz,方便定時操作。時鐘電路如圖3-4所示。</p><p>  圖3-4 時鐘電路</p

27、><p>  3.2 矩陣鍵盤模塊</p><p>  在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用端口線則

28、只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。 </p><p>  矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知

29、是否有鍵按下了。具體的識別及編程方法在軟件設計中闡述。圖3-5為矩陣鍵盤電路圖。</p><p>  圖3-5 矩陣鍵盤電路圖</p><p>  3.3 數(shù)碼管顯示模塊</p><p>  數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管;</p&g

30、t;<p>  按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應用時應將公共極COM接到+5V,當某一字段發(fā)光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應用時應將公共極COM接到地線GND上,當某一

31、字段發(fā)光二極管的陽極為高電平時,相應字段就點亮,當某一字段的陽極為低電平時,相應字段就不亮。圖3-6為數(shù)碼管顯示電路。</p><p>  圖3-6 數(shù)碼管顯示電路</p><p>  3.3.1 數(shù)碼管驅(qū)動電路</p><p>  數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)

32、式兩類。</p><p>  一般來說,數(shù)碼管使用的電流靜態(tài)時,推薦使用10-15mA;動態(tài)時,16/1動態(tài)掃描時,平均電流為4-5mA,峰值電流50-60mA。由于直接I/O端口提供的電流太小,因此一般用三極管驅(qū)動。下圖3-7為數(shù)碼管驅(qū)動和電路。</p><p>  圖3-7 數(shù)碼管驅(qū)動電路</p><p>  3.3.2 74HC573鎖存器電路</p&

33、gt;<p>  鎖存器(Latch)是一種對脈沖電平敏感的存儲單元電路,它們可以在特定輸入脈沖電平作用下改變狀態(tài)。鎖存,就是把信號暫存以維持某種電平狀態(tài)。鎖存器的最主要作用是緩存,其次完成高速的控制其與慢速的外設的不同步問題,再其次是解決驅(qū)動的問題,最后是解決一個 I/O 口既能輸出也能輸入的問題。</p><p>  為了減少端口的使用量以及數(shù)碼管驅(qū)動,本設計采用74H573鎖存器對P0端口所定

34、義的段選和位選進行分時復用。圖3-8為74HC573鎖存器電路。</p><p>  圖3-8 74HC573 鎖存電路</p><p>  3.4 繼電器控制輸出模塊</p><p>  電磁繼電器是一種電子控制器件,它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路),通常應用于自動控制電路中,它實際上是用較小的電流。較低的電壓去控制較大電流。較高的電壓的

35、一種“自動開關”。故在電路中起著自動調(diào)節(jié)、安全保護、轉(zhuǎn)換電路等作用。</p><p>  電磁繼電器一般由 電磁鐵,銜鐵,彈簧片,觸點 等組成的,其工作電路由低壓控制電路和高壓工作電路兩部分構成。電磁繼電器還可以實現(xiàn)遠距離控制和自動化控制。只要在線圈兩端加上一定的電壓,線圈中就會流過一定的電流,從而產(chǎn)生電磁效應,銜鐵就會在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動銜鐵的動觸點與靜觸點(常開觸點)吸合。

36、當線圈斷電后,電磁的吸力也隨之消失,銜鐵就會在彈簧的反作用力返回原來的位置,使動觸點與原來的靜觸點(常閉觸點)釋放。這樣吸合、釋放,從而達到了在電路中的導通、切斷的目的。對于繼電器的“常開、常閉”觸點,可以這樣來區(qū)分:繼電器線圈未通電時處于斷開狀態(tài)的靜觸點,稱為“常開觸點”;處于接通狀態(tài)的靜觸點稱為“常閉觸點”。 下圖為電磁繼電器內(nèi)部結構。</p><p>  圖3-9 電磁繼電器內(nèi)部結構</p>

37、<p>  由于水閥和熱得快額定電壓為交流220伏,單片機不能直接對其進行控制,因此采用繼電器控制其開關操作。圖3-10為電磁繼電器的接口電路。</p><p>  圖3-10 電磁繼電器控制輸出電路</p><p>  3.5 DS18B20溫度測量模塊</p><p>  Dallas半導體公司的數(shù)字話溫度傳感器DS18B20是世界上第一片支持“一

38、線總線”接口的溫度傳感器。一線總線獨特而且經(jīng)濟的特點,使用戶可以輕松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構建引入全新概念?,F(xiàn)在,新一代的“DS18B20”體積更小、更經(jīng)濟、更靈活。</p><p>  3.5.1 DS18B20的特性</p><p>  DS18B20的測溫范圍為-55℃至+125℃,在-10℃至+85℃范圍內(nèi),精度為±0.5℃?,F(xiàn)場溫度直接一“一線總線”的數(shù)字方式傳

39、輸,大大提高系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量。如:環(huán)境控制、設備控制。測溫類消費電子產(chǎn)品等。</p><p>  DS18B20可以程序設定9~12位分辨率,精度為±0.5℃。分辨率設定及用戶設定的報警溫度存儲EEPROM中,掉電后依然保存。DS18B20的負壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀, 但不能正常工作。DS18B20內(nèi)部結構主要由四部分組成:64位光刻ROM 、溫度傳感器

40、、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。</p><p>  對DS18B20的溫度代碼的讀取,主要是單片機通過單線總線端口對DS18B20進行訪問并執(zhí)行序列。一般需要以下四個操作:初始化、ROM操作命令、存儲器操作命令和執(zhí)行/數(shù)據(jù)。</p><p>  3.5.2 DS18B20的初始化和讀寫操作</p><p>  1. DS18B20的初始化</

41、p><p>  (1) 先將數(shù)據(jù)線置為高電平“1”; </p><p> ?。?) 短暫延時(該時間要求的不是很嚴格,但是盡可能的短一點);</p><p> ?。?) 再將數(shù)據(jù)線拉到低電平“0”; </p><p>  (4) 延時750微秒左右(該時間的時間范圍可以從480到960微秒); </p><p>  (5)

42、 再將數(shù)據(jù)線拉到高電平“1”; </p><p> ?。?) 延時等待(若初始化成功則在15到60毫秒時間之內(nèi)產(chǎn)生一個由DS18B20所返回的低電平“0”。據(jù)該狀態(tài)可以來確定它的存在,但是應注意不能無限的進行等待,不然會使程序進入死循環(huán),所以要對其進行超時控制); </p><p>  (7) 若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時的時間從發(fā)出的高電平算起(第(5)步的

43、時間算起)至少要480微秒; </p><p> ?。?) 將數(shù)據(jù)線再次拉到高電平“1”后結束。</p><p>  初始化是通過單線總線的所有執(zhí)行(處理)都從一個初始化序列開始。初始化序列包括一個有總線控制器發(fā)出的復位脈沖和跟有其后從機發(fā)出的存在脈沖。存在脈沖讓總線控制器知道DS18B20在總線上且已經(jīng)準備好操作。DS18B20的初始化的時序圖如圖3-11所示。</p>&

44、lt;p>  圖3-11 DS18B20初始化時序圖</p><p>  2. DS18B20的寫操作</p><p>  (1) 數(shù)據(jù)線先置為低電平“0”; </p><p>  (2) 延時約為15微秒; </p><p> ?。?) 按從低位到高位的順序發(fā)送字節(jié)(一次只能發(fā)送一位); </p><p> 

45、?。?) 延時時間約為45微秒; </p><p> ?。?) 將數(shù)據(jù)線拉到高電平; </p><p> ?。?) 重復上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止; </p><p> ?。?) 最后將數(shù)據(jù)線拉高。</p><p>  DS18B20寫操作的時序圖如圖3-12所示。</p><p>  圖3-1

46、2 DS18B20寫操作時序圖</p><p>  3. DS18B20的讀操作</p><p> ?。?)將數(shù)據(jù)線拉高“1”; </p><p>  (2)延時2微秒; </p><p> ?。?)將數(shù)據(jù)線拉低“0”; </p><p> ?。?)延時15微秒; </p><p> ?。?)

47、將數(shù)據(jù)線拉高“1”; </p><p>  (6)延時15微秒; </p><p>  (7)讀數(shù)據(jù)線的狀態(tài)得到一個狀態(tài)位,并進行數(shù)據(jù)處理; </p><p> ?。?)延時30微秒;</p><p>  這里只要按以上操作將狀態(tài)位的各個bit按順序讀取。</p><p>  DS18B20的讀操作的時序圖如圖3-13

48、所示。</p><p>  圖3-13 DS18B20讀操作時序圖</p><p>  3.5.3 DS18B20內(nèi)部存儲內(nèi)容</p><p>  光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位 (28H)是產(chǎn)品類型標號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循

49、環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用 是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。 </p><p>  圖3-14是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0, 這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要

50、取反加1再乘于0.0625即可得到實際 溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FE6FH,-55℃的數(shù)字輸出為FC90H 。 表3-1是DS18B20的溫度轉(zhuǎn)換表。</p><p>  圖3-14 DS18B20溫度值格式圖</p><p>  表3-1 DS18B20的溫度轉(zhuǎn)換表</p>&

51、lt;p>  高速暫存存儲器由9個字節(jié)組成,其分配如表3-2所示。當溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在 高速暫存存儲器的第0個和第1個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。對應的溫度計算: 當符號位S=0時,直接將二進制位轉(zhuǎn)換為十進制;當S=1時,先將補碼變?yōu)樵a,再計算十進制值。第九個字節(jié)是冗余檢驗字節(jié)。 </p><p>  表3-2 DS18B20

52、暫存寄存器分布</p><p>  根據(jù)DS18B20的通訊協(xié)議,主機(單片機)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行 復位操作,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求主CPU將數(shù)據(jù)線下拉500微秒,然后 釋放,當DS18B20收到信號后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收

53、到此信號表示復位成功。</p><p>  在一切工作準備就緒時,單片機只需向DS18B20發(fā)送相關的指令,即可向DS18B20讀取數(shù)據(jù)。其中表3-3和表3-4分別為ROM指令表和RAM指令表。</p><p>  表3-3 ROM指令表</p><p>  表3-4 RAM指令表 </p><p>  由于DS18B20是單總線結構,因

54、此DS18B20的引腳數(shù)很少,只有3個引腳,分別是:兩個電源引腳和一個數(shù)據(jù)引腳,而且DS18B20與微機的接法很簡單。圖3-16為DS18B20的接線電路圖。</p><p>  圖3-16 DS18B20接線電路</p><p>  3.6 霍爾傳感器電磁感應電路</p><p>  霍爾效應是指在半導體薄片兩端通以控制電流,并在薄片的垂直方向施加磁感應強度為的

55、勻強磁場,則在垂直于電流和磁場的方向上,將產(chǎn)生電勢差為的霍爾電壓 。圖3-17為霍爾效應原理圖。</p><p>  圖3-17 霍爾效應原理圖</p><p>  霍爾開關是根據(jù)霍爾效應制成的元件。它具有無觸電、低功耗、長使用壽命、響應頻率高等特點,內(nèi)部采用環(huán)氧樹脂封灌成一體化,所以能在各類惡劣環(huán)境下可靠的工作?;魻栭_關可應用于接近開關,壓力開關,里程表等,作為一種新型的電器配件。&l

56、t;/p><p>  當一塊通有電流的金屬或半導體薄片垂直地放在磁場中時,薄片的兩端就會產(chǎn)生電位差,這種現(xiàn)象就稱為霍爾效應。兩端具有的電位差值稱為霍爾電勢U,其表達式為:,其中K為霍爾系數(shù),I為薄片中通過的電流,B為外加磁場(洛倫磁力Lorrentz)的磁感應強度,d是薄片的厚度。 </p><p>  霍爾開關就屬于這種有源磁電轉(zhuǎn)換器件,它是在霍爾效應原理的基礎上,利用集成封裝和組裝工藝制作

57、而成,它可方便的把磁輸入信號轉(zhuǎn)換成實際應用中的電信號,同時又具備工業(yè)場合實際應用易操作和可靠性的要求。由此可見,霍爾效應的靈敏度高低與外加磁場的磁感應強度成正比的關系。 </p><p>  霍爾開關的輸入端是以磁感應強度B 來表征的,當B 值達到一定的程度(如B1)時,霍爾開關內(nèi)部的觸發(fā)器翻轉(zhuǎn),霍爾開關的輸出電平狀態(tài)也隨之翻轉(zhuǎn)。輸出端一般采用晶體管輸出,和接近開關類似有NPN、PNP、常開型、常閉型、鎖存型(

58、雙極性)、雙信號輸出之分。</p><p>  如圖3-18所示,霍爾傳感器的磁感應為雙穩(wěn)態(tài)觸發(fā)方式,以保證可靠觸發(fā)。當外加的磁感應強度超過動作點時,傳感器輸出低電平,當磁感應強度降到動作點以下時,傳感器輸出電平不變,一直要降到釋放點時,傳感器才由低電平躍變?yōu)楦唠娖健Ec之間的滯后使開關動作更為可靠。</p><p>  圖3-18 霍爾開關特性</p><p> 

59、 本設計采用NJK系列霍爾傳感器是由電壓調(diào)整器,霍爾電壓發(fā)生器,差分放大器,施密特觸發(fā)器和集電極開路的輸出極組成的磁敏傳感器,其輸入為磁感應強度、輸出是一個數(shù)字電壓訊號。其特點是:電源電壓范圍廣(其工作電壓為5-24V直流電壓均可),開關頻率高(開關頻率為320KHZ),壽命長,體積小,安裝方便,能直接和晶體管及TTL或者MOS等邏輯電路接口。圖3-19為霍爾傳感器與單片機的接線電路。</p><p>  圖3-

60、19 霍爾開關接線電路</p><p><b>  4 軟件設計</b></p><p>  恒溫水箱及其收費系統(tǒng)的軟件設計主要包括六大模塊組成:初始化,DS18B20軟件模塊,霍爾傳感器檢測模塊,矩陣鍵盤掃描模塊,數(shù)碼管顯示模塊,繼電器控制模塊。</p><p>  4.1 總體程序流程圖</p><p>  整個系

61、統(tǒng)的總體程序如圖4-1所示。</p><p>  圖4-1 總體程序流程圖</p><p>  4.2 初始化流程圖</p><p>  初始化程序流程圖如圖4-2所示。</p><p>  圖4-2 初始化程序流程圖</p><p><b>  具體程序如下:</b></p>

62、<p>  unsigned int num=1000;</p><p>  unsigned int i=0,j=0;</p><p><b>  RL=0;</b></p><p><b>  start=0;</b></p><p><b>  flag=0;</b&

63、gt;</p><p>  4.3 DS18B20軟件流程圖</p><p>  DS18B20的軟件設計根據(jù)對DS18B20讀寫操作的時序圖,來獲取當前溫度值。DS18B20軟件流程圖如圖4-3所示。</p><p>  圖4-3 DS18B20軟件設計流程圖</p><p>  4.3.1 DS18B20初始化</p>

64、<p>  讓DS18B20一段相對長時間低電平, 然后一段相對非常短時間高電平, 即可對DS18B20進行初始化。初始化是單片機向DS18B20進行訪問并讀取數(shù)據(jù)的必要步驟,無論什么命令,首先都要進行初始化。具體程序如下:</p><p>  void dsInit()</p><p><b>  {</b></p><p>  /

65、/對于11.0592MHz時鐘, unsigned int型的i, 作一個i++操作的時間大于為8us</p><p>  unsigned int i; </p><p>  ds = 0;//將DQ拉低,復位</p><p>  i = 100; //拉低約800us, 符合協(xié)議要求的480us以上</p><p>  whil

66、e(i>0) i--;</p><p>  ds = 1; //產(chǎn)生一個上升沿, 進入等待應答狀態(tài)</p><p>  i = 4; </p><p>  while(i>0) i--; //等待狀態(tài)32us</p><p><b>  }</b></p><p> 

67、 //等待DS18B20響應子程序</p><p>  void dsWait()</p><p><b>  {</b></p><p>  unsigned int i;</p><p>  while(ds); </p><p>  while(~ds); //檢測到應答脈沖</p

68、><p><b>  i = 4;</b></p><p>  while(i > 0) i--;</p><p><b>  }</b></p><p>  4.3.2 向DS18B20讀寫數(shù)據(jù)程序</p><p>  將讀到的數(shù)據(jù)存儲起來,由于單片機的操作速度比DS18

69、B20的存儲速度來的快,因此單片機需要延遲時間,等待DS18B20存儲完成才進行下一步工作。具體程序如下所示:</p><p>  ////向DS18B20讀取一位數(shù)據(jù)</p><p>  bit readBit()</p><p><b>  {</b></p><p>  unsigned int i;</p&

70、gt;<p><b>  bit b;</b></p><p><b>  ds = 0;</b></p><p>  i++; //延時約8us, 符合協(xié)議要求至少保持1us</p><p><b>  ds = 1; </b></p><p>  i++;

71、 i++; //延時約16us, 符合協(xié)議要求的至少延時15us以上</p><p><b>  b = ds;</b></p><p><b>  i = 8; </b></p><p>  while(i>0) i--; //延時約64us, 符合讀時隙不低于60us要求</p><p&g

72、t;<b>  return b;</b></p><p><b>  }</b></p><p>  //讀取一字節(jié)數(shù)據(jù), 通過調(diào)用readBit()來實現(xiàn)</p><p>  unsigned char readByte()</p><p><b>  {</b></

73、p><p>  unsigned int i;</p><p>  unsigned char j, dat;</p><p><b>  dat = 0;</b></p><p>  for(i=0; i<8; i++)</p><p><b>  {</b></p

74、><p>  j = readBit();</p><p>  //最先讀出的是最低位數(shù)據(jù)</p><p>  dat = (j << 7) | (dat >> 1);</p><p><b>  }</b></p><p>  return dat;</p>&

75、lt;p><b>  }</b></p><p>  //向DS18B20寫入一字節(jié)數(shù)據(jù)</p><p>  void writeByte(unsigned char dat)</p><p><b>  {</b></p><p>  unsigned int i;</p>&

76、lt;p>  unsigned char j;</p><p><b>  bit b;</b></p><p>  for(j = 0; j < 8; j++)</p><p><b>  {</b></p><p>  b = dat & 0x01;</p>&

77、lt;p>  dat >>= 1;</p><p>  //寫"1", 將DQ拉低15us后, 在15us~60us內(nèi)將DQ拉高, 即完成寫1</p><p>  if(b) //寫1</p><p><b>  {</b></p><p><b>  ds

78、= 0;</b></p><p>  i++; i++; //拉低約16us, 符號要求15~60us內(nèi)</p><p>  ds = 1; </p><p><b>  i = 8; </b></p><p>  while(i>0) </p><p>  i--;

79、//延時約64us, 符合寫時隙不低于60us要求</p><p><b>  }</b></p><p>  else //寫"0", 將DQ拉低60us~120us</p><p><b>  {</b></p><p><b>  ds = 0;</b&g

80、t;</p><p>  i = 8; while(i>0) i--; //拉低約64us, 符號要求</p><p><b>  ds = 1;</b></p><p>  i++; i++; //整個寫0時隙過程已經(jīng)超過60us, 這里就不用像寫1那樣, 再延時64us了</p><p><b>

81、  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.3.3 溫度轉(zhuǎn)換程序</p><p>  單片機讀取DS18B20 16位二進制數(shù)據(jù)時,所以需要把后11位的二進制轉(zhuǎn)化為十進制進制后在乘以0.0625便為所測的溫度。前

82、5個數(shù)字為符號位,當前5位為1時,讀取的溫度為負數(shù);當前5位為0時,讀取的溫度為正數(shù)。因此可知,DS18B20轉(zhuǎn)換的最小精度為0.0625℃。具體程序如下:</p><p>  //向DS18B20發(fā)送溫度轉(zhuǎn)換命令</p><p>  void sendChangeCmd()</p><p><b>  {</b></p><

83、;p>  dsInit(); //初始化DS18B20, 無論什么命令, 首先都要發(fā)起初始化</p><p>  dsWait(); //等待DS18B20應答</p><p>  delay(1); //延時1ms, 因為DS18B20會拉低DQ 60~240us作為應答信號</p><p>  writeByte(0xcc); //寫入跳過

84、序列號命令字 Skip Rom</p><p>  writeByte(0x44); //寫入溫度轉(zhuǎn)換命令字 Convert T</p><p><b>  }</b></p><p>  //向DS18B20發(fā)送讀取數(shù)據(jù)命令</p><p>  void sendReadCmd()</p><p&g

85、t;<b>  {</b></p><p><b>  dsInit();</b></p><p><b>  dsWait();</b></p><p><b>  delay(1);</b></p><p>  writeByte(0xcc); //寫

86、入跳過序列號命令字 Skip Rom</p><p>  writeByte(0xbe); //寫入讀取數(shù)據(jù)令字 Read Scratchpad</p><p><b>  }</b></p><p><b>  //獲取當前溫度值</b></p><p>  int getTmpValue()&l

87、t;/p><p><b>  {</b></p><p>  unsigned int tmpvalue;</p><p>  int value; //存放溫度數(shù)值</p><p><b>  float t;</b></p><p>  unsigned char low,

88、high;</p><p>  sendReadCmd();</p><p>  //連續(xù)讀取兩個字節(jié)數(shù)據(jù)</p><p>  low = readByte(); </p><p>  high = readByte();</p><p>  //將高低兩個字節(jié)合成一個整形變量</p><p>

89、  //計算機中對于負數(shù)是利用補碼來表示的</p><p>  //若是負值, 讀取出來的數(shù)值是用補碼表示的, 可直接賦值給int型的value</p><p>  tmpvalue = high;</p><p>  tmpvalue <<= 8;</p><p>  tmpvalue |= low;</p>&l

90、t;p>  value = tmpvalue;</p><p>  //使用DS18B20的默認分辨率12位, 精確度為0.0625度, 即讀回數(shù)據(jù)的最低位代表0.0625度</p><p>  t = value * 0.0625;</p><p>  //將它放大100倍, 使顯示時可顯示小數(shù)點后兩位, 并對小數(shù)點后第三進行4舍5入</p>

91、<p>  //如t=11.0625, 進行計數(shù)后, 得到value = 1106, 即11.06 度</p><p>  //如t=-11.0625, 進行計數(shù)后, 得到value = -1106, 即-11.06 度</p><p>  value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0減0.5</

92、p><p>  return value;</p><p><b>  }</b></p><p>  4.4 數(shù)碼管顯示流程圖</p><p>  數(shù)碼管顯示主要包括3部分:實時顯示,設定值顯示,計費額顯示。它們只是獲取的數(shù)值不同,顯示方式和原理是一樣的。本設計采用的是四位一體八位共陽數(shù)碼管,用軟件對數(shù)碼管進行控制一般采用

93、編碼的形式,通過調(diào)用數(shù)組來達到有序的顯示數(shù)值效果,要使每位數(shù)碼管顯示不同數(shù)值必須采用動態(tài)顯示的方式。所謂動態(tài)顯示,就是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp "的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位元選通控制電路,位元選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位元選通COM端電路的控制,所以我

94、們只要將需要顯示的數(shù)碼管的選通控制打開,該位元就顯示出字形,沒有選通的數(shù)碼管就不會亮。表4-1為共陽數(shù)碼管編碼表。</p><p>  表4-1 共陽數(shù)碼管編碼表</p><p>  透過分時輪流控制各個LED數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位元數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極體的余輝效應,盡管實際上各位數(shù)碼管

95、并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示資料,不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O口,而且功耗更低。數(shù)組變量定義程序如下:</p><p>  //0-F數(shù)碼管的編碼(共陽極)</p><p>  unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,</p><

96、;p>  0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};</p><p>  //0-9數(shù)碼管的編碼(共陽極), 帶小數(shù)點</p><p>  unsigned char code tableWidthDot[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, </p>

97、<p>  0x78, 0x00, 0x10};</p><p>  圖4-4為數(shù)碼管顯示程序流程圖。</p><p>  圖4-4 數(shù)碼管顯示流程圖</p><p>  4.4.1 實時顯示程序</p><p>  實時顯示數(shù)據(jù)是從DS18B20通過溫度數(shù)據(jù)獲取并且進行溫度轉(zhuǎn)換中得到的。具體程序如下:</p>

98、<p>  void display(int v) </p><p><b>  {</b></p><p>  unsigned char count;</p><p>  unsigned int tmp = abs(v);</p><p>  datas[0] = tmp / 1000;</p>

99、;<p>  datas[1] = tmp % 1000 / 100;</p><p>  datas[2] = tmp % 100 / 10;</p><p>  datas[3] = tmp % 10;</p><p><b>  if(v < 0)</b></p><p><b>  

100、{</b></p><p>  //關位選, 去除對上一位的影響</p><p>  P0 = 0xff; </p><p>  wela = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  wela = 0;</b></p><p><b>  //段選

101、</b></p><p>  P0 = 0xbf; //顯示"-"號</p><p>  dula = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  dula = 0;</b></p><p><b>  //位選</b></p>

102、<p>  P0 = 0xfe; </p><p>  wela = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  wela = 0;</b></p><p>  delay(timeCount); </p><p><b>  } </b></p>

103、;<p>  for(count = 0; count <4; count++)</p><p><b>  {</b></p><p>  //關位選, 去除對上一位的影響</p><p>  P0 = 0xff; </p><p>  wela = 1; //打開鎖存, 給它一個下降沿量</

104、p><p><b>  wela = 0;</b></p><p><b>  //段選</b></p><p>  if(count != 1)</p><p><b>  {</b></p><p>  if((count == 0 &&

105、 datas[count] == 0) )</p><p><b>  {</b></p><p>  P0 = 0xff; //當最高位為0時, 不作顯示</p><p><b>  }</b></p><p><b>  else</b></p><p&

106、gt;  P0 = table[datas[count]]; //顯示數(shù)字</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  P0 = tableWidthDot[datas[co

107、unt]]; //顯示帶小數(shù)點數(shù)字</p><p><b>  }</b></p><p>  dula = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  dula = 0;</b></p><p><b>  //位選 </b></p>

108、<p>  P0=_cror_(0xf7,count); //選擇第(count + 1) 個數(shù)碼管</p><p>  wela = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  wela = 0;</b></p><p>  delay(timeCount); </p><p><

109、;b>  }</b></p><p><b>  }</b></p><p>  4.4.2 設定值顯示程序</p><p>  設定值顯示數(shù)據(jù)是從矩陣鍵盤掃描按鍵的數(shù)值得到的。具體程序如下:</p><p>  void setdisplay()</p><p><b&g

110、t;  {</b></p><p>  unsigned int count;</p><p>  if(flag>5)</p><p><b>  flag=1;</b></p><p>  if(set==1)</p><p><b>  {</b>&

111、lt;/p><p>  for(count =0 ; count <flag-1; count++)</p><p><b>  {</b></p><p>  P0 = 0xff; //關位選, 去除對上一位的影響</p><p>  wela = 1; //打開鎖存, 給它一個下降沿量</p>&l

112、t;p><b>  wela = 0;</b></p><p>  //段 選 </p><p>  if(count!=1)</p><p>  P0 = table[number[count]]; //顯示不為零第一位數(shù)字</p><p><b>  else</b></p

113、><p>  P0 = tableWidthDot[number[count]]; //顯示帶小數(shù)點數(shù)字</p><p>  dula = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  dula = 0;</b></p><p><b>  //位選 </b></p>

114、<p>  P0=_cror_(0x7f,count); //選擇第(count + 1) 個數(shù)碼管</p><p>  wela = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  wela = 0;</b></p><p>  delay(timeCount); </p><p>&

115、lt;b>  }</b></p><p><b>  } </b></p><p><b>  } </b></p><p>  4.4.3 計費額顯示程序</p><p>  void chargedisplay()</p><p><

116、;b>  {</b></p><p>  unsigned char count;</p><p>  timer[0] = num / 1000;</p><p>  timer[1] = num% 1000 / 100;</p><p>  timer[2] = num% 100 / 10;</p><

117、;p>  timer[3] = num% 10;</p><p>  for(count = 0; count <4; count++)</p><p><b>  {</b></p><p>  //關位選, 去除對上一位的影響</p><p>  P0 = 0xff; </p><p&

118、gt;  wela = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  wela = 0;</b></p><p><b>  //段選</b></p><p>  if(count != 1)</p><p><b>  {</b></p>

119、<p>  if((count == 0 && timer[count] == 0) )</p><p><b>  {</b></p><p>  P0 = 0xff; //當最高位為0時, 不作顯示</p><p><b>  }</b></p><p><b&g

120、t;  else</b></p><p>  P0 = table[timer[count]]; //顯示數(shù)字</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>&l

121、t;p>  P0 = tableWidthDot[timer[count]]; //顯示帶小數(shù)點數(shù)字</p><p><b>  }</b></p><p>  dula = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  dula = 0;</b></p><p>&l

122、t;b>  //位選 </b></p><p>  P0=_cror_(0xf7,count); //選擇第(count + 1) 個數(shù)碼管</p><p>  wela = 1; //打開鎖存, 給它一個下降沿量</p><p><b>  wela = 0;</b></p><p>  delay(

123、timeCount); </p><p><b>  }</b></p><p><b>  }</b></p><p>  4.5 矩陣鍵盤掃描流程圖</p><p>  其思路是為了提高I/O口的利用率,采用矩陣式鍵盤,將所有的列都拉高,將所有列拉低,來讀取每一行的輸入值,一旦某一行右鍵按下并且

124、被檢測到,則相應的列輸入將為低電平,從而讀出相應的編碼并且賦予對應的數(shù)值,然后返回。</p><p>  其中值得注意的是,由于按鍵設計的機械性,按鍵在閉合和斷開時,觸點會存在抖動現(xiàn)象,如圖4-5所示。若不消除抖動的話,人的手指在按下的瞬間單片機容易會誤操作。同理松手也會有出現(xiàn)這樣的情況,不利于操作,因此應該加入消抖操作,一般都采用軟件去抖方式。</p><p>  圖4-5 按鍵抖動實

溫馨提示

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

評論

0/150

提交評論