2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  大連海事大學</b></p><p><b>  畢業(yè)論文</b></p><p><b>  二零一二年六月</b></p><p>  基于C51單片機的船舶輔鍋爐水位自動控制系統(tǒng)設計</p><p>  專業(yè)班級:輪機管理18班</p&

2、gt;<p>  姓 名: 王 志 文 </p><p>  指導老師: </p><p><b>  輪機工程學院</b></p><p><b>  摘要</b></p><p>  鍋爐水位是鍋爐運行時重要的參數(shù),水位過低可能會發(fā)生鍋爐干燒現(xiàn)象

3、,導致鍋爐燒壞。水位過高會導致蒸汽帶水過多,蒸汽品質下降,會引起設備腐蝕、水擊,燒壞過熱器管子。</p><p>  本文在“育鯤”輪輔鍋爐現(xiàn)有設備的基礎上,設計了一套簡易的鍋爐水位自動控制系統(tǒng),由于育鯤輪通常是在航行時使用廢氣鍋爐,停泊時使用燃油鍋爐,對水位的控制不需要很精確,所以本系統(tǒng)對燃油鍋爐水位采用單沖量控制。系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)兩部分組成。硬件系統(tǒng)和軟件系統(tǒng)都采用模塊化設計,將系統(tǒng)分為若干模塊進行初

4、步設計,然后將各個模塊進行整合,經過改進最終形成一個完善的控制系統(tǒng)。用仿真軟件Proteus和編程軟件Keil相結合,完成系統(tǒng)硬件設計和軟件編程,程序由C語言編寫。硬件系統(tǒng)以STC89C52單片機為核心,包括模擬量采集輸入模塊、單片機最小單元模塊、報警模塊、鍵盤模塊、顯示模塊及端口擴展模塊。軟件系統(tǒng)包括初始化模塊、中斷模塊、數(shù)據(jù)處理模塊、鍵盤模塊、顯示模塊、A/D轉換模塊和報警模塊。通過硬件系統(tǒng)和軟件系統(tǒng)相結合,實現(xiàn)具有液位檢測和控制的

5、雙重功能,同時也具有報警和顯示的功能,并能通過鍵盤對參數(shù)值進行手動設定。最后,提出了顯示模塊的合理改進方案,并且在育鯤輪現(xiàn)有的通信網(wǎng)絡基礎上設計了通信模塊,使系統(tǒng)功能更加完善。</p><p>  關鍵詞:鍋爐液位,單片機,單沖量控制,模塊化</p><p><b>  ABSTRACT</b></p><p>  Water level is

6、 an important parameter when a boiler is running. The phenomenon of distilling without water may occur when the water level is too low, and the boiler may be burn down finally. Due to high water level, the quality of the

7、 steam will become worse. What’s worse, it may also cause corrosion and water attack of equipments, and burn down the super-heater coil.</p><p>  This paper aims at design a simple set of automatic control s

8、ystem of the boiler’s water level based on existing equipments of the “YU KUN” vessel. Generally, exhaust gas boiler is in service during sailing and auxiliary oil-burning boiler is in service in harbor. Thus, the contro

9、l of water level does not need to be very precisely. This control system applies single pulse control to the water level. It is composed of two parts: hardware system and software system. They are all modularized. Initi&

10、lt;/p><p>  Keywords: Boiler, Water level, Microcontroller, Single pulse control, Modularization</p><p><b>  目錄</b></p><p><b>  1 前言1</b></p><p>&

11、lt;b>  1.1課題意義1</b></p><p><b>  1.2發(fā)展狀況1</b></p><p>  2 硬件系統(tǒng)設計2</p><p>  2.1 系統(tǒng)總體設計2</p><p>  2.1.1 系統(tǒng)功能2</p><p>  2.1.2 硬件系統(tǒng)示意圖

12、2</p><p>  2.2 各硬件模塊設計3</p><p>  2.2.1 模擬量采集輸入模塊3</p><p>  2.2.2 單片機最小單元模塊5</p><p>  2.2.3 I/O端口擴展模塊7</p><p>  2.2.4 鍵盤模塊9</p><p>  2.2.5

13、 顯示模塊11</p><p>  2.2.6 報警模塊12</p><p>  2.3 硬件系統(tǒng)總原理圖13</p><p>  3 軟件系統(tǒng)設計14</p><p>  3.1 軟件系統(tǒng)總體設計14</p><p>  3.1.1 軟件程序流程14</p><p>  3.1.2

14、 軟件程序主函數(shù)15</p><p>  3.2 軟件各模塊程序設計16</p><p>  3.2.1 初始化模塊16</p><p>  3.2.2 AD轉換模塊17</p><p>  3.2.3 數(shù)據(jù)處理模塊18</p><p>  3.2.4 顯示模塊20</p><p>

15、  3.2.5 報警模塊23</p><p>  3.2.6 鍵盤模塊25</p><p>  3.2.7 中斷模塊28</p><p>  4 系統(tǒng)功能改進與擴展30</p><p>  4.1 顯示模塊改進30</p><p>  4.1.1 LCD1602液晶顯示30</p><

16、p>  4.1.2 液晶顯示程序設計31</p><p>  4.2通信功能擴展36</p><p>  4.2.1 RS-485通信36</p><p>  4.2.2通信模塊設計36</p><p><b>  5總結38</b></p><p><b>  參考文

17、獻39</b></p><p><b>  致謝39</b></p><p><b>  1 前言</b></p><p><b>  1.1課題意義 </b></p><p>  在以內燃機為動力裝置的船上,輔鍋爐是船舶的重要設備,產生的蒸汽主要用于加熱主、副

