基于單片機(jī)的溫度及壓力智能控制系統(tǒng)設(shè)計(jì)_第1頁(yè)
基于單片機(jī)的溫度及壓力智能控制系統(tǒng)設(shè)計(jì)_第2頁(yè)
基于單片機(jī)的溫度及壓力智能控制系統(tǒng)設(shè)計(jì)_第3頁(yè)
基于單片機(jī)的溫度及壓力智能控制系統(tǒng)設(shè)計(jì)_第4頁(yè)
基于單片機(jī)的溫度及壓力智能控制系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于單片機(jī)的溫度及壓力智能控制系統(tǒng)設(shè)計(jì)摘要本文設(shè)計(jì)了以AT89C51單片機(jī)為核心的溫度和壓力控制系統(tǒng)的工作原理以及設(shè)計(jì)方法。溫度信號(hào)由溫度傳感器PT100采集,再由變送器將信號(hào)變換為0-5V的信號(hào)給PCF8591芯片。單片機(jī)最后通過(guò)IIC總線將模擬量信號(hào)讀回來(lái)或者發(fā)送出去。壓力信號(hào)也是由壓力傳感器采集回來(lái),再由變送器變換為0-5V的電壓信號(hào)給PCF8591芯片。PCF8591芯片是支持4路模擬量輸入,1路模擬量輸出的8位芯片,并且支持IIC總線,最大可以同時(shí)接8個(gè)同樣的芯片。單片機(jī)將采集回來(lái)的信號(hào)經(jīng)過(guò)計(jì)算與處理后將溫度和壓力值顯示在LCD1602液晶上,設(shè)計(jì)中介紹了控制系統(tǒng)的硬件電路,包括:溫度、壓力檢測(cè)電路、溫度控制電路、壓力控制電路、電源電路、報(bào)警電路、顯示電路、單片機(jī)最小系統(tǒng)電路、按鍵電路和其他一些單片機(jī)的接口電路。本設(shè)計(jì)中還介紹了軟件程序編寫(xiě)部分,都采用模塊化的結(jié)構(gòu)編程。軟件程序部分主要包括:主程序、顯示程序、溫度和壓力采集子程序、按鍵子程序、控制輸出子程序等。關(guān)鍵詞:A/D轉(zhuǎn)換;單片機(jī);溫度及壓力采集;智能控制1.1研究背景及現(xiàn)狀單片機(jī)自從20世紀(jì)70年代產(chǎn)生以來(lái),已經(jīng)廣泛地應(yīng)用在工業(yè)自動(dòng)化控制、自動(dòng)檢測(cè)、機(jī)電一體化設(shè)備、智能儀器儀表、家用電器、汽車電子等各個(gè)方面。單片機(jī)具有功能齊全,抗干擾能力強(qiáng),應(yīng)用可靠,前景廣闊,簡(jiǎn)單方便等優(yōu)點(diǎn)。此外,單片機(jī)還具有體積小、應(yīng)用靈活性強(qiáng)、性能價(jià)格比高等特點(diǎn),在嵌入式微控制系統(tǒng)中具有非常重要的地位。從工業(yè)自動(dòng)化、智能儀器儀表、自動(dòng)控制、消費(fèi)類電子產(chǎn)品等方面直到國(guó)防尖端技術(shù)領(lǐng)域,單片機(jī)都起著十分重要的作用。近些年來(lái),隨著微機(jī)的發(fā)展,單片機(jī)的應(yīng)用在人們的日常生活和工作中顯得越來(lái)越重要。工業(yè)過(guò)程控制也是它的一個(gè)重要應(yīng)用領(lǐng)域。由單片機(jī)而構(gòu)成的嵌入式系統(tǒng)越來(lái)越受到世人的關(guān)注。因此,可以毫不夸張的說(shuō),沒(méi)有單片機(jī)的儀器不能算是先進(jìn)的儀器,沒(méi)有單片機(jī)的過(guò)程控制系統(tǒng)不能稱做是智能控制系統(tǒng)。國(guó)內(nèi)外的溫度控制系統(tǒng)發(fā)展都非常迅速,并在智能化、參數(shù)自整定、自適應(yīng)等方面取得了不同的成果。目前的溫度控制大多都是采用智能調(diào)節(jié)器,國(guó)產(chǎn)調(diào)節(jié)器的精度和分辨率比較國(guó)外的較低,溫度的控制效果也不是很理想但價(jià)格非常便宜,國(guó)外的調(diào)節(jié)器精度和分辨率都比較高,價(jià)格較貴。德國(guó)、美國(guó)、日本、瑞典等技術(shù)領(lǐng)先,都生產(chǎn)出了商品化的,性能優(yōu)異的溫度控制器以及儀器儀表,并在各個(gè)行業(yè)已經(jīng)廣泛應(yīng)用。壓力的測(cè)量對(duì)于實(shí)時(shí)監(jiān)測(cè)以及安全生產(chǎn)都具有非常重要的意義。在工業(yè)應(yīng)用中,為了高效并且安全的生產(chǎn),就必須要有效的控制生產(chǎn)過(guò)程中的一些重要數(shù)比諸如壓力、溫度、流量等主要參數(shù)。因?yàn)閴毫Φ目刂圃谝话闵a(chǎn)過(guò)程中都起著決定性的安全作用,因此更有必要準(zhǔn)確的測(cè)量壓力。為了測(cè)得不同位置的壓力數(shù)據(jù),本設(shè)計(jì)的壓力測(cè)量系統(tǒng)。通過(guò)壓力傳感器將需要測(cè)量的壓力信號(hào)轉(zhuǎn)變?yōu)殡娦盘?hào),再由變送器最終轉(zhuǎn)換為0-5V的電壓信號(hào)給PCF8591AD-DA芯片。單片機(jī)通過(guò)IIC總線將模擬數(shù)據(jù)讀回來(lái)再根據(jù)變換公式做數(shù)據(jù)處理,最終將溫度和壓力值顯示在LCd1602上。芯片轉(zhuǎn)換時(shí)間受IIC總線速率影響,可以最大支持8個(gè)相同的PCF8591芯片,即最大支持32路模擬量輸入,8路模擬量輸出。鍵盤(pán)輸入是單片機(jī)控制系統(tǒng)常用的實(shí)現(xiàn)人際對(duì)話的輸入設(shè)備。通過(guò)鍵盤(pán),向單片機(jī)控制系統(tǒng)輸入各種數(shù)據(jù)或者命令,也可以通過(guò)鍵盤(pán),設(shè)置單片機(jī)控制系統(tǒng)工作于預(yù)定的模式。1.2實(shí)現(xiàn)溫度及壓力智能控制的意義溫度、壓力都是過(guò)程生產(chǎn)中非常重要的參數(shù),它們是生產(chǎn)過(guò)程中判斷設(shè)備是否正常運(yùn)行的關(guān)鍵因素。在生產(chǎn)過(guò)程中對(duì)于溫度和壓力的控制也就顯的極為重要。比如在化工生產(chǎn)過(guò)程中,壓力能影響物料平衡,也能影響化學(xué)的反應(yīng)速度,是標(biāo)志著生產(chǎn)過(guò)程是否可以正常進(jìn)行的極為重要的參數(shù)。從安全生產(chǎn)的角度,壓力的檢測(cè)也是很重要的。如:保證壓力容器內(nèi)的壓力值要在安全的指標(biāo)之內(nèi),確保易燃易爆等介質(zhì)的壓力不能超標(biāo)等等??傊?,溫度與壓力的檢測(cè)是通常是生產(chǎn)過(guò)程中不可缺少的環(huán)節(jié),只有嚴(yán)格按照生產(chǎn)工藝的要求來(lái)保持溫度及壓力的穩(wěn)定,才能保證生產(chǎn)的正常進(jìn)行。因此溫度及壓力準(zhǔn)確測(cè)量與控制在現(xiàn)實(shí)生活中是非常重要的。

