久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11303|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)水位AD檢測

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:342789 發(fā)表于 2018-6-1 13:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

水位AD檢測
摘要        1
1、概述        2
2、系統(tǒng)主要器件選擇介紹        3
2.1 方案論證        3
2.2系統(tǒng)介紹        5
2.3 STC89c52單片機(jī)        5
2.4 壓力傳感器        9
2.5 ADC0832        9
2.6 1602液晶        12
3、系統(tǒng)電路設(shè)計        15
3.1 最小系統(tǒng)電路設(shè)計        15
3.2 1602顯示電路設(shè)計        15
3.3 電磁繼電器電路設(shè)計如下:圖11        15
3.4 壓力傳感器采集電路設(shè)計如下;圖12        16
3.5 蜂鳴器電路設(shè)計如下;圖13        16
4、 系統(tǒng)程序設(shè)計        17
4.1系統(tǒng)程序程圖設(shè)計如下;圖13        17
4.2壓力傳感器采集顯示程序流程圖設(shè)計        17
4.3按鍵程序流程圖設(shè)計        18
5、結(jié)論        19
致    謝        19
附錄1        20
附錄2        22
附錄3:源程序        23


摘要
該系統(tǒng)以STC89c52單片機(jī)為控制核心設(shè)計的水位檢測裝置,該系統(tǒng)主要有單片機(jī)最小系統(tǒng)、按鍵模塊、1602液晶顯示模塊、壓力傳感器模塊、電磁繼電器驅(qū)動模塊和ADC0832組成。STC89c52系列單片機(jī)內(nèi)部自帶資源豐富、運算速度較快,適用于強(qiáng)干擾和要求速度較高的場合。以電磁繼電器開環(huán)控制和壓力傳感器閉環(huán)實現(xiàn)對該系統(tǒng)的控制,達(dá)到系統(tǒng)的穩(wěn)定可靠























1、概述
液位檢測在許多控制領(lǐng)域已較為普遍,各種類型的液位檢測傳感器較多,按原理分有浮子式、壓力式、超聲波式、吹氣式等。各種方式都根據(jù)其需要設(shè)計完成,其結(jié)構(gòu)、量程和精度適用于各自不同的場合,大多結(jié)構(gòu)較為復(fù)雜,制造成本偏高;市面上也有現(xiàn)成的液位計,有投入式、浮球式、彈簧式等,多數(shù)成品價格偏高。以上液位計多數(shù)輸出為模擬量電流或電壓,有些為機(jī)械指針讀數(shù),不能用于遠(yuǎn)程監(jiān)視;普遍適用于靜止液面,在波動液面易引起讀數(shù)的波動;也有用電容法測液位的系統(tǒng),此法是一種簡單易行的方案。本文利用壓力傳感器測液體壓力的原理,結(jié)合單片機(jī)設(shè)計出一種智能液位監(jiān)控器。
本設(shè)計是在學(xué)完有關(guān)單片機(jī)系統(tǒng)和傳感器相關(guān)課程的基礎(chǔ)上,為了能更好的掌握這些課程的內(nèi)容,把理論應(yīng)用于實際而提出來的。旨在發(fā)揮我們的設(shè)計,創(chuàng)新意識。通過本課程設(shè)計可以掌握和鞏固傳感器的基本設(shè)計方法,工業(yè)水位的測量方法,單片機(jī)的基本應(yīng)用,顯示電路的連接等知識。進(jìn)一步加強(qiáng)對課堂理論知識的理解與綜合應(yīng)用能力,從而提高我們解決問題的能力和創(chuàng)造發(fā)明能力。
如今傳感器的應(yīng)用是非常的廣泛,并且已經(jīng)融入到我們的生活、工作、科研等領(lǐng)域中。在進(jìn)行設(shè)計中首先對壓力傳感器輸出的電壓和對應(yīng)的液體高度進(jìn)行整理和多次測量得出一個比較與實際高度符合的函數(shù)。通過壓力傳感器測出液體壓力,利用ADC0832芯片對壓力傳感器的輸出電壓進(jìn)行采集并將模擬電壓信號轉(zhuǎn)換成數(shù)字電平信號0,1。
液位監(jiān)控器的應(yīng)用雖然非常廣泛,但是現(xiàn)在高精度的液位監(jiān)控器的價格非常貴,實現(xiàn)民用還有一定的難度。所以我們的設(shè)計應(yīng)更加創(chuàng)新利用更小的成本設(shè)計生產(chǎn)出更好的傳感器。

2、系統(tǒng)主要器件選擇介紹
2.1 方案論證
(1)主控器件的比較與選擇
方案一:采用ARM7作為主控器件,雖然速度很快,資源很多,但價格        比較高,資源浪費,缺乏市場競爭力。
方案二:采用SST89C52作為主控器件,雖然該款單片機(jī)較便宜,運行        速度較慢,但是運行速度相對而言足夠系統(tǒng)臀形并有富余,也可以對單片機(jī)        操作,來完成系統(tǒng)的功能設(shè)置,且電機(jī)的控制可以增加簡單的外圍電路設(shè)計。        單片機(jī)就顯現(xiàn)出來它的優(yōu)勢——控制簡單、方便、快捷。這樣一來,單片機(jī)        就可以充分發(fā)揮其資源、有較為強(qiáng)大的控制功能及可位尋址操作功能。
綜上所述,為簡化外圍電路設(shè)計,提高市場競爭力,我們選擇方案二。

