檢測系統(tǒng)綜合課程設(shè)計--液位測控系統(tǒng)的設(shè)計_第1頁
已閱讀1頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  前 言</b></p><p>  在人類文明高度發(fā)達的今天,人們對信息的采集、處理、傳輸及綜合利用越來越迫切,單片機作為現(xiàn)代電子技術(shù)、計算機技術(shù)的新興領(lǐng)域,其應(yīng)用也越來越廣泛,從開始的工業(yè)控制,到現(xiàn)在的航天航空、消防安全、工業(yè)數(shù)據(jù)采集、石油地質(zhì)勘探、鐵路交通運輸以及樓宇自動化等,甚至目前的許多家電中都有單片機的應(yīng)用。以單片機為代表的嵌入式系統(tǒng)的出現(xiàn)標(biāo)志著現(xiàn)代

2、電子系統(tǒng)時代的到來。</p><p>  隨著微電子工業(yè)的迅速發(fā)展,單片機控制的智能型控制器廣泛應(yīng)用于電子產(chǎn)品中,為了使學(xué)生對單片機檢測系統(tǒng)有較深的了解學(xué)院特地為我們安排了這次為期四周的課程設(shè)計。本次課程設(shè)計由我們自己選擇測量對象,這樣題目相對靈活,能更好的達到鍛煉我們的目的。</p><p>  在本次課程設(shè)計中我選擇的是液位測控系統(tǒng)的設(shè)計。液位檢測在許多控制領(lǐng)域已較為普遍,各種類型的液

3、位檢測裝置也不少,按原理分有浮子式、壓力式、超聲波式、吹氣式、電容式等,這各種方法都根據(jù)其需要設(shè)計完成,其結(jié)構(gòu)、量程和精度各有特色, 適用于各自的場合。我選用的是浮子式液位傳感器,因為它的結(jié)構(gòu)比較簡單,也比較便宜。液位高度通過傳感器測出,其輸出的電信號通過信號調(diào)理電路傳送給數(shù)/模轉(zhuǎn)換器ADC0808,之后ADC0808再將轉(zhuǎn)化后的數(shù)字信號傳給單片機AT89C51,最后單片機通過與LCD液晶顯示屏連接,將液位高度顯示出來,當(dāng)液位超過警戒水

4、位時,單片機會驅(qū)動LED點亮,輸出報警信號。</p><p>  在本次課程設(shè)計中,我也遇到了很多問題,如:如何確定方案、選擇器件、使用仿真軟件等。困難再多、再大也是要克服的。在這里我要感謝給我提供幫助的黎水平老師以及班上的同學(xué)們,沒有你們的幫助我是不可能完成這次課程設(shè)計的。</p><p>  由于本人水平有限,里面的內(nèi)容難免有不少缺點和錯誤,懇請讀者批評指正。</p>&

5、lt;p><b>  目 錄</b></p><p><b>  前 言1</b></p><p><b>  1.方案選擇3</b></p><p><b>  1.1方案1:3</b></p><p><b>  1.2方案2

6、:3</b></p><p>  2.硬件電路的設(shè)計4</p><p>  2.1傳感器檢測部分4</p><p>  2.2電源模塊設(shè)計5</p><p>  2.3A/D轉(zhuǎn)換部分的設(shè)計6</p><p>  2.4單片機的選擇10</p><p>  2.5 顯示電路

7、的設(shè)計12</p><p>  2.6 控制驅(qū)動電路設(shè)計14</p><p>  2.7 鍵盤設(shè)計15</p><p>  2.8 時鐘信號設(shè)計16</p><p><b>  3.軟件設(shè)計16</b></p><p>  3.1軟件流程設(shè)計16</p><p>

8、;  3.2上機軟件仿真17</p><p>  4.液位測控系統(tǒng)的誤差分析18</p><p><b>  5.設(shè)計心得19</b></p><p><b>  6.參考文獻20</b></p><p><b>  1.方案選擇</b></p><

9、p><b>  1.1方案1:</b></p><p>  為了完成完成本次液位檢測設(shè)計的各種功能,將整個電路分為四個部分:傳感器檢測部分、A/D轉(zhuǎn)換部分、顯示部分以及控制驅(qū)動部分。器框架如下圖所示:</p><p>  圖1.1 方案原理方框圖</p><p>  傳感器檢測部分選用的是FYC-3型浮子液位傳感器。該傳感器的機構(gòu)合理,抗

10、干擾能力強,分辨率高,量程大,壽命長,有掉電后信號跟蹤記憶功能。能夠?qū)⒁何坏淖兓ㄟ^標(biāo)準(zhǔn)的電信號輸出。</p><p>  A/D轉(zhuǎn)換器選用的是A/D0808芯片。它是一個八位的A/D轉(zhuǎn)換器,轉(zhuǎn)換精度較高,從A/D0808出來的信號可以直接送給單片機處理。在本次課設(shè)中我選用的單片機是INTEL公司的8位單片機AT89C51。與8086系列相比,AT89C515具有明顯的價格優(yōu)勢,而且能夠滿足精度要求。</p

11、><p>  顯示部分采用的是LCD顯示屏,與傳統(tǒng)的LED相比,LCD更加節(jié)能。而且隨著現(xiàn)代科技的發(fā)展,LCD取代LED是勢在必行的。</p><p><b>  1.2方案2:</b></p><p>  該方案與方案1大同小異,除控制外,其它沒什么區(qū)別。方案1采用的是單片機控制,而在方案2中我才用的是PLC控制。PLC采用的是循環(huán)掃描的工作方式