2系統(tǒng)方案設(shè)計(jì)及論證2.1溫度、壓力采集方案選擇2.1.1溫度采集方案比較1.使用DS18B20模塊本方案的優(yōu)點(diǎn)是:采集溫度精度較高,接線簡(jiǎn)單;缺點(diǎn):?jiǎn)慰偩€方式,當(dāng)系統(tǒng)需要擴(kuò)容時(shí)要另外占用單片機(jī)管腳資源。并且遠(yuǎn)距離傳輸時(shí),因?yàn)槭菃慰偩€方式,不能傳到太遠(yuǎn)。2.普通熱敏電阻優(yōu)點(diǎn):價(jià)格低廉缺點(diǎn):電路設(shè)計(jì)相對(duì)較為復(fù)雜些,精度低。3.PT100鉑電阻方式優(yōu)點(diǎn):精度高,使用方便,配合專用的變送器能遠(yuǎn)距離傳輸。缺點(diǎn):價(jià)格較為低廉2.1.2壓力采集方案1.壓力傳感器配合變送器方式優(yōu)點(diǎn):價(jià)格相對(duì)低廉,可靠性高,能較遠(yuǎn)距離傳輸,精度較高缺點(diǎn):相對(duì)帶通信功能的壓力模塊,擴(kuò)容是需要占用AD通道2.壓力采集帶通信專用模塊優(yōu)點(diǎn):采集精度高,更智能,擴(kuò)容時(shí)不需要占用任何硬件資源缺點(diǎn):造價(jià)高。本設(shè)計(jì)中溫度采集選用PT100鉑電阻的測(cè)溫方式,PT100鉑電阻傳感器會(huì)根據(jù)溫度的不同,自身阻值也會(huì)有相應(yīng)的變化,專用的變送器只需要接上PT100鉑電阻及電源就可以輸出標(biāo)準(zhǔn)的4-20mA或者是0-20mA信號(hào),本設(shè)計(jì)選用輸出0-20mA信號(hào),選用電流信號(hào)是因?yàn)楫?dāng)較遠(yuǎn)距離傳輸時(shí)變送器相當(dāng)于恒流源輸出,減小線路阻值帶來(lái)的誤差,當(dāng)接到本設(shè)計(jì)中的控制板時(shí),再通過(guò)串接250歐姆的電阻來(lái)將電流信號(hào)轉(zhuǎn)換為0-5V的電壓信號(hào)。壓力采集方案選用壓力傳感器配合變送器方式,壓力采集原理也是如此,不同的是前端傳感器不是PT100而是壓力傳感器。接線示意圖如圖2-1所示。設(shè)計(jì)溫度控制輸出采用開(kāi)關(guān)量的輸出方式,控制原理為當(dāng)溫度實(shí)際值大于等于溫度上限值時(shí)停止加熱,當(dāng)溫度實(shí)際值小于等于下限值時(shí),開(kāi)始加熱。壓力控制方式采用外接變頻器控制電機(jī),進(jìn)而控制管道壓力的方式,原理為當(dāng)壓力實(shí)際值小于等于下限值時(shí),控制板將電機(jī)的供電,并給變頻器輸入相應(yīng)的控制值,控制算法采用建議的模糊控制算法,即在一定的時(shí)間內(nèi)檢測(cè)到前后兩次的壓力值變化的大小,如果變化很小,說(shuō)明給出的值小了,需要加大此值,如果變化一般,說(shuō)明給出的值合適,如果變化很大,說(shuō)明給出的值大了,需要減小此值。本設(shè)計(jì)默認(rèn)分為6檔判斷。即壓力差值的6個(gè)檔位分別為小于等于0.05MPa;大于0.05MPa并且小于等于0.1MPa;大于0.1MPa并且小于等于0.15MPa;大于0.15MPa并且小于等于0.2MPa;大于0.2MPa并且小于等于0.25MPa;大于0.25MPa并且小于等于0.3MPa;圖2-1接線示意圖2.2系統(tǒng)結(jié)構(gòu)總框圖圖2-2系統(tǒng)結(jié)構(gòu)總框圖2.3單片機(jī)的選擇單片機(jī)AT89C51是美國(guó)的ATMEL公司生產(chǎn)的一款低電壓、高性能的CMOS的8位單片機(jī),芯片內(nèi)部含有4K字節(jié)的可擦寫(xiě)的只讀程序存儲(chǔ)區(qū)以及128個(gè)字節(jié)的數(shù)據(jù)存儲(chǔ)器,該芯片是采用高密度和非易失性存儲(chǔ)技術(shù)生產(chǎn)的,兼容了以往標(biāo)準(zhǔn)的MCS-51產(chǎn)品的指令系統(tǒng),單片機(jī)片內(nèi)含有通用的8位中央處理器,AT89C51單片機(jī)具有不錯(cuò)的性價(jià)比以及可靠性和應(yīng)用性,此單片機(jī)可以靈活的應(yīng)用在各種控制領(lǐng)域之中。AT89C51芯片提供以下一些標(biāo)準(zhǔn)的功能:(1).4K字節(jié)的閃存 (2).128字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(3).32個(gè)I/O口線,可以輸入或者輸出(4).兩個(gè)16位定時(shí)或者計(jì)數(shù)器(5).一個(gè)5向量?jī)杉?jí)的中斷結(jié)構(gòu)(6).有一個(gè)全雙工的串行口單片機(jī)(AT89C51)的工作可以降至0HZ的靜態(tài)的邏輯操作,并且還支持兩種可以通過(guò)軟件來(lái)選擇節(jié)約電能的工作模式:(1).空閑工作方式:停止單片機(jī)的工作,但是允許數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)或者計(jì)數(shù)器、通信口以及中斷程序的工作。(2).掉電的方式:保存數(shù)據(jù)存儲(chǔ)器(RAM)中的內(nèi)容,但是單片機(jī)的晶振電路停止工作并且禁止其它所有部件的工作一直到下一個(gè)硬件復(fù)位。AT89C51引腳圖如圖2-3所示。圖2-3AT89C51單片機(jī)引腳圖引腳功能說(shuō)明:Vcc:電源電壓正GND:電源電壓負(fù)P0口:P0口是8位的漏極開(kāi)路型的雙向I/O口,即地址或者數(shù)據(jù)總線的復(fù)位口。如果P0口作為輸出端口時(shí),每個(gè)端口能驅(qū)動(dòng)8個(gè)邏輯門電路,如果對(duì)端口寫(xiě)“1”時(shí),可以作為高阻抗輸入端口來(lái)使用。如果在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或者程序存儲(chǔ)器的時(shí)候,這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,此時(shí)的P0端口激活內(nèi)部的上拉電阻。P1口:P1端口是帶有內(nèi)部上拉電阻的8位的雙向口。P1端口的輸出可以驅(qū)動(dòng)(輸入或輸出)4個(gè)TTL邏輯門電路。如果對(duì)端口寫(xiě)“1”時(shí),通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可以當(dāng)作輸入端口使用。因?yàn)閮?nèi)部存在上拉電阻,假如某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。P2口:P2端口是帶有內(nèi)部上拉電阻的8位的雙向口,P2端口可以驅(qū)動(dòng)(輸入或輸出電流)4個(gè)TTL邏輯門電路。如果對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把P2端口拉到高電平,此時(shí)P2端口可以作為輸入口。P3口:P3端口是帶有內(nèi)部上拉電阻的8位的雙向口。P3端口輸出緩沖級(jí)可以驅(qū)動(dòng)(輸入或輸出)4個(gè)TTL邏輯門電路。如果P3端口寫(xiě)入“1”時(shí),他們被內(nèi)部上拉電阻拉高并可作為輸入口。此時(shí),被外部拉低的P3端口將用上拉電阻輸出電流。P3端口還接收一些用于閃存編程和程序校驗(yàn)的控制信號(hào)。RST:復(fù)位。當(dāng)單片機(jī)工作時(shí),復(fù)位引腳如果有兩個(gè)機(jī)器周期以上的高電平信號(hào)就可以讓單片機(jī)復(fù)位。XTAL1、XTAL2:振蕩器輸入端。液壓壓力傳感器是工業(yè)中最為常見(jiàn)的一種壓力傳感器,它廣泛應(yīng)用于各種工業(yè)自控的環(huán)境中,涉及石油管道、鐵路交通、水利水電、生產(chǎn)自控、智能建筑、航空航天、石化、軍工、電力、油井、船舶、管道送風(fēng)、機(jī)床、鍋爐負(fù)壓等等眾多的行業(yè)。工作原理:液壓壓力傳感器的工作原理為壓力直接作用在傳感器的薄膜片上,使膜片產(chǎn)生與介質(zhì)壓力成正比的微小位移,讓傳感器的電阻發(fā)生了變化,再用電子線路檢測(cè)這一變化,并且轉(zhuǎn)換輸出一個(gè)對(duì)應(yīng)于這個(gè)壓力的標(biāo)準(zhǔn)的電信號(hào)。常見(jiàn)參數(shù):全密封、平膜型不銹鋼焊接結(jié)構(gòu)、高靈敏度、小體積、零點(diǎn)滿度可調(diào)節(jié)。應(yīng)用領(lǐng)域:液壓、中央空調(diào)系統(tǒng)、壓鑄、恒壓供水、機(jī)械、機(jī)車制動(dòng)系統(tǒng)輕工、冶金、環(huán)保、石化、空壓機(jī)等其他自動(dòng)控制系統(tǒng)。實(shí)物圖如圖2-4所示。圖2-4平模傳感器量程:-0.1~0~1~1000(MPa)輸出信號(hào):4~20mA(二線制)、0~5V、1~5V、0~10V(三線制)綜合精度:0.1%FS、0.25%FS、0.5%FS供電電壓:24DCV(9~36DCV)介質(zhì)溫度:-20~85~150℃環(huán)境溫度:常溫(-20~85℃)量程溫度漂移:≤±0.05%FS℃零點(diǎn)溫漂移:≤±0.05%FS℃補(bǔ)償溫度:0~70℃安全過(guò)載:150%FS極限過(guò)載:200%FS響應(yīng)時(shí)間:5mS(上升到90%FS)絕緣電阻:大于2000MΩ(100VDC)負(fù)載電阻:電流輸出型:最大800Ω;電壓輸出型:大于5KΩ密封等級(jí):IP65長(zhǎng)期穩(wěn)定性能:0.1%FS/年振動(dòng)影響:在機(jī)械振動(dòng)頻率20Hz~1000Hz內(nèi),輸出變化小于0.1%FS機(jī)械連接(螺紋接口):M20×1.5等,其它螺紋可依據(jù)客戶要求設(shè)計(jì)電氣接口(信號(hào)接口):緊線螺母+四芯屏蔽線2.6A/D-D/A轉(zhuǎn)換器PCF8591芯片是一個(gè)單片集成、低功耗、單獨(dú)供電、8-bitCMOS數(shù)據(jù)獲取器件。PCF8591具有4個(gè)模擬量輸入、1個(gè)模擬量輸出以及1個(gè)串行I2C總線接口。PCF8591芯片的3個(gè)地址引腳A0、A1和A2可以用于硬件地址編程,允許在同個(gè)I2C總線上最多接入8個(gè)PCF8591器件,而不需要額外的硬件。在PCF8591芯片上輸入輸出的地址和控制和數(shù)據(jù)信號(hào)都是通過(guò)雙線雙向I2C總線以串行的方式進(jìn)行傳輸?shù)?。PCF8591的功能包括多路模擬輸入、內(nèi)置跟蹤保持、8-bit模數(shù)轉(zhuǎn)換和8-bit數(shù)模轉(zhuǎn)換。PCF8591的最大轉(zhuǎn)化速率由I2C總線的最大速率決定。AIN0~AIN3:模擬信號(hào)的輸入端。A0~A3:引腳的地址端。VDD、VSS:電源端。(2.5~6V)SDA、SCL:IIC總線的數(shù)據(jù)線、時(shí)鐘線。OSC:外部時(shí)鐘的輸入端,內(nèi)部時(shí)鐘的輸出端。EXT:內(nèi)、外部時(shí)鐘選擇線,使用內(nèi)部時(shí)鐘時(shí)EXT要接地。AGND:模擬信號(hào)接地端。圖2-5PCF8591引腳圖2.7液晶LCD1602LCD1602字符型的液晶顯示模塊是一種專門用于顯示字母、符號(hào)、數(shù)字等點(diǎn)陣式的LCD,目前常用的有16*1、16*2、20*2以及40*2行等樣式的模塊。下面以長(zhǎng)沙太陽(yáng)人電子有限公司的生產(chǎn)的LCD1602字符型液晶顯示器為例,來(lái)做簡(jiǎn)單的介紹。一般的LCD1602字符型液晶顯示器實(shí)物如圖2-6所示:圖2-6LCD1602液晶實(shí)物圖

