1 引言隨著我國的國民經濟與生活水平的發展,各個行業對自動化的需求也日益增加,為減少污染、節約資源,單片機的控制技術得到了廣泛的應用。無論是在工業生產中,還是在其他行業,水都是人們生活中不可或缺的資源,大部分都會使用到水箱,水箱里的水位控制就是最重要的問題了,以前都會有專門的人看管,既浪費人力,又不能準確的判斷水位高低。所以以單片機控制水箱的水位就得到了廣泛應用。
水位控制系統是以水位為被控參數的控制系統,它在工業生產的各個領域都有廣泛的應用。在目前的過程控制領域中水位控制的研究引起了廣泛的關注,隨著集成電路規模的日趨大型化、復雜化,各種復雜的液位控制系統已成為一個研究焦點。單片機是靠程序運行的,并且是可以修改的,通過不同的程序實現不同的功能。尤其是特殊的獨特的一些功能,這是別的器件需要費很大的力氣才能做到的,有些則是花大力氣也很難做到的。為什么一點要用單片機呢,原因很簡單,只因為單片機通過自己編寫的程序便可以實現高智能、高效率以及高可靠性!現代電子系統的基本核心是嵌入式計算機系統(簡稱嵌入式系統),而單片機是最典型、最廣泛、最普及的嵌入式系統[1]。
目前我國在單片機測控裝置研究、生產、應用中,取得了很大的成績,總結了很多經驗,但是各行業仍處于發展期,經調查,更多科研研究在這方面開展的工作更看重的是理論和算法,數年來這方面的研究的論文較多,但著重生產實際的很少。
一些發達國家在單片機新型系統研究、制造和應用上,已積累了很多經驗,奠定了基礎,進入了國際市場。我國在新型測控裝置與系統研究、制造、應用和經驗上,與其他發達國家相比還存在差距,但是我國的研究人員已經克服很多困難,并在不斷地摸索中前進,有望在相關領域趕上甚至超過發達國家的技術水平,這是發展趨勢。
在工農業生產以及日常生活應用中,常常會需要對容器中的水位進行自動控制。比如自動控制冰箱、水池、水槽、鍋爐等容器中的蓄水量,生活中抽水馬桶的自動補水控制、自動電熱水器、電開水機的自動進水控制等。雖然各種水位控制的技術要求不同、精度不同,但是基本的控制原理可以歸納為一般的反饋控制方式,他們的主要區別在于檢測水位的方式、反饋方式、以及控制器上的區別。
隨著單片機和微機技術的不斷發展,由PC機和多臺單片機構成的多機向網絡發展。單片機自問世以來,性能不斷地提高和完善,體積小、速度快、功率低的特點使它的應用領域日益廣泛。一般,工業控制系統的工作環境差,干擾性強,利用單片機控制就能克服這些缺點,因此單片機在控制領域得到廣泛的應用,使用單片機控制液體的水位是個很好的選擇。基于51單片機的液位控制系統既滿足系統精度的要求,同時具有可靠性[2]。
不論社會經濟如何飛速,水在人們的正常生活和生產中起著重要的作用。一旦斷了水,輕則個人民帶來極大地不便,重則可能造成嚴重的生產事故及損傷,從而對供水系統提出了更高的要求,滿足及時、準確、安全充足的供水。如果仍然使用人工的方式,勞動強度大,工作效率低,安全性難以保障,因此必須進行自動化控制系統的改造。從而實現提供足夠的水量、平穩的水壓的自動控制有設計低成本、高實用價值的控制器。
一般工廠使用的水箱,體積都比較大,所以對水位的控制需求就相應的大了,而且隨著工業上使用比較多,對水位的控制精度要求也高。由于自動化技術在礦企業的廣泛應用,水位自動控制技術越來越頻繁地進入到自動控制系統設計者的視線。
2 系統設計方案比較說明對于水位進行控制的方式有很多,而應用較多的主要有兩種,一種是簡單的機械式控制裝置控制,一種是復雜的控制器控制方式。兩種方式的實現如下:
- 簡單的接線式控制方式。其常用形式有浮標式、電極式等,這種控制形式的優點是結構簡單,成本低廉。存在問題是精度不高,不能進行數值顯示,另外很容易引起誤動作,且只能單獨控制,與計算機進行通信較難實現
- 復雜控制器控制方式。這種控制方式是通過安裝在水泵出口管道上的壓力傳感器,把出口壓力變成標準工業電信號的模擬信號,經過前置放大、多路切換、A/D變換成數字信號傳送到單片機,經單片機運算和給定參量的比較,進行PID運算,得出調節參量來控制其輸出電壓變化,進而調節電機轉速,以達到控制水箱水位的目的[3]。
針對上述兩種控制方式,以及設計需達到的性能要求,這里選擇第二種控制方式。最終形成的方案是,利用單片機為控制核心,設計一個對供水箱水位進行監控的系統。根據監控對象的特征,要求實時檢測水箱的水位高度,并與開始預設值進行比較,由單片機控制固態繼電器的開斷進行水位的調整,最終達到液位的與設定值。檢測值若高于上限設定值時,要求報警,斷開繼電器,控制水泵停止上水,檢測值若低于下限設定值,要求報警,開啟繼電器,控制水泵開始上水,F場實時顯示測量值,從而實現對水箱水位的監控。
3 水位控制系統的原理和設計方案
3.1 水位控制系統組成系統采用單片機作為數字控制器的處理器,其中,由壓力變送器傳送來的電壓信號經過A/D轉換傳送給單片機,然后由單片機控制電動執行機構,具體結構如圖3.1所示。
狀態設定
圖3.1水位控制原理框圖
3.2 單片機系統組成及工作原理本系統主要是由ATMEL公司生產的單片機AT89C51芯片為核心,加上一些外部原件,構成了硬件電路。AT89C51是一種帶4K字節FLASH可編程可擦除只讀存儲器的低電壓、高性能CMOS 8位微處理器,與標準的MCS-51指令集和輸出管教相兼容。由于將多功能8位CPU和FLASH存儲器組合在單個芯片中,所以AT89C51是一種高效的微控制器[4]。
3.2.1 系統組成本系統主要由AT89C51單片機、LED顯示電路、報警電路、看門狗電路以及電機控制電路等部分組成。系統框圖如圖3.2所示。
圖3.2 系統組成框圖
3.2.2 工作原理水位控制系統的基本原理是:基于單片機AT989C51實現的水位控制器,由鍵盤、數碼顯示、A/D轉換、傳感器,電源和控制部分等組成。工作過程如下:當水位發生變化時,引起連接在水箱底部的軟管管內的水壓發生變化,水壓傳感器在接收到軟管內的水氣壓信號后,即把變化量轉化成電壓信號;該信號經過放大運算放大電路放大后變成幅度為0-5V的標準信號,送入A/D轉換器,A/D轉換器把模擬信號變成數字信號量,由單片機進行實時數據采集,并進行處理,根據設定要求控制輸出,同時數碼管顯示液位高度。通過鍵盤設置液位高、低和限定值以及強制報警器,該系統的控制特點是直觀地顯示水位高度,可任意控制水位高度[5]。
3.3 控制方案的設計3.3.1 設計思路用單片機做水箱水位控制這個設計核心也是傳感器,將信號送到單片機,單片機再將信號輸出給電機,來完成設計的要求工作。判斷是否要啟動或者停止電機的運轉以達到水位的控制,同時驅動顯示電路顯示當前水位的所處的狀態。首先,電路獲取信號,然后由單片機AT89C51對測得水位信號進行判斷,根據判斷的結果,單片機輸出相應的控制信號控制繼電器的動作,進而控制電機的啟動或者停止。當水箱的水位下降,達到下限時,需啟動電機給水箱供水;當水箱的水位達到上限后,應該關閉電機,并采用不同色彩的發光二極管顯示相應的水位。當系統出現故障時,報警電路工作[6]。
3.3.2 方案設計當水箱水位低時,啟動M1、M2、給給水,水位上升到90%,停止M1。當水箱水位低(小于50%)時,同時起動M1、M2,當水位上升到50%以上70%一下時,M2停止運行,M1繼續運行到水位上升到90%以上才停止工作。
如下圖3.3中,M1、M2為給水泵機組,LG、LD、LDD分別為水位高、水位低、水位低低浮球開關,當水位高(大于90%)時,LG閉合,當水位低(小于75%)時,LD閉合,當水位低低(小于50%)時,LDD閉合[7]。
圖3.3 控制方案框圖
3.3.3 報警控制過程
當水位高于90開度的時候,由傳感器經變送器發送信號,LG閉合,系統水位高報警。當水位低于75開度的時候,由傳感器經變送器發送信號,LD閉合,系統水位低報警。當水位低與50開度的時候,由傳感器經由變送器發送信號,LDD閉合,系統水位低低報警。手動/自動模式轉換控制如下:全自動模式下,系統自動判斷水位的狀況,選擇不同工作狀態。在手動的模式下,兩臺給水泵的運行控制可有人工自己操作[7]。
此方案設計采用的是AT89C51芯片。AY89C51是高性能COMS8位單片機,片內含4K bytes的可反復擦寫的只讀存儲器(PEROM)和128 bytes的隨機存取存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器(CPU)和Flash存儲單元。
4 硬件設計水位控制器的硬件主要包括由單片機、傳感器(帶變送器)、鍵盤電路、數碼顯示電力、A/D轉換器和輸出控制電路等。
4.1 單片機單片機采用由ATMEL公司生產的雙列40腳AT89C51芯片,芯片引腳如下圖4.1所示。其中,P0口用于A/D轉換和顯示;P1口連接一個4*4的鍵盤;P2口用于控制電磁閥和水泵動作;P3口用于上、下限指示燈,報警指示燈以及用于讀寫控制和中斷等[8]。
圖4.1 AT89C51引腳圖1、單片機的工作過程
單片機自動完成賦予它的任務的過程,也就是單片機執行程序的過程,即一條條執行的指令的過程,所謂指令就是把要求單片機執行的各種操作作用的命令的形式寫下來,這是在設計人員賦予它的指令系統所決定的,一條指令對應著一種基本操作;單片機所能執行的的全部任務,必須把要解決的問題編成一系列的指令(這些指令必須是選定單片機能識別和執行的指令),這一系列指令的集合就成為程序,程序需要預先存放在具有存儲功能的部件——存儲器中。存儲器由許多存儲單元(最小的存儲單元)組成,就像大樓房有許多房間組成一樣,指令就存放在這些單元里,單元里的指令取出并執行就像大樓房的每個房間的被分分配到了唯一一個房間號一樣,每一個存儲單元也必須被分配到唯一的地址號,該地址號成為存儲單元的地址,這樣只要知道了存儲單元的地址,就可以找到這個存儲單元,其中存儲的指令就可以被取出,然后再被執行。
程序通常是順序執行的,所以程序中的指令也是一條條順序存放的,單片機在執行程序時要把這些指令一條條取出并加以執行,必須有一個部件能追蹤指令所在的地址,這一部件就是程序計數器PC(包含在CPU中),在開始執行程序時,給PC賦以程序中第一條指令所在的地址,然后取得每一條要執行的命令,PC在中的內容就會自動增加,增加量由本條指令長度決定,可能是1、2或3,以指向下一條指令的起始地址,保證指令順序執行。
4.2 時鐘電路MCS-51單片機內部的振蕩電路是一個高增益反相放大器,引線XTAL1和XTAL2分別是放大器的輸入端和輸出端。單片機內部雖然有振蕩電路,但要形成時鐘,外部還需附加電路。MCS-51單片機的時鐘產生方式有兩種:
利用其內部的振蕩電路在XTAL1和XTAL2引線上外接定時元件,內部震蕩電路便產生自激震蕩,用示波器可以觀察到XTAL2輸出的時鐘信號。最常用的是在XTAL1和XTAL2之間連接晶體振蕩器與電容構成穩定的自激振蕩器,如圖4.2所示。
晶體可在1.2-12MHz之間選擇。MCS-51單片機在通常應用情況下,使用振蕩頻率為6MHz的石英晶體,而12MHz頻率的晶體主要是在高速串行通信情況下才使用,對電容值沒有嚴格的要求,但它的取值對振蕩頻率輸出的穩定性、大小及振蕩電路起振速度有少許影響。C1和C2可在20-100pF之間取值,一般去30pF左右。
本設計的單片機系統中,為了各單片機之間時鐘信號的同步,應當引入唯一的合用外部振蕩脈沖作為各自單片機的時鐘。外部時鐘方式中是把外部振蕩信號直接接入XTAL1或XTAL2。由于HMOS和CHMOS單片機外部時鐘進入的引線不同,其外部振蕩信號源接入的方式也不同。HMOS型單片機由XTAL2進入,外部振蕩信號接至XTAL2,而內部反相放大器的輸入端XTAL1應接地,如圖4.3所示。由于XTAL2端得邏輯電平不是TTL的,故還要接一上拉電阻。CHMOS型單片機由XTAL1進入,外部振蕩信號接至XTAL2可不接地,如圖4.4所示。
圖4.2 使用片內振蕩電路的時鐘電路
圖4.3 HMOS型單片機的外部時鐘電路圖4.4 CHMOS型單片機的外部時鐘電路
4.3 電源電路在水位控制系統中,本單元為系統提供+5V的工作電源。從220V的交流電通過變壓器轉換為15V電壓,然后經過整流橋、濾波后得到+5V的系統工作電源,如圖4.5所示。
圖4.5 單片機的電源電路 4.4 傳感器傳感器來自“感覺”一詞。人們用視覺、聽覺、嗅覺和觸覺等器官感受外界的有關信息,如物體的大小、形狀和顏色,感覺到的聲音、氣味等。在視覺情況下,絕不是靠眼睛本身進行感覺,而是從眼睛進入的外界刺激信號通過神經傳送到大腦,由大腦感知物體的大小和顏色,然后由大腦提供命令信號支配行動。聽覺和嗅覺也完全一樣。然而要是大腦受到這些刺激,首先必須有接受外界刺激的“五官”人的“五官”可以稱之為傳感器。它們的基本功能是首先接收外界的刺激信號然后產生作用于各種神經傳送信號的能量,最后再傳送大腦。
傳感器是一種能感受被測物體物理量并將其轉化為便于傳輸或處理的電信號的裝置,在現代科技領域中,傳感器得到了廣泛應用,各種信息的采集離不了各種傳感器,傳感器的基本功能在于能感受外界的各種“刺激”并作出迅速反映。本設計當中我們采用的水位探測傳感器。
傳感器使用SY-9411L-D型變送器,它內部含有1個壓力傳感器和相應的放大電路。壓力傳感器是美國SM公司生產的555-2型OEM壓阻式壓力傳感器,其有全溫度補償及標定(0-70度),傳感器經過特殊加工處理,用堅固的耐高溫塑料外殼封裝。其引腳分布如圖6.1所示。1腳為信號輸出(-);2腳為信號輸出(-);3腳為激勵電壓;4腳為地;5腳為信號輸出(+);6腳為信號輸出(+)[9]。
在水箱底部安裝1根直徑為5mm的軟管,一端安裝在水箱底部;另一端與傳感器連接。水箱水位高度發生變化時,引起軟管內水壓變化,然后傳感器把水壓轉換成電壓信號,輸送到A/D轉化器。
4.5 串行通信單片機要跟PC連接要用到串行通信,如4.7和4.8所示框圖框圖和系統原理圖[10]。
圖4.7 單片機和PC連接框圖
圖4.8 串行通信原理圖 4.6 鍵盤電路P1口作為鍵盤電路,連接一個4*4鍵盤。結構如圖4.9所示。
圖4.9 鍵盤電路
4.7 水位顯示電路顯示電路如圖4.10所示。
圖4.10顯示電路
液位顯示采用數碼管動態顯示,范圍從0-999(單位可自定),選擇的數碼管是7段共陰極連接,型號是LDS18B20。在這里使用到了74HC244,它是一個8位的D觸發器,在單片機系統中經常使用,可以作為地址數據總線擴展的鎖存器,也可以作為普通的LED的驅動器件,由于單獨使用HEF4511B七段譯碼驅動顯示器來完成數碼管的驅動顯示,圖4.10是顯示電路的原理圖[11]。
4.8 A/D轉換電路4.8.1 ADC0809的內部邏輯結構A/D轉化電路在控制器中起主導作用,用它將傳感器輸出的模擬電壓信號轉換為單片機能處理的數字量。該控制器采用CMOS工藝制造的逐步逼近式8位A/D轉換器芯片ADC0809。在使用時可選擇中斷、查詢和延時等待3種方法編制A/D轉換程序。在接線時先經過運算放大器和分壓電路把傳感器輸出的電流信號轉換為電壓信號,然后輸入到A/D轉換器。
ADC0809是由一個8路模擬開關、一個地址鎖存與譯碼器、一個A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖存器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉化完的數據。
4.8.2 ADC0809的引腳圖ADC0809的引腳圖如圖4.12所示。
ADC0809芯片為28引腳為雙列直插式封裝,
對ADC0809主要信號引腳的功能說明如下:
IN7-IN0——模擬量輸入通道
ALE——地址鎖存允許信號。對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器。
START——轉換啟動信號。START上升沿時,復位ADC0809;START下降沿時啟動芯片,開始進行A/D轉換;在A/D轉換期間,START應保持低電平。本信號有時簡寫為ST[12]。
圖4.12 ADC0809引腳圖
- B、C——地址線。通道端口選擇線,A為低地址,C為高地址,引腳圖中為ADDA、ADDB和ADDC。其地址狀態與通道對應關系表見4-1。
CLK——時鐘信號。ADC0809的內部沒有時鐘電路,所需時鐘信號由外界提供,因此有時鐘信號 引腳。通常使用頻率為500KHZ的時鐘信號。
EOC——轉換結束信號。EOC=0,正在進行轉換;EOC=1,轉換結束。使用中該狀態信號即可作為查詢的狀態標志,又可作為中斷請求信號使用。
D7-D0——數據輸出線。為三態緩沖輸出形式,可以和單片機的數據線直接相連。D0為最低位,D7為最高
OE——輸出允許信號。用于控制三態輸出鎖存器向單片機輸出轉換得到的數據。OE=0,輸出數據線呈高阻;OE=1,輸出轉換得到的數據。
Vcc—+5V電源。
Vref——參考電源參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。其典型值為+5V(Vref+=+5V, Verf-=-5V)
A/D轉換器的主要技術指標分別是:分辨率和轉換速率。
分辨率表示輸出數字量變化一個相鄰數碼所需輸入模擬電壓的變化量。
ADC的轉換速率就是能夠重復進行數據轉換的速度,即是每秒轉換的次數。而完成一次A/D轉換所需要的時間(包括穩定時間),就是轉換速率的倒數。
ADC0809的內部邏輯結構圖如4.13所示。
表4-1為通道選擇表。
表4-1通道選擇表
圖4.13 ADC0809的內部邏輯結構圖