12、、通過自診斷、通信處理、掃描輸入、刷新輸出這五個工作過程來完成一個周期。但是,利用PLC控制價格比較昂貴,需要的其他硬件較多,使得安裝顯得不方便,且占用空間大。</p><p>  綜合考濾這兩種方案:他們都是可行的,都能達到所需的目的。方案1原理直觀,關(guān)鍵是價格低廉、集成度高、處理功能強、可靠性比較高,便于操作。方案2在功能上采用的是開關(guān)邏輯控制、閉環(huán)過程控制、位置控制以及多PLC分布式控制等。它更適合在工業(yè)上

13、應(yīng)用,工程技術(shù)人員可以很容易的讀懂其程序,同時在改變控制要求時,只需改變程序梯形圖就能滿足要求。但它存在一個致命的缺點——價格昂貴,需要的其他硬件較多,使得安裝顯得不方便,且占用空間大,適合用在對精度要求很高的場所。綜上所述,方案1具有明顯的優(yōu)勢,因此采用方案1為本次液位控制的最佳方案。</p><p><b>  2.硬件電路的設(shè)計</b></p><p>  2.

14、1傳感器檢測部分</p><p>  在本次課設(shè)中我選用的是FYC-3型浮子式液位傳感器,選用光電式編碼器,配以精密的變速結(jié)構(gòu)、線輪、不銹鋼鋼絲繩、重錘、防浪錘和浮子等構(gòu)成。該傳感器安裝在測量對象的上端(如水箱),當(dāng)液位變化時,浮子隨之上升或下降,測繩便帶動線輪做旋轉(zhuǎn)運動,與線輪同軸連接的編碼器就輸出與液位對應(yīng)的模擬信號并送至后續(xù)電路繼續(xù)處理,從而達到了對液位的實時顯示及控制目的。</p><

15、p>  該傳感器結(jié)構(gòu)合理,抗干擾能力強,分辨率高,量程大,壽命長,有掉電后有信號跟</p><p>  蹤記憶功能。他能夠長期用于液位測量并能保證性能的穩(wěn)定可靠,是江河湖泊。水庫、船閘、水電站、水溫觀測站、水廠以及石油化工等行業(yè)理想的液位傳感器。</p><p>  該傳感器的測量輪采用加深繩溝和減少鋼絲繩壓力夾角的方法解決了鋼絲繩容易脫落的現(xiàn)象;傳感器外殼、測量輪、支架均采用鋁合金

16、材料,測繩采用不銹鋼材料、浮子采用工程塑料制作,因而具有良好的耐腐蝕性;編碼器采用光電絕對式編碼器而不是脈沖型的,因而具有極強的抗干擾能力,具有斷電記憶功能,只要回復(fù)供電,不需任何預(yù)置就可立即讀出實時的測量值。</p><p>  圖2.1 傳感器外形及安裝尺寸示意圖</p><p><b>  2.2電源模塊設(shè)計</b></p><p>  

17、僅就單片機系統(tǒng)(最小系統(tǒng))而言,一般只需要5V的直流電源供電,而對實際的單片機來說,由于需要擴展一定得測控轉(zhuǎn)換通道和其相應(yīng)的接口電路外設(shè),除了5V的直流電源外,還可能需要其他的如12V的直流電源。</p><p>  如下圖2.2所示,直流電源模塊的設(shè)計有以下兩種設(shè)計方法,本次設(shè)計采用(b)類電源設(shè)計方案,即通過常用的220V交流電源變壓、整流、穩(wěn)壓、濾波及AC/DC變換后給整個系統(tǒng)提供所需要的直流電源。<

18、/p><p><b> ?。╝)</b></p><p><b>  (b)</b></p><p>  圖2.2 電源模塊設(shè)計系統(tǒng)組成框圖</p><p>  如下圖2.3所示電路為5V直流電源輸出具體電路設(shè)計,其中電路的核心集成芯片7805是一種價格便宜、應(yīng)用廣泛的線性穩(wěn)壓器電子元件,其采用TO-

19、220的封裝形式,可以提供1A的最大工作電流,且由于內(nèi)部具有過壓過流保護,使整機的電源電路穩(wěn)定,性能可靠。</p><p>  圖2.3 5V直流電源輸出電路設(shè)計</p><p>  在圖2.3中可看出,本電路采用220V的交流電壓供電,220V交流電經(jīng)過變壓器后轉(zhuǎn)換成12V交流電輸出,12V交流電經(jīng)過整流電橋后可以實現(xiàn)轉(zhuǎn)換成直流電壓輸出,直流電壓經(jīng)過C1和C2兩次濾波后,接到線性穩(wěn)壓器

20、7805后即可轉(zhuǎn)換成穩(wěn)定的5V直流電壓輸出,電容C3和C4的設(shè)置也是起到濾波的作用,R1作為限流電阻,D2是LED作為電路的顯示部分,起到指示的作用。</p><p>  電源模塊的抗干擾技術(shù)是系統(tǒng)的重要可靠性指標(biāo),一個設(shè)計良好的電源模塊,應(yīng)該在設(shè)計過程中充分考慮到抗干擾性能的要求。系統(tǒng)電源模塊的干擾可以分為供電線耦合的干擾和電源本身產(chǎn)生的干擾。使用交流穩(wěn)壓器:在工業(yè)現(xiàn)場,電網(wǎng)上的電壓波動較大,因此需要經(jīng)過交流穩(wěn)

21、壓器再進入到電源模塊的變壓器,從而使供電穩(wěn)定。采用瞬態(tài)電壓抑制措施:當(dāng)開關(guān)在通斷時,都會產(chǎn)生一個幅值很高的瞬時電壓脈沖,因此,在電壓模塊設(shè)計中可以使用瞬態(tài)抑制二極管,從而起到保護作用。使用浪涌抑制器:在工業(yè)現(xiàn)場,當(dāng)有大型設(shè)備啟停時,會產(chǎn)生浪涌的現(xiàn)象,此時,可以采用CR(電容-電阻)浪涌抑制器。</p><p>  2.3A/D轉(zhuǎn)換部分的設(shè)計</p><p>  現(xiàn)在市面上ADC芯片的品種、