18、機所用的燃油,以及供廚房及空調等用汽。因此具有蒸發(fā)量較小、工作壓力較低、對水位控制質量要求不高的特點[4]。而鍋爐水位是鍋爐運行時重要的參數(shù),水位過低可能會發(fā)生鍋爐干燒現(xiàn)象,導致鍋爐燒壞。水位過高會導致蒸汽帶水過多,蒸汽品質下降,會引起設備腐蝕、水擊,燒壞過熱器管子。當前船舶機艙自動化的要求越來越高,鍋爐的自動控制在實現(xiàn)無人機艙中是必不可少的。目前,國內較數(shù)船舶的輔鍋爐的自動控制仍由繼電器、接觸器、時間繼電器等組成,實現(xiàn)各種控制功能,它

19、們的共同特點是線路復雜、可靠性差、有時容易出現(xiàn)誤動作,特別是觸頭氧化及鐵芯與銜鐵弄臟后的吸力不足,機械運動部件運動不靈活而出現(xiàn)被卡燒壞線圈等故障,給維護過程帶來極大不便,甚至會影響正常營運工作,而且,控制設備體積大、數(shù)量多、重量重、價格貴。因此應用更先進的控制方法是很有必要的。</p><p>  目前應用較為廣泛的可作為傳統(tǒng)繼電接觸器控制系統(tǒng)的替代產品主要有可編程控制器(PLC)和單片機(MCU),都可以通過軟

20、件來改變控制過程,而且都具有體積小、組裝靈活、編程簡單、抗干擾及可靠性高等特點。鍋爐自控系統(tǒng)是一個典型的大慣性、大滯后、多變量的過程控制系統(tǒng) ,其涉及到壓力、溫度、水位等多個物理參數(shù)檢測與控制 ,需要同時控制循環(huán)泵、補水泵、加熱裝置 自動排除故障等。由于模擬輸入量多 ,需要的硬件電路也多 ,控制起來不簡單。現(xiàn)階段 ,很多廠家都是利用 PLC對鍋爐進行控制 ,其自動化程度和可靠性較高 ,但是成本也很高 ,而且程序修改和參數(shù)設置比較困難。以

21、單片機為控制核心的智能控制系統(tǒng)由于成本低、可靠性好、安全性高 ,受到了更多企業(yè)的喜愛[16]??傊?,以單片機為核心的控制系統(tǒng)經濟性更高,體積更小,控制更靈活,并可以以模塊化更換來代替維修。單片機控制系統(tǒng)必然會得到更廣泛的應用,在工業(yè)控制現(xiàn)場具有良好的應用前景。</p><p>  本設計以鍋爐液位的自動控制為例,實現(xiàn)了以單片機為核心的自動控制系統(tǒng),克服了傳統(tǒng)控制鍋爐液位的缺陷,突顯了單片機控制系統(tǒng)的優(yōu)勢。<

22、/p><p><b>  1.2發(fā)展狀況 </b></p><p>  鍋爐作為能源轉換和消耗的設備已有兩百多年的歷史了,處于歷史的原因,我國鍋爐自動控制的水平一直都較低,鍋爐微機控制是近幾年是近年來開發(fā)的新技術,它是微型計算機軟件、硬件、自動控制、鍋爐節(jié)能等幾項技術密結合的產物。工業(yè)鍋爐采用微機控制和原有控制方式相比具有明顯優(yōu)勢,能夠直觀而集中的顯示鍋爐各運行參數(shù),顯示

23、液位壓力溫度的狀態(tài)。而作為鍋爐控制裝置,其主要任務是保證鍋爐的安全、穩(wěn)定、濟運行,減輕操作人員的勞動強度。在采用計算機控制的鍋爐控制系統(tǒng)中,有十分周到的安全機制,能夠杜絕由于人為疏忽造成的重大事故。 鍋爐工業(yè)的迅猛發(fā)展是近幾年的事情,國外的鍋爐工業(yè)50年代發(fā)展最快,70年代達到高峰。一直以來,用單片機實現(xiàn)鍋爐的控制是控制領域的一個典型的問題,伴隨著控制理論和技術的法發(fā)展,鍋爐自動化控制水平也在逐漸提高,鍋爐的自動控制,經歷了30年代的單

24、參數(shù)儀表控制,40年代的組成儀表復合參數(shù)儀表控制,以及60年代興起的計算機過程控制幾個階段。而用單片機實現(xiàn)鍋爐的控制,也是近幾年才發(fā)展起來的,是一個逐漸深入的過程,雖然與其他發(fā)達國家相比還存在差距,但是在此方面的進步卻是很大的[13]?,F(xiàn)在船舶上應用最多的鍋</p><p><b>  2 硬件系統(tǒng)設計</b></p><p>  2.1 系統(tǒng)總體設計</p&g

25、t;<p>  2.1.1 系統(tǒng)功能</p><p>  本系統(tǒng)采用單沖量的控制方法來完成對燃油鍋爐水位的控制,確保鍋爐運行的安全性。本系統(tǒng)能夠完成以下功能:</p><p>  a)能夠顯示鍋爐當前水位值;</p><p>  b)當水位高于最高水位和低于最低水位時能夠發(fā)出報警,并能夠自動控制供水泵的啟停和燃燒器供油的緊急切斷;</p>

26、<p>  c)能夠通過鍵盤對最高/低水位、供水泵啟停水位和燃燒器供油切斷水位進行人工調節(jié)。</p><p>  本系統(tǒng)以STC89C52單片機為核心,包括模擬量采集輸入模塊、單片機最小單元模塊、端口擴展模塊、報警模塊、按鍵及顯示模塊、數(shù)字量輸出模塊。模擬量采集輸入模塊包括液位傳感器、A/D轉換器,將模擬量轉換成數(shù)字量,再將數(shù)據(jù)傳給單片機進行處理。單片機單元模塊即單片機最小單元,使單片機能正常工作。串