(2)壓力傳感器的比較與選擇
根據(jù)壓力的大小可以呈線性的改變輸出的電壓,通過對電壓的采集處理比較,輸出相應(yīng)的高度值。
方案一:采用橋式壓力傳感器
橋式壓力傳感器是通過應(yīng)變片的應(yīng)力變形,當(dāng)有應(yīng)力變形時,傳感器會輸出電壓,隨著中立重力的加大輸出電壓會出現(xiàn)線性變化。但是由于橋式壓力傳感器,應(yīng)力變形很小,輸出的電壓變化幅度小、電壓值小,所以通AD簡單的外圍電路組成的采集模塊一起使用,是電路簡化,操作方便,易于固定、控制,稱量值精度高。
方案二:采用分立元件搭建一個壓力傳感模塊
采用壓敏電阻和外圍電路搭建一個壓力傳感器,通過放大電路對敏電阻的電        壓放大,有普通的AD采集。該方案容易受到外界干擾,有時甚至檢測不到,        還要用到AD采樣和電壓比較器來處理,這樣加大了電路設(shè)計的難度。這樣        的靈敏度不夠,誤差大,功耗大,增加了開發(fā)成本。
比較以上兩種方案,方案一占有很大的優(yōu)勢。這樣不但能準(zhǔn)確完成測量,        而且能避免電路的復(fù)雜性,因此擬選擇方案一。

(3)AD器件的比較與選擇
方案一:采用12位AD芯片
采用12位AD芯片,分辨率比較高,成本高,但系統(tǒng)用不到那么高的分辨率,資源浪費,缺乏市場競爭力。
方案二:采用8位AD芯片
采用8位AD芯片,分半路256,在0-5v電壓模數(shù)轉(zhuǎn)換時,變量變化1,才有19.53mv的變化,足夠系統(tǒng)的需求。
綜上所述,我們選擇方案二。
(4)水泵驅(qū)動電路的比較與選擇
方案一:采用主控器件89C51單片機(jī)的定時器1定時中斷,改變IO口的高低電平產(chǎn)生模擬的pwm信號。由于定時器0的根據(jù)系統(tǒng)的需要定時產(chǎn)生實時時鐘,用另一個定時器,避免產(chǎn)生干擾。通過簡單地測試,微控制器不斷地進(jìn)出中斷,占用CPU太多時間,液晶顯示部分、數(shù)據(jù)處理部分工作效率不高。
方案二:通過驅(qū)動繼電器驅(qū)動水泵
繼電器可低壓控制高壓,或小電流控制大電流,單片機(jī)驅(qū)動繼電器很簡單,方便,繼電器另外一端開關(guān)反映也很靈敏,使用壽命較長,電流過大的時候不影響、單片機(jī)工作。
綜上所述,根據(jù)系統(tǒng)的需求,我們選擇方案二。
(5)顯示器件的比較與選擇
顯示模塊現(xiàn)在的技術(shù)已經(jīng)很成熟,是集成LED一些成型的模塊。
方案一:采用1602液晶顯示,1602液晶只能顯示二行,每行16個字符,并且不利于顯示漢字(1個漢字占用2個字節(jié)),根據(jù)系統(tǒng)的要求,能很好地滿足系統(tǒng)的需要。
方案三:采用12864液晶顯示,12864屏幕大,顯示控制相對復(fù)雜,相對功耗大、成本高。
綜上所述,我們選擇方案一。

2.2系統(tǒng)介紹
根據(jù)設(shè)計內(nèi)容要求,經(jīng)仔細(xì)分析計算,充分考慮各種因素,制定整體制作方案。整體方案以AT89C51為控制核心,對各傳感器采集數(shù)據(jù)進(jìn)行綜合分析,作出相應(yīng)的處理,保證精確穩(wěn)定、快速的完成設(shè)計任務(wù)。系統(tǒng)方框圖如圖1所示。

2.3 STC89c52單片機(jī)
STC89C52RC是宏晶科技推出的新一代超強(qiáng)抗干擾、高速、 低功耗的單片機(jī),基于 Intel 標(biāo)準(zhǔn)的 8052,指令代碼完全兼容傳統(tǒng)的 8051 系列單片機(jī),12 時鐘/機(jī)器周期和 6 時鐘/機(jī)器周期可任意選擇。
主要特性
� 增強(qiáng)型 6 時鐘/機(jī)器周期,12 時鐘/機(jī)器周期 8051CPU。
� 工作電壓:5.5V - 3.4V(5V 單片機(jī)) / 3.8V - 2.0V(3V 單片機(jī)) 。
� 工作頻率范圍:0 – 40 MHz,相當(dāng)于普通的 8051 的 0 ~80 Mhz,實際工作頻率可達(dá)到 48MHz。
� 用戶應(yīng)用程序空間 4K、8K、13K、16K、20K、32K、64K 字節(jié)。
� 片上集成 1280 字節(jié)、512 字節(jié) RAM。
� 通用 I/O(32/36 個) ,復(fù)位后為:P1、P2、P3、P4(PDIP-40 封裝是沒有引出 P4 口的)是準(zhǔn)雙向口、弱上拉(普通 8051 傳統(tǒng) I/O 口) ,P0 口是開漏輸出,作為總線拓展用時,不用加上拉電阻,作為 I/O 口用時,需要加上拉電阻
� 共 3 個 16 位定時器、計數(shù)器,其中定時器 0 還可以當(dāng)成 2 個 8 位定時器使用
� 外部中斷 4 路,下降沿中斷或低電平觸發(fā)中斷,Power Down 模式可由外部中斷低電平觸發(fā)中斷方式喚醒