22、型號很多,其內(nèi)部功能強弱、轉(zhuǎn)換速度快慢、轉(zhuǎn)換精度高低有很大差別,但用戶最關(guān)心的外特性包括以下四種基本信號引腳端:模擬信號輸入端(單極性或雙極性);數(shù)字量輸出端(并行或串行);轉(zhuǎn)換啟動信號輸入端;轉(zhuǎn)換結(jié)束信號輸出端。除此之外,各種不同型號的芯片可能還會有一些其他各不相同的控制信號端。選用ADC芯片時,除了必須考慮各種技術(shù)要求外,通常還需了解芯片以下兩方面的特性:數(shù)字輸出的方式是否有可控三態(tài)輸出;啟動轉(zhuǎn)換的控制方式是脈沖控制式還是電平控制式

23、。</p><p>  在本次課程設(shè)計中我選用的是ADC0808,它與ADC0809在精度上略有差別(前者精度為8位,后者精度為7位),其它各方面完全相同。他們都是CMO器件,不僅包括一個8位的逐次逼近型的ADC部分,而且還提供一個8通道的模擬多路開關(guān)和通道尋址邏輯,因而有理由把它作為簡單的“數(shù)據(jù)采集系統(tǒng)”。利用它可直接輸入8個單端的模擬信號分時進行A/D轉(zhuǎn)換,在多點巡回檢測和過程控制、運動控制中應(yīng)用十分廣泛。&

24、lt;/p><p>  1) 主要技術(shù)指標(biāo)和特性</p><p>  (1)分辨率: 8位。</p><p> ?。?)總的不可調(diào)誤差: ADC0808為±0.5LSB。</p><p> ?。?)轉(zhuǎn)換時間: 取決于芯片時鐘頻率,如CLK=500kHz時,TCONV=128μs。</p><p> ?。?)單一電

25、源: +5V。</p><p> ?。?)模擬輸入電壓范圍: 單極性0~5V;雙極性±5V,±10V(需外加一定電路)。</p><p>  (6)具有可控三態(tài)輸出緩存器。</p><p> ?。?)啟動轉(zhuǎn)換控制為脈沖式(正脈沖),上升沿使所有內(nèi)部寄存器清零,下降沿使A/D轉(zhuǎn)換開始。</p><p> ?。?)使用時不需進

26、行零點和滿刻度調(diào)節(jié)。</p><p>  2) 內(nèi)部結(jié)構(gòu)和外部引腳</p><p>  ADC0808的內(nèi)部結(jié)構(gòu)和外部引腳分別如圖2.4和圖2.5所示。內(nèi)部各部分的作用和工作原理在內(nèi)部結(jié)構(gòu)圖中已一目了然,在此就不再贅述,下面僅對各引腳定義分述如下: </p><p>  圖2.4 ADC0808內(nèi)部結(jié)構(gòu)框圖</p><p> ?。?)IN0

27、~IN7——8路模擬輸入,通過3根地址譯碼線ADDA、ADDB、ADDC來選通一路信號。</p><p> ?。?)D7~D0——A/D轉(zhuǎn)換后的數(shù)據(jù)輸出端,為三態(tài)可控輸出,故可直接和微處理器數(shù)據(jù)線連接。8位排列順序是D7為最高位,D0為最低位。</p><p>  (3)ADDA、ADDB、ADDC——模擬通道選擇地址信號,ADDA為低位,ADDC為高位。地址信號與選中通道對應(yīng)關(guān)系如表11

28、.3所示。</p><p> ?。?)VR(+)、VR(-)——正、負參考電壓輸入端,用于提供片內(nèi)DAC電阻網(wǎng)絡(luò)的基準(zhǔn)電壓。在單極性輸入時,VR(+)=5V,VR(-)=0V;雙極性輸入時,VR(+)、VR(-)分別接正、負極性的參考電壓。</p><p>  圖2.5 ADC0808外圍電路圖</p><p>  表2.1 地址信號與選中通道的關(guān)系</p

29、><p> ?。?)ALE——地址鎖存允許信號,高電平有效。當(dāng)此信號有效時,A、B、C三位地址信號被鎖存,譯碼選通對應(yīng)模擬通道。在使用時,該信號常和START信號連在一起,以便同時鎖存通道地址和啟動A/D轉(zhuǎn)換。</p><p> ?。?)START——A/D轉(zhuǎn)換啟動信號,正脈沖有效。加于該端的脈沖的上升沿使逐次逼近寄存器清零,下降沿開始A/D轉(zhuǎn)換。如正在進行轉(zhuǎn)換時又接到新的啟動脈沖,則原來的轉(zhuǎn)

30、換進程被中止,重新從頭開始轉(zhuǎn)換。</p><p>  (7)EOC——轉(zhuǎn)換結(jié)束信號,高電平有效。該信號在A/D轉(zhuǎn)換過程中為低電平,其余時間為高電平。該信號可作為被CPU查詢的狀態(tài)信號,也可作為對CPU的中斷請求信號。在需要對某個模擬量不斷采樣、轉(zhuǎn)換的情況下,EOC也可作為啟動信號反饋接到START端,但在剛加電時需由外電路第一次啟動。</p><p> ?。?)OE——輸出允許信號,高電平

31、有效。當(dāng)微處理器送出該信號時,ADC0808的輸出三態(tài)門被打開,使轉(zhuǎn)換結(jié)果通過數(shù)據(jù)總線被讀走。在中斷工作方式下,該信號往往是CPU發(fā)出的中斷請求響應(yīng)信號。</p><p>  3) 工作時序與使用說明</p><p>  ADC0808的工作時序如圖2.6所示。當(dāng)通道選擇地址有效時,ALE信號一出現(xiàn),地址便馬上被鎖存,這時轉(zhuǎn)換啟動信號緊隨ALE之后(或與ALE同時)出現(xiàn)。START的上升沿