27、口擴展模塊通過端口擴展芯片8255A完成人機交互的一些功能。按鍵及顯示模塊由獨立式按鍵鍵盤和3位數(shù)碼管及相應的驅動電路組成。報警模塊將單片機的控制數(shù)據(jù)通過驅動芯片控制相應發(fā)光二極管、繼電器和報警器的工作,實現(xiàn)對燃油鍋爐各種工作狀態(tài)的監(jiān)視報警。</p><p>  2.1.2 硬件系統(tǒng)示意圖</p><p>  硬件系統(tǒng)是由多個子模塊連接而成的,以STC89C52單片機為核心,包括模擬量采集

28、輸入模塊、單片機最小單元模塊、報警模塊、鍵盤模塊、顯示模塊及端口擴展模塊。硬件系統(tǒng)示意圖如圖1所示:</p><p>  2.2 各硬件模塊設計</p><p>  2.2.1 模擬量采集輸入模塊</p><p>  本模塊采用NRGT26-1S型水位監(jiān)測單元來采集爐內水位,輸出的電流模擬信號經電流—電壓轉換電路轉換成電壓信號,模數(shù)轉換器(ADC0804)將采集到的

29、電壓信號轉換為數(shù)字信號,然后把數(shù)字信號經過8255A擴展芯片送入單片機進行處理。此模塊原理圖如圖2所示</p><p>  圖2 模擬量采集輸入模塊原理圖</p><p><b> ?。?)水位監(jiān)測單元</b></p><p>  NRGT26-1S型水位監(jiān)測單元,根據(jù)電容測量原理,可以監(jiān)測導電性和絕緣的液體液位差。在電極盒內有一個液位變送

30、器,可以產生4-20mA的輸出電流,不需要額外的轉換設備,特別適合持續(xù)監(jiān)測和遠程指示液位。最大工作壓力/溫度:2bar/238°C。水位檢測單元接線圖[17]和外形示意圖[17]如圖3、4所示:</p><p>  圖3 水位監(jiān)測單元接線圖 圖4 水位監(jiān)測單元示意圖</p><p> ?。?)電流—電壓轉換電路</p><p>

31、;  水位監(jiān)測單元產生的是4-20mA的標準電流,要對模擬量信號在ADC中進行AD轉換就要將電流信號轉換成電壓信號。</p><p>  應用運放進行電流測量有兩種方法,一是利用電流在電阻上的壓降(電路初步設計階段就采用的此方法),再進行電壓放大;二是直接將電流注入運放的求和點。應用這樣的電路,轉換得到的電壓信號可以直接加在運放的輸入端。這種轉換方式有兩個不妥之處:首先,電阻的加入會破壞電路原來的狀態(tài),帶來測量上

32、的誤差;其次,運放的失調電壓也會被運放自己放大,并加到測量的輸出結果上。使用“電流-電壓”轉換電路可以避免上述兩個不足,其電路結構如圖5所示:</p><p>  圖5 電流-電壓轉換電路</p><p>  輸入電流直接接入運放的求和點(反相輸入端),運放輸出端將通過R1向求和點提供同樣大小的電流以達到平衡,電路的增益由R1決定,Uout=IinR。該電路唯一的誤差來源于偏置電流,偏

33、置電流作為誤差與輸入電流進行了代數(shù)疊加。</p><p><b>  (3)A/D轉換器</b></p><p>  A/D轉換器的作用是將模擬量信號轉換成數(shù)字量信號。不同的A/D轉換方式具有各自的特點,在要求轉換速度高的場合,選用并行A/D轉換器;在要求精度高的情況下,可采用雙積分型A/D轉換器,也可以選擇分辨率更高的其他形式的轉換器,但成本會增加。而逐次比較性A/

34、D轉換器在一定程度上兼有以上兩種轉換器的優(yōu)點,應用較多,ADC0804就是此類單片集成A/D轉換器。</p><p>  ADC0804采用CMOS工藝20引腳集成芯片,分辨率為8位,轉換時間為100us,輸入電壓范圍是0~5V,由一個8位A/D轉換器、一個8路模擬量開關、8路模擬量地址鎖存/譯碼器和一個三態(tài)數(shù)據(jù)輸出鎖存器組成。在A/D轉換器內部含有一個高阻抗斬波穩(wěn)定比較器,一個帶有模擬開關樹組的256電阻分壓器

35、,以及一個逐次逼近型寄存器。8路的模擬開關由地址鎖存器和譯碼器控制,可以在8個通道中任意訪問一個通道的模擬信號。由于多路開關的地址輸入部分能夠進行鎖存和譯碼,而且三態(tài)TTL輸出也可以鎖存,所以它易于與微型計算機接口。內部結構原理圖[15]如圖6所示,引腳圖如圖7所示;</p><p>  圖6 內部結構原理圖 圖7 引腳圖</p><

36、;p>  2.2.2 單片機最小單元模塊</p><p>  單片機最小單元是保證單片機能正常的最基本的電路,本文采用STC89C52芯片為核心芯片,采用內部時鐘電路和上電復位電路。本模塊原理圖如圖8所示</p><p>  圖8 單片機最小單元模塊原理圖</p><p> ?。?) STC89C52單片機</p><p>  整個

37、系統(tǒng)以STC公司生產的89C52為核心芯片。該芯片為8051內核芯片,內部含F(xiàn)lash E2PROM 存儲器,芯片內部程序存儲空間為8KB,內部RAM為512B,PDIP(雙列直插)式封裝,芯片外觀如圖9所示,引腳圖如圖10所示:</p><p>  STC89C52單片機具有以下優(yōu)點[14]:</p><p><b>  a)加密性強</b></p>

38、<p>  b)抗干擾能力強,高抗靜電,寬電壓、不怕電源抖動,寬溫度范圍:-40到80攝氏度</p><p><b>  c)價格低廉</b></p><p><b>  d)超低功耗</b></p><p>  e)速度快,可靠性高</p><p>  圖9 STC89C52外觀