� P0
P0 口是一個 8 位漏極開路的雙向 I/O 口。 作
為輸出口,每位能驅(qū)動 8 個 TTL 邏輯電平。對 P0
端口寫“1”時,引腳用作高阻抗輸入。
當(dāng)訪問外部程序和數(shù)據(jù)存儲器時,P0 口也被
作為低 8 位地址/數(shù)據(jù)復(fù)用。 在這種模式下, P0 具
有內(nèi)部上拉電阻。
� P1
P1 口是一個具有內(nèi)部上拉電阻的 8 位雙向
I/O 口, P1 輸出緩沖器能驅(qū)動 4 個 TTL 邏輯電
平。 對 P1 端口寫“1”時, 內(nèi)部上拉電阻把端口拉高,
此時可以作為輸入 口使用。作為輸入使用時,被
外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL) 。
此外,P1.0 和 P1.2 分別作定時器/計數(shù)器 2 的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器 2 的觸發(fā)輸入
(P1.1/T2EX) 。
引腳號第二功能:
P1.0 T2(定時器/計數(shù)器 T2 的外部計數(shù)輸入) ,時鐘輸出。
P1.1 T2EX(定時器/計數(shù)器 T2 的捕捉/重載觸發(fā)信號和方向控制) 。
� P2
P2 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口, P2 輸出緩沖器能驅(qū)動 4 個 TTL 邏輯電平。 對
P2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低
的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL) 。在訪問外部程序存儲器或用 16 位地址讀取外部數(shù)據(jù)存
儲器(例如執(zhí)行 MOVX @DPTR)時,P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)
送 1。在使用 8 位地址(如 MOVX @RI)訪問外部數(shù)據(jù)存儲器時,P2 口輸出 P2 鎖存器的內(nèi)容。在 flash
編程和校驗時,P2 口也接收高 8 位地址字節(jié)和一些控制信號。
� P3
P3 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口, p2 輸出緩沖器能驅(qū)動 4 個 TTL 邏輯電平。 對
P3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低
的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL) 。
端口引腳第二功能如表 2-4-1。
表 2-4-1
引腳 第二功能
P3.0        RXD(串行輸入口)
P3.1        TXD(串行輸出口)
P3.2        INT0(外中斷 0)
P3.3        INT1(外中斷 1)
P3.4        T0(定時/計數(shù)器 0)
P3.5        T1(定時/計數(shù)器 1)
P3.6        WR(外部數(shù)據(jù)存儲器寫選通)
P3.7        RD(外部數(shù)據(jù)存儲器讀選通)

� 其他引腳
RST——復(fù)位輸入。當(dāng)振蕩器工作時,RST 引腳出現(xiàn)兩個機(jī)器周期以上高電平將使單片機(jī)復(fù)位。
ALE/PROG——當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低 8 位字節(jié)。一般情況下, ALE 仍以時鐘振蕩頻率的 1/6 輸出固定的脈沖信號, 因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個 ALE 脈沖。對 FLASH 存儲器編程期間,該引腳還用于輸入編程脈沖(PROG) 。如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的 8EH 單元的 D0 位置位,可禁止 ALE 操作。該位置位后,只有一條 MOVX 和 MOVC 指令才能將 ALE 激活。此外,該引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時,應(yīng)設(shè)置 ALE 禁止位無效。
PSEN——程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng) AT89C52 由外部程序存儲器取指令(或數(shù)據(jù))時,每個機(jī)器周期兩次 PSEN 有效,即輸出兩個脈沖,在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次 PSEN 信號。EA/VPP——外部訪問允許,欲使 CPU 僅訪問外部程序存儲器(地址為 0000H-FFFFH) ,EA端必須保持低電平(接地) 。需注意的是:如果加密位 LB1 被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平(接 Vcc 端) ,CPU 則執(zhí)行內(nèi)部程序存儲器的指令。
2.4 壓力傳感器
壓力傳感器是通過應(yīng)變片的應(yīng)力變形,當(dāng)有應(yīng)力變形時,傳感器會輸出電壓,隨著中立重力的加大輸出電壓會出現(xiàn)線性變化。但是由于橋式稱重壓力傳感器,應(yīng)力變形很小,輸出的電壓變化幅度小、電壓值小,所以通過8位AD芯片ADC0832和簡單的外圍電路組成的采集模塊一起使用,是電路簡化,操作方便,易于固定、控制,稱量值精度高。我們選用D3B壓力傳感器。
D3B壓力傳感器工作電壓:4.2v—6.2v;壓力范圍:0-----1000mm水柱,0----0.1Kg/c㎡;電壓輸出:0.23v---4.9v;線性度0.2%;外型:30×30×20mm