32、將逐次逼近寄存器SAR復(fù)位,在該上升沿之后的2μs加8個時鐘周期內(nèi)(不定),EOC信號將變低電平,以指示轉(zhuǎn)換操作正在進行中,直到轉(zhuǎn)換完成后EOC再變高電平。微處理器收到變?yōu)楦唠娖降腅OC信號后,便立即送出OE信號,打開三態(tài)門,讀取轉(zhuǎn)換結(jié)果。</p><p>  圖2.6 ADC 0808工作時序</p><p>  模擬輸入通道的選擇可以相對于轉(zhuǎn)換開始操作獨立地進行(當(dāng)然,不能在轉(zhuǎn)換過程

33、中進行),然而通常是把通道選擇和啟動轉(zhuǎn)換結(jié)合起來完成(因為ADC0808的時間特性允許這樣做)。這樣可以用一條寫指令既選擇模擬通道又啟動轉(zhuǎn)換。在與微機接口時,輸入通道的選擇可有兩種方法,一種是通過地址總線選擇,一種是通過數(shù)據(jù)總線選擇。</p><p>  如用EOC信號去產(chǎn)生中斷請求,要特別注意EOC的變低相對于啟動信號有2μs+8個時鐘周期的延遲,要設(shè)法使它不致產(chǎn)生虛假的中斷請求。為此,最好利用EOC上升沿產(chǎn)生

34、中斷請求,而不是靠高電平產(chǎn)生中斷請求。</p><p><b>  2.4單片機的選擇</b></p><p>  單片機的全稱是單片微型計算機(Single Chip Microcomputer),國際上統(tǒng)稱為微控制器(Micro Controller Unit,MCU)。它把組成微型計算機的各功能部件:中央處理器(CPU)、隨機存取器(RAM)、只讀存取器(ROM

35、)、可編程存取器(EPROM)、并行及串行輸入/輸出接口電路、定時器/計數(shù)器、中斷控制器等集成在一塊半導(dǎo)體芯片上,構(gòu)成一個完整的微型計算機。選用89C51最小系統(tǒng)如下圖所示:</p><p>  圖2.7 89C51最小系統(tǒng)</p><p>  在本次課程設(shè)計中我選用的單片機是AT89C51。AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機,片內(nèi)含4K byte

36、s的可反復(fù)擦寫的只讀程序存儲器(PEROM)和128bytes 的隨機數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲單元,功能非常強大,可靈活的用于各種控制領(lǐng)域。</p><p>  圖2.8 AT89C51單片機引腳圖</p><p>  如上圖2.7所示為AT89C51單片機

37、的引腳圖,AT89C51單片機由微處理器、片內(nèi)存取器RAM/ROM、P0-P3組成的I/O端口、各種存取器組成的特殊功能寄存器SFR、串行接口、定時/計數(shù)器、中斷系統(tǒng)、振蕩器等所組成。下面分別介紹各部分的基本情況。</p><p>  (1)XTAL1 接外部晶體的一個引腳。在單片機內(nèi)部,他是構(gòu)成片內(nèi)震蕩器的反相放大器的輸入端。當(dāng)采用外部振蕩器時,該引腳接收振蕩器的信號,即把此信號直接接到內(nèi)部時鐘發(fā)生器的輸入端。

38、</p><p> ?。?)XTAL2 接外部晶體的另一個引腳。在單片機內(nèi)部,它是上述振蕩器的反相放大器的輸出端。采用外部振蕩器時,此引腳應(yīng)懸浮不連接。</p><p>  (3)RST 復(fù)位輸入端。當(dāng)振蕩器運行時,該引腳上出現(xiàn)兩個機器周期的高電平將使單片機復(fù)位。</p><p> ?。?)ALE 當(dāng)訪問外部存儲器時,ALE(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。

39、</p><p> ?。?)程序存儲允許輸出是外部程序存儲器的讀選通信號。</p><p>  (6) 外部訪問允許端。要使CPU只訪問外部程序存儲器,則端必須保持低電平。如果保密位LB1被編程,復(fù)位時在內(nèi)部都會鎖存端的狀態(tài)。</p><p>  (7)P0端口 P0是一個8位漏極開路型雙向I/O端口。作為輸出口用時,每位能以吸收電流的方式驅(qū)動8個TTL輸入,對端口

40、寫1時,又可作為高阻或輸入端用。</p><p> ?。?)P1端口 P1是一個帶有內(nèi)部上拉電阻的8位雙向I/O端口。P1的輸出緩沖器可驅(qū)動4個TTL輸入。對端口寫1時,通過內(nèi)部的上拉電阻把端口拉到高電位,這時可用作輸入口。在對Flash編程和程序驗證時,P1接收低8位地址。</p><p> ?。?)P2端口 P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O端口。它同P1一樣,只不過在對Fla

41、sh編程和程序驗證時,P2接收高8位地址和一些控制信號。</p><p> ?。?0)P3端口 P3端口同P1、P2口一樣,只不過在使用時更關(guān)注它的第二功能。</p><p>  2.5 顯示電路的設(shè)計</p><p>  關(guān)于顯示部分,有兩種選擇:一種是傳統(tǒng)的LCD液晶顯示器,另一種是新興的LED發(fā)光二極管。LED的壽命是長一些、節(jié)能一些,但是價格太貴,只要精度要

42、求不高,選用LCD完全能達到要求。因此,綜合考慮以上因素,在本次課程設(shè)計中我選用LCD作為顯示輸出器。在單片機系統(tǒng)中用液晶顯示器作為輸出器件有如下優(yōu)點:</p><p>  1)顯示質(zhì)量高:由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質(zhì)高且不會閃爍。</p><p>  2)體積小、重量輕:

43、液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。</p><p>  3)功耗低 相對而言:液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動IC上,因而耗電量比其它顯示器要少得多。</p><p>  在本次課程設(shè)計中我選用LCD型號為LM016L,Z,在protues中引腳圖如下:</p><p>  圖2.9

44、 LM016L引腳圖</p><p>  LM016L有兩行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共168個點組成。一個完好的LM016L屏可以顯示32個字節(jié)。芯片的工作電壓是4.5-5.5V,工作電流為20mA,模塊最佳工作電壓是5.0V。液晶模塊內(nèi)部的控制器共有11條控制指令。</p><p>  液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊

45、的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。由于液晶顯示芯片LM016L自身的特點,其程序的設(shè)計可以采用模塊化設(shè)計,這樣可以起到簡化程序的作用,個別程序模塊設(shè)計如下所示:</p><p>  模塊1:LCD忙狀態(tài)檢測</p><p>  bit LCD_Busy_Check() </p>&l

46、t;p>  {bit result;</p><p>  RS=0;RW=1;E=1;delay4us();result=(bit)(P0&0x80);E=0;</p><p>  return result;</p><p><b>  }</b></p><p>  模塊2:向LCD寫入指令命令<

47、/p><p>  void LCD_Write_Command(uchar cmd) </p><p>  {while(LCD_Busy_Check()); //判斷LCD是否忙碌</p><p>  RS=0;RW=0;E=0;_nop_();_nop_();P0=cmd;delay4us();</p><p>  E=1;del

48、ay4us();E=0;</p><p><b>  }</b></p><p>  模塊3:設(shè)置LCD顯示位置</p><p>  void Set_Disp_Pos(uchar pos)</p><p>  {LCD_Write_Command(pos|0x80);}</p><p>  模塊

49、4:向LCD寫入數(shù)據(jù)顯示</p><p>  void LCD_Write_Data(uchar dat)</p><p>  { while(LCD_Busy_Check()); //判斷LCD是否忙碌</p><p>  RS=1;RW=0;E=0;</p><p>  P0=dat;delay4us();</p>&l

50、t;p>  E=1;delay4us();E=0;</p><p><b>  }</b></p><p>  模塊5:LCD初始化</p><p>  void LCD_Initialise()</p><p>  { LCD_Write_Command(0x38);DelayMS(1);</p>

51、<p>  LCD_Write_Command(0x0C);DelayMS(1);</p><p>  LCD_Write_Command(0x06);DelayMS(1);</p><p>  LCD_Write_Command(0x01);DelayMS(1);</p><p><b>  }</b></p>&l

52、t;p>  2.6 控制驅(qū)動電路設(shè)計</p><p>  控制驅(qū)動電路主要由電動機、繼電器以及一些相應(yīng)的原件構(gòu)成,它根據(jù)測控系統(tǒng)的需要來控制點機的啟動、停止。從而能自動的控制液位的高度。</p><p>  在本次課程設(shè)計中控制驅(qū)動電路是不可缺少的。由于設(shè)計的是實時液位檢測系統(tǒng),可用來檢測水箱以及鍋爐里的水位。當(dāng)液位超過警戒水位時,該電路就得驅(qū)動電機工作,使進水量減少,出水量增多,同

53、時報警電路也同時啟動,輸出報警信號。同理,液位過低時電機也工作,以增加水箱或鍋爐的水量。圖2.10和圖2.11則分別是控制驅(qū)動電路以及報警電路的電路圖。</p><p>  圖2.10 控制驅(qū)動電路電路圖</p><p>  圖2.11 報警電路電路圖</p><p><b>  2.7 鍵盤設(shè)計</b></p><p>

54、;  鍵盤有兩種最基本的組成形式:獨立式鍵盤和矩陣式鍵盤。矩陣式鍵盤的工作過程要比獨立式鍵盤復(fù)雜得多,適用的場合也比較廣。由于本次課程設(shè)計不需要復(fù)雜的按鍵設(shè)置,故在設(shè)計中我采用的是獨立式鍵盤。如下圖所示:</p><p>  圖2.12 鍵盤設(shè)計</p><p>  如圖所示,設(shè)計中采用四個按鍵來控制液位。它們分別與單片機AT89C51的P1.0、P1.1、P1.2、P1.3口連接。因為是

55、實時液位顯示,“設(shè)置”可以用來設(shè)置時間,“+”、“—”用來調(diào)節(jié)時間,一旦時間調(diào)整完畢按下“確認(rèn)”即可。它不僅可以顯示當(dāng)前液位高度,還可以查看歷史水位,只需調(diào)節(jié)時間即可。</p><p>  2.8 時鐘信號設(shè)計</p><p>  由于要涉及到實時顯示,所以需要設(shè)計一個時鐘信號輸出模塊用以顯示。其電路圖如下所示:</p><p>  圖2.13 時鐘信號圖</

56、p><p>  DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天可以自動調(diào)整,具有閏年補償功能。在本次設(shè)計中時鐘信號用來顯示具體時間,以方便查詢歷史數(shù)據(jù)和記錄實時數(shù)據(jù)。</p><p>&l

57、t;b>  3.軟件設(shè)計</b></p><p><b>  3.1軟件流程設(shè)計</b></p><p> ?。?)確定算法或算法思想。算法是指解決問題的方法和步驟。</p><p> ?。?)根據(jù)算法畫出程序流程圖。有了流程圖后可以從圖上檢驗算法的正確性,減少出錯的可能,同時也可以是編程時思路更加清晰。本次設(shè)計的程序框圖如下

58、:</p><p><b>  否</b></p><p><b>  是</b></p><p>  圖2.14 程序流程圖</p><p>  (3)根據(jù)流程圖編寫程序。這是本次設(shè)計的最重要的一步。首先要進行定義,程序開始后得進行初始化,編寫主程序以及子程序,知道程序結(jié)束。</p>