39、圖[7] 圖10 STC89C52引腳圖[7]</p><p> ?。?) 晶體振蕩器電路及復位電路</p><p>  51系列單片機內部已具有振蕩電路,只要在18腳(XTAL2)和19腳(XTAL1)上連接簡單的晶體振蕩器即可,典型的晶體振蕩器頻率可以選11.0592MHz,它可以準確地得到9600波特率和19200波特率,另一個典型的晶體振蕩器頻率為12M

40、Hz,可以產生精確地微秒級延時,方便定時場合。本系統(tǒng)采用的是12MHz的晶體振蕩器。晶體振蕩器實物如圖11所示:</p><p>  圖11 晶體振蕩器實物圖</p><p>  單片機的復位引腳是第9腳(RST),當次引腳連接高電平超過兩個機器周期,即可產生復位的動作。為了保證應用系統(tǒng)可靠地復位,在設計復位電路時通常使RST引腳保持10ms以上的高電平。復位電路有上電復位和手動復位

41、兩種,還可以采用上電和按鈕復合復位,本系統(tǒng)采用上電復位的形式。</p><p>  2.2.3 I/O端口擴展模塊</p><p>  單片機本身的I/O口是很有限的,當所要連接的外設較多時,就要擴展I/O接口。擴展并行I/O口所用的芯片有可編程芯片(如8255、8155等)、通過TTL、CMOS鎖存器和緩沖器(如74LS373、74LS573、74LS244等)。本模塊選擇的并行I/O口

42、擴展芯片為可編程并行接口芯片8255A和TTL鎖存器和緩沖器74HC573。</p><p>  (1)可編程并行接口芯片8255A</p><p>  8255A是Intel公司生產的通用可編程并行I/O接口芯片,允許采用同步異步和中斷方式傳送I/O數(shù)據(jù)。8255A內部由四部分電路組成。它們是A口、B口和C口,A組控制器和B組控制器,數(shù)據(jù)緩沖器及讀寫控制邏輯,8255A內部結構原理圖如圖

43、13所示,芯片引腳圖[2]如圖12所示:</p><p>  圖12 8255A引腳圖</p><p>  圖13 8255A內部結構原理圖</p><p>  8255A共有3種工作方式:方式0、方式1和方式2。本系統(tǒng)是采用的8255A的工作方式0,方式0為基本輸入/輸出方式,無需聯(lián)絡信號,直接輸入或輸出,PA,PB和PC中任一端口都可以通過方式控制字設定為

44、輸入或輸出。單片機可對8255A進行I/O數(shù)據(jù)無條件傳送,外設的I/O數(shù)據(jù)可以在8255A的各端口得到鎖存和緩沖。方式0工作示意圖如圖14所示:</p><p>  (2)鎖存器和緩沖器74HC573</p><p>  74HC573是八進制高電流三態(tài)同步輸出鎖存器,器件的輸入是和標準的CMOS輸出兼容的,當鎖存使能端為高時,這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步),當鎖存使能

45、變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。輸出能直接接到CMOS,NMOS和TTL接口上;操作電壓范圍:2.0V~6.0V;低輸入電流:1.0uA;CMOS器件的高噪音抵抗特性。74HC573引腳圖[18]如圖15所示,真值表如表1所示:</p><p>  圖15 74HC573引腳圖</p><p>  表1:4HC573真值表</p><p>  2.2

46、.4 鍵盤模塊</p><p>  鍵盤模塊主要完成對參數(shù)手動設置的功能。</p><p>  鍵盤在單片機應用系統(tǒng)中能實現(xiàn)單片機輸入數(shù)據(jù)、傳送命令等功能,是人工干預單片機的主要手段。鍵盤分為編碼鍵盤和和非編碼鍵盤。鍵盤上閉合鍵的識別由專用的硬件編碼器實現(xiàn),并產生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤。而靠軟件編程來識別的鍵盤稱為非編碼鍵盤,非編碼鍵盤又分為獨立鍵盤和矩陣鍵盤。當需要的

47、按鍵較多時,為了減少占用單片機的I/O線資源,通常采用矩陣式鍵盤。矩陣式鍵盤有行線和列線組成,按鍵位于行與列的交叉點上,矩陣鍵盤能有效的提高I/O口的利用率。本系統(tǒng)在設計方案中,為了節(jié)約I/O線資源,采用了矩陣鍵盤的設計方法,如圖16所示:</p><p>  圖16 矩陣鍵盤設計原理圖</p><p>  在后來不斷改進過程中發(fā)現(xiàn),有的按鍵功能重疊,經過改進之后功能鍵最終確定為8個,

48、完全可以采用獨立按鍵的設計方法。由于鍵盤的掃描只是CPU工作的內容之一,CPU還要做其他工作,如液晶顯示、A/D轉換等,為了保證CPU能及時響應按鍵操作,又不過多的占用CPU的工作時間,鍵盤的工作方式選為中斷掃描方式。圖17所示為獨立鍵盤中斷方式下與單片機接口電路,7個調節(jié)功能按鍵接單片機P1口的P1^0、P1^1、P1^2、P1^3、P1^4、P1^5、P1^6,進入/退出按鍵設置鍵接到單片機外部中斷0口(P3^2)。各功能鍵功能如表

49、2所示:</p><p><b>  表2:各功能鍵功能</b></p><p>  圖17 鍵盤模塊原理圖</p><p>  2.2.5 顯示模塊</p><p>  顯示模塊的功能是對當前鍋爐液位進行顯示,在進行參數(shù)手動設置時對調節(jié)參數(shù)進行顯示。</p><p>  液位顯示初期設計采