I接 5V    O接IO口   G接GND
2.5 ADC0832
ADC0832 為 8 位分辨率 A/D 轉(zhuǎn)換芯片,其最高分辨可達(dá) 256 級,可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在 0~5V 之間。芯片轉(zhuǎn)換時間僅為 32μS,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗,以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過 DI 數(shù)據(jù)輸入端,可以輕易的實現(xiàn)通道功能的選擇。 正常情況下 ADC0832 與單片機(jī)的接口應(yīng)為 4 條數(shù)據(jù)線,分別是 CS、CLK、DO、DI。但由于 DO 端與 DI 端在通信時并未同時有效并與單片機(jī)的接口是雙向的,所以電路設(shè)計時可以將 DO 和 DI 并聯(lián)在一根數(shù)據(jù)線上使用。
當(dāng) ADC0832 未工作時其 CS 輸入端應(yīng)為高電平,此時芯片禁用,CLK 和 DO/DI 的電平可任意。當(dāng)要進(jìn)行 A/D 轉(zhuǎn)換時,須先將 CS 使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結(jié)束。此時芯片開始轉(zhuǎn)換工作,同時由處理器向芯片時鐘輸入端 CLK 輸入時鐘脈沖,DO/DI 端則使用 DI 端輸入通道功能選擇的數(shù)據(jù)信號。在第 1 個時鐘脈沖的下沉之前 DI 端必須是高電平,表示啟始信號。在第 2、3個脈沖下沉之前 DI 端應(yīng)輸入 2 位數(shù)據(jù)用于選擇通道功能,其功能項見表一。與單片機(jī)接口電路圖如下:圖2

圖2

如表 1 所示,當(dāng)此 2 位數(shù)據(jù)為“1”、“0”時,只對 CH0 進(jìn)行單通道轉(zhuǎn)換。當(dāng) 2 位數(shù)據(jù)為“1”、“1”時,只對 CH1 進(jìn)行單通道轉(zhuǎn)換。當(dāng) 2 位數(shù)據(jù)為“0”、“0”時,將 CH0 作為正輸入端 IN+,CH1作為負(fù)輸入端 IN-進(jìn)行輸入。當(dāng) 2 位數(shù)據(jù)為“0”、“1”時,將 CH0 作為負(fù)輸入端 IN-,CH1 作為正輸入端 IN+進(jìn)行輸入。
到第 3 個脈沖的下沉之后 DI 端的輸入電平就失去輸入作用,此后 DO/DI 端則開始利用數(shù)據(jù)輸出 DO 進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第 4 個脈沖下沉開始由 DO 端輸出轉(zhuǎn)換數(shù)據(jù)最高位 DATA7,隨后每一個脈沖下沉 DO 端輸出下一位數(shù)據(jù)。直到第 11 個脈沖時發(fā)出最低位數(shù)據(jù) DATA0,一個字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開始輸出下一個相反字節(jié)的數(shù)據(jù),即從第 11 個字節(jié)的下沉輸出 DATD0。隨后出 8 位數(shù)據(jù),到第 19 個脈沖時數(shù)據(jù)輸出完成,也標(biāo)志著一次 A/D 轉(zhuǎn)換的結(jié)束。最后將 CS 置高電平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。更詳細(xì)的時序說明請見表 2。

2.6 1602液晶
液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3是1602的內(nèi)部顯示地址。

圖3液晶內(nèi)部顯示地址
例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標(biāo)是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。
1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如圖10-58所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。

圖4 字符代碼與圖形對應(yīng)圖
初始化過程如下:圖5
延時15mS
寫指令38H(不檢測忙信號)
延時5mS
寫指令38H(不檢測忙信號)
延時5mS
寫指令38H(不檢測忙信號)
以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號
寫指令38H:顯示模式設(shè)置
寫指令08H:顯示關(guān)閉
寫指令01H:顯示清屏
寫指令06H:顯示光標(biāo)移動設(shè)置
寫指令0CH:顯示開及光標(biāo)設(shè)置
圖5:初始化活成(復(fù)位過程)
基本操作時序如下:


圖6;讀寫指令
讀操作時許如下:圖7

圖7;讀操作時序圖
寫操作時序如下:圖8

圖8;寫操作時序圖

3、系統(tǒng)電路設(shè)計
3.1 最小系統(tǒng)電路設(shè)計
最小系統(tǒng)由單片機(jī),P0口上啦排阻,外部時鐘振蕩電路,復(fù)位電路組成。如下;圖9

圖9;單片機(jī)最小系統(tǒng)電路圖
3.2 1602顯示電路設(shè)計
根據(jù)1602的數(shù)據(jù)手冊,1602與單片機(jī)的接法如下:圖10

圖10;單片機(jī)與1602連接原理圖
3.3 電磁繼電器電路設(shè)計如下:圖11

圖11;單片機(jī)驅(qū)動繼電器原理圖
3.4 壓力傳感器采集電路設(shè)計如下;圖12

圖12;壓力傳感器采集原理圖
3.5 蜂鳴器電路設(shè)計如下;圖13

圖13;蜂鳴器驅(qū)動原理圖


4、系統(tǒng)程序設(shè)計
4.1系統(tǒng)程序程圖設(shè)計如下;圖13

圖13:主程序流程圖
4.2壓力傳感器采集顯示程序流程圖設(shè)計