59、<p>  (4)上機調(diào)試運行程序。在本次設(shè)計中所用的是keil軟件進行程序調(diào)試的。通過keil編譯通過后會生成一個hex文件,將該文件寫進單片機AT89C51中就可進行仿真了。但是通過編譯的程序并不能說明它是正確的,只能說它沒有語法錯誤,之余是否能達到預(yù)期效果,還得通過進一步的實驗才能完成。</p><p><b>  3.2上機軟件仿真</b></p><

60、p>  在本次課程設(shè)計中,我采用的是Keil軟件仿真,具體介紹如下:</p><p><b>  建立一個新工程。</b></p><p>  (2) 然后選擇要保存的路徑,輸入工程名字,比如保存到桌面新建文件夾里,工程名字為text,然后保存。</p><p>  (3) 選擇所用的單片機AT89C51。</p><

61、p> ?。?) 單擊文件菜單,在下拉菜單中單擊“新建”選項。其中文件的擴展名應(yīng)該為“.c”,然后再保存。</p><p> ?。?) 在編輯菜單界面,單擊“Target1”前面的“+”號,然后在“Source Group1”單擊右鍵即可。</p><p> ?。?) 寫入源程序,單擊“P工程”菜單,再在下拉菜單中單擊“B構(gòu)造目標(biāo)”,開始編譯源程序,構(gòu)造目標(biāo)。</p>&

62、lt;p> ?。?) 編譯成功后,開始對程序進行調(diào)試。</p><p>  (8) 單擊“P工程”菜單,在下拉菜單中單擊“目標(biāo)Target1屬性”,對所需屬性進行相應(yīng)的修改后即可對程序進行編譯。</p><p>  4.液位測控系統(tǒng)的誤差分析</p><p>  任何系統(tǒng)都存在誤差,所謂的“真值”只是一個理想值,在實際中并不存在,我們只能無限的接近它,而并不能

63、達到。因此,對一個測控系統(tǒng)而言,精度是一個主要指標(biāo)。在本次課程設(shè)計中,影響液位測控系統(tǒng)的精度的因素除了干擾和噪聲外,最重要的因素就是相應(yīng)電子器件的處理位數(shù)精度的不足,如ADC0808的分辨率只有8位。一下則是本次液位測控系統(tǒng)的各種誤差來源的分析和相應(yīng)的解決方法:</p><p> ?。?)被測液體的密度產(chǎn)生的誤差:因為系統(tǒng)中高度的控制是和所測量液體的密度具有一定的比例關(guān)系的,當(dāng)液體的密度不均勻時或者出現(xiàn)誤差時,通

64、過標(biāo)度變換后誤差就會直接影響到液位的高度上,所以測量時應(yīng)該對所測液體的密度進行多次的實驗驗證。</p><p> ?。?)傳感器誤差:在本次課程設(shè)計中我選用的傳感器是FYC—3型浮子式液位傳感器。它的測量精度有限,為0.1%量程1cm。這樣就不可避免的會產(chǎn)生誤差。要克服或者減少誤差,就得選用精度更高的傳感器,如在本次實驗中由于水箱不是很高,量程也不需要太大,所以可以選擇量程小的,這樣就在一定程度上提高了精度。&

65、lt;/p><p> ?。?)工業(yè)現(xiàn)場的電場和磁場的干擾:因為本次液位測控系統(tǒng)是應(yīng)用到工業(yè)當(dāng)中去的,所以工業(yè)當(dāng)中存在電場和磁場的會對系統(tǒng)產(chǎn)生一定的干擾(如交變磁場會產(chǎn)生感應(yīng)電動勢),為了抑制器兩種干擾都系統(tǒng)的影響,可以采用如下的方法:屏蔽或去除干擾源,采用屏蔽電纜技術(shù),采用光電隔離耦合器隔離技術(shù)等。</p><p>  (4)A/D轉(zhuǎn)化器和單片機位數(shù)產(chǎn)生的誤差:當(dāng)傳感器信號經(jīng)過放大處理后進入到

66、AD轉(zhuǎn)換器時,因為本次采用8位的AD轉(zhuǎn)換器,它的分辨率為1/。所以其轉(zhuǎn)換精度會對系統(tǒng)產(chǎn)生一定的影響,同時單片機在處理數(shù)據(jù)時,在標(biāo)度變換中進行計算時因為對數(shù)據(jù)進行了取整,約去了余數(shù)部分,所以也會對系統(tǒng)帶來一定的誤差。</p><p><b>  5.設(shè)計心得</b></p><p>  這次為期四周的課程設(shè)計終于要落下帷幕了。在這說長不長,說短不短的四周時間里,我學(xué)到了

67、很多!</p><p>  這次課程設(shè)計是監(jiān)測系統(tǒng)綜合課程設(shè)計,在沒有做以前,覺得這個課程設(shè)計只是對四年來所學(xué)的知識做一個單純總結(jié),但是通過這次做課程設(shè)計我發(fā)現(xiàn)自己的看法有點太片面。通過這次監(jiān)測系統(tǒng)綜合課程設(shè)計使我明白了自己原來知識還比較欠缺。自己要學(xué)習(xí)的東西還太多,以前老是覺得自己什么東西都會,什么東西都懂,有點眼高手低。通過這次課程設(shè)計,我才明白學(xué)習(xí)是一個長期積累的過程,在以后的工作、生活中都應(yīng)該不斷的學(xué)習(xí),

68、努力提高自己知識和綜合素質(zhì)。</p><p>  在設(shè)計過程中,我通過查閱大量有關(guān)資料,與同學(xué)交流經(jīng)驗和自學(xué),并向老師請教等方式,使自己學(xué)到了不少知識,也經(jīng)歷了不少艱辛,但收獲同樣巨大。在整個設(shè)計中我懂得了許多東西,也培養(yǎng)了我獨立工作的能力,樹立了對自己工作能力的信心,相信會對今后的學(xué)習(xí)工作生活有非常重要的影響。而且大大提高了動手的能力,使我充分體會到了在創(chuàng)造過程中探索的艱難和成功時的喜悅。也許這個課程設(shè)計做的也