50、用數(shù)碼管動態(tài)顯示,范圍從0~999,選擇的數(shù)碼管是7段共陰極連接,型號是MPX3-CA。在這里使用到了74LS573,它是一個8位的D觸發(fā)器,在單片機系統(tǒng)中經常使用,可以作地址數(shù)據(jù)總線擴展的鎖存器,也可以作為普通的LED的驅動器件。</p><p>  動態(tài)顯示的特點是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。這樣一來,就沒有必要每一位數(shù)碼管配一個鎖存器,從而大大地簡化了硬件電路。選亮數(shù)碼

51、管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示[10]。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時應略小于靜態(tài)顯示電路中的。 </p><p>  顯示模塊原理圖如圖18所示:U7(74HC573)為數(shù)碼管位選數(shù)據(jù)鎖存器,Q0、Q1、Q2分別接三個數(shù)碼管的位選端。U8(74HC573)為數(shù)碼管段選數(shù)

52、據(jù)鎖存器,Q0~Q7分別接數(shù)碼管的段選端。8255A的C口的PC0接位選鎖存器的輸入使能端,PC1接段選鎖存器的輸入使能端。B口用于輸出數(shù)碼管的位選段選數(shù)據(jù)。</p><p>  圖18 顯示模塊原理圖</p><p>  2.2.6 報警模塊</p><p>  報警模塊的功能是對單片機的控制命令和報警命令進行輸出。聲光報警功能由發(fā)光二極管和喇叭完成,繼電器

53、則用于將單片機的控制命令進行輸出,控制外部設備動作。報警模塊原理圖如圖19所示,各器件功能如表3所示:</p><p>  表3:報警模塊各器件功能</p><p>  LED(發(fā)光二極管),體積小,耗電量低,常作為微計算機與數(shù)字電路的輸出設備,用于指示信號狀態(tài)。具有二極管單向導通的特性,施加反向電壓時LED不亮,而施加正向電壓時,LED將發(fā)光。隨著通過LED正向電流的增加,LED將更亮,

54、LED的壽命也將縮短,因此電流以5~15mA為宜。51系列的單片機的I/O口都是漏極開路的輸出,其中P1、P2與P3內有30 kΩ的上拉電阻,因此想讓I/O口提供10~20mA的電流驅動LED發(fā)光比較困難。所以擴展一片ULN2803作為驅動。</p><p>  繼電器是當輸入量達到規(guī)定值時,是被控制的輸出電路導通或斷開的電器,實際上是用較小的電流去控制較大電流的一種“自動開關”。</p>

55、<p>  本系統(tǒng)中采用的是直流電磁機械繼電器,盡管機械繼電器的開關響應時間較長,但是已經能夠滿足本系統(tǒng)對控制響應時間的要求。而且,機械繼電器最大的優(yōu)點是其開關狀態(tài)時理想的[6]。電阻R10、R11、R12用于調整繼電器的驅動電流,二極管D11、D12、D13用于在繼電器關斷時為線圈提供感生電流的放電電路。</p><p>  圖19 報警模塊原理圖</p><p>  2.

56、3 硬件系統(tǒng)總原理圖</p><p>  以上是對硬件系統(tǒng)以模塊的形式進行的初步設計,只有將各個模塊進行整合,經過改進最終才能形成一個完善的控制系統(tǒng)。本部分就是將模擬量采集輸入模塊、單片機最小單元模塊、報警模塊、鍵盤模塊、顯示模塊及端口擴展模塊進行了整合,形成了一個完整的硬件系統(tǒng),以在軟件設計部分進行編程。</p><p>  圖20 硬件系統(tǒng)總原理圖</p><

57、p><b>  3 軟件系統(tǒng)設計</b></p><p>  3.1 軟件系統(tǒng)總體設計</p><p>  3.1.1 軟件程序流程</p><p>  軟件系統(tǒng)指揮著硬件系統(tǒng)的操作,軟件系統(tǒng)設計的成功與否直接影響著系統(tǒng)性能的優(yōu)劣,本軟件系統(tǒng)的程序設計實施模塊化,將程序分為若干模塊。分別是初始化模塊、中斷模塊、鍵盤模塊、顯示模塊、A/D轉

58、換模塊和報警模塊。初始化主要是完成開中斷,清標志位的任務,接著系統(tǒng)就開始啟動A/D檢測信號,延時等待AD轉換完成,接著通過I/O擴展芯片8555A將AD轉換的結果讀到單片機中,在單片機中對AD轉換的數(shù)據(jù)進行處理,判斷此刻系統(tǒng)的水位狀態(tài),從而執(zhí)行不同水位狀態(tài)相對應的報警程序,并將此時的水位顯示在數(shù)碼管上。按鍵設置是通過響應中斷來實現(xiàn)的,在不對參數(shù)設置時,不會執(zhí)行鍵盤掃描程序。通過以上設置,系統(tǒng)就能按要求對鍋爐液位進行控制了。圖21是系統(tǒng)的

59、程序流程圖。</p><p>  3.1.2 軟件程序主函數(shù)</p><p>  軟件系統(tǒng)程序主函數(shù)C語言程序如下:</p><p>  void main() //程序主函數(shù)</p><p><b>  {</b></p><p>  initial(); //調用初始化子函數(shù)<

60、/p><p>  while(1); //大循環(huán)</p><p><b>  {</b></p><p>  write_ad(); //調用啟動A/D子函數(shù)</p><p>  delay(100); //等待AD轉換完成</p><p>  AD_8255to89c51(); //將

61、AD轉換結果從8255傳到單片機</p><p>  handle(); //調用數(shù)據(jù)處理子函數(shù)</p><p>  alarm(); //調用報警子函數(shù)</p><p>  display(uint num); //調用顯示子函數(shù)</p><p><b>  }</b></p><p&