4.3按鍵程序流程圖設(shè)計

5 .1系統(tǒng)功能及指標(biāo)參數(shù)
5.1.1 系統(tǒng)功能
本次設(shè)計的智能液位傳感器主要能實現(xiàn)以下功能:
1、壓力傳感器采用的測量液體的壓強(qiáng)的方式來實現(xiàn)測量液面高度;
2、設(shè)計的單片機(jī)系統(tǒng)能控制ADC對壓力傳感器的輸出電壓信號進(jìn)行采集并轉(zhuǎn)換;
3、測量范圍能基本達(dá)到設(shè)計的要求在0-1米的范圍內(nèi)誤差較小;
4、能在上位機(jī)上直觀的顯示出測量的液面高度;
5.2.1  AD部分調(diào)試參數(shù)
















在調(diào)通AD后我們對AD的數(shù)據(jù)采集功能進(jìn)行了測試,測試數(shù)據(jù)如下圖5.1:
序號        高度(CM)        AD值
1        0        2
2        2        7
3        3        9
4        4        11
5        5        14
6        6        16
7        7        19
8        8        21
9        9        24
10        10        26
11        11        28
12        12        31
13        13        33
14        14        36
15        15        38
16        16        40
17        17        43
18        18        45
19        19        48
20        20        51
21        30        74
22        40        98
23        50        122
24        60        146
25        70        170
26        80        194
27        90        218
28        100        242


                       圖 5.1 AD的采集數(shù)據(jù)與給定的輸入數(shù)據(jù)






這幾組數(shù)據(jù)都是在室內(nèi)測得的,都是在室溫接近30度的情況測得。我們對所測得的數(shù)據(jù)進(jìn)行了處理,一共測了28組數(shù)據(jù)(給定的高度讀取ADC0832輸出的AD值),說明AD的線性度還是比較高的。

總結(jié)出來公式:水位高度=(AD值-2)/2.4
5.2.3 調(diào)試總結(jié)
通過調(diào)試我們發(fā)現(xiàn)調(diào)試時最費時間的是考慮很多因素,調(diào)試過程要將整個系統(tǒng)組合起來看工作是否正常,能否達(dá)到基本的要求。
我們設(shè)計的只能液位傳感器能基本滿足設(shè)計的基本要求,通過壓力傳感器測量液位的壓強(qiáng)方式,ADC0832對壓力傳感器的輸出的模擬電壓進(jìn)行采集和轉(zhuǎn)換送入單片機(jī)然后通過液晶屏幕顯示液面的高度。量范圍在0-1米內(nèi)時誤差能基本滿足要求。誤差主要就是來至壓力傳感器的輸出與ADC0832的輸入有一定的差距。

6、結(jié)論
本次設(shè)計的智能液位傳感器達(dá)到了預(yù)期的基本要求,主要特色之一就是直接利用壓力傳感器測液體的壓力的方式實現(xiàn)了測液面的高度,這種方式實現(xiàn)起來比較容易;其二就是將測量系統(tǒng)與PC機(jī)相結(jié)合起來這樣對數(shù)據(jù)的讀數(shù)比較直觀,并且能精確到厘米。不過此設(shè)計也有很多不足之處,測量時要在容器的底部開口才能讀出壓力,還可以加入報警系統(tǒng),當(dāng)測量超出范圍時,系統(tǒng)自動報警。還有就是還可以加上一定的數(shù)據(jù)存儲能力,這樣要對以前的數(shù)據(jù)進(jìn)行研究的地方非常有幫助。






致    謝



通過這一階段的努力,我的畢業(yè)設(shè)計終于完成了,這意味著我的大學(xué)生活即將結(jié)束。在大學(xué)階段,我在學(xué)習(xí)上和思想上都受益匪淺,這除了自身的努力外,與各位老師、同學(xué)和朋友的關(guān)心、支持和鼓勵是分不開的。
在本論文的完成過程中,我的指導(dǎo)老師傾注了大量的心血,從選題到開題報告,從寫作提綱到一遍又一遍地指出每稿中的具體問題,嚴(yán)格把關(guān),循循善誘,在此我衷心感謝。同時我還要感謝在我學(xué)習(xí)期間給我極大關(guān)心和支持的各位老師以及關(guān)心我的同學(xué)和朋友。
寫作畢業(yè)論文是一次在系統(tǒng)學(xué)習(xí)的過程,畢業(yè)論文的完成,同樣也意味著新的學(xué)習(xí)生活的開始,我將銘記我曾是一名工大學(xué)子,在今后的工作中把工大的優(yōu)良傳統(tǒng)發(fā)揚(yáng)光大。
感謝各位專家的批評指導(dǎo)。