69、不太好,但是在設(shè)計過程中所學(xué)到的東西是這次課程設(shè)計中最大的收獲和財富,使我終身受益。</p><p>  在此要感謝黎水平老師對我的悉心指導(dǎo),黎老師在我選擇設(shè)計方案時給我指明了方向。有了方向,以后的路就好走多了。同時也使我們的同學(xué)關(guān)系更進一步得到了提升,同學(xué)之間互相幫助,有什么不懂的大家在一起商量,聽聽不同的看法,這樣使我們對一些知識點的理解更透徹,所以在這里也要感謝幫助我的同學(xué)。</p><

70、p>  總之,在這次課程設(shè)計中遇到了很多困難,同時也克服了很多困難,在解決困難的過程中我們享受了很多、學(xué)到了很多。通過這次課程設(shè)計我對“紙上得來終覺淺,絕知此事要躬行。這句古訓(xùn)體會更深了。</p><p><b>  實踐出真知!</b></p><p><b>  6.參考文獻</b></p><p>  【1】汪

71、德彪.CS-51單片機原理及接口技術(shù).北京:電子工業(yè)出版社,2007.8</p><p>  【2】趙燕.傳感器原理及其應(yīng)用.北京:北京大學(xué)出版社,2010年2月</p><p>  【3】康華光.模擬電子技術(shù)基礎(chǔ).北京:高等教育出版社,2004年4月</p><p>  【4】何橋.單片機原理及應(yīng)用.北京:中國鐵道出版社,2004年</p><

72、p>  【5】何小艇.電子系統(tǒng)設(shè)計(第三版).浙江:浙江大學(xué)出版社,2004年8月</p><p>  【6】張朝輝.檢測技術(shù)及應(yīng)用.北京:中國計量出版社,2005年10月</p><p>  【7】李朝青.單片機原理與接口技術(shù).北京:北京航空航天大學(xué)出版社,1999年</p><p>  【8】李剛.林凌.現(xiàn)代測控電路.北京:高等教育出版社,2004年1月&

73、lt;/p><p>  【9】譚浩強.C語言程序設(shè)計.北京:清華大學(xué)出版社,2005年7月</p><p>  【10】楊龍麟.電子測量技術(shù).北京:人民郵電出版社2007年7月</p><p>  【11】張國雄.測控電路.北京:機械工業(yè)出版社.2002年</p><p>  【12】陳守仁.自動檢測技術(shù)及儀表.北京:機械工業(yè)出版社.1998.&

74、lt;/p><p>  附錄1 液位測控系統(tǒng)完整程序</p><p>  /*-----------------------------------------------------------------------------------------------------------------</p><p>  DS1302.H文件 DS1302的一些命令定

75、義</p><p>  ------------------------------------------------------------------------------------------------------------------*/</p><p>  #ifndef _DS1302_H</p><p>  #define _DS1302_H

76、</p><p>  #define uchar unsigned char</p><p>  /*----------------------------------------------------------------------------------------------------------------</p><p>  register a

77、ddress</p><p>  -----------------------------------------------------------------------------------------------------------------*/</p><p>  #define DS1302_sec_add 0x80 //秒寄存器地址

78、</p><p>  #define DS1302_min_add 0x82 //分寄存器地址</p><p>  #define DS1302_hr_add 0x84 //時寄存器地址</p><p>  #define DS1302_date_add 0x86

79、//日寄存器地址</p><p>  #define DS1302_month_add 0x88 //月寄存器地址</p><p>  #define DS1302_day_add 0x8A //星期寄存器地址</p><p>  #define DS1302_year_add 0x8C

80、 //年寄存器地址</p><p>  #define DS1302_control_add 0x8E //控制寄存器地址</p><p>  #define DS1302_charger_add 0x90 //涓細充電管理寄存器地址</p><p>  #define DS1302_clkburs

81、t_add 0xBE //時鐘突發(fā)模式寄存器地址</p><p>  /*----------------------------------------------------------------------------------------------------------------</p><p><b>  函數(shù)聲明</b>&

82、lt;/p><p>  -----------------------------------------------------------------------------------------------------------------*/</p><p>  void delay_DS1302(uchar); //延時函數(shù)</p>

83、;<p>  void DS1302_write_data(uchar ,uchar); //寫一個字節(jié)到DS1302</p><p>  uchar DS1302_read_data(uchar); //從DS1302讀一個字節(jié)</p><p>  void DS1302_write_time(void);

84、 //寫入當(dāng)前時間到DS1302</p><p>  void DS1302_read_time(void); //從DS1302讀取當(dāng)前時間</p><p>  void DS1302_initial(void); //DS1302初始化 </p><p>  vo

85、id Time_to_Str(void); //實時時間轉(zhuǎn)換為液晶字符</p><p><b>  #endif</b></p><p>  #include "hardware.h"</p><p>  #include "DS1302.h"</p>

86、<p>  #define uchar unsigned char</p><p>  uchar Time_Buffer1[3]={12,00,00}; //時、分、秒</p><p>  uchar Time_Buffer2[3]; //時、分、秒</p><p>  uchar T

87、ime_String[9]; //時間的液晶字符</p><p>  uchar hide_hour=0,hide_min=0,hide_sec=0; //時、分、秒位閃標(biāo)記</p><p>  /*---------------------------------------------------------------

88、-----------------------------------------------</p><p>  函數(shù)功能:延時函數(shù) 函數(shù)原型:delay_DS1302()</p><p>  輸入值:us微秒 返回值:無</p><p>  -------------------------------------------