3鍋爐溫度和壓力控制系統(tǒng)硬件電路的設(shè)計(jì)3.1最小單片機(jī)系統(tǒng)單片機(jī)的最小系統(tǒng),是指用最少的元器件組成的并可以正常工作的單片機(jī)系統(tǒng),對(duì)本設(shè)計(jì)來(lái)說(shuō),單片機(jī)最小系統(tǒng)應(yīng)該包括:?jiǎn)纹瑱C(jī),晶振電路以以及復(fù)位電路。3.1.1晶振電路典型的晶振值一般取11.0592MHz(因?yàn)榭梢詼?zhǔn)確地計(jì)算得到9600波特率和19200波特率,常用用于有串口通訊的場(chǎng)合)/12MHz。在圖3-1中,晶振Y2與電容C8、C9構(gòu)成了單片機(jī)的晶體振蕩電路。本設(shè)計(jì)當(dāng)中的晶振選用的是無(wú)源晶振,晶振為11.0592MHz。起振電容選用的是兩個(gè)22pF的小電容。圖3-1晶振電路3.1.2復(fù)位電路在圖3-2中,S2、C6及R18構(gòu)成了復(fù)位電路。此單片機(jī)是高電平復(fù)位,即當(dāng)按鍵S1按下時(shí),單片機(jī)的RST引腳被拉高,單片機(jī)被復(fù)位;當(dāng)按鍵S1松開(kāi)后,單片機(jī)的RST引腳被下拉電阻R18拉低,單片機(jī)開(kāi)始執(zhí)行用戶程序。電容C6是濾波電容,防止按鍵S1按下的瞬間,單片機(jī)的RST引腳電平信號(hào)抖動(dòng),影響單片機(jī)的工作。圖3-2復(fù)位電路剛上電的時(shí)候或者觸動(dòng)按鈕后C6兩端的電壓為0,這時(shí)RST為高電平,而它高電平保持的時(shí)間是由電阻R18和電容C6的時(shí)間常數(shù)決定,由公式(3-1)可知,電容C6充電的時(shí)間常數(shù)τ等于0.22ms,遠(yuǎn)遠(yuǎn)大于2μs,即使復(fù)位管腳RST高電平的時(shí)間保持2μs以上,保證了單片機(jī)正常復(fù)位。τ=R*C(3-1)3.2溫度及壓力采集電路設(shè)計(jì)如圖3-3所示,PCF8591芯片是一個(gè)帶4路模擬量輸入,1路模擬量輸出以及IIC總線的芯片。此IIC總線上最多可以掛8片PCF8591芯片。溫度采集占用第一路模擬量采集通道即AN0,壓力采集占用模擬量采集通道第二路即AN1。模擬量輸出接AOUT即J6。此處的信號(hào)電平都是0-5V的電平信號(hào)。圖3-3模擬量采集模塊3.3設(shè)計(jì)3.6報(bào)警電路設(shè)計(jì)本系統(tǒng)采用蜂鳴器報(bào)警的方式來(lái)發(fā)出報(bào)警信息。圖3-6中U5為蜂鳴器,三極管Q3為驅(qū)動(dòng)三極管,R5為限流電阻,當(dāng)單片機(jī)管腳P3.3為高電平時(shí),三極管Q3截至,蜂鳴器不發(fā)聲;當(dāng)單片機(jī)管腳P3.3為低電平時(shí),三極管Q3導(dǎo)通,蜂鳴器發(fā)出聲音。來(lái)達(dá)到報(bào)警提示的功能。本設(shè)計(jì)只設(shè)計(jì)了壓力報(bào)警提示,當(dāng)壓力實(shí)際值超過(guò)設(shè)定的報(bào)警限值時(shí),蜂鳴器會(huì)發(fā)出聲音報(bào)警,當(dāng)壓力實(shí)際值在正常范圍內(nèi)時(shí),蜂鳴器停止發(fā)聲。3.7電源電路設(shè)計(jì)圖3-7電源電路