62、gt;<b>  }</b></p><p>  3.2 軟件各模塊程序設計</p><p>  3.2.1 初始化模塊</p><p><b>  (1)初始化流程</b></p><p>  初始化是程序編程的第一步,初始化的目的就是把所有用到的標志位、變量回到所要設定的初始值,以及完成引腳分配

63、的工作,并為配置寄存器寫入需要的值[7]。系統(tǒng)開始后首先要進行初始化,初始化主要是完成開中斷,清標志位的任務,本設計采用的中斷是INT0中斷、INT1中斷和定時器T0中斷,并將初始值送入到寄存器中。初始化程序流程圖如圖22所示。</p><p> ?。?)初始化C語言程序</p><p>  初始化模塊具體C語言程序如下:</p><p>  void initia

64、l()</p><p><b>  {</b></p><p>  HWLA=524 //最高工作水位</p><p>  P_STOP WL=404 //供水泵停止水位</p><p>  P_START WL=244 //供水泵啟動水位</p><p>  LWLA=124 //最

65、低工作水位</p><p>  BOC=74 //最低危險水位</p><p>  flag=0; //系統(tǒng)水位狀態(tài)標志位</p><p>  flag_key=0; //外部中斷INT0標志位</p><p>  EA=1; //開總中斷</p><p>  EX0=1; //開INTO中斷<

66、/p><p>  EX1=1; //開INT1中斷</p><p>  ET0=1; //開T0中斷</p><p>  TMOD=0x01; //設定T0為工作方式1,M1M0=01</p><p>  TH0=(65536-50000)/256; //為T0賦初值</p><p>  TL0=(655

67、36-50000)%256;</p><p>  IT0=1; //INTO為邊沿觸發(fā)方式</p><p>  IT1=1; //INT1為邊沿觸發(fā)方式</p><p>  TR0=0; //禁止啟動T0</p><p><b>  }</b></p><p>  3.2.2 A

68、D轉換模塊</p><p> ?。?) AD轉換流程</p><p>  啟動A/D轉換,延時一段時間以等待轉換完成,再讀取轉換結果,將結果經過8255A讀取到單片機中,在單片機中對數(shù)據(jù)進行處理。A/D轉換模塊的程序流程圖如圖23所示。</p><p> ?。?)AD轉換C語言程序</p><p>  AD轉換模塊具體C語言程序如下:<

69、/p><p>  sbit wr=P3^6; //AD寫端口</p><p>  sbit rd=P3^7; //AD讀端口</p><p>  sbit ad_cs=P2^1; //AD片選端</p><p>  void write_ad() //啟動A/D轉換子函數(shù)</p><p><b>

70、;  {</b></p><p>  ad_cs=0; //將AD0804的CS拉低</p><p><b>  wr=0; </b></p><p><b>  delay(1);</b></p><p><b>  wr=1;</b></p>

71、<p>  ad_cs=1; //將AD0804的CS置高</p><p><b>  }</b></p><p>  sbit io8255_cs=P2^2; //8255片選端</p><p>  sbit io8255_a0=P2^3; //8255A0引腳</p><p>  sbit io

72、8255_a1=P2^4; //8255A1引腳</p><p>  uint adnum; //存儲AD的轉換結果</p><p>  void AD_8255to89c51() //將AD轉換結果從8255傳到單片機</p><p><b>  {</b></p><p>  io8255_cs=0; //

73、將8255A選通CS=0,A1A0=11</p><p>  wr=0; //寫控制字</p><p>  P0=0x90; //將A口設置為工作方式0</p><p><b>  rd=0;</b></p><p>  P2=0xe4; //讀A口</p><p><b>  d

74、elay(5);</b></p><p>  adnum=P0; //將AD結果存儲在adnum中</p><p><b>  }</b></p><p>  void delay (uchar x)//延時程序</p><p><b>  {</b></p><p

75、>  uchar a,b;</p><p>  for(a=x;a>0;a--)</p><p>  for(b=110;b>0;b--);</p><p><b>  }</b></p><p>  3.2.3 數(shù)據(jù)處理模塊</p><p><b> ?。?)數(shù)據(jù)處理

76、流程</b></p><p>  首先,由電容式傳感器對水位進行采樣輸出模擬信號,再經A/D 轉換變成相應的數(shù)字信號,送入80C51 單片機進行數(shù)據(jù)處理。單片機經運算后,把當前測得的液位值num與設定的液位值依次進行比較:</p><p>  若num≥HWL,則表示達至最高工作液位,系統(tǒng)水位狀態(tài)標志位flag=1,啟動報警器報警;</p><p>  

77、若num≥P_STOP WL,則表示達至供水泵停止液位,系統(tǒng)水位狀態(tài)標志位flag=2,供水泵停止,水泵工作指示燈不亮;</p><p>  若P_START WL<num<P_STOP WL,則表示正常液位,系統(tǒng)水位狀態(tài)標志位flag=3,水位正常指示燈亮, 呈綠色;</p><p>  若BOC<num≤P_START WL,則表示達供水泵啟動供水,系統(tǒng)水位狀態(tài)標志位

78、flag=4,水泵工作指示燈亮,呈綠色;</p><p>  若num≤LWL,則表示達至最低工作液位,系統(tǒng)水位狀態(tài)標志位flag=5,啟動報警器報警;</p><p>  若num≤BOC,則表示達至最低危險液位,系統(tǒng)水位狀態(tài)標志位flag=6,啟動報警器報警,并切斷燃燒器供油。</p><p>  在本系統(tǒng)中,由于條件所限,未能確定育鯤輔鍋爐內水位監(jiān)測單元傳感器