89、--------------------------------------------------------------------*/</p><p>  void delay_DS1302(uchar us)</p><p><b>  {</b></p><p>  while (us--);</p><p>

90、<b>  }</b></p><p>  /*--------------------------------------------------------------------------------------------------------------</p><p>  函數(shù)功能:寫一個字節(jié)到DS1302 函數(shù)原型:DS1302_write_b

91、yte()</p><p>  輸入值:數(shù)據(jù)地址,數(shù)據(jù) 返回值:無</p><p>  --------------------------------------------------------------------------------------------------------------*/</p><p>  void DS

92、1302_write_data(uchar addr,uchar wdata)</p><p><b>  {</b></p><p>  uchar Level;</p><p>  RST=1; //啟動DS1302總線</p><p>  delay_D

93、S1302(1);</p><p>  /*寫入目標(biāo)地址:addr*/</p><p>  addr=addr&0xFE; //最低位置零,寫操作</p><p>  for(Level=0;Level<8;Level++) //循環(huán)8次</p>&l

94、t;p><b>  {</b></p><p>  IO=(bit)(addr&0x01); //取最低位</p><p><b>  SCLK=0;</b></p><p>  delay_DS1302(10);</p><p><b&g

95、t;  SCLK=1;</b></p><p>  delay_DS1302(10); //產(chǎn)生上升沿,完成寫操作</p><p>  addr=addr>>1; //右移1位</p><p><b>  }</b>&l

96、t;/p><p>  /*寫入數(shù)據(jù):wdata*/</p><p>  for(Level=0;Level<8;Level++) //循環(huán)8次</p><p><b>  {</b></p><p>  IO=(bit)(wdata&0x01);

97、 //取最低位 </p><p><b>  SCLK=0;</b></p><p>  delay_DS1302(10);</p><p><b>  SCLK=1;</b></p><p>  delay_DS1302(10); //產(chǎn)

98、生上升沿,完成寫操作 </p><p>  wdata=wdata>>1; //右移1位</p><p><b>  }</b></p><p>  RST=0; //停止DS1302總線</p>

99、<p><b>  }</b></p><p>  /*---------------------------------------------------------------------------------------------------------------</p><p>  函數(shù)功能:從DS1302讀一個字節(jié) 函數(shù)原型:DS1

100、302_read_byte()</p><p>  輸入值:數(shù)據(jù)地址 返回值:數(shù)據(jù)</p><p>  ---------------------------------------------------------------------------------------------------------------*/</p>&

101、lt;p>  uchar DS1302_read_data(uchar addr)</p><p><b>  {</b></p><p>  uchar Level,rdata=0,Leveldata=0;</p><p>  RST=1; //啟動DS1302總線</

102、p><p>  delay_DS1302(10);</p><p>  /*寫入目標(biāo)地址:addr*/</p><p>  addr=addr|0x01; //最低位置高</p><p>  for (Level=0;Level<8;Level++) //

103、循環(huán)8次</p><p><b>  {</b></p><p>  IO=(bit)(addr&0x01); //取最低位</p><p><b>  SCLK=0;</b></p><p>  delay_DS1302(10);</p>

104、<p><b>  SCLK=1;</b></p><p>  delay_DS1302(10); //產(chǎn)生上升沿,完成寫操作</p><p>  addr=addr>>1;</p><p><b>  }</b></p><p&

105、gt;  /*輸出數(shù)據(jù):rdata*/</p><p>  for (Level=0;Level<8;Level++)</p><p><b>  {</b></p><p><b>  SCLK=1;</b></p><p>  delay_DS1302(10);</p>&l

106、t;p><b>  SCLK=0;</b></p><p>  delay_DS1302(10); //產(chǎn)生下降沿,完成讀操作</p><p>  Leveldata=(uchar)IO;</p><p>  Leveldata<<=7;</p><p>

107、  rdata>>=1; </p><p>  rdata=rdata|Leveldata;</p><p><b>  }</b></p><p>  RST=0; //停止DS1302總線</p>

108、<p>  return rdata;</p><p><b>  }</b></p><p>  /*------------------------------------------------------------------------------------------------------------------</p>

109、<p>  函數(shù)功能:寫入當(dāng)前時間到DS1302 函數(shù)原型:DS1302_write_time()</p><p>  ------------------------------------------------------------------------------------------------------------------*/</p><p> 

110、 void DS1302_write_time(void)</p><p><b>  {</b></p><p>  uchar i,Level;</p><p>  for(i=0;i<3;i++) //BCD處理</p><p><

111、b>  {</b></p><p>  Level=Time_Buffer1[i]/10;</p><p>  Time_Buffer2[i]=Time_Buffer1[i]%10;</p><p>  Time_Buffer2[i]=Time_Buffer2[i]+Level*16;</p><p><b>  

112、}</b></p><p>  DS1302_write_data(DS1302_control_add,0x00); //關(guān)閉寫保護 </p><p>  DS1302_write_data(DS1302_sec_add,0x80); //暫停 </p><p>  DS1302_write_data(DS1302_c

113、harger_add,0xA9); //涓流充電 </p><p>  DS1302_write_data(DS1302_hr_add,Time_Buffer2[0]); //時 </p><p>  DS1302_write_data(DS1302_min_add,Time_Buffer2[1]); //分</p><p>  DS1302_w

114、rite_data(DS1302_sec_add,Time_Buffer2[2]); //秒</p><p>  DS1302_write_data(DS1302_control_add,0x80); //打開寫保護 </p><p><b>  }</b></p><p>  /*-----------------------

115、----------------------------------------------------------------------------------------</p><p>  函數(shù)功能:從DS1302讀取當(dāng)前時間 函數(shù)原型:DS1302_read_time</p><p>  ------------------------------------------

溫馨提示

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

評論

0/150

提交評論