4系統(tǒng)軟件設(shè)計(jì)4.1系統(tǒng)總流程圖設(shè)計(jì)系統(tǒng)程序的流程圖如圖4-1所示。圖4-1系統(tǒng)程序流程圖上電后,系統(tǒng)首先初始化,初始化完成后開(kāi)始采集模擬量值,判斷按鍵程序,之后再判斷各值是否在正常范圍內(nèi),如果不在范圍內(nèi)做出相應(yīng)的操作。最后輸出控制邏輯。4.2部分程序說(shuō)明程序部分大致分為主程序、LCD顯示程序、模擬量采集程序、模擬量輸出程序、按鍵設(shè)置程序、自動(dòng)控制程序等部分。4.2.1主程序main(){LCD_Initialise(); //LCD初始化AD_CHANNEL=0;T_OUT=1;//關(guān)閉溫度輸出alarm_OUT=1;//關(guān)閉報(bào)警輸出while(1){ISendByte(PCF8591,0x41); D[0]=IRcvByte(PCF8591);//ADC0模數(shù)轉(zhuǎn)換1Delay_1ms(5);Convert_To_Voltage(D[0],0); //求溫度 LCD_Line_1[2]=Voltage[2]; LCD_Line_1[3]=Voltage[1]; LCD_Line_1[5]=Voltage[0];ISendByte(PCF8591,0x40); D[1]=IRcvByte(PCF8591);//ADC0模數(shù)轉(zhuǎn)換1Delay_1ms(5);Convert_To_Voltage(D[1],1);//求壓力 LCD_Line_2[2]=Voltage[2]; LCD_Line_2[4]=Voltage[1]; LCD_Line_2[5]=Voltage[0]; P_time= P_time+1;//時(shí)間計(jì)數(shù)/*ISendByte(PCF8591,0x42);D[2]=IRcvByte(PCF8591);//ADC2 模數(shù)轉(zhuǎn)換3ISendByte(PCF8591,0x43);D[3]=IRcvByte(PCF8591);//ADC3模數(shù)轉(zhuǎn)換4*/while(menu_bit==1){key_read();//按鍵讀取函數(shù)P0=0X0e;//顯示開(kāi),光標(biāo)開(kāi),閃爍lcd_enable(); if((set_bit==0)||(set_bit==2)) {key_set();//按鍵設(shè)置 } else if((set_bit==1)||(set_bit==3)) { key_set1();//按鍵設(shè)置 } if((set_bit==0)||(set_bit==1)) {P0=0X80;//設(shè)置第1行顯示地址 } elseif((set_bit==2)||(set_bit==3)) { P0=0XC0;//設(shè)置第2行顯示地址 }lcd_enable();//調(diào)用LCD顯示設(shè)置函數(shù) if((set_bit==0)||(set_bit==1)) {write_h();// } elseif((set_bit==2)||(set_bit==3)) { write_l();// }} key_read();//按鍵讀取函數(shù)RC4、RC5、RC6、RC7分別為四個(gè)按鍵,按下瞬間,Trg值分別為16,,3,64,128if(Trg==16)//菜單鍵按下時(shí){ bai=TH/100; shi=TH%100/10; ge=TH%10;menu_bit=1;//菜單鍵標(biāo)志} auto_t_p();//自動(dòng)控溫及控壓子程序 Delay_1ms(5); DACconversion(PCF8591,0x40,D[2]);//DAC 數(shù)模轉(zhuǎn)換 LCD_Display_A_Line(0x00,LCD_Line_1); LCD_Display_A_Line(0x40,LCD_Line_2); }}4.2.2LCD顯示程序bitLCD_Busy_Check() //LCD忙檢測(cè){ bitResult; //結(jié)果標(biāo)志位 LCD_RS=0; LCD_RW=1; LCD_EN=1; Delay4us(); //延時(shí)4us Result=(bit)(P0&0x80); LCD_EN=0; returnResult;//輸出結(jié)果標(biāo)志位}voidLCD_Write_Command(ucharcmd) //LCD控制命令{ while(LCD_Busy_Check());//while循環(huán) LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_();//短延時(shí) _nop_(); P0=cmd; Delay4us(); //延時(shí)4us LCD_EN=1; Delay4us(); LCD_EN=0;}voidLCD_Write_Data(uchardat) //LCD寫(xiě)數(shù)據(jù){ while(LCD_Busy_Check()); //while循環(huán) LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; Delay4us(); LCD_EN=1; Delay4us(); LCD_EN=0; }voidLCD_Initialise() //LCD初始化{ LCD_Write_Command(0x38);Delay_1ms(5); LCD_Write_Command(0x0c);Delay_1ms(5); LCD_Write_Command(0x06);Delay_1ms(5); LCD_Write_Command(0x01);Delay_1ms(5); }voidLCD_Set_Position(ucharpos)//LCD設(shè)置顯示位置{ LCD_Write_Command(pos|0x80); }voidLCD_Display_A_Line(ucharLine_Addr,uchars[])//LCD顯示行設(shè)置{ uchari; LCD_Set_Position(Line_Addr); for(i=0;i<16;i++) { LCD_Write_Data(s[i]); }}4.2.3模擬量采集程序voidConvert_To_Voltage(unsignedlongintval,uchara) //數(shù)據(jù)轉(zhuǎn)換,轉(zhuǎn)換到電壓值{if(a==0)//求溫度{ val=100*val/26; //數(shù)據(jù)轉(zhuǎn)換 Voltage[2]=val/100+'0'; Voltage[1]=val%100/10+'0'; Voltage[0]=val%10+'0'; T_R=(Voltage[2]-'0')*100+(Voltage[1]-'0')*10+(Voltage[0]-'0');//溫度實(shí)際值}else //求壓力{ val=100*val/255; //數(shù)據(jù)轉(zhuǎn)換 Voltage[2]=val/100+'0'; Voltage[1]=val%100/10+'0'; Voltage[0]=val%10+'0'; P_R=(Voltage[2]-'0')*100+(Voltage[1]-'0')*10+(Voltage[0]-'0');//壓力實(shí)際值 }}/*******************************************************************DAC變換,轉(zhuǎn)化函數(shù)*******************************************************************/bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal){Start_I2c();//啟動(dòng)總線SendByte(sla);//發(fā)送器件地址if(ack==0)return(0);SendByte(c);//發(fā)送控制字節(jié)if(ack==0)return(0);SendByte(Val);//發(fā)送DAC的數(shù)值if(ack==0)return(0);Stop_I2c();//結(jié)束總線return(1);}/*******************************************************************ADC發(fā)送字節(jié)[命令]數(shù)據(jù)函數(shù)*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//啟動(dòng)總線SendByte(sla);//發(fā)送器件地址if(ack==0)return(0);SendByte(c);//發(fā)送數(shù)據(jù)if(ack==0)return(0);Stop_I2c();//結(jié)束總線return(1);}/*******************************************************************ADC讀字節(jié)數(shù)據(jù)函數(shù)*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//啟動(dòng)總線SendByte(sla+1);//發(fā)送器件地址if(ack==0)return(0);c=RcvByte();//讀取數(shù)據(jù)0 Ack_I2c(1);//發(fā)送非就答位Stop_I2c();//結(jié)束總線return(c);}4.2.4按鍵設(shè)置程序/*********按鍵設(shè)置函數(shù)*********************/********************************************************************************函數(shù)名:key()*函數(shù)功能 :按鍵函數(shù) 1.無(wú)按鍵按下時(shí),P1=0xff;ReadData=0;Trg=0;Cont=0;2.P1.0按下時(shí),P1.0=0;ReadData=0x01;Trg=0x01(Trg只會(huì)在這個(gè)時(shí)候?qū)?yīng)位的值為1,其它時(shí)候都為0);Cont=0x01;3.P1.0長(zhǎng)按住時(shí),P1.0=0;ReadData=0x01;Trg=0x00;Cont=0x01;如果是P1.1按鍵那么Trg,Cont對(duì)應(yīng)值都為2;如果是P1.2按鍵那么Trg,Cont對(duì)應(yīng)值都為4;是P1.3按鍵那么Trg,Cont對(duì)應(yīng)值都為8*輸入:無(wú)*輸出 :無(wú)*******************************************************************************/voidkey_read()//按鍵讀取函數(shù){ unsignedchartemp=P2|0x0f;//將臨時(shí)變量temp的低高四位置一,高四位不變unsignedcharReadData=temp^0xff;//1Trg=ReadData&(ReadData^Cont);//2Cont=ReadData;}//--------------------------------------//延時(shí)函數(shù)voiddelay(){inti;for(i=0;i<0x100;i++);}//--------------------------------------//LCD顯示設(shè)置函數(shù)voidlcd_enable(){LCD_RS=0;//該字節(jié)數(shù)據(jù)為命令,而不是數(shù)據(jù)LCD_RW=0;//此次操作為寫(xiě),而不是讀LCD_EN=0;//拉低使能信號(hào)delay();//保持使能信號(hào)為低一段時(shí)間LCD_EN=1;//拉高使能信號(hào),建立LCD操作所需要的上升沿}//----------按鍵設(shè)置子程序----------voidkey_set(){if(Trg==32)//設(shè)置百位鍵按下{bai++;if(bai>9){bai=0;}}elseif(Trg==64)//設(shè)置十位鍵按下{shi++;if(shi>9){shi=0;}}elseif(Trg==128)//設(shè)置個(gè)位鍵按下{ge++;if(ge>9){ge=0;}}elseif(Trg==16)//設(shè)置菜單鍵按下{set_bit=set_bit+1;result=bai*100+shi*10+ge;P0=0X0C;//顯示開(kāi),光標(biāo)關(guān)lcd_enable(); if(set_bit==1) { TH=result; bai1=PH/100; shi1=PH%100/10; ge1=PH%10; } elseif(set_bit==3) { TL=result; bai1=PL/100; shi1=PL%100/10; ge1=PL%10; } if(set_bit>=4) {menu_bit=0;//標(biāo)志清零 set_bit=0; }}}4.2.5自動(dòng)控制子程序voidauto_t_p()//自動(dòng)控溫及控壓子程序{if(T_R<=TL)//如果實(shí)際溫度小于等于設(shè)定下限溫度{ T_OUT=0;//加熱 }elseif(T_R>=TH)//如果實(shí)際溫度大于等于設(shè)定上限溫度{ T_OUT=1;//停止加熱 }if(P_R<=PL)//如果實(shí)際溫度小于等于設(shè)定下限溫度{ P_OUT=0;//升壓 P_ctrl();//升壓控制 alarm_OUT=0;//報(bào)警輸出 }elseif(P_R>=PH)//如果實(shí)際溫度大于等于設(shè)定上限溫度{ P_OUT=1;//停止升壓 D[2]=0;//升壓系數(shù)輸出清零 alarm_OUT=0;//報(bào)警輸出 } elseif((P_R>=PL)&&(P_R<=PH))//在正常值范圍內(nèi){ alarm_OUT=1;//關(guān)閉報(bào)警輸出 }}5仿真運(yùn)行本設(shè)計(jì)通過(guò)proteus7.8仿真已經(jīng)完全沒(méi)有問(wèn)題。仿真如圖5-1所示。單片機(jī)的管腳P2.4、P2.5、P2.6、P2.7接的按鍵分別為菜單(確定)按鍵、設(shè)置高位數(shù)據(jù)按鍵、設(shè)置中位數(shù)據(jù)按鍵、設(shè)置低位數(shù)據(jù)按鍵。P3.0、P3.1、P3.2、P3.3管腳接的LED分別代表溫度控制開(kāi)關(guān)量輸出、壓力開(kāi)關(guān)量控制輸出、模擬量采集指示及報(bào)警輸出指示。LCD1602上顯示的“T-25.3C”,表示當(dāng)前實(shí)際溫度為25.3℃?!癙-0.70MPa”表示當(dāng)前壓力值為0.70MPa。調(diào)節(jié)溫度或者壓力可以通過(guò)前端的可調(diào)電阻來(lái)調(diào)節(jié)。PCF8591芯片的AN0通道接入的可調(diào)電阻代表溫度模擬量輸入;PCF8591芯片的AN1通道接入的可調(diào)電阻代表壓力模擬量輸入。輸出仿真用電壓表指示。本設(shè)計(jì)采用模糊控制,當(dāng)在定長(zhǎng)的時(shí)間段內(nèi),檢測(cè)前后兩次采集到的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論