4.8.3 A/D轉換電路原理圖另外在設計過程中預留了串行口,供進一步開發使用。A/D轉換后得到的數據應及時傳送給單片機進行處理。數據傳送的關鍵問題是如何確認A/D轉換的完成,因為只有確認完成后,才能進行傳送。
A/D轉換電路原理如圖4.14所示。
圖4.14 A/D轉換電路原理圖確定A/D轉換是否完成,通常采用以下三種方式。
對于一種A/D轉換器來說,轉換時間作為一項技術指標是已知的和固定的。例如ADC0809轉換時間為128uS,相當于6MHz的MCS-51單片機共64個機器周期?蓳嗽O計一個延時子程序,A/D轉換啟動后即調用此子程序,延遲時間一到,轉換肯定已經完成了,接著就可進行數據傳送。
A/D轉換芯片由表明轉換完成的狀態信號,例如ADC0809的EOC端。因此可以用查詢方式,測試EOC的狀態,即可確定轉換是否完成,并接著進行數據傳送。
把表明轉換完成的狀態信號(EOC)作為中斷請求信號,以中斷方式進行數據傳送。
不管采用上述哪種方式,只要一旦確定了轉換完成,即可通過指令進行數據傳送。首先送出口地址并以RD信號時有效,OE信號既有效,把轉換數據送上數據總線,供單片機接受[13]。
4.9 電機控制
設計采用交流過零型固態繼電器,它有過零時開啟,負載電流過零時關斷的特性。它的最大接通、關斷時間是半個電源周期,在負載上可得到一個完整的正弦波形。它相應地減少了對負載的沖擊,而在相應的控制回路中產生的射頻干擾也大大減少。當控制端輸入低電平時,SSR導通,控制電動機開始工作上水;當控制端輸入高電平時,SSR截止,電動機停止工作并停止上水。這樣便可以實現對水箱水位的控制[14],其控制電路圖如圖4.15所示。
圖4.15 電機控制電路圖
4.10 看門狗電路Watchdog(監控定時器)技術是一個與CPU構成閉合回路的定時器,是抗干擾和可靠性措施之一。
在由單片機構成的微型計算機系統中,由于單片機的工作常常會受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,由單片機控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的后果,所以出于對單片機運行狀態進行實時監測的考慮,便產生了一種專門用于監測單片機程序運行狀態的芯片,俗稱“看門狗”
(watchdog)。
看門狗電路的應用,使單片機可以在無人狀態下實現連續工作,其工作原理是:看門狗芯片和單片機的一個I/O引腳相連,該I/O引腳通過程序控制它定時地往看門狗的這個引腳上送入高電平(或低電平),這一程序語句是分散地放在單片機其他控制語句中間的,一旦單片機由于干擾造成程序跑飛后而陷入某一程序段進入死循環狀態時,寫看門狗引腳的程序便不能被執行,這個時候,看門狗電路就會由于得不到單片機送來的信號,便在它和單片機復位引腳相連的引腳上送出一個復位信號,使單片機發生復位,即程序從程序存儲器的起始位置開始執行,這樣便實現了單片機的自動復位。
看門狗,又叫 watchdog timer,是一個定時器電路,一般有一個輸入,叫喂狗(kicking the dog or service the dog),一個輸出到MCU的RST端,MCU正常工作的時候,每隔一端時間輸出一個信號到喂狗端,給WDT清零,如果超過規定的時間不喂狗,(一般在程序跑飛時)WDT定時超過,就回給出一個復位信號到MC,是MCU復位。防止MCU死機。看門狗的作用就是防止程序發生死循環,或者說程序跑飛[15]。
工作原理:在系統運行以后也就啟動了看門狗的計數器,看門狗就開始自動計數,如果到了一定的時間還不去清看門狗,那么看門狗計數器就會溢出從而引起看門狗中斷,造成系統復位。所以在使用有看門狗的芯片時要注意清看門狗。
系統軟件"看門狗"的設計思路:
(1)看門狗定時器T0的設置。在初始化程序塊中設置T0的工作方式,并開啟中斷和計數功能。系統Fosc=12 MHz,T0為16位計數器,最大計數值為(2的16次方)-1=65 535,T0輸入計數頻率是。Fosc/12,溢出周期為(65 535+1)/1=65 536(μs)。
(2)計算主控程序循環一次的耗時?紤]系統各功能模塊及其循環次數,本系統主控制程序的運行時間約為16.6 ms。系統設置“看門狗”定時器T0定時30 ms(T0的初值為65536-30000=35536)。主控程序的每次循環都將刷新T0的初值。如程序進入“死循環”而T0的初值在30 ms內未被刷新,這時“看門狗”定時器T0將溢出并申請中斷。
(3)設計T0溢出所對應的中斷服務程序。此子程序只須一條指令,即在T0對應的中斷向量地址(000BH)寫入“無條件轉移”命令,把計算機拖回整個程序的第一行,對單片機重新進行初始化并獲得正確的執行順序。
正常情況下,CPU在Watchdog“定時”到以前對它訪問1次,定時器重新開始計時后Watchdog不起作用;如果發生“定時信號”就會出現,從而引起系統復位。具體的實現電路如圖4.15所示。
圖4.15看門狗電路電路圖 4.11 穩壓電路本電路的主要作用是使從傳感器輸出的電平能夠穩定地輸入單片機中,主要由三極管的兩極放大穩定電路組成,其工作過程是水位探測傳感器把探測到的電信號送給R12,如果送入的是高電平則R11、Q5、D3、Q4導通把低于1.4V的低電平穩定地送給單片機。如果是低電平送給R12則R11、Q5、D3、Q4均不能導通二是R13導通將把高于1.4V的高電平穩定的送給單片機[16]。穩壓電路的設計如下圖4.16所示。
圖4.16 穩壓電路 4.12 報警電路當水位高于90開度的時候,由傳感器經變送器發送信號。LG閉合,系統水位高報警,D6亮。
當水位低于75開度的時候,由傳感器經變送器發送信號,LD閉合,系統水位低報警,D7亮。
當水位低于50開度的時候,由傳感器經變送器發送信號,LDD閉合,系統水位低低報警,D8亮[17]。
報警電路如圖4.17所示。
圖4.17 報警電路圖
5 軟件設計
5.1 程序設計流程圖
圖5.1 程序設計框圖
5.2 程序設計
5.2.1 鍵盤程序由于鍵盤采用的是4*4的結構,因此可使用的鍵有16個,根據需要分別定義各鍵,0-9號為數字鍵,10-15號分別是確定鍵、修改鍵、移位鍵、加/減鍵、取消鍵和復位鍵。程序如下:
KEY: MOV P2,#07H ;用反轉法查鍵
KEY1: MOV B,A ;有鍵按下,存鍵碼
MOV A,P2
MOV DPTR,# T ABLE
ANL A,# 07H
MOV R3,# 0FFH ;存順序碼單元初始化
MOV B,A
KEY2:INC R3
MOV P2,# 0F8H
MOV A,R3
MOV A,P2
MOV C A,@DPTR
ANL A,#0F8H
CJNE A,KEY3 ;判鍵碼,求順序碼
ORL A,B
MOV A,R3 ;若找到鍵碼,存順序碼
CJNE A,# 0FFH,KEY 1
RET
RET ;無鍵按下
KEY3: CJNE A,# 0FFH,KEY2 ;判斷是否查完
RET ;已查完,鍵碼未找到,以無按鍵處理
TABLE:DB 0F6H,0EEH,0DEH,0BEH,7EH ;按鍵特征碼表
5.2.2 A/D轉換子程序A/D轉換子程序如下:
ADCC:PUSH ACC ;模數轉換程序
PUSH B
MOV DPTR,# 0BFFFH
MOVX A,@DPTR ;讀模數轉換值
MOV B,# 0AH ;十六/十進制轉換
DIV AB
MOV DSP1,B
MOV B,# 0AH
DIV AB
MOV DSP2,B
MOV DSP3,A
POP B
POP ACC
SETB EA
RETI
5.2.3 初始化程序 ORL P2,#0FH ;初始化
SETB P1.7 ;關閉水泵
SETB P1.2 ;關閉報警器
ANL P1,#03H ;為檢查水位狀態做準備
MOV A,P1 ;讀P1口
JNB ACC.0,LOOP1 ;當P1.0=0則轉
JB ACC.1,LOOP2 ;當1.1=1則轉
5.2.4 運行狀態下的程序1. 電機不運轉,報警器不響,“水滿”LED亮
SETB P1.7 ;使P1.7=1,停止電機工作
SETB P1.2 ;關閉報警器
CLR P2.3 ;“水滿”LED亮
2. 適中狀態下的程序
電機運轉,報警器不響,“欠水”LED亮
SETB P1.2 ;關閉報警器
CLR P2.2 ;“適中”LED亮
3. 欠水狀態下的程序
電機運轉,報警器不響,“欠水”LED亮
CLR P1.7 ;使P1.7=0,啟動電機工作
SETB P1.2 ;關閉報警器
CLR P2.1 ;欠水“LED”亮
4. 故障狀態下的程序
電機不運轉,報警器響3S后關閉,“欠水”和“故障”LED一直亮
SETB P1.7 ;使P1.7=1,停止電機工作
CLR P1.2 ;報警器響
CLR P2.1 ;“欠水”LED亮
CLR P2.0 ;“故障”LED亮
ACALL DELAY ;調用3S延時子程序
SETB P1.2 ;關閉報警器
LOOP4:AJMP LOOP4 ;出現故障后程序進入等待狀態
結 論
本系統就介紹了一種以單片機為核心對水箱水位進行控制的方案,分為硬件和軟件兩個部分,硬件部分介紹了系統要實現的功能,以及要實現這些功能所必備的硬件設備,并通過多種方案的比較得到最佳的方案。并根據硬件設備的功能編寫程序,控制器的職能通過編制相應的應用軟件就得以實現了。
軟件和硬件設計部分的成功與否直接影響這系統性能的優劣。初始化主要是完成中斷任務,接著系統就開始接受檢測信號,如果信號沒有越過設定的界限,那么系統會繼續往后檢測,如果信號越過了設定的界限,系統就會暫停當前的工作,進入到中斷處理程序,在中斷處理過程中,將判斷是否有水位處于極限低狀態,若有則報警,沒有則繼續檢測水位是否高于上限或者低于下限,如果有水位信號輸入或高水位信號輸入,系統則進行調節,中斷返回后繼續往下檢測,這就完成了中斷程序的極限信號判斷,然后轉到相應的處理程序。
用單片機進行控制,能夠直觀的反應水位的運行狀態,將水箱的傳感器信號通過儀表顯示為上下限信號的輸入,使得水位易于控制,而且造價低,程序易于調試。采用單片機的水位控制系統,運行穩定,控制效果明顯改善,同時大大提高了控制系統的抗干擾能力,保證了水位的運動運行。水箱控制器充分利用了單片機的特點,軟件維護簡單方便,具有良好的應用前景,因此可以預見采用計算機控制水位系統是非常必要的。
受時間和經驗限制,本系統有不足和需改進的地方:
(1)由于時間和經驗有限,所以只能畫出硬件圖、原理圖和程序流程圖,并沒有畫出模擬圖。
(2) PROTEL軟件之前并沒有學過,所以使用起來會比較生疏。
致 謝大學即將畢業,回顧這四年的學習,不由得感慨萬分,通過幾年辛苦的學習,畢業論文順利的完成。回頭看看我所取得的每一份成績,都離不開我周圍的同學們和老師的幫助與鼓勵。在此表達我深深的謝意。作態度和創造性的科研方式使我受益匪淺,在此,謹向導師表示的衷心的感謝和崇高的敬意。
附錄1系統原理如圖1
圖1 系統原理圖
附錄2
總程序設計:
- 1. 初始化程序
- ORL P2,#0FH ;初始化
- SETB P1.7 ;關閉水泵
- SETB P1.2 ;關閉報警器
- ANL P1,#03H ;為檢查水位狀態做準備
- MOV A,P1 ;讀P1口
- JNB ACC.0,LOOP1 ;當P1.0=0則轉
- JB ACC.1,LOOP2 ;當1.1=1則轉
- 2. 鍵盤電路
- KEY: MOV P2,#07H ;用反轉法查鍵
- KEY1: MOV B,A ;有鍵按下,存鍵碼
- MOV A,P2
- MOV DPTR,# T ABLE
- ANL A,# 07H
- MOV R3,# 0FFH ;存順序碼單元初始化
- MOV B,A
- KEY2:INC R3
- MOV P2,# 0F8H
- MOV A,R3
- MOV A,P2
- MOV C A,@DPTR
- ANL A,#0F8H
- CJNE A,KEY3 ;判鍵碼,求順序碼
- ORL A,B
- MOV A,R3 ;若找到鍵碼,存順序碼
- CJNE A,# 0FFH,KEY 1
- RET
- RET ;無鍵按下
- KEY3: CJNE A,# 0FFH,KEY2 ;判斷是否查完
- RET ;已查完,鍵碼未找到,以無按鍵處理
- TABLE:DB 0F6H,0EEH,0DEH,0BEH,7EH ;按鍵特征碼表
- 3. A/D轉換子程序
- ADCC:PUSH ACC ;模數轉換程序
- PUSH B
- MOV DPTR,# 0BFFFH
- MOVX A,@DPTR ;讀模數轉換值
- MOV B,# 0AH ;十六/十進制轉換
- DIV AB
- MOV DSP1,B
- MOV B,# 0AH
- DIV AB
- MOV DSP2,B
- MOV DSP3,A
- POP B
- POP ACC
- SETB EA
- RETI
- 4. 水滿狀態下的程序
- 電機不運轉,報警器不響,“水滿”LED亮
- SETB P1.7 ;使P1.7=1,停止電機工作
- SETB P1.2 ;關閉報警器
- CLR P2.3 ;“水滿”LED亮
- 5. 適中狀態下的程序
- 電機運轉,報警器不響,“欠水”LED亮
- SETB P1.2 ;關閉報警器
- CLR P2.2 ;“適中”LED亮
- 6. 欠水狀態下的程序
- 電機運轉,報警器不響,“欠水”LED亮
- CLR P1.7 ;使P1.7=0,啟動電機工作
- SETB P1.2 ;關閉報警器
- CLR P2.1 ;欠水“LED”亮
- 7. 故障狀態下的程序
- 電機不運轉,報警器響3S后關閉,“欠水”和“故障”LED一直亮
- SETB P1.7 ;使P1.7=1,停止電機工作
- CLR P1.2 ;報警器響
- CLR P2.1 ;“欠水”LED亮
- CLR P2.0 ;“故障”LED亮
- ACALL DELAY ;調用3S延時子程序
- SETB P1.2 ;關閉報警器
- LOOP4:AJMP LOOP4 ;出現故障后程序進入等待狀態
復制代碼