附錄1
參考文獻(xiàn)
[1] 趙國強(qiáng),智能臺燈,科學(xué)啟蒙,2007, 第Z1期
[2]趙繼文,傳感器與應(yīng)用電路設(shè)計,北京,北京科學(xué)出版社,2002.3,6
[3]黃繼昌,電子元器件應(yīng)用手冊,北京,北京人民郵電出版社, 2004年,5
[4]趙輝,Protel99電子線路CAD,北京,北京郵電大學(xué)出版社,2007
[5]畢淑娥,電工與電子技術(shù)基礎(chǔ),哈爾濱,哈爾濱工業(yè)大學(xué)出版社,2008.6
[6]李全利,單片機(jī)原理及應(yīng)用,北京,清華大學(xué)出版社,2006.2
[7]黃長藝,機(jī)械工程測試技術(shù)基礎(chǔ),北京:機(jī)械工業(yè)出版社,2009.3,68-124
[8]金發(fā)慶,傳感器技術(shù)與應(yīng)用,北京 : 機(jī)械工業(yè)出版社, 2004.8,281-290
[9]王港元,電子技能基礎(chǔ),成都,成都科技大學(xué)出版社,1999
[10]熱釋電紅外傳感器,http://baike.baidu.com/view/1788636.htm
[11]光敏電阻,http://baike.baidu.com/view/55997.htm
[12]夏路易,單片機(jī)在控制系統(tǒng)中的應(yīng)用,北京,北京希望電子出版社,2006
[13]李朝青,單片機(jī)原理及接口技術(shù),北京,北京航空航天大學(xué)出版社,2004
    [15] AT89C51 DATA SHEEP Philips Semiconductors 1999.dec
[16]Yang. Y., Yi. J., Woo, Y.Y., and Kim. B.: ‘Optimum design for linearityand                               efficiency of microwave Doherty amplifier using a new loadmatching technique’, Microw. J., 2001, 44, (12), pp. 20–36








附錄2
系統(tǒng)原理圖





















附錄3:源程序

#include<reg52.h>                                 //頭文件
#include<intrins.h>
#include"eeprom52.h"                         //STC89C52 EEPROM   程序文件
#define uchar unsigned char                 //宏定義
#define uint unsigned int

#define LCD1602_dat P0            //LCD1602數(shù)據(jù)口宏定義

sbit LCD1602_rs=P2^5;                //LCD1602控制數(shù)據(jù)IO口
sbit LCD1602_rw=P2^6;
sbit LCD1602_e=P2^7;
sbit beep=P1^4;                //蜂鳴器  IO
sbit led_1=P1^6;                //LED指示燈  IO
sbit led_2=P1^7;
sbit key_1=P3^0;                //系統(tǒng)控制按鍵IO口
sbit key_2=P3^1;
sbit key_3=P3^2;
sbit alarm_1=P2^0;                //控制繼電器IO口


sbit ADC0832_CS=P1^2;        //ADC0832  控制IO口          使能口
sbit ADC0832_CLK=P1^1;        //時鐘IO口
sbit ADC0832_DIO=P1^0;        //數(shù)據(jù)輸入輸出IO口

uint sum;                          //10次AD值的綜合變量
uchar RH,RH_H=12,RH_L=8,state,ms,cs;  //當(dāng)前水位,  水位上限,下限,  設(shè)置項變量,50ms變量   ,cs 為計次數(shù)變量    ,
bit beep1,zt,s1;          //報警標(biāo)志位,   工作模式標(biāo)志位,   閃爍標(biāo)志位


unsigned int  A_D()            //ADC0832   讀值程序
{
        unsigned char i;
        unsigned char dat;                                         
        ADC0832_CS=1;   //一個轉(zhuǎn)換周期開始
        ADC0832_CLK=0;  //為第一個脈沖作準(zhǔn)備
        ADC0832_CS=0;  //CS置0,片選有效
        ADC0832_DIO=1;    //DIO置1,規(guī)定的起始信號  
        ADC0832_CLK=1;   //第一個脈沖
        ADC0832_CLK=0;   //第一個脈沖的下降沿,此前DIO必須是高電平
        ADC0832_DIO=1;   //DIO置1, 通道選擇信號  
        ADC0832_CLK=1;   //第二個脈沖,第2、3個脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道RH0
        ADC0832_CLK=0;   //第二個脈沖下降沿
        ADC0832_DIO=0;   //DI置0,選擇通道0
        ADC0832_CLK=1;    //第三個脈沖
        ADC0832_CLK=0;    //第三個脈沖下降沿
        ADC0832_DIO=1;    //第三個脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
        ADC0832_CLK=1;    //第四個脈沖
        for(i=0;i<8;i++)  //高位在前
        {
                ADC0832_CLK=1;         //第四個脈沖
                ADC0832_CLK=0;
                dat<<=1;       //將下面儲存的低位數(shù)據(jù)向右移
                dat|=(unsigned char)ADC0832_DIO;          //將輸出數(shù)據(jù)DIO通過或運算儲存在dat最低位
        }                                  
        ADC0832_CS=1;          //片選無效
        return dat;         //將讀書的數(shù)據(jù)返回     
}


