版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于單片機的全自動加濕器的設(shè)計目錄第一章前言 [5]。圖3-1STM32F103C8T6模塊為了使該設(shè)計更加智能化,該項目擬定使用STM32F103C8T6單片機為系統(tǒng)控制器的CPU。采用STM32F103C8T6對各個模塊進(jìn)行監(jiān)測和控制,減少外部設(shè)備的連接,提高工作效率。單片機接收從傳感器檢測電路輸入的邏輯信號和脈沖信號,并將輸入的信號進(jìn)行處理分析運算,以控制電流或控制電壓的形式輸出給被控制的單元模塊,完成系統(tǒng)的各項任務(wù)。STM32F103C8T6模塊如圖3-圖3-1STM32F103C8T6模塊3.2STM32最小系統(tǒng)(1)復(fù)位電路復(fù)位電路是構(gòu)成單片機最小系統(tǒng)不可缺少的一部分,是單片機系統(tǒng)的初始化操作,單片機在每次啟動之后都會先進(jìn)行復(fù)位,從而使系統(tǒng)達(dá)到初始化狀態(tài)。其主要功能是把單片機程序的開始地址初始化為0000H,讓程序從0000H單元開始執(zhí)行。圖3-2復(fù)位電路當(dāng)單片機碰到各種因素的問題無法正常運行時,便可使用復(fù)位按鍵進(jìn)行復(fù)位,使其回到初始狀態(tài)。STM32F103C8T6采用的是高電平復(fù)位,在通過給復(fù)位端接一個下拉電阻,并接一個電容到電源完成上電復(fù)位,在上電初電源給電容充電導(dǎo)通,復(fù)位端相當(dāng)于連接到高電平,進(jìn)行復(fù)位。電容充電完成后高電平斷開,復(fù)位端口被電阻拉低退出復(fù)位狀態(tài)。復(fù)位電路如圖3-圖3-2復(fù)位電路(2)時鐘電路STM32有5個時鐘源HSI、HSE、LSI、LSE、PLL其中,高速時鐘(HSE和HSI)提供給芯片主體的主時鐘.低速時鐘(LSE和LSI)只是提供給芯片中的RTC(實時時鐘)及獨立看門狗使用。內(nèi)部時鐘是在芯片內(nèi)部RC振蕩器產(chǎn)生的,起振較快,所以時鐘在芯片剛上電的時候,默認(rèn)使用內(nèi)部高速時鐘。而外部時鐘信號是由外部的晶振輸入的,在精度和穩(wěn)定性上都有很大優(yōu)勢,所以上電之后我們再通過軟件配置,轉(zhuǎn)而采用外部時鐘信號。時鐘電路如圖3-3所示。圖3-3時鐘電路端口OSC_OUT和OSC_IN是連接到高速外部時鐘HSE,以外部晶振作時鐘源,晶振頻率可取范圍為4~16MHz,兩個引腳分別接到外部晶振8MHz,端口OSC32_OUT和OSC32_IN是連接到低速外部時鐘圖3-3時鐘電路3.3電源模塊作為電路的必不可少缺少的一部分,電源的控制是十分重要的。此次設(shè)計選用現(xiàn)在市面上主流的Type-C端口,作為電源的輸入口。采用輸入電壓5V的供電方式,為整個電路的主供電。由于其中單片機所需的供電為3.3V,故采用三端穩(wěn)壓芯片AMS1117-3V3進(jìn)行降壓處理,使其達(dá)到單片機所需要的工作電壓。電源模塊電路如圖3-4所示。圖3-4電源模塊電路3.4超聲波霧化電路超聲波霧化是國內(nèi)外應(yīng)用較廣的一種加濕方式。在工作時無機械驅(qū)動、無噪音干擾、無污染,故障率低、能耗低、霧化效率高、維護(hù)簡便、可靠。超聲波霧化器是利用電子高頻震蕩,通過與陶瓷霧化片的高頻諧振,將液態(tài)水分子結(jié)構(gòu)打散而產(chǎn)生自然飄逸的水霧,不需加熱或添加任何化學(xué)試劑。與加熱霧化方式比較,能源節(jié)省了90%。另外在霧化過程中將釋放大量的負(fù)離子,其與空氣中漂浮的煙霧、粉塵等產(chǎn)生靜電式反應(yīng),使其沉淀[6]。電路由一個三極管控制電路,以及NE555所構(gòu)成的多諧振蕩器構(gòu)成。三極管控制電路由單片機GPIO口控制,當(dāng)單片機PA2口輸出為高電平時,三極管Q1導(dǎo)通,電源通過繼電器線圈經(jīng)三極管到地,同時在線圈導(dǎo)通同時繼電器常開觸點閉合,從而使NE555芯片上電。當(dāng)單片機PA2口輸出為低電平時,三極管Q1截止,繼電器不導(dǎo)通,超聲波霧化電路停止工作。當(dāng)NE555芯片上電,電源通過R12和R13對電容C17充電,當(dāng)NE555芯片檢測到電容C17電壓小于供電電壓1/3時,其端口3輸出高電平,端口7放電截止。當(dāng)電容C17充電到供電電壓的2/3時,端口3輸出翻轉(zhuǎn)為0,此時端口7放電端導(dǎo)通,電容C17通過電阻R13放電,使電容C17電壓下降,當(dāng)電容C17電壓下降到供電電壓1/3時,輸出端口3又進(jìn)行翻轉(zhuǎn),端口7放電截止,電容C17又開始充電。如此周而復(fù)始,從而在輸出端3得到一個連續(xù)變化的振蕩脈沖波形。陶瓷霧化片工作頻率約在107KHZ左右,因此通過調(diào)整電阻R12和R13以及電容C17的值來進(jìn)行選頻,使其產(chǎn)生合適的工作頻率[7]。脈沖寬度TL=0.7*R12*C17,由電容C放電時間決定;TH=0.7(R1+R2)C,由電容C充電時間決定,脈沖周期T=TH+TL,頻率F=1/T,由此可得電阻R12為27Ω,電阻R13為68Ω,電容C17為10NF。在經(jīng)過NE555產(chǎn)生特定的頻率之后,再把頻率信號傳送給N型MOS管,由MOS管源級的三腳電感進(jìn)行升壓,達(dá)到能驅(qū)動霧化片的電壓頻率。超聲波霧化電路如圖3-5所示。圖3-5超聲波霧化電路3.5溫濕度監(jiān)測電路方案一:在一般情況下,檢測環(huán)境中的溫濕度有許多種方法,其中采用熱敏電阻以及濕敏元器件進(jìn)行檢測是最常用的方式之一。熱敏電阻的電阻值會隨溫度的變化出現(xiàn)波動,而濕敏元器件對空氣中的水分子及其敏感,但二者在可靠性和精度上效果不是很好,在需要高精度測量檢測數(shù)據(jù)時,選用熱敏電阻以及濕敏元器件進(jìn)行檢測便無法保證精確度。方案二:采用溫濕度復(fù)合傳感器DHT11,數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器,傳感器包括一個電容式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。作為一個集成溫濕度功能的器件,除了功能極其強大之外還具有高精度的數(shù)據(jù)采集。并且集成了A/D轉(zhuǎn)換功能,可以把檢測到的環(huán)境溫濕度信號,轉(zhuǎn)化為數(shù)字信號,并存放在集成的RAM存儲器中,供單片機讀取成本低。DHT11傳感器現(xiàn)如今在市場應(yīng)用極其廣泛,在功能上響應(yīng)迅速,并且擁有極強的抗干擾能力,性價比很高。因此,在此次項目中我選擇它作為溫濕度采集。溫濕度傳感器實物及外圍電路圖如圖3-6所示[8]。圖3-6溫濕度傳感器實物及外圍電路圖3.6水位檢測電路水位傳感器是一種常見的測量液位位置的傳感器,它是將水位的高度轉(zhuǎn)化為電信號的形式進(jìn)行輸出,根據(jù)市場上液位傳感器的種類,大概分為以下幾種方案。方案一:浮球式水位傳感器,由磁性浮球、測量導(dǎo)管、信號單元、電子單元、接線盒及安裝件組成??善谝好嬷?/p>
上并沿測量導(dǎo)管上下移動。導(dǎo)管內(nèi)裝有測量元件,它可以在外磁作用下,將被測液位信號,轉(zhuǎn)換成正比于液位變化的電阻信號,并將電子單元轉(zhuǎn)換成4~20ma或其它標(biāo)準(zhǔn)信號輸出。與其工作方式相同的還有浮筒式水位傳感器,它是將磁性浮球改為浮筒,浮筒式傳感器是利用微小的金屬膜應(yīng)變傳感技術(shù)來測量液體的液位和密度的。此傳感器主要受水位影響做信號采集,反應(yīng)靈敏。但該傳感器價格高,體積大,并不適合小場所應(yīng)用[9]。方案二:靜壓式水位傳感器,是利用防爆流量計液體靜壓力的測量原理工作。一般選用硅壓力測壓傳感器將測量到的壓力轉(zhuǎn)換成電信號,之后再經(jīng)放大電路放大和補償電路補償,最后以4~20ma或0~10ma電流方式輸出。
靜壓式水位傳感器成本低,但在水位低的情況下靈敏度并不是很高,因此并不適合在水位不深的場所應(yīng)用[10]。方案三:WaterSensor水位傳感器,主要是利用三極管的電流放大原理。當(dāng)水位高度使三極管的基極與電源正極導(dǎo)通的時候,在三極管的基極和發(fā)射極之間就會產(chǎn)生一定大小的電流,此時在三極管的集電極和發(fā)射極之間就會產(chǎn)生一個一定放大倍數(shù)的電流,該電流經(jīng)過發(fā)射極的電阻產(chǎn)生特點電壓,被AD轉(zhuǎn)換器采集。是一款簡單易用、性價比高的水位/水滴識別檢測傳感器,其是通過具有一系列的暴露的平行導(dǎo)線線跡測量其水滴/水量大小從而判斷水位。能夠輕松完成水量到模擬信號的轉(zhuǎn)換,輸出的模擬值可以直接被單片機讀取,達(dá)到水位報警的功效。因此,在此次項目中我選擇它作為溫濕度采集。水位傳感器實物及外圍電路圖如圖3-7所示[11]。圖3-7水位傳感器實物及外圍電路圖3.7加水電路圖3-8加水電路模塊加水電路主要由三極管和繼電器以及二極管構(gòu)成。其工作原理是,當(dāng)單片機檢測到水位不足20%時。便會發(fā)送高電平三極管Q4的基極,三極管Q4接收到高電平便會導(dǎo)通,其繼電器JK2線圈導(dǎo)通,常開觸點閉合,加水馬達(dá)啟動,從而給加濕器加水。當(dāng)單片機檢測到水位達(dá)到80%,便會給三級管Q4低電平,使三極管截止,繼電器線圈閉合,常開觸點回到初始狀態(tài)。二極管D2在三極管閉合同時給繼電器線圈續(xù)流,達(dá)到保護(hù)三極管的作用。加水電路模塊如圖3-8所示[12]。圖3-8加水電路模塊3.8報警電路在本項目當(dāng)中,報警電路主要是由一個蜂鳴器報警和一個LED燈構(gòu)成,蜂鳴器由電路、蜂鳴器和三級管構(gòu)成,如圖3-9所示。其主要作用是當(dāng)檢測全自動加濕器水位不足與故障時給予警報提醒功能。同時,LED燈便會開始進(jìn)行閃爍。圖3-9報警電路在使用蜂鳴器進(jìn)行報警時,會發(fā)生以下動作:當(dāng)單片機模塊通過水位傳感器檢測到加濕器內(nèi)部水位不足15%時,便會發(fā)出信號控制報警電路。蜂鳴器信號通過三極管放大驅(qū)動電流,從而讓蜂鳴器發(fā)出聲音,LED開始進(jìn)行閃爍。蜂鳴器信號端當(dāng)輸出高電平,三極管Q3導(dǎo)通,集電極電流會通過蜂鳴器發(fā)出聲音。當(dāng)故障排除后單片機便會輸出低電平時,這時三極管Q3截止,沒有電流流過蜂鳴器,所以就不會發(fā)出聲音圖3-9報警電路3.9按鍵電路單片機的鍵盤設(shè)計主要分為獨立式和矩陣式。獨立鍵盤上每個I/O口只接一個按鍵,按鍵另一端接電源或地。矩陣式鍵盤接法相對于獨立式較為復(fù)雜,適合應(yīng)用于按鍵數(shù)量多的場所,在本次項目中,由于所需按鍵較少,所以采用的是獨立鍵盤接法。獨立式鍵盤的實現(xiàn)方法是利用單片機I/O口讀取電平高低來判斷是否有按鍵按下。按鍵電路如圖3-10所示。圖3-10按鍵電路該模塊主要是為了便于維修,使維修人員能夠更快的定位設(shè)備故障,從而達(dá)到快速檢修設(shè)備的目的。在按下SW2時,便會啟動超聲波霧化模塊,使設(shè)備進(jìn)行加濕,再次按下會進(jìn)入定時模式,第三次按下就會退出加濕。在按下SW3則會啟動加水模塊電路,再次按下便會關(guān)閉該模塊。SW4是報警模塊檢測按鈕,在按下SW4便會開始報警,再次按下便會停止。SW5為USART1的觸發(fā)端,在按下S圖3-10按鍵電路3.10顯示電路顯示電路在本次項目中采用的是液晶顯示屏LCD1602,它是一種字符型液晶顯示器,是一種專門用于顯示字母、數(shù)字、符號等的點陣式液晶顯示器,具有16個引腳。LCD1602的顯示容量為16x2個字符,芯片工作電壓為4.5~5.5V,工作電流為2.0mA,模塊最佳工作電壓是5.0V。LCD1062液晶顯示器引腳及功能說明如表3.1所示。表3.1LCD1062液晶顯示器引腳及功能說明編號符號引腳說明編號符號引腳說明1VSS電源地9D2DataI/O2VDD電源正極10D3DataI/O3VL液晶顯示偏壓信號11D4DataI/O4RS數(shù)據(jù)/命令選擇端(H/L)12D5DataI/O5R/W讀/寫選擇端(H/L)13D6DataI/O6E使能信號14D7DataI/O7D0DataI/O15BLA背光源正極8D1DataI/O16BLK背光源負(fù)極LCD1602液晶顯示屏外圍電路簡單,使用方便。將LCD1602的VDD以及背光源正極接電源5V,VSS與背光源負(fù)極接地,由此便完成了顯示模塊的供電。再將液晶顯示偏壓信號VL接一個10K的可調(diào)電阻到地,其接入可調(diào)電阻的目的主要是控制LCD點陣顯示的亮度。再將剩下的引腳接入STM32單片機的I/O口,便完成了該模塊的外圍電路搭建。其主要連接圖如3-11所示。圖3-11LCD液晶顯示屏與單片機連接線
第四章軟件設(shè)計4.1系統(tǒng)功能控制設(shè)計該系統(tǒng)采用的是C語言,KeilVison5軟件進(jìn)行編寫,主要是結(jié)合硬件電路實現(xiàn)溫濕度測量以及水位檢測。在檢測到溫濕度以及水位來分析設(shè)備的現(xiàn)有情況,并依據(jù)設(shè)備現(xiàn)有情況來調(diào)用加濕器的其他各種功能模塊。程序框架圖如圖4-1所示。圖4-1程序框架圖4.2溫濕度檢測驅(qū)動程序溫濕度檢測主要對DHT11傳感器,所采集到的溫濕度數(shù)據(jù)進(jìn)行讀取。DHT11數(shù)字溫濕度傳感器是一款采用單總線協(xié)議,DHT11采用單總線協(xié)議與單片機通信,單片機發(fā)送一次復(fù)位信號后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機復(fù)位結(jié)束后,DHT11發(fā)送響應(yīng)信號,并拉高總線準(zhǔn)備傳輸數(shù)據(jù)。一次完整的數(shù)據(jù)為40bit,按照高位在前,低位在后的順序傳輸。數(shù)據(jù)格式為:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗和,一共5字節(jié)(40bit)數(shù)據(jù)。由于DHT11分辨率只能精確到個位,所以小數(shù)部分是數(shù)據(jù)全為0。校驗和為前4個字節(jié)數(shù)據(jù)相加,校驗的目的是為了保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。DHT11只有在接收到開始信號后才觸發(fā)一次溫濕度采集,如果沒有接收到主機發(fā)送復(fù)位信號,DHT11不主動進(jìn)行溫濕度采集。當(dāng)數(shù)據(jù)采集完畢且無開始信號后,DHT11自動切換到低速模式。DHT11驅(qū)動流程圖如圖4-2所示。圖4-2DHT11驅(qū)動流程圖(1)復(fù)位信號首先主機拉低總線至少18ms,然后再拉高總線,延時20~40us,取中間值30us,此時復(fù)位信號發(fā)送完畢。主機發(fā)送復(fù)位信號如圖4-3所示。圖4-3主機發(fā)送復(fù)位信號(2)響應(yīng)信號DHT11檢測到復(fù)位信號后,觸發(fā)一次采樣,并拉低總線80us表示響應(yīng)信號,告訴主機數(shù)據(jù)已經(jīng)準(zhǔn)備好了;然后DHT11拉高總線80us,之后開始傳輸數(shù)據(jù)。如果檢測到響應(yīng)信號為高電平,則DHT11初始化失敗,請檢查線路是否連接正常。當(dāng)復(fù)位信號發(fā)送完畢后,如果檢測到總線被拉低,就每隔1us計數(shù)一次,直至總線拉高,計算低電平時間;當(dāng)總線被拉高后重新計數(shù)檢測80us的高電平。如果檢測到響應(yīng)信號之后的80us高電平,就準(zhǔn)備開始接收數(shù)據(jù)。實際上DHT11的響應(yīng)時間并不是標(biāo)準(zhǔn)的80us,往往存在誤差,當(dāng)響應(yīng)時間處于20~100us之間時就可以認(rèn)定響應(yīng)成功。從機響應(yīng)信號如圖4-4所示。圖4-4從機響應(yīng)信號(3)數(shù)據(jù)傳輸DHT11在拉高總線80us后開始傳輸數(shù)據(jù)。每1bit數(shù)據(jù)都以50us低電平時隙開始,告訴主機開始傳輸一位數(shù)據(jù)了。DHT11以高電平的長短定義數(shù)據(jù)位是0還是1,當(dāng)50us低電平時隙過后拉高總線,高電平持續(xù)26~28us表示數(shù)據(jù)“0”;持續(xù)70us表示數(shù)據(jù)“1”。數(shù)據(jù)格式信號如圖4-5所示。圖4-5數(shù)據(jù)格式信號當(dāng)最后1bit數(shù)據(jù)傳送完畢后,DHT11拉低總線50us,表示數(shù)據(jù)傳輸完畢,隨后總線由上拉電阻拉高進(jìn)入空閑狀態(tài)。信號發(fā)送時序圖如圖4-6所示。圖4-6信號發(fā)送時序圖4.3水位檢測驅(qū)動程序WaterSensor水位傳感器能夠監(jiān)測水位。該模塊主要是利用三極管的電流放大原理:當(dāng)液位高度使三極管的基極與電源正極導(dǎo)通的時候,在三極管的基極和發(fā)射極之間就會產(chǎn)生一定大小的電流,此時在三極管的集電極和發(fā)射極之間就會產(chǎn)生一個一定放大倍數(shù)的電流,該電流經(jīng)過發(fā)射極的電阻產(chǎn)生特點電壓,被AD轉(zhuǎn)換器采集。STM32F103C8T6芯片具有2個12位的AD轉(zhuǎn)換接口,在本次設(shè)計當(dāng)中我將水位傳感器的輸出端,與單片機的PA0口相連,在確定外圍電路之后,下一步便是開啟PA端口的時鐘,設(shè)置PA端口為模擬輸入,再使能ADC1的時鐘,之后再設(shè)置ADC1的工作模式,并開啟AD轉(zhuǎn)換。以上步驟完成之后,便可以讀取到ADC的值,再將值保存在DMA里面,即可讓單片機調(diào)取。水位檢測驅(qū)動流程圖如圖4-7所示。圖4-7水位檢測驅(qū)動流程圖4.4液晶顯示驅(qū)動程序LCD1602總共有四種操作時序,分別為讀狀態(tài),寫指令和讀數(shù)據(jù)以及寫數(shù)據(jù)。需注意的是,在對控制器進(jìn)行讀寫操作之前,讀需要進(jìn)行讀寫檢測,確保讀寫操作指令是否使能,否則將無法進(jìn)行讀寫操作。LCD1602液晶顯示屏輸出數(shù)據(jù)的流程為:首先運行顯示器的初始化操作,初始化后執(zhí)行延時程序,等待信號的采集,采集完成后先寫入一些指令和顯示字符的地址,再通過單片機系統(tǒng)向液晶顯示器傳輸采集到的信息,信息傳輸結(jié)束后,液晶顯示器讀取寫入的地址并顯示出來,最后返回。LCD1602驅(qū)動流程圖如圖4-8所示。圖4-8LCD1602驅(qū)動流程圖液晶顯示模塊是一個慢顯示器件,當(dāng)模塊的忙標(biāo)志為高電平時,表示液晶顯示為忙狀態(tài),無法執(zhí)行指令。因此,我們務(wù)必要在運行每條指令前,查看液晶顯示模塊是否處于忙狀態(tài),如果是,則我們輸出的指令就會失去效應(yīng)。我們想顯示出一個字符的時候,應(yīng)該在代碼指令中攜帶該字符的顯示地址,通知LCD在哪個位置顯示字符。
第五章軟硬件調(diào)試5.1硬件調(diào)試硬件調(diào)試主要是為了確保電路能否正常工作,功能是否達(dá)標(biāo)以及器件選項是否正確,是一項必不可少的一道檢查。硬件作為整個電路的核心部分。其重要程度非常大,稍有不慎便只能重頭開始,硬件設(shè)計樣板周期較長,出現(xiàn)問題必將耗費許多時間精力。在硬件設(shè)計完成后,便將決定整個電路的上下限。在對電路設(shè)計完成之后,便將進(jìn)行單個電路的仿真調(diào)試,在仿真中對單個電路在進(jìn)行可行性分析,確保功能能夠?qū)崿F(xiàn)。在本設(shè)計當(dāng)中,使用的是ISIS7professional軟件,該軟件是英國Labcenterelectronics公司出版的仿真工具軟件。常用于單片機等數(shù)字電路仿真。有模擬電路仿真、數(shù)字電路仿真、單片機及其外圍電路組成的系統(tǒng)的仿真、RS一232動態(tài)仿真、1C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等[13]。當(dāng)確定電路能夠?qū)崿F(xiàn)之后,便開始進(jìn)行原理圖的PCB設(shè)計,PCB設(shè)計采用AltiumDesigner繪圖軟件。作為現(xiàn)在市場上最為常用的繪圖軟件之一,AltiumDesigner功能十分強大,是一款將電路原理圖設(shè)計、PCB板圖設(shè)計功能集一體的設(shè)計軟件。在對原理圖封裝器件確定之后,便進(jìn)行PCB板圖的繪制,PCB版圖繪制完成之后進(jìn)行DesignRuleVerificationReport檢測PCB電氣連接是否合格。全自動加濕器主控板如圖5-1所示[14]。圖5-1全自動加濕器主控板PCB電路設(shè)計完成打樣之后,根據(jù)硬件電路圖以及PCB設(shè)計封裝類型,進(jìn)行元器件的焊接,焊接應(yīng)確定線路連接正常無虛焊。在完成元器件焊接之后,進(jìn)行上電前測試,先著重對電源模塊進(jìn)行分析,確保電路電源部分可靠運行。再進(jìn)行全局測量用邏輯筆、萬用表等工具檢查有無短路、虛焊等現(xiàn)象,經(jīng)檢查無誤后方可按調(diào)試操作程序進(jìn)行通電調(diào)試。主控板焊接圖如圖5-2所示。圖5-2主控板焊接圖5.2軟件調(diào)試使用KeiluVision5軟件通過ST-LINK下載器進(jìn)行程序下載,在成功下載程序之后,進(jìn)行系列功能測試。尋找一個環(huán)境濕度為60%以下的地方,此時查看加濕器是否加濕,當(dāng)環(huán)境濕度達(dá)到60%時,查看超聲波霧化模塊是否停止工作。水位傳感器檢測到水位低于20%時,測試加水功能是否運行。水位低于15%時,報警模塊是否啟動[15]。在進(jìn)行實物測試之后,測試結(jié)果正常。當(dāng)加濕器處于濕度50%以下時開始加濕,到60%停止加濕,水位低于20%時進(jìn)行加水,80%停止加水,水位低于15%時開啟報警模塊LED和蜂鳴器啟動。實物測試圖如圖5-3所示。圖5-3實物測試圖
結(jié)論本文主要研究了基于STM32芯片的加濕器設(shè)計,通過對本項目設(shè)計的系統(tǒng)進(jìn)行調(diào)試與分析,本次設(shè)計的全自動加濕器采用了分模塊化的設(shè)計方法,使用單片機對各個模塊進(jìn)行協(xié)同調(diào)用,模塊之間獨立性強。不僅提供了便利性,同時還滿足了智能化操作。達(dá)到了全自動的社會需求。另外,通過這幾個月對全自動加濕器的研究和學(xué)習(xí),我對市面上現(xiàn)有加濕器產(chǎn)品都有了相對的熟悉。全自動加濕器將在未來,絕對是人們生活中普遍需要的一個產(chǎn)品。在現(xiàn)如今的市場上,各類加濕器還并不完善,加濕方式都有各自的欠缺,并對加濕水源的質(zhì)量有著很大的要求。綜上所述,加濕器系列產(chǎn)品具有十分廣闊的進(jìn)步空間。此次全自動加濕器,雖未解決這些難題,但也優(yōu)于傳統(tǒng)的加濕設(shè)備,實現(xiàn)了全自動智能控制。為廣大使用者解放了部分精力,提供了一個更好的生活環(huán)境。參考文獻(xiàn)[1][2]靳繼來,謝艷新,鐘成梁,郭俊志,李雨澤.基于單片機的家用多功能加濕器設(shè)計[J].農(nóng)業(yè)信息網(wǎng),2017,(2):112-115.[3]高操,羅小華,仲雪倩.基高性能的智能加濕器設(shè)計[J].江南大學(xué)學(xué)報:自然科學(xué)版,2011,10(5):546-550.[4],2016,21(11):30-30.[5]胡銀偉,王恒杰,段書.多源智能超聲霧化加濕器的設(shè)計[J].醫(yī)療衛(wèi)生裝備,2019,40(1):41-45.[6]G.SBERVEGLIERI,G.RINCHETTI,S.GROPPELLI,G.FAGLIA,Capacitivehumidit-ysensorwithcontrolledperformance,basedonporousAI2O3thinfilmgrownonSiO2-Sisubstratel[J].Sen.ActuatorsB.1994,(18/19):551-553.[7]S.A.El_Agou.M.Abugderah.Experimentalanalysisofhumidificationprocessbyairpassingthroughseawater[J].EnergyConversionandManagement,2008,49.[8]杜深慧,溫濕度檢測裝置的設(shè)計與實現(xiàn)[D].華北電力大學(xué),2004.[9]陳松鵬,陳松,吳奇洲.基于數(shù)字控制的智能加濕器設(shè)計[J].電子測試,2017,(6):5-7.[10]李雯婷.基于單片機的工業(yè)加濕器控制系統(tǒng)[D].成都理工大學(xué),2010,(5).[11]樊亞玲,楊宏亮.多功能加濕器控制系統(tǒng)的設(shè)計與實現(xiàn)[J].國外電子測量技術(shù),2015,3(3):32-36.[12]韓廣興,電子元器件與實用電路基礎(chǔ)[M].電子工業(yè)出版社,2005.[13]任文霞,電子電路仿真技術(shù)[M].中國電力出版社,2008.[14]王雷,俞鵬.AltiumDesigner10入門與PCB設(shè)計實例[M].國防工業(yè)出版社,2013:69-225.[15]K.Arshak,K.Twomey,D.Heffernan.Developmentofamicrocontroller-basedhumiditysensingsystem[Z].MCBUPLtd,2002.
附錄A硬件原理圖硬件主控電路原理圖如圖附錄A1所示。附錄圖A1硬件主控電路原理圖硬件霧化電路原理圖如圖附錄A2所示。附錄圖A2硬件霧化電路原理圖硬件顯示電路原理圖如圖附錄A3所示。附錄圖A3硬件顯示電路原理圖硬件傳感器電路原理圖如圖附錄A4所示。附錄圖A4硬件傳感器電路原理圖硬件報警電路原理圖如圖附錄A5所示。附錄圖A5硬件報警電路原理圖硬件加水電路原理圖如圖附錄A6所示。附錄圖A6硬件加水電路原理圖
附錄B軟件驅(qū)動程序DHT11驅(qū)動程序#include"stm32f10x.h"#include"delay.h"#include"dht11.h"#include"lcd1602.h"#defineDHT_SetBit() GPIO_SetBits(DHT_GPIO,DHT_GPIO_PIN)#defineDHT_ResetBit() GPIO_ResetBits(DHT_GPIO,DHT_GPIO_PIN)#defineDHT_ReadBit() GPIO_ReadInputDataBit(DHT_GPIO,DHT_GPIO_PIN)staticvoidDHT_Set_Output(void); //設(shè)置為輸出模式staticvoidDHT_Set_Input(void); //設(shè)置為輸入模式intrec_dat[4];unsignedintT_H,T_L,H_H,H_L,Check;DHT11_TypeDefDHT11; //全局變量voidDHT_Set_Output(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT_RCC,ENABLE); GPIO_InitStructure.GPIO_Pin=DHT_GPIO_PIN; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(DHT_GPIO,&GPIO_InitStructure); } voidDHT_Set_Input(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT_RCC,ENABLE); GPIO_InitStructure.GPIO_Pin=DHT_GPIO_PIN; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(DHT_GPIO,&GPIO_InitStructure); }/***@brief初始化IO口和參數(shù)*@paramnone.*@retvalnone.*/voidDHT11_Init(void){ //RCC_APB2PeriphClockCmd(DHT_RCC,ENABLE); DHT_Set_Output(); DHT11.Tem_H=0; DHT11.Tem_L=0; DHT11.Hum_H=0; DHT11.Hum_L=0;}/***@brief讀取8bit數(shù)據(jù)*@paramnone.*@retvalnone.*/intDH11_ReadByte(void){ intdata=0; chari; charcout; for(i=0;i<8;i++) { //讀取50us的低電平 cout=1; while(!DHT_ReadBit()&&cout++); //延時30us之后讀取IO口的狀態(tài) SYSTICK_Cofing_us(30); //先把上次的數(shù)據(jù)移位,再保存本次的數(shù)據(jù)位 data=data<<1; if(DHT_ReadBit()==1) { data|=1; } //等待輸入的是低電平,進(jìn)入下一位數(shù)據(jù)接收 cout=1; while(DHT_ReadBit()&&cout++); } returndata;}/***@brief讀取40bit數(shù)據(jù)*@paramnone.*@retval1讀取成功,0讀取失敗.*/intDHT11_ReadData(void){ unsignedintcout=1; //設(shè)置為IO口輸出模式 DHT_Set_Output(); //1、MCU開始起始信號 DHT_ResetBit(); SYSTICK_Cofing_ms(20); //拉低至少18ms //DHT_SetBit(); SYSTICK_Cofing_us(40); //拉高20~40us //設(shè)置為IO口輸入模式 DHT_Set_Input(); SYSTICK_Cofing_us(50); //2、讀取DH21響應(yīng) if((DHT_ReadBit()==0)) { //等待80us的低電平 cout=1; while(!DHT_ReadBit()&&cout++); //等待80us的高電平 cout=1; while(DHT_ReadBit()&&cout++); //讀取8bit的濕度整數(shù)數(shù)據(jù) H_H=DH11_ReadByte(); //讀取8bit的濕度小數(shù)數(shù)據(jù) H_L=DH11_ReadByte(); //讀取8bit的溫度整數(shù)數(shù)據(jù) T_H=DH11_ReadByte(); //讀取8bit的溫度小數(shù)數(shù)據(jù) T_L=DH11_ReadByte(); //讀取8bit的校驗和 Check=DH11_ReadByte(); if(Check==(H_H+H_L+T_H+T_L)) { rec_dat[0]=H_H; rec_dat[1]=H_L; rec_dat[2]=T_H; rec_dat[3]=T_L; return1; } else { return0; } } return0;}/***@brief獲取溫度*@paramnone.*@retvalTemp,溫度值*/intDHT11_GetTem(void){ return(DHT11.Tem_H<<8|DHT11.Tem_L);}/***@brief獲取濕度*@paramnone.*@retvalHum,濕度值*/intDHT11_GetHum(void){ return(DHT11.Hum_H<<8|DHT11.Hum_L);}voidDHT11_DIS(void){if(DHT11_ReadData()){ Lcd_1Put(9,0,rec_dat[0]/10+0x30); Lcd_1Put(10,0,rec_dat[0]%10+0x30); Lcd_Write_Data('.'); Lcd_1Put(12,0,rec_dat[1]/10+0x30); Lcd_Puts(13,0,"%RH"); Lcd_1Put(0,0,rec_dat[2]/10+0x30); Lcd_1Put(1,0,rec_dat[2]%10+0x30); Lcd_Write_Data('.'); Lcd_1Put(3,0,rec_dat[3]/10+0x30); Lcd_Write_Data(0xDF); Lcd_Puts(5,0,"C"); SYSTICK_Cofing_ms(100);}elseLcd_Puts(0,0,"DHT11:NOFOUND"); }水位傳感器驅(qū)動程序#include"adc.h"#defineADC1_DR_Address((u32)0x4001244C)unsignedintAD_value;__IOu16ADC_ConvertedValue;/*配置采樣通道端口使能GPIO時鐘 設(shè)置ADC采樣PA0端口信號*/voidADC1_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(ADC_GPIO_CLK,ENABLE); GPIO_InitStructure.GPIO_Pin=ADC_GPIO_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //GPIO設(shè)置為模擬輸入GPIO_Init(ADC_GPIO_DOOR,&GPIO_InitStructure);}/*配置ADC1的工作模式為MDA模式*/voidADC1_Mode_Config(void){DMA_InitTypeDefDMA_InitStructure;ADC_InitTypeDefADC_InitStructure; RCC_AHBPeriphClockCmd(ADC_GPIO_DMA,ENABLE);//使能MDA1時鐘 /*DMAchannel1configuration*/DMA_DeInit(DMA1_Channel1);//指定DMA通道DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;//設(shè)置DMA外設(shè)地址DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue; //設(shè)置DMA內(nèi)存地址,ADC轉(zhuǎn)換結(jié)果直接放入該地址DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//外設(shè)為設(shè)置為數(shù)據(jù)傳輸?shù)膩碓碊MA_InitStructure.DMA_BufferSize=1; //DMA緩沖區(qū)設(shè)置為1;DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;DMA_InitStructure.DMA_Priority=DMA_Priority_High;DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;DMA_Init(DMA1_Channel1,&DMA_InitStructure);/*EnableDMAchannel1*/DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA通道RCC_APB2PeriphClockCmd(ADC_GPIO_ADC,ENABLE); //使能ADC1時鐘/*ADC1configuration*/ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//使用獨立模式,掃描模式ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//無需外接觸發(fā)器ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//使用數(shù)據(jù)右對齊ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=1;//只有1個轉(zhuǎn)換通道ADC_Init(ADC1,&ADC_InitStructure);/*ADC1regularchannel11configuration*/ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//通道1采樣周期55.5個時鐘周期/*EnableADC1DMA*/ADC_DMACmd(ADC1,ENABLE); //使能ADC的DMA/*EnableADC1*/ADC_Cmd(ADC1,ENABLE);//使能ADC1/*EnableADC1resetcalibarationregister*/ADC_ResetCalibration(ADC1);/*ChecktheendofADC1resetcalibrationregister*/while(ADC_GetResetCalibrationStatus(ADC1));/*StartADC1calibaration*/ADC_StartCalibration(ADC1);/*ChecktheendofADC1calibration*/while(ADC_GetCalibrationStatus(ADC1));/*StartADC1SoftwareConversion*/ADC_SoftwareStartConvCmd(ADC1,ENABLE);//開始轉(zhuǎn)換}/*初始化ADC1*/voidADC1_Init(void){ ADC1_GPIO_Config(); ADC1_Mode_Config();}voidADC_DISPLAY(void){ AD_value=(((ADC_ConvertedValue*825)/1024)/20); Lcd_1Put(8,1,AD_value/10+0x30); Lcd_1Put(9,1,AD_value%10+0x30); Lcd_Puts(10,1,"%"); Lcd_Puts(0,1,"Water:"); SYSTICK_Cofing_ms(100);}LCD1602驅(qū)動程序#include"lcd1602.h"/************************端口初始化*******************************/voidLcd_GPIO_init(void){GPIO_InitTypeDefGPIO_InitStructure;//聲明結(jié)構(gòu)體/********Data端口設(shè)置*************/ RCC_APB2PeriphClockCmd(RCC_GPIO_DATA,ENABLE);//打開端口B時鐘GPIO_InitStructure.GPIO_Pin=GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN;//DB8~DB15GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//標(biāo)準(zhǔn)輸出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時鐘速度GPIO_Init(GPIO_DATA_0,&GPIO_InitStructure);//初始化端口 /********使能端口設(shè)置**********/ RCC_APB2PeriphClockCmd(RCC_GPIO_EN,ENABLE); //打開端口時鐘GPIO_InitStructure.GPIO_Pin=GPIO_EN_PIN; //使能端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//標(biāo)準(zhǔn)輸出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時鐘速度GPIO_Init(GPIO_EN,&GPIO_InitStructure); /********讀/寫端口設(shè)置**********/ RCC_APB2PeriphClockCmd(RCC_GPIO_RW,ENABLE);//打開端口時鐘GPIO_InitStructure.GPIO_Pin=GPIO_RW_PIN;//使能端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//標(biāo)準(zhǔn)輸出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時鐘速度GPIO_Init(GPIO_RW,&GPIO_InitStructure); /********指令/數(shù)據(jù)端口設(shè)置**********/ RCC_APB2PeriphClockCmd(RCC_GPIO_RS,ENABLE);//打開端口時鐘GPIO_InitStructure.GPIO_Pin=GPIO_RS_PIN;//使能端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽復(fù)用輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時鐘速度GPIO_Init(GPIO_RS,&GPIO_InitStructure);}/******************************************************************/voidLcd_Init(void)//初始化{ Lcd_GPIO_init(); delay_us(1500);//延時15ms Lcd_Write_Command(0x38,0);//寫指令38H不檢測忙信號 delay_us(500); //延時5msLcd_Write_Command(0x38,0);//寫指令38H不檢測忙信號 delay_us(500); //延時5msLcd_Write_Command(0x38,0);//寫指令38H不檢測忙信號 //以后每次寫指令、讀/寫數(shù)據(jù)操作之前需檢測忙信號 Lcd_Write_Command(0x38,1);//顯示模式設(shè)置Lcd_Write_Command(0x08,1); //顯示關(guān)閉 Lcd_Write_Command(0x01,1);//顯示清屏Lcd_Write_Command(0x06,1);//顯示光標(biāo)移動設(shè)置Lcd_Write_Command(0x0C,1); //顯示開、光標(biāo)不顯示}/******************************************************/voidLcd_En_Toggle(void)//發(fā)使能脈沖{ SET_EN;//使能1 delay_us(5);//延時160us CLE_EN;}voidLcd_Busy(void)//判斷忙{ unsignedintlater0=0;GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_GPIO_DATA,ENABLE);//打開DATA端口時鐘GPIO_InitStructure.GPIO_Pin=GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN;//DB8~DB15GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//輸入模式=上拉輸入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時鐘速度GPIO_Init(GPIO_DATA_7,&GPIO_InitStructure);//打開忙檢測端口 CLE_RS;//RS=0 //delay_us(1);//延時10us SET_RW;//RW=1 //delay_us(1);//延時10us SET_EN;//EN=1 //delay_us(2);//延時20uswhile((GPIO_ReadInputDataBit(GPIO_DATA_7,GPIO_DATA_7_PIN))&&(later0<20000))//循環(huán)等待忙檢測端口=0 { delay_us(5); later0++; } CLE_EN;//EN=0//恢復(fù)端口為輸出狀態(tài) RCC_APB2PeriphClockCmd(RCC_GPIO_DATA,ENABLE);//打開DATA端口時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN;//DB8~DB15GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50M時鐘速度GPIO_Init(GPIO_DATA_7,&GPIO_InitStructure);}voidGpio_data(unsignedcharx)//端口置入數(shù)據(jù){GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_0_PIN);//DB0GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_1_PIN);//DB1GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_2_PIN);//DB2GPIO_ResetBits(GPIO_DATA_0,GPIO_DATA_3_PIN);//DB3GPIO_ResetBits(GPIO_DATA_0,GP
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 排水系統(tǒng)信息化管理方案
- 建筑廢料再利用技術(shù)方案
- 縱橫造價培訓(xùn)課件
- 2026年傳統(tǒng)工藝美術(shù)品制作技藝與材料知識題庫
- 2026年旅游行業(yè)面試結(jié)構(gòu)化問答與高分策略
- 2026年數(shù)據(jù)科學(xué)導(dǎo)論大數(shù)據(jù)技術(shù)與應(yīng)用理解題庫
- 2026年IT項目經(jīng)理測試項目管理方法論與實施案例題
- 縣城情況介紹
- 2026年財務(wù)經(jīng)理面試筆試題目及答案解析
- 2026年工業(yè)機器人工程師初級考試題
- 安全教育培訓(xùn)管理制度及流程
- 麻醉科2025年度工作總結(jié)與2026年發(fā)展規(guī)劃
- 2026屆安徽省合肥一中八中、六中生物高一上期末聯(lián)考試題含解析
- 中西醫(yī)結(jié)合治療慢性病康復(fù)優(yōu)勢
- 診所醫(yī)生營銷培訓(xùn)課件
- 2026年開封大學(xué)單招職業(yè)傾向性測試題庫及答案詳解1套
- 2025遼寧葫蘆島市市直部分事業(yè)單位招聘高層次人才84人參考考試試題及答案解析
- 《小學(xué)數(shù)學(xué)課程與教學(xué)論》課程教學(xué)大綱
- 地下停車庫申請書范文
- 部隊手榴彈使用課件
- 新版出口報關(guān)單模板
評論
0/150
提交評論