79、測量桿的具體長度,為了方便計算,假設水位為0mm時對應的電流信號是4mA,水位為1000mm時對應的電流信號是20mA,兩者之間成線性關,系統(tǒng)所應用的水位測量范圍大致可定位為50mm~560mm,ADC0804參考電壓選5V,則測量精度為560/255≈2.2mm,取整為3mm。</p><p>  數(shù)據(jù)處理模塊的程序流程圖如圖24所示:</p><p> ?。?)數(shù)據(jù)處理C語言程序<

80、;/p><p>  數(shù)據(jù)處理模塊具體C語言程序如下:</p><p>  uint adnum; //AD轉換數(shù)據(jù)</p><p>  uint bai1,bai2,shi1,shi2,ge1,ge2; //將AD數(shù)據(jù)轉換成水位的過程變量</p><p>  uint HWL=524 //最高工作水位</p><p

81、>  uint P_STOP WL=404 //供水泵停止水位</p><p>  uint P_START WL=244 //供水泵啟動水位</p><p>  uint LWL=124 //最低工作水位</p><p>  uint BOC=74 //最低危險水位</p><p>  uint flag=0; //系統(tǒng)

82、水位狀態(tài)位</p><p>  void handle()//數(shù)據(jù)處理程序</p><p><b>  {</b></p><p>  bai1=adnum/51; //水位對應的電壓值的最高位</p><p>  shi1=adnum%51*10/51;</p><p>  ge1=adnum

83、%51*10%51*10/51;</p><p>  bai2=(bai1*2)%10; //將電壓值轉換成對應的水位值</p><p>  shi2=(shi1*2)%10;</p><p>  ge2=(ge1*2)%10;</p><p>  num=bai*100+shi*10+ge;</p><p>  

84、if(num>=HWL)</p><p><b>  flag=1;</b></p><p>  if(HWL>num>=P_STOP WL)</p><p><b>  flag=2;</b></p><p>  if(P_START WL <num<P_STOP W

85、L)</p><p><b>  flag=3;</b></p><p>  if(BOC<num<=P_START WL)</p><p><b>  flag=4;</b></p><p>  else if(num<=LWL)</p><p><

86、b>  flag=5;</b></p><p>  if(num<=BOC)</p><p><b>  flag=6;</b></p><p><b>  }</b></p><p>  3.2.4 顯示模塊</p><p> ?。?) 顯示模塊流程

87、</p><p>  LED顯示器有分靜態(tài)顯示和動態(tài)顯示兩種顯示方式,本設計的LED選用的是動態(tài)顯示方式。顯示器中的各位獨立,各位的顯示字符一經確定,相應鎖存器的輸出將維持不變,直到顯示另一個字符為止[8]。水位變化在0mm到999mm之間變化,將三位數(shù)據(jù)拆分為百、十、個三位,分別在三位數(shù)碼管上顯示。在每次送完段選數(shù)據(jù)后,在送入為數(shù)據(jù)之前,需要加上一句“P0=0XFF;”,這句語句叫“消影” [7]。在剛送完段選

88、數(shù)據(jù)后,PA口仍然保持著上次的段選數(shù)據(jù),若不加“P0=0XFF”再執(zhí)行接下來的打開位選鎖存器的命令后,原來保持在PA口的段選數(shù)據(jù)將立即通過位選按鎖存器直接加在數(shù)碼管上,接下來才是再次通過PA口給位選鎖存器送入位選數(shù)據(jù),雖然這個過程非常短暫,但是在數(shù)碼管高速顯示狀態(tài)下,我們仍然可以看見數(shù)碼管出現(xiàn)顯示混亂現(xiàn)象,加上消影后,在開啟位選鎖存器后,PA口數(shù)據(jù)全為高電平,所以哪個數(shù)碼管也不會亮。顯示模塊的程序流程圖如圖25所示:</p>

89、<p> ?。?)顯示模塊C語言程序</p><p>  顯示模塊具體C語言程序如下:</p><p>  uchar code table[]={</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0

90、x6f,0x77,0x7c,</p><p>  0x39,0x5e,0x79,0x71}; //數(shù)碼管編碼</p><p>  uint num; //要顯示的數(shù)字</p><p>  uint bai,shi,ge; //要顯示的數(shù)字的百、十、個位</p><p>  void display(uint num) /

91、/數(shù)碼管顯示程序</p><p><b>  {</b></p><p>  io8255_cs=0; //將8255A選通CS=0,A1A0=11</p><p>  wr=0; //寫控制字</p><p>  P0=0x90; //將B,C口設置為工作模式0,且都為輸出</p><

92、p>  bai=num/100; </p><p>  shi=num%100/10;</p><p>  ge=num%10;</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x00; //將兩片74HC573的LE引腳置低</p><p>  P2=0xeb; //寫

93、B口</p><p>  P0=0xff; //消影</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P2=0xeb; //寫

94、B口</p><p>  P0=table[bai];//百位顯示</p><p>  P0=0x02; //將段選74HC573的LE引腳置高</p><p>  P0=0x00; //將段選74HC573的LE引腳置低</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x01

95、; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P0=0xfb; //選通第一個數(shù)碼管的位選端</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高</p

96、><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p><b>  delay(5);</b></p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x00; //將兩片74HC573的LE引腳置低</p><p>  P2=0xeb

97、; //寫B(tài)口</p><p>  P0=0xff; //消影</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P2=0xeb

98、; //寫B(tài)口</p><p>  P0=table[shi];//十位顯示</p><p>  P0=0x02; //將段選74HC573的LE引腳置高</p><p>  P0=0x00; //將段選74HC573的LE引腳置低</p><p>  P2=0xf3; //設置為寫C口</p><p>  P

99、0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P0=0xfd; //選通第二個數(shù)碼管的位選端</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高

100、</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p><b>  delay(5);</b></p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x00; //將兩片74HC573的LE引腳置低</p><p>  P

101、2=0xeb; //寫B(tài)口</p><p>  P0=0xff; //消影</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P

102、2=0xeb; //寫B(tài)口</p><p>  P0=table[ge];//個位顯示</p><p>  P0=0x02; //將段選74HC573的LE引腳置高</p><p>  P0=0x00; //將段選74HC573的LE引腳置低</p><p>  P2=0xf3; //設置為寫C口</p><p&g

103、t;  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P0=0xfe; //選通第三個數(shù)碼管的位選端</p><p>  P2=0xf3; //設置為寫C口</p><p>  P0=0x01; //將位選74HC573的L

104、E引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  3.2.5 報警模塊</p><p> ?。?) 報警模塊流程<