/********************************************************************
* 名稱 : delay()
* 功能 : 小延時。                                                                                                         
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay(uint T)                                          //延時函數(shù)
{
        while(T--);
}
/********************************************************************
* 名稱 : LCD1602_write(uchar order,dat)
* 功能 : 1602寫如數(shù)據(jù)函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void LCD1602_write(uchar order,dat)                                  //1602 一個字節(jié)  處理
{
    LCD1602_e=0;
    LCD1602_rs=order;
    LCD1602_dat=dat;
    LCD1602_rw=0;
    LCD1602_e=1;
    delay(1);
    LCD1602_e=0;                                                                                                                                                                                                     
}
/********************************************************************
* 名稱 : LCD1602_writebye(uchar *prointer)
* 功能 : 1602寫入數(shù)據(jù)函數(shù)  指針式
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void LCD1602_writebyte(uchar *prointer)                                   //1602 字符串    處理
{
    while(*prointer!='\0')
    {
        LCD1602_write(1,*prointer);
        prointer++;
    }
}
/********************************************************************
* 名稱 : LCD1602_cls()
* 功能 : 初始化1602液晶
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void LCD1602_cls()                                                                         //1602 初始化
{
        LCD1602_write(0,0x01);     //1602 清屏 指令
        delay(1500);
        LCD1602_write(0,0x38);     // 功能設(shè)置 8位、5*7點陣
        delay(1500);
        LCD1602_write(0,0x0c);     //設(shè)置 光標(biāo)   不顯示開關(guān)、不顯示光標(biāo)、字符不閃爍
        LCD1602_write(0,0x06);
        LCD1602_write(0,0xd0);
        delay(1500);
}
/********************************************************************
* 名稱 : show()
* 功能 : LCD1602液晶顯示程序
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void show()
{
        if(state==0)                //當(dāng)前水位及工作模式顯示
        {
                LCD1602_write(0,0x80);
                LCD1602_writebyte("Water level:");        //當(dāng)前水位
                if(RH>9)LCD1602_write(1,0x30+RH/10%10);
                else LCD1602_writebyte(" ");
                LCD1602_write(1,0x30+RH%10);
                LCD1602_writebyte("cm");

                LCD1602_write(0,0xC0);
                LCD1602_writebyte("State:");          //工作模式
                if(zt==0)
                {
                        LCD1602_writebyte("Manul     ");
                }else
                {
                        LCD1602_writebyte(" Aoto     ");
                }
                       
        }else                  //水位上下限設(shè)置界面
        {
                LCD1602_write(0,0x80);
                LCD1602_writebyte("Water_H:");   //水位上限
                if(state==1&&s1==1)                   //通過閃爍標(biāo)志為  達(dá)到閃爍的效果
                {
                        LCD1602_writebyte("  ");
                }else
                {
                        if(RH_H>9)LCD1602_write(1,0x30+RH_H/10%10);
                        else LCD1602_writebyte(" ");
                        LCD1602_write(1,0x30+RH_H%10);               
                }

                LCD1602_writebyte("cm    ");

                LCD1602_write(0,0xC0);
                LCD1602_writebyte("Water_L:");  //水位下限
                if(state==2&&s1==1)                 //通過閃爍標(biāo)志為  達(dá)到閃爍的效果
                {
                        LCD1602_writebyte("  ");
                }else
                {
                        if(RH_L>9)LCD1602_write(1,0x30+RH_L/10%10);
                        else LCD1602_writebyte(" ");
                        LCD1602_write(1,0x30+RH_L%10);
                }
                LCD1602_writebyte("cm    ");       
        }
}
/********************************************************************
* 名稱 : key()
* 功能 : 按鍵控制程序     實現(xiàn)系統(tǒng)各個控制功能
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void key()
{
        if(!key_1) //設(shè)置按鍵  設(shè)置  功能:切換顯示及設(shè)置的選項
        {
                delay(888);   //按鍵去抖
                if(!key_1)        //再次判斷按鍵
                {
                        while(!key_1) show();  //按鍵判斷是否釋放
                        state=(state+1)%3;          //執(zhí)行按鍵功能   切換設(shè)置項
                }
        }

        if(!key_2)   //切換設(shè)置項值的大小    及非設(shè)置模式下切換系統(tǒng)工作模式按鍵
        {
                delay(888);   //按鍵去抖
                if(!key_2)   //再次判斷按鍵
                {
                        while(!key_2)show();  //按鍵判斷是否釋放
                        if(state==1)                  //執(zhí)行按鍵功能   切換設(shè)置項
                        {
                                if(RH_H<100)RH_H++;                   //設(shè)置上限值
                                SectorErase(0x2000);         //保存上限值         保存到單片機(jī)中EEPROM
                                byte_write(0x2000,RH_H);
                        }else if(state==2)
                        {
                                if(RH_L<RH_H-1)RH_L++;          //設(shè)置下限值
                                SectorErase(0x2200);         //保存下限值         保存到單片機(jī)中EEPROM
                                byte_write(0x2200,RH_L);
                        }else
                        {
                                zt=!zt;                                 //切換系統(tǒng)的工作模式   自動   手動
                        }       
                }
        }

        if(!key_3)    //切換設(shè)置項值的大小    及手動模式下切換系統(tǒng)工作狀態(tài)‘開關(guān)’
        {
                delay(888);        //按鍵去抖
                if(!key_3)    //再次判斷按鍵
                {               
                        while(!key_3)show();  //按鍵判斷是否釋放
                        if(state==1)                  //執(zhí)行按鍵功能   切換設(shè)置項
                        {
                                if(RH_H>RH_L+1)RH_H--;
                                SectorErase(0x2000);         //保存上限值  保存到單片機(jī)中EEPROM
                                byte_write(0x2000,RH_H);
                        }else if(state==2)
                        {
                                if(RH_L>0)RH_L--;
                                SectorErase(0x2200);         //保存下限值        保存到單片機(jī)中EEPROM
                                byte_write(0x2200,RH_L);
                        }else
                        {
                                if(zt==0)
                                {
                                        alarm_1=!alarm_1;           //手動模式切換系統(tǒng)的工作狀態(tài)
                                }
                        }
                }
        }               
}
/********************************************************************
* 名稱 : proc()
* 功能 : 系統(tǒng)處理程序部分
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void proc()
{
        if(zt==1)          //zt==1  為自動模式    如果系統(tǒng)在自動模式下
        {
                if(RH>=RH_H)           //如果當(dāng)前水位值達(dá)到水位上限值則
                {
                        alarm_1=1;   //關(guān)閉繼電器   
                        led_1=0;                //顯示對應(yīng)的指示燈
                }else                  //否則
                {
                        led_1=1;           //顯示對應(yīng)的指示燈
                }

                if(RH<=RH_L)           //如果當(dāng)前水位值低于水位下限值則
                {
                        alarm_1=0;   //開啟繼電器
                        led_2=0;           //顯示對應(yīng)的指示燈
                }else            //否則
                {
                        led_2=1;           //顯示對應(yīng)的指示燈
                }

                if(RH>=RH_H|RH<=RH_L)  //蜂鳴器處理部分   如果當(dāng)前水位超出水位上下限  則
                {
                        beep1=1;                   //開始報警
                }else                 //否則
                {
                        beep1=0;           //停止報警
                }
        }else
        {
                beep1=0;                 //手動模式關(guān)閉指示燈及蜂鳴器
                led_1=led_2=1;
        }
}





void main()
{       
        float Ad_dat=0;
        alarm_1=1;        //繼電器狀態(tài)初始化
        TMOD=0x01;    //定時器配置初始化
        TH0=0x3c;            //16位定時   定時50ms
        TL0=0xb0;
        ET0=1;
        TR0=1;           //開啟總中斷    及打開定時器0
        EA=1;
        LCD1602_cls();           //LCD1602  初始化
        RH_H=byte_read(0x2000);           //讀取EEPROM中的水位上下限的值
        RH_L=byte_read(0x2200);
        if((RH_H>99)||(RH_L>99)||(RH_L>=RH_H))   {RH_H=14;  RH_L=7;} //如果超出水位上下限設(shè)置的范圍,則重新賦值
          
        while(1)
        {
                if(cs<10)                                 // 濾 //數(shù)字濾波器   是ADC0832讀出的值變化幅度小
                {
                        cs++;
                        sum+=A_D();                // 波    //讀取10次 AD值
                }
                else                                        // 算
                {
                        cs=0;                                // 法
                        Ad_dat=(uchar)(sum/10);         //求出當(dāng)前水位值
                        //ad_dat1=255-ad_dat1;
                        if(Ad_dat>2)
                        {
                                Ad_dat=(float)((Ad_dat-2)/2.4);  //計算水位
                                RH=(uchar)(Ad_dat);       
                        }
                        else
                        RH=0;               
                        sum=0;
                }               
                show();          //調(diào)用子程序
                key();
                proc();
        }
}

void UART_1() interrupt 1  //定時器0 中斷
{
        TH0=0x3c;                         //重新賦值
        TL0=0xb0;
        ms++;                    //50ms計數(shù)
        if(ms%5==0)                //250ms  計時
        {
            s1=!s1;            //改變閃爍標(biāo)志為的值
        }
        if(ms%10==0)           //500ms定時
        {
                if(beep1==1) //蜂鳴器報警處理   
                {
                        beep=!beep;
                }else
                {
                        beep=1;
                }       
        }
        if(ms>19)
        {
                ms=0;
        }       
}










評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:704309 發(fā)表于 2020-4-5 19:48 | 只看該作者
有系統(tǒng)原理圖嗎?
回復(fù)

使用道具 舉報

板凳
ID:715032 發(fā)表于 2020-5-13 15:38 | 只看該作者
能說明一下水位是怎么計算的嗎
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产精品 | 久久久久国产精品一区二区 | 7777在线视频 | 色婷婷亚洲国产女人的天堂 | 久久精品二区 | 91久久看片 | 欧美在线视频一区 | 91麻豆蜜桃一区二区三区 | 欧美激情va永久在线播放 | 久久久久久av | 91在线最新 | 欧美美女二区 | 99精品一级欧美片免费播放 | 中文字幕91 | 奇米影视在线 | 日韩中文字幕av | 黄色三级免费 | 午夜免费电影院 | 中文字幕av亚洲精品一部二部 | 日韩欧美网 | 狠狠色狠狠色综合日日92 | 国产极品车模吞精高潮呻吟 | 精精国产xxxx视频在线播放7 | 97国产精品视频 | 国产精品久久久久久久久久久久冷 | 日韩精品在线观看一区二区三区 | 99视频在线 | 99久久久久久99国产精品免 | 欧美日韩视频在线第一区 | 欧美精品网| 久久国产精品视频 | av在线免费网站 | 久久激情网 | 国产亚洲高清视频 | 亚洲一区二区视频 | 一区二区三区高清 | 欧美一区二区激情三区 | 最近中文字幕免费 | 色婷婷综合成人av | 国产精品视频专区 | 亚洲精品一区二区三区 |