105、;/p><p>  單片機對AD轉換數(shù)據(jù)進行處理后,得到了相應的系統(tǒng)水位狀態(tài)標志位flag,不同的flag值對應著不同的報警:</p><p>  若系統(tǒng)水位狀態(tài)位flag=1,表示達至最高工作液位,啟動報警器報警,供水泵停;</p><p>  若系統(tǒng)水位狀態(tài)位flag=2,表示達至供水泵停止液位,供水泵停,水泵工作指示燈不亮;</p><p>

106、;  若系統(tǒng)水位狀態(tài)位flag=3,表示正常液位,水位正常指示燈亮, 呈綠色;</p><p>  若系統(tǒng)水位狀態(tài)位flag=4,表示達供水泵啟動供水,水泵工作指示燈亮,呈綠色;</p><p>  若系統(tǒng)水位狀態(tài)位flag=5,表示達至最低工作液位,啟動報警器報警;</p><p>  若系統(tǒng)水位狀態(tài)位flag=6,表示達至最低危險液位,啟動報警器報警,切斷燃燒器

107、供油。</p><p>  報警模塊程序流程圖如圖26所示:</p><p> ?。?)報警模塊C語言程序</p><p>  報警模塊具體C語言程序如下:</p><p>  sbit alarm_cs=P2.0 //74LS373片選端</p><p>  sbit normalled=P0^2; //正常

108、水位指示燈</p><p>  void alarm()</p><p><b>  {</b></p><p>  if(flag=1)</p><p><b>  {</b></p><p>  P0=0xee; //達至最高工作液位,啟動報警器報警,供水泵停&l

109、t;/p><p>  alarm_cs=0;</p><p><b>  }</b></p><p>  if(flag=2)</p><p><b>  {</b></p><p>  P0=0xff; //達至供水泵停止液位,供水泵停,水泵工作指示燈不亮</p&

110、gt;<p>  alarm_cs=0;</p><p><b>  }</b></p><p>  if(flag=3)</p><p><b>  {</b></p><p>  normalled=0; //正常液位,水位正常指示燈亮</p><p>

111、;  alarm_cs=0;</p><p><b>  }</b></p><p>  if(flag=4)</p><p><b>  {</b></p><p>  P0=0x9f; //表示達供水泵啟動供水,水泵工作指示燈亮</p><p>  alarm_

112、cs=0;</p><p>  if(flag=5)</p><p><b>  {</b></p><p>  P0=0x8d; //達至最低工作液位,啟動報警器報警;</p><p>  alarm_cs=0;</p><p><b>  }</b></p&

113、gt;<p><b>  }</b></p><p>  if(flag=6) </p><p><b>  {</b></p><p>  P0=0x6d; //達至最低危險液位,啟動報警器報警,切斷燃燒器供油</p><p>  alarm_cs=0;</p>

114、<p><b>  }</b></p><p><b>  }</b></p><p>  3.2.6 鍵盤模塊</p><p> ?。?)鍵盤模塊程序流程</p><p>  鍵盤模塊主要完成對參數(shù)設置的功能。</p><p>  鍵盤的軟件程序設計主要解決:判

115、斷是否有按鍵按下、消除按鍵的抖動、確定按鍵鍵值、判斷按鍵是否釋放。鍵盤掃描程序由外部中斷INT0觸發(fā),當ENTER/EXIT鍵按下時,開啟外部中斷INT0響應程序,根據(jù)標志位flag_key的值確定是開始按鍵設置還是退出按鍵設置,當為開始按鍵設置時,計時器T0開始計時,要求在一分鐘之內完成按鍵設置,否則自動關中斷退出按鍵設置,返回主程序。開始按鍵設置之后,要進行鍵盤掃描,判斷是否有鍵按下,采用延時消抖,當按鍵松開后確定按鍵鍵值,確定相應

116、標志位的值和執(zhí)行相應程序。中斷方式下矩陣鍵盤總體流程圖如圖27所示:</p><p> ?。?)鍵盤模塊C語言程序</p><p>  具體的鍵盤模塊C語言程序如下:</p><p>  sbit key1=P1^0; //最高工作水位設置按鍵</p><p>  sbit key2=P1^1; //供水泵停止水位設置按鍵<

117、/p><p>  sbit key3=P1^2; //供水泵啟動水位設置按鍵</p><p>  sbit key4=P1^3; //最低工作水位設置按鍵</p><p>  sbit key5=P1^4; //燃燒器停止水位按鍵</p><p>  sbit key6=P1^5; //加1按鍵</p>&l

118、t;p>  sbit key7=P1^6; //減1按鍵</p><p>  sbit key8=P1^7; //進入/退出設置按鍵</p><p>  uint temp;</p><p>  uint show;</p><p>  void key() //按鍵程序</p><p><

119、b>  {</b></p><p>  if(count>=1200)</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  flag_key=2; //如果按鍵設置超過一分鐘,則標志位flag_key置2<

120、;/p><p><b>  }</b></p><p><b>  P1=0xff;</b></p><p><b>  temp=P1;</b></p><p>  if(temp!=0xff)</p><p><b>  {</b>

溫馨提示

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

最新文檔

評論

0/150

提交評論