基于單片機的智能控溫風扇系統(tǒng)設計_第1頁
基于單片機的智能控溫風扇系統(tǒng)設計_第2頁
基于單片機的智能控溫風扇系統(tǒng)設計_第3頁
基于單片機的智能控溫風扇系統(tǒng)設計_第4頁
基于單片機的智能控溫風扇系統(tǒng)設計_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

總體方案設計2.1系統(tǒng)總體設計框架本研究采用了先進的DS18B20溫度傳感器,用于精細捕捉環(huán)境溫度變化,其獲取的數字信號進一步被高效微控制器AT89C52進行智能解析和處理,該系統(tǒng)能夠實現實時地在LED數碼管上清晰展示出周邊環(huán)境的溫度以及預設的溫度基準值[4]。需要明確的是,預設的溫度參數被明確規(guī)定為固定的整數值,而環(huán)境感知器所記錄的實際溫度則精確到小數點后一位。本設計巧妙地采用了脈沖寬度調制(PWM)策略,以精細調控DC風扇電機的速度,兩個用戶友好型按鍵允許調整并穩(wěn)定基礎溫度。借助高精度的DS18B20溫度傳感器,系統(tǒng)能實時感知環(huán)境溫度,并通過微控制器AT89C52將獲取的模擬溫度數據轉化為精確的數字信號,進一步進行高效處理。本設計由溫度采集模塊、按鍵模塊、溫度顯示模塊和電機驅動模塊組成。系統(tǒng)結構框圖如下:圖2.1系統(tǒng)構成框圖2.2方案論證本研究計劃的核心目標是開發(fā)一種具備溫度自適應功能的直流風扇電機控制系統(tǒng),以便其能智能響應環(huán)境溫度波動,靈活地啟動、暫?;蜃詣诱{節(jié)轉速,以確保電機始終在最優(yōu)狀態(tài)下運行。為了適應這個快速發(fā)展的信息環(huán)境,現代系統(tǒng)迫切需要具備精密的溫度感知功能,對溫度細微變化能有高度敏感度。特別是對于那些至關重要的操作,如換擋和停機等,系統(tǒng)的執(zhí)行精準性、穩(wěn)定性和可靠性顯得至關重要。2.2.1溫度傳感器的選擇熱敏電阻檢測:51型號單片機與熱敏電阻集成,形成一個功能完備的電路體系。接著,通過單片機對電路中的電壓或電流參數進行精準測量,我們可以從側面推算出在現有狀態(tài)下熱敏電阻的阻值特性。熱敏電阻的特性表現為:在高溫條件下,其電阻值通常呈現出下降趨勢;然而,當周遭環(huán)境溫度降低時,其電阻值會相應地增加。盡管這類組件的價格相對經濟實惠,然而其測量精確度的不足是我們不得不關注的重要局限性。熱電偶檢測:熱電偶作為一種關鍵的溫度傳感元件,其運作機制主要依賴于對熱電勢之間天然差值的精密測定,從而準確解讀并計算出被測環(huán)境或對象的溫度讀數。熱電偶作為一種極其精準的測溫工具,盡管擁有諸多優(yōu)勢,但其實際運用中也面臨著相應的技術難題和挑戰(zhàn)。為了確保高效并精確地轉化熱電偶產生的微小電信號,我們的設計中不可或缺的是高端的模數轉換器(A/DConverter),其精密性能至關重要。特別是,與其他傳感器類型相比,熱電偶表現出更高的電磁干擾敏感性,其抗擾性能相對較弱,這一特性在某些特定環(huán)境下可能對其應用構成了一定程度的局限。DS18B20溫度傳感器:本研究聚焦于運用溫度敏感的材料構建智能化系統(tǒng),其內置高效能模數轉換器(ADC),實現了對溫度的直接讀取,無需外部輔助的模數轉換步驟,提升了系統(tǒng)的能源效率和便捷性,而且其溫度測定具有極小的偏差,高精度的特性,同時價格相對具備競爭力,而且DS18B20溫度傳感器憑借其獨特的單總線(One-Wire)通信方式,使得它在與微控制器(MCU)的連接過程中展現出極高的便利性,不僅簡化了編程操作,還優(yōu)化了線路布局設計[5]。從性能和經費等方面考慮選DS18B20。2.2.2主控機的選擇AT89C52是一款融合了高效能與低功耗特性的單片機芯片,它秉承了52系列微處理器的基本設計框架[6]。該芯片整合了多種實用的外圍設備,包括模數轉換器(ADC)、通用定時/計數模塊以及串行通信接口等一系列功能組件。AT89C52表現出顯著的存儲能力和運行效率:內置256字節(jié)的RAM,專為臨時數據存儲設計,而128字節(jié)的EEPROM則確保了重要數據的持久儲存[7]。并且支持包括SPI、I2C在內的多種標準通信接口,確保了其在多元化的通信場景中的兼容性和靈活性。除此之外,AT89C52憑借其顯著的低能耗特性和卓越的穩(wěn)定性,深受廣大用戶的喜愛。其卓越的價值體現在經濟高效的開發(fā)成本上,得益于它兼容多種普遍采用的編程語言,如C語言和匯編語言,從而顯著提升了編程的便利性和效率。因此,基于AT89C52出色的性能價格比和廣泛的兼容性,它在本設計項目中展現出極高的適用價值。2.2.3顯示器選型液晶顯示器(LCD):液晶顯示器作為一種先進的顯示技術,以其顯著的低能耗優(yōu)勢,廣闊的視角范圍,以及卓越的視覺表現力而備受矚目。盡管當前信息時代展現出勃勃生機,但其背后的推進原理相當復雜,而且顯示內容的可見度容易受到外部光照因素的顯著影響。為了保證在各種照明條件下都能保持清晰的視覺效果,通常需要額外配置背光光源設施。盡管這種顯示器展現出卓越的性能,然而其價格相對顯得較高,特別是當考慮到它整合了復雜的背光源系統(tǒng)時。四段數碼管(LED):通過運用動態(tài)掃描顯示策略,逐個獨立點亮每個LED數碼管,這種方法有效地降低了所需輸入/輸出端口的數量,從而實現高效資源利用。本提議具有卓越的成本效益,其設計不僅能夠直觀、鮮明地呈現數字化數據,即使在光線不足的環(huán)境下也保證了極高的可讀性。此外,它還注重能效,具備顯著的低能耗特性。出于對系統(tǒng)簡潔性與實用性的考量,本設計選用了七段數碼管作為溫度顯示器件。2.2.4調速方式的選擇脈寬調制技術:采用可調節(jié)的方波脈沖信號作為輸入。確切地講,是通過調整方波的dutycycle(即占空比,等于高電平持續(xù)時間與周期總時間的比例)來精確調控輸出電路的平均電壓水平。電壓調制:實現風扇轉速調控是通過調整電源電壓的方式進行的。本設計采用了一種依賴于可調電源或變壓器等電子元件的電路系統(tǒng),利用51單片機的數字化輸出精確調控電壓參數實現風扇轉速調節(jié)。相比之下,電壓調制方法相對簡單,然而其精度可能不如同步脈沖寬度調制(PWM)技術。為了同時優(yōu)化操作的易用性和轉速調控的精確度,本設計選用了脈沖寬度調制(PWM)方法,有效地對直流電機的速度實施精準控制,從而準確地達成預設的調速需求。2.3功能模塊(1)溫度采集模塊此模塊作為智能溫控風扇系統(tǒng)的關鍵感知組件,使用DS18B20捕捉并精準測定周邊環(huán)境的溫度動態(tài)。該系統(tǒng)的運作機制在于它能有效將熱能轉化成電信號,隨后通過內置的電路系統(tǒng)進一步處理,最終轉化為清晰的數字溫度讀數。(2)按鍵模塊用戶能夠通過按鍵模塊自定義并設定理想的室內溫度參數。此模塊配備有增減按鈕,以便于用戶精細調整溫度值,同時配備有設定鍵,旨在供用戶選擇并設定溫度的上下限范圍。一旦用戶確認并執(zhí)行設定操作,所選參數會立即被存儲,并迅速傳輸至主控單元AT89C52單片機中。(3)溫度顯示模塊此模塊負責實時從AT89C52單片機內部獲取并直觀、清晰地通過數碼管顯示當前的溫度數據。數碼管利用數字及符號的矩陣式設計,通過激活對應的發(fā)光二極管單元,實現了數值和標識的精確呈現。用戶無需進行繁瑣操作,只需簡單觀察數碼管顯示,即可即時獲取室內實際溫度及風扇的運行狀況,確保其功能的有效與直觀呈現。(4)電機驅動模塊此模塊的核心職責是執(zhí)行控制命令到機械操作的轉化,確保當風扇電機接收到精確的電流指令時,能實現順暢啟動、持續(xù)穩(wěn)定的運行以及無縫的停機過程。該系統(tǒng)通過高效協(xié)同L9110驅動集成電路,精確調控輸送到電動機的電流參數,包括其強度和方向控制。3系統(tǒng)硬件設計3.1系統(tǒng)電路原理本系統(tǒng)構建的核心模塊包括DS18B20型溫度探測器、AT89C52型號微處理器、五位共陰極LED數碼顯示器、風扇直流電動機以及L9110型達林頓反相驅動器。此外,系統(tǒng)還配備了若干必要的輔助電子器件,如電阻、電容器、晶體振蕩器、電源供應單元、操作按鍵以及撥碼選擇開關等。圖3.1系統(tǒng)電路原理圖3.2功能電路設計3.2.1主控電路(1)AT89C52單片機最小系統(tǒng)電路組成AT89C52單片機最小系統(tǒng)單元主要由以下三部分構成:AT89C52型單片機作為核心處理元件,復位電路負責為其提供穩(wěn)定的重啟機制,而晶振電路則確保其工作時鐘的精確穩(wěn)定[6]。此三者共同構成了確保單片機正常運行的基本要素。(2)AT89C52單片機AT89C52作為一款低功耗且性能卓越的8位微控制器,其內部集成有ATMEL的高效非易失性存儲技術,這款芯片嚴格遵循MCS-51指令集規(guī)范,且內置了功能全面的8位中央處理單元,具備8k字節(jié)的可重編程只讀存儲器(ROM)和256字節(jié)的數據存儲器(RAM),以滿足多樣化應用需求。在眾多復雜控制系統(tǒng)的設計中,AT89C52單片機展現出了廣泛的實用價值[7]。該單片機具有40個引腳,各引腳的介紹如下:圖3.2AT89C51單片機VCC:+5V電源線;GND:接地線。P0口:P0.7~P0.0,該組合包括8根引腳,從P0.0開始編號,P0.0作為最低有效位,而P0.7則對應著最高位。這八個引腳具備多元化的功能,針對差異性場景設計。在不具備外部存儲器的單片機運用中,P0口能夠靈活地作為通用輸入/輸出接口,支持CPU的數據交換,然而為保證其穩(wěn)定運行,外部上拉電阻的連接是必不可少的。在配備外部存儲器的情境中,這些引腳初始用作傳輸外部存儲器的低8位地址,隨后肩負起數據的讀寫傳輸任務,連接CPU與外部設備。P1口:P1口是一個配備有內置上拉電阻的8位雙功能輸入/輸出端,P1口具有通用I/O功能,與P0口相似,皆能進行用戶的數據傳輸,其獨到之處在于內置了上拉電阻,這使得在利用P0口進行此類操作時,外部上拉電阻的需求得以省略,而P1口因其內置特性無需額外配置,在執(zhí)行FLASH編程與校驗任務時,P1口專門承擔了向片內EPROM的低八位地址的輸入功能[8]。P2口:P2口是一種內置上拉的8位雙向I/O接口,具備通用I/O功能,專門用于雙向的數據傳輸,即能接納用戶輸入又可驅動外部設備輸出,它能與P0口的第二功能協(xié)同工作,用于輸出外部存儲器的高端8位地址,從而實現存儲器地址的選擇。然而,在這種模式下,P2口并不具備傳輸存儲器讀寫數據的能力,特別地,在部分單片機型號中,P2口還能與P1口聯合,為片內EPROM的12位地址提供高4位的地址傳輸能力[9]。P3口:P3引腳配置為8個內置上拉的雙向I/O接口,當對P3口寫入邏輯1時,其內部自動將信號拉高至高電平,這款接口具備多功能性,既能作為通用的I/O端口傳輸用戶輸入和輸出數據,同時也支持特定功能的實現[10],如下所示:P3.0:RXD(串行數據接收口)P3.1:TXD(串行數據發(fā)送口)P3.2:(外部中斷0輸入)P3.3:(外部中斷1輸入)P3.4:T0(記數器0計數輸入)P3.5:T1(記時器1外部輸入)P3.6:(外部RAM寫選通信號)P3.7:(外部RAM讀選通信號)RST:復位輸入。ALE/:0.7在P0.0引腳線同步輸出片外存儲器的低8位地址期間,ALE/PROG線伴隨產生一個高電平脈沖,其下降沿促使該地址被準確地傳輸至外部專用地址鎖存器,從而釋放P0.7至P0.0引腳以進行后續(xù)的片外存儲器讀寫數據傳輸。當無需外部存儲器訪問時,單片機自發(fā)地在ALE/PROG線路中產生以晶振頻率1/6周期的脈沖信號序列。:在從外部程序存儲器獲取指令的過程中,每一輪機器周期內PSEN信號的有效性被觸發(fā)兩次,然而在嘗試獲取外部數據存儲器的過程中,預期的兩次有效PSEN信號將不會發(fā)生[11]。/VPP:在EA引腳保持低電平狀態(tài)下,系統(tǒng)允許對片外存儲器進行訪問,即使內部程序存儲器存在,這種狀態(tài)下外部程序存儲器的使用權被默許,同時需配備相應的電源線以支持此操作,當電子裝置的端口維持高電平狀態(tài)時,片內程序存儲器的使用權得以啟用[12]。在執(zhí)行FLASH編程的過程中,該引腳同樣承擔著提供12伏特編程電壓(VPP)的功能。XTAL1和XTAL2:該電路的內部振蕩器輸入引腳專為外部接入石英晶體和微調電容設計,這些組件直接接入單片機片內OSC(時鐘振蕩器)的反饋環(huán)路中。(3)復位與晶振在單片機應用體系結構中,確保單片機的初始化是至關重要的,同樣,對外部I/O接口模塊的復位也不能忽視,因此系統(tǒng)必須整合一個集成了上電初始化和手動按鈕復位的綜合性復位模塊,在單片機內部,XTAL1和XTAL2端口分別與石英晶體和微調電容相接,共同構建了用于產生時鐘信號的振蕩器反饋電路,如圖所示開關復位與晶振電路在設計中呈現出緊密的相互作用關系,每當用戶觸發(fā)按鍵開關S1的操作時,系統(tǒng)便會實施一次復位程序[13]。在該電路配置中,電容器C1和C2的容量分別為30皮法(30pF),C3則擁有10微法(10uF)的容量。電阻器R2和R3的阻值恒定在10千歐姆(10kΩ)。而電路的核心震蕩元件——晶振,其工作頻率被精確地設定為12兆赫茲(12MHz)。圖3.3復位與晶振電路3.2.2溫度采集電路(1)DS18B20單線數字溫度傳感器簡介DS18B20數字溫度傳感器采納了美國DALLAS半導體公司的創(chuàng)新網絡芯片設計,其特性顯著,如微小化尺寸、高效能低能耗、卓越的抗干擾性能,以及與微處理器的高度兼容性,使得集成和應用更為簡便,此傳感器具備9至12位的精密溫度分辨率,確保了高準確度的溫度測量性能,傳感器有三個管腳:在電子系統(tǒng)中,DQ代表數字化信號輸入端,而GND特指電源地線,VDD則標識電源輸入端口[14]。圖3.4DS18B20實物圖(2)溫度采集電路DS18B20數字溫度傳感器憑借內置計時脈沖機制,創(chuàng)新地實現了精確的溫度測度性能。該傳感器所依賴的低溫效應振蕩器生成的時間信號,通過計數高溫效應振蕩器產生的時鐘周期來實現。該溫度數據采用16位二進制編碼儲存,支持通過主機執(zhí)行讀取指令,遵循從低位到高位的讀取順序。其與單片機的連接如圖:圖3.5溫度采集電路3.2.3按鍵電路P1.1將P1.6和P3.2端口配置為輸入模式,并將其一端與大地相連。每當發(fā)生按鍵按下事件時,相應的端口會立即接收到一個低電平的輸入信號。在系統(tǒng)啟動初期,優(yōu)先運行鍵盤掃描子程序,通過交互式查詢的方式識別各個鍵位的狀態(tài),借此確定溫度設置的初始值。具體來說,K1鍵被設計用于設定溫度的上下限范圍,每當K2鍵被觸發(fā)時,它會逐次將初始設定值增加一個單位;反之,K3鍵的作用在于遞減數值,每次按下則相應減少初始設置值的數量。圖3.6獨立鍵盤連接電路3.2.4溫度顯示電路(1)數碼管介紹數碼管,是一種專為表現數字及其它信息的電子元件。該裝置采用半導體材質構建,具備顯著的高亮度和低能耗特性。數碼管內部結構包含一個由金屬絲網構成的陽極,以及多個呈數字形態(tài)的陰極,這些陰極構成了其主體設計。數碼管內部通常填充有低壓氣體,常見組合包括氖氣以及適量的汞和/或氬氣。在對某個陰極施加電荷的過程中,數碼管會呈現特定的色彩光譜,這種現象源于管內氣體的作用,普遍表現為橙色或綠色。實物圖見下圖:圖3.7數碼管實物圖(2)數碼管顯示電路在本設計中,我們采用了4位共陽極數碼管作為顯示模塊,其與單片機硬件的接口配置詳見圖3.8。共陽型數碼管,其構造特征是所有發(fā)光二極管的陽極共享一個公共陽極(COM)。在使用時,公共陽極需連接到+5V電源。具體操作原理是,當某個字段的陰極被設置為低電平時,該字段的發(fā)光二極管就會發(fā)光;反之,陰極為高電平時,相應字段則保持熄滅狀態(tài)。該設備的讀數范圍限定在0至99.9攝氏度,以攝氏度為單位進行精確計量。從P0.0至P0.7接口分別連接b、c、d、e、f、g和dp,為了確保單片機能輸出穩(wěn)定的高電平和低電平信號,P0端口采用了10千歐姆的上拉電阻進行驅動。P2.3實現對P2.6端口的精確管控,只需任一端口輸出低電平信號,即可激活對應的數碼管顯示。圖3.8數碼管顯示電路3.2.5電機驅動電路在本設計中采用單片機的I/O接口生成PWM信號,經由L9110達林頓陣列驅動器調控,進而精確控制12伏直流無刷風扇電機的轉速,實現了有效的速度調節(jié)[15]。鍵盤用于設定溫度,其通過軟件將控制指令輸入到單片機,隨后單片機通過P2.0、P2.1端口產生并輸出相匹配的PWM(脈寬調制)信號。脈沖信號經由L9110芯片傳輸,有效地調控直流電機的控制電路,從而實現電機轉速的自動調節(jié)與啟停的智能化操作。電機轉速受環(huán)境溫度動態(tài)影響:隨著環(huán)境溫度上升,電機轉速呈現正比增長;相反,溫度下降會導致轉速減緩。當環(huán)境溫度降至設定閾值以下,電機運作會自動暫停;反之,當溫度超越預設范圍,電機則會重新啟動運行。電路配置見圖3.9,風扇電機連接在L9110的OA、OB引腳,通過控制P2.0、P2.1引腳輸出PWM信號,可以調控風扇直流電機的速度及其啟停狀態(tài)。圖3.9風扇電機驅動與調速電路本研究采用了12伏特直流無刷風扇電機作為核心組件。L9110單達林頓反向驅動器在接收5VTTL信號或6至15VCMOS信號輸入時,可輸出高達50V的電壓和500mA的電流。其穩(wěn)定工作的環(huán)境溫度區(qū)間限定在0至70攝氏度。在本體系結構中,單片機通過其I/O接口輸出5伏特的TTL信號,從而確保L9110能充分驅動風扇電機。

4系統(tǒng)軟件設計本設計使用keiluvision5軟件編寫程序,使用Proteus進行仿真。4.1軟件設計框圖本文設計的程序有以下基本分組成:主程序、溫度采集程序、溫度顯示程序、按鍵程序及電機驅動程序,通過主程序調用各個子程序實現本系統(tǒng)的控制。軟件設計框圖如圖4.1:圖4.1軟件設計框圖4.2功能流程4.2.1主程序流程程序設計包含多個關鍵組成部分:主程序、DS18B20初始化、溫度轉換、溫度讀取、鍵盤掃描、數碼管顯示、溫度處理以及風扇電機控制函數。DS18B20初始化負責傳感器的啟動配置;溫度轉換函數實現環(huán)境溫度的實時采集;溫度讀取函數負責從傳感器獲取數據并進行轉換處理;鍵盤掃描函數用于調整設定的初始溫度值;溫度處理函數分析采集數據,為調整電機轉速提供依據;風扇電機控制函數根據溫度值調整電機的轉速和運行狀態(tài)。主程序流程圖4.2:圖4.2主程序流程圖4.2.2溫度采集流程當主程序啟動后,溫度采集模塊會先對DS18B20溫度傳感器進行初始化設置。隨后延時發(fā)送0xCC和0xBE指令,傳感器依次讀取溫度數據的低字節(jié)和高字節(jié)。最后將讀取的字節(jié)數據轉換為實際溫度值。DS18B20溫度獲取程序流程圖見下圖4.3所示:圖4.3溫度檢測流程圖4.2.3按鍵流程按鍵是用于設定溫度的上限,為此使用了三個按鍵,K1按鍵用于選擇溫度上下設置還是溫度下限設置,K2按鍵根據K1按鍵選擇的上限或者下限溫度值進行溫度加操作,K3按鍵對選擇的溫度上限或者下限值進行減操作。因此通過三個按鍵既可以實現對溫度上限和下限值的設定,以方便使用。按鍵程序流程圖見下圖4.4所示:圖4.4按鍵程序流程圖4.2.4溫度顯示流程本系統(tǒng)使用四段數碼管完成溫度的顯示,且溫度顯示精度為0.1度,溫度顯示范圍為0-99.9攝氏度,為此在獲取溫度后需要降溫度的十位數據,個位數據及小數位數據獲取,然后送入對應的要顯示的數碼管中完成溫度的顯示。數碼管顯示程序流程圖減下圖4.5所示:圖4.5顯示程序流程圖4.2.5電機驅動流程溫度傳感器實時監(jiān)測環(huán)境溫度,并將其與用戶預先設定的高低溫閾值進行比較。當環(huán)境溫度位于預設區(qū)間時,風扇將以低速運行;一旦溫度超過設定的高溫限值,則自動切換至高速檔位;反之,若環(huán)境溫度低于設定的低溫限值,風扇則會智能地停止運轉。在實驗中,通過設置不同的溫度范圍和風扇檔位來觀察系統(tǒng)能否根據實時檢測到的室內溫度自動調整風扇的轉速。在調速過程中,系統(tǒng)可以平穩(wěn)地調整風扇的轉速,使風扇在不同檔位下運轉效果穩(wěn)定,從而達到了良好的降溫效果。此外,還測試了不同的溫度范圍和風扇檔位的組合,發(fā)現系統(tǒng)可以根據不同的風扇檔位實現不同的功耗和降溫效果,從而在滿足降溫效果的同時最大程度地降低能耗。電機控制程序流程圖如下圖4.6所示:圖4.6電機控制程序流程圖5系統(tǒng)調試(1)程序啟動后,溫度采集傳感器正常顯示當前環(huán)境溫度,但是數碼管顯示是亂碼,沒有正確的顯示溫度,按鍵功能也不靈,當按下加鍵時,顯示并不變化。圖5.1數碼管亂碼(2)通過按下切換按鍵增加消抖處理,以及在數碼管顯示程序中設置段碼存儲空間后,數碼管可以正常顯示當前環(huán)境溫度,按鍵功能也得以恢復,系統(tǒng)運行達到預期效果。圖5.2數碼管正常顯示(3)經過查看當前溫度發(fā)現,溫度傳感器DS18B20有一點實際溫度的偏差,可以通過在仿真上的DS18B20加減號按鈕對當前采集的溫度就行微調。圖5.3調試溫度傳感器(4)通過對溫度進行預設值增加或減少時,直流電機每當檢測到的溫度比預設溫度高出5攝氏度,風扇電機的轉速就增加一個等級。圖5.4調試直流電機6總結與展望6.1總結本系統(tǒng)設計以單片機為控制中樞,搭載DS18B20型溫度傳感器對環(huán)境溫度進行實時監(jiān)控,旨在實現風扇電機轉速的自動化調節(jié)。系統(tǒng)具備在預設區(qū)間內連續(xù)微調電機轉速的能力,同時,LED數碼顯示屏將持續(xù)、穩(wěn)定地顯示出當前環(huán)境溫度與用戶設定溫度。為便于用戶干預,系統(tǒng)配置有兩個獨立操作按鍵,允許用戶針對不同應用場景自由設定期望溫度。依據環(huán)境溫度與設定溫度之間的偏差,系統(tǒng)將自動調整電機轉速,從而有效實現了基于單片機技術的溫控風扇功能。6.2展望伴隨科技進步與智能化生活方式的日益普及,以單片機為核心的溫控風扇系統(tǒng)將迎來更為廣闊的市場前景。展望未來,該系統(tǒng)不僅有望持續(xù)深化在溫度監(jiān)測與調節(jié)層面的功能優(yōu)化,更有潛力與物聯網、云計算等先進科技深度融合,共同構建更為智能化、高效的居住環(huán)境管理體系。首先,通過物聯網技術的應用,溫控風扇系統(tǒng)可以實現與手機、智能音箱等設備的互聯互通,用戶可以通過手機APP或語音指令對風扇進行遠程控制,實現更加便捷的操作體驗。此外,系統(tǒng)還可以與智能家居系統(tǒng)相融合,成為智能家居生態(tài)系統(tǒng)的一部分,與其他智能設備共同構建智能化的家居環(huán)境。其次,隨著云計算技術的發(fā)展,溫控風扇系統(tǒng)可以將大量的數據上傳至云端,通過大數據分析和機器學習算法,對用戶的使用習慣、環(huán)境變化等因素進行深入挖掘和分析,從而更加精準地預測和調節(jié)風扇的運行狀態(tài),為用戶提供更加個性化的服務。綜上所述,基于單片機的溫控風扇系統(tǒng)在未來將擁有更加廣闊的發(fā)展空間和應用前景。參考文獻羅政球.基于單片機的多功能遙控智能溫控風扇設計[J].電子制作,2022,30(07):81-84.王啟明,劉冬梅,周艷艷.基于單片機的智能風扇的設計與實現[J].科技視界,2019(16):11-13.張少康,尹睿,鮑琦,吳子鑫,高釗.基于單片機的智能風扇系統(tǒng)設計[J].電子測試,2019(01):19-20+32.李陽,趙娟.基于單片機的智能電風扇的設計[J].南方農機,2018,49(23):179-180.趙苗慧,楊兵,張儀.基于單片機的感應式溫控風扇設計[J].無線互聯科技,2021,18(08):40-41+59.喬琳君,魏嚴鋒.基于STC89C52單片機的自動換氣扇系統(tǒng)設計[J].電子設計工程,2021,29(08):173-176+181.蔡保謙,田樂,王飛,吳志浩.基于STC89C52單片機的語音控制可移動式智能溫控風扇[J].山東工業(yè)技術,2020(06):83-88.厲俊.基于單片機的智能溫控風扇系統(tǒng)的設計與實現[J].智能計算機與應用,2019,9(06):206-209+213.劉巧平,張磊,韓倩,姜瑞征.基于AT89C51單片機智能溫控風扇的設計[J].自動化與儀器儀表,2017(12):83-85.喬學增.基于STC89C52型單片機溫控風扇調速系統(tǒng)設計研究[J].佳木斯大學學報(自然科學版),2023,41(06):159-162+151.劉艷峰.基于STM32單片機的教室智能風扇控制系統(tǒng)的設計[J].電子制作,2023,31(10):48-51.黃平,黃煥晴,蔣少潔,梁嬋娟,梁東梅,梁火層.基于STM32的智能風扇[J].科技視界,2019(24):36-37+84.王蕊.基于單片機的多功能自動調溫風扇系統(tǒng)設計[D].鄭州大學,2014.BhatiaV,BhatiaG.Roomtemperaturebasedfanspeedcontrolsystemusingpulsewidthmodulationtechnique[J].InternationalJournalofComputerApplications,2013,81(5).Tulone,S.Madden.Quorumsystemsforwirelesssensornetworks[J].2007

附錄A程序代碼#include<REGX52.H>#defineucharunsignedchar //uchar代替unsignedchar#defineuintunsignedint //uint代替unsignedintuchardisplay[4]={0x00,0x00,0x00,0x00};//定義顯示緩沖區(qū)(初始化為0x00表示顯示0000)ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0x89,0xC7}; //共陽數碼管 0 123456789- H L//引腳定義: #defineSMG_XS P0 //定義數碼管顯示#defineIA P2_1 //電機的控制#defineIB P2_0 #defineLED1 P1_5 //指示燈1#defineLED2 P3_5 //指示燈2#defineq_kz P2_3 //(千位)數碼管#defineb_kz P2_4 //(白位)數碼管#defines_kz P2_5 //(十位)數碼管#defineg_kz P2_6 //(個位)數碼管#defineIO_18b20 P1_0//定義DS18B20接口#defineKey1 P1_1 //按鍵#defineKey2 P1_6 //上下限溫度加按鍵#defineKey3 P3_2 //上下限溫度減按鍵#defineKey4 P3_7 //實物/仿真切換按鍵floatwendu; //定義真實的十進制溫度變量intbig_wendu; //放大10倍后的十進制溫度變量(主要方便溫度顯示精確到小數點后一位)inthigh=35; //定義上限溫度變量intlow=25; //定義下限溫度變量ucharflag=0; //定義按鍵溫度設置標志位(0:正常顯示溫度1:顯示上限溫度值2:顯示下限溫度值)bitjw_flag; //定義降溫風扇運行指示燈標志位 //(0:指示燈1閃爍,電機50%運行1:指示燈1和指示燈2都閃爍,電機全速運行)intnum=0; //定義指示燈1、2的閃爍頻率變量uintt=2; //數碼管動態(tài)掃描基數為2(t=2為實物運行參數),另外(t=300為仿真運行參數)bitts=0; //定義臨時調試標志位為0(0:實物運行參數1:仿真運行參數)/********************DS18B20部分******************/voiddelay_ms(uintcount) //延時函數(keil軟件測試此函數運行時間約1ms){ uinti; while(count) { i=125; while(i>0){i--;} count--; }}voidds18b20_init() //初始化{ uinti; IO_18b20=0; //先將IO_18b20拉低 i=100; while(i>0){i--;} //延時一段時間803us(延時持續(xù)時間在480-960us之間即可) IO_18b20=1; //再將IO_18b20拉高 i=7; //由于DS18B20需要等待15-60US之后會自動響應拉低這個引腳 while(i>0){i--;} }bitds18b20_read_bit() //讀一位函數并返回"dat"(根據DS18B20讀一位字節(jié)時序編寫){ uinti; bitdat; //定義位變量dat EA=0; //要操作DS18b20時先關閉定時器中斷(防止定時器中斷對操作DS18b20有影響,導致出錯) IO_18b20=0; //先將IO_18b20拉低***(從IO_18b20拉低到讀取IO_18b20上的數據狀態(tài),過程不能超過15us) i++; //小延時一下 ↑ IO_18b20=1; //再將IO_18b20拉高(釋放改引腳) 不能超過15us i++; //小延時一下 EA=1; //再打開定時器中斷 ↓ dat=IO_18b20; //讀到的數據送到dat**(從IO_18b20拉低到讀取IO_18b20上的數據狀態(tài),過程不能超過15us) i=8; while(i>0){i--;} //延時一下 return(dat); //返回讀出來的數據dat}uchards18b20_read_byte() //讀一個字節(jié){ uchari,j,dat; //定義i,j,dat變量 dat=0; //dat初始化為0 for(i=0;i<8;i++) { j=ds18b20_read_bit(); //將讀一位函數并返回"dat",傳送到j dat=(j<<7)|(dat>>1); //讀出的數據最低位在最前面,這樣剛好一個字節(jié)在dat里 } return(dat);//將一個字節(jié)數據返回}voidds18b20_write_byte(uchardat)//寫一個字節(jié){ uinti; ucharj; bittest; //定義臨時位變量test for(j=0;j<8;j++) //for循環(huán)傳遞8位數據(即一個字節(jié)) { test=dat&0x01; //將dat的最低位取出來放在test dat=dat>>1; //再將dat向右移一位 if(test) { EA=0; //要操作DS18b20時先關閉定時器中斷(防止定時器中斷對操作DS18b20有影響,導致出錯) IO_18b20=0; //先將IO_18b20拉低 i++; EA=1; //再打開定時器中斷 IO_18b20=1; //再將IO_18b20拉高(釋放總線) i=8; while(i>0){i--;} } else { EA=0; //要操作DS18b20時先關閉定時器中斷(防止定時器中斷對操作DS18b20有影響,導致出錯) IO_18b20=0; //先將IO_18b20拉低 i=8; EA=1; //再打開定時器中斷 while(i>0){i--;}//延時一下69us(時序時間要求大于60us小于120us即可) IO_18b20=1; //再將IO_18b20拉高 i++;i++; //小延時一下 } }}/**********************************************************/voidtemp_change() //溫度轉換{ ds18b20_init(); //初始化DS18B20 delay_ms(1); //延時等待1ms,時間上留有一些余地,因為DS18B20器件響應后會主動 //拉低60-240us,然后DS18B20自己會主動釋放總線,即主動拉高IO口 ds18b20_write_byte(0xcc);//跳過序列號命令 ds18b20_write_byte(0x44);//發(fā)送溫度轉換命令}/******************************************************************/inttemperature() //獲得溫度函數{ inttemp; //定義溫度值變量(整型變量) uchara,b; //定義變量a,b用來存放溫度值的低8位和高8位 ds18b20_init(); //初始化DS18B20 delay_ms(1); //拉低60-240us,然后DS18B20自己會主動釋放總線,即主動拉高IO口 ds18b20_write_byte(0xcc);//跳過序列號命令 ds18b20_write_byte(0xbe);//發(fā)送讀取數據命令 a=ds18b20_read_byte();//連續(xù)讀兩個字節(jié)數據(a為低8位數據) b=ds18b20_read_byte(); //b為高8位數據 temp=b; //將高8位數據送到temp中 temp<<=8; //再將temp左移8位,這樣高8位數據就存在temp的高8位上了 temp=temp|a;//兩字節(jié)合成一個整型變量(temp是高8位"按位或"a是低8位) returntemp;//返回溫度值}/****************以上為DS18B20部分****************/voiddelay(uinttime) //數碼管掃描延時函數{ uinti,j; for(i=time;i>0;i--) for(j=3;j>0;j--);}voiddelay_anjian(uinttime) //按鍵延時去抖函數{ uinti,j; for(i=time;i>0;i--) for(j=110;j>0;j--); }voiddisp0() //正常顯示當前溫度函數(顯示緩沖區(qū)內容){ if(wendu>0) //如果溫度大于0,為正數 { SMG_XS=table[display[0]]; //顯示溫度數據百位值 q_kz=0;b_kz=s_kz=g_kz=1; //允許(千位)數碼管位(第1個數碼管)點亮 delay(t); //延時一下(消隱) q_kz=1; } else //否則溫度小于0,為負數 { SMG_XS=table[10]; //顯示負號"-" q_kz=0;b_kz=s_kz=g_kz=1; //允許(千位)數碼管位(第1個數碼管)點亮 delay(t); //延時一下(消隱) q_kz=1; } SMG_XS=table[display[1]]; //顯示溫度數據十位值 b_kz=0;q_kz=s_kz=g_kz=1; //允許(百位)數碼管位(第2個數碼管)點亮 delay(t); //延時一下(消隱) b_kz=1; SMG_XS=table[display[2]]&0x7f; //顯示溫度數據個位值,并加入小數點 s_kz=0;q_kz=b_kz=g_kz=1; //允許(十位)數碼管位(第3個數碼管)點亮 delay(t); //延時一下(消隱) s_kz=1; SMG_XS=table[display[3]]; //顯示溫度數據小數點后一位 g_kz=0;q_kz=b_kz=s_kz=1; //允許(個位)數碼管位(第4個數碼管)點亮 delay(t); //延時一下(消隱) g_kz=1; } voiddisp1(high) //顯示上限溫度函數 { SMG_XS=table[11]; //顯示"H" q_kz=0;b_kz=s_kz=g_kz=1; //允許(千位)數碼管位(第1個數碼管)點亮 delay(t); //延時一下(消隱) q_kz=1; if(high/100!=0) //如果上限溫度百位不為0(表示上限溫度值超過100) { SMG_XS=table[high/100]; //顯示上限溫度的百位 b_kz=0;q_kz=s_kz=g_kz=1; //允許(百位)數碼管位(第2個數碼管)點亮 delay(t); //延時一下(消隱) b_kz=1; SMG_XS=table[high%100/10]; //顯示上限溫度的十位 s_kz=0;q_kz=b_kz=g_kz=1; //允許(十位)數碼管位(第3個數碼管)點亮 delay(t); //延時一下(消隱) s_kz=1; SMG_XS=table[high%10]; //顯示上限溫度的個位 g_kz=0;q_kz=b_kz=s_kz=1; //允許(個位)數碼管位(第4個數碼管)點亮 delay(t); //延時一下(消隱) g_kz=1; } elseif(high>=0) //再如果上限溫度值大于等于0(說明溫度值是正數) { SMG_XS=table[high/10]; //顯示上限溫度的十位 s_kz=0;q_kz=b_kz=g_kz=1; //允許(十位)數碼管位(第3個數碼管)點亮 delay(t); //延時一下(消隱) s_kz=1; SMG_XS=table[high%10]; //顯示上限溫度的個位 g_kz=0;q_kz=b_kz=s_kz=1; //允許(個位)數碼管位(第4個數碼管)點亮 delay(t); //延時一下(消隱) g_kz=1; } else //否則上限溫度值是負數(即零下溫度值) { SMG_XS=table[10]; //顯示"-"(因為是負數,所以要加"-"號) b_kz=0;q_kz=s_kz=g_kz=1; //允許(百位)數碼管位(第2個數碼管)點亮 delay(t); //延時一下(消隱) b_kz=1; high=0-high; //把上限溫度值取正 SMG_XS=table[high/10]; //顯示上限溫度的十位 s_kz=0;q_kz=b_kz=g_kz=1; //允許(十位)數碼管位(第3個數碼管)點亮 delay(t); //延時一下(消隱) s_kz=1; SMG_XS=table[high%10]; //顯示上限溫度的個位 g_kz=0;q_kz=b_kz=s_kz=1; //允許(個位)數碼管位(第4個數碼管)點亮 delay(t); //延時一下(消隱) g_kz=1; } }voiddisp2(low) //顯示下限溫度函數{ SMG_XS=table[12]; //顯示"L" q_kz=0;b_kz=s_kz=g_kz=1; //允許(千位)數碼管位(第1個數碼管)點亮 delay(t); //延時一下(消隱) q_kz=1; if(low/100!=0) //如果下限溫度百位不為0(表示上限溫度值超過100) { SMG_XS=table[low/100]; //顯示下限溫度的百位 b_kz=0;q_kz=s_kz=g_kz=1; //允許(百位)數碼管位(第2個數碼管)點亮 delay(t); //延時一下(消隱) b_kz=1; SMG_XS=table[low%100/10]; //顯示下限溫度的十位 s_kz=0;q_kz=b_kz=g_kz=1; //允許(十位)數碼管位(第3個數碼管)點亮 delay(t); //延時一下(消隱) s_kz=1; SMG_XS=table[low%10]; //顯示下限溫度的個位 g_kz=0;q_kz=b_kz=s_kz=1; //允許(個位)數碼管位(第4個數碼管)點亮 delay(t); //延時一下(消隱) g_kz=1; } elseif(low>=0) //再如果下限溫度值大于等于0(說明溫度值是正數) { SMG_XS=table[low/10]; //顯示下限溫度的十位 s_kz=0;q_kz=b_kz=g_kz=1; //允許(十位)數碼管位(第3個數碼管)點亮 delay(t); //延時一下(消隱) s_kz=1; SMG_XS=table[low%10]; //顯示下限溫度的個位 g_kz=0;q_kz=b_kz=s_kz=1; //允許(個位)數碼管位(第4個數碼管)點亮 delay(t); //延時一下(消隱) g_kz=1; } else //否則下限溫度值是負數(即零下溫度值) { SMG_XS=table[10]; //顯示"-"(因為是負數,所以要加"-"號) b_kz=0;q_kz=s_kz=g_kz=1; //允許(百位)數碼管位(第2個數碼管)點亮 delay(t); //延時一下(消隱) b_kz=1; low=0-low; //把下限溫度值取正 SMG_XS=table[low/10]; //顯示下限溫度的十位 s_kz=0;q_kz=b_kz=g_kz=1; //允許(十位)數碼管位(第3個數碼管)點亮 delay(t); //延時一下(消隱) s_kz=1; SMG_XS=table[low%10]; //顯示下限溫度的個位 g_kz=0;q_kz=b_kz=s_kz=1; //允許(個位)數碼管位(第4個數碼管)點亮 delay(t); //延時一下(消隱) g_kz=1; } }voidSMG_disp() //數碼管顯示函數 { if(flag==0) //如果flag=0 { disp0(); //正常顯示當前溫度函數(顯示緩沖區(qū)內容) } if(flag==1) //如果flag=1 { disp1(high); //顯示上限溫度函數 } if(flag==2) //如果flag=2 { disp2(low); //顯示下限溫度函數 } }voidxitong_init() //系統(tǒng)初始化等待DS18b20徹底轉換完成,未完成之前數碼管顯示""{ EA=1; //開總中斷 TMOD=0x01; //定時器0為方式1 TH0=0xff; //12M晶振定時時間0.25ms0xff06 TL0=0x06; ET0=1; //開定時器0中斷 TR0=0; //先不啟動定時器0 SMG_XS=table[10]; //數碼管顯示"" q_kz=b_kz=s_kz=g_kz=0; //允許4位數碼管顯示 temp_change(); //發(fā)送溫度轉換命令函數 delay_ms(980); //等待延時980ms>750ms,時間上留有一些余地; //(因為DS18b20出廠默認最大的溫度轉換時間為750ms, //為了防止第一次讀出來的溫度值是錯誤的值(典型錯誤值一般是85℃ //程序中的延時時間需要至少為750ms)*/}voidwendu_data_cl() //溫度數據處理{ staticuinti=0; //定義循環(huán)變量 i++; //i自加1(i開始從零開始自加1) if(ts==0) //0:實物運行參數 { if(i==3000){i=0;}//如果i=3000,i清0(使i控制在0-3000之間),i的范圍決定溫度數據刷新的快慢 } else //1:仿真運行參數 { if(i>=400) {i=0;} } if(i==0) //如果i=0,執(zhí)行溫度轉換 { temp_change();//發(fā)送溫度轉換命令函數 } if(i==100) //如果i=100,處理DS18B20送過來的數據,同時加以處理 { //為了顯示精確小數點后一位的溫度值 wendu=temperature()*0.0625;//得到真實十進制溫度值,因為DS18B20 //可以精確到0.0625度,所以讀回數據的最低位代表的是0.0625度 if(wendu<=low) //溫度值低于下限溫度(表示溫度過低,不能降溫,則降溫電機風扇不運行) { TR0=0; //關閉TR0 LED1=LED2=1; //指示燈1指示燈2都不亮 IA=IB=0; //降溫電機風扇不轉 } elseif(wendu>=high)//溫度值高于上限溫度(表示溫度過高,需降溫,則降溫電機風扇全速運行) { jw_flag=1; //1:指示燈1和指示燈2都閃爍 IA=1;IB=0; //降溫電機風扇全速運行 TR0=1; //打開TR0 } else //否則溫度在正常溫度范圍(表示溫度適當,需維持溫度,則降溫電機風扇50%運行) { jw_flag=0; //0:指示燈1閃爍 TR0=1; //打開TR0 } big_wendu=wendu*10; //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字 if(wendu<0) //(如果溫度數據是負數)判斷第一位顯示正數還是負數 { big_wendu=0-big_wendu;//再把數據轉換成正數,方便數據顯示 } else //否則溫度數據是正數 { display[0]=big_wendu/1000;//顯示溫度數據百位值 } big_wendu=big_wendu%1000; display[1]=big_wendu/100; //顯示溫度數據十位值 big_wendu=big_wendu%100; display[2]=big_wendu/10; //顯示溫度數據個位值 display[3]=big_wendu%10; //顯示溫度數據小數點后一位 } }voidanjian_cl() //按鍵處理函數{ if(Key1==0) //溫度上下限設置按鍵按下 { delay_anjian(5); //延時去抖 if(Key1==0) //再判斷溫度上下限設置按鍵是否按下 { flag++; //按鍵溫度設置標志位加1 while(flag==3){flag=0;}//當flag=3.flag清0(讓0<=flag<=2) q_kz=b_kz=s_kz=g_kz=1; //關閉數碼管顯示 TR0=0; //關閉TR0(關閉定時器0) LED1=LED2=1; //指示燈LED1、2燈關閉 IA=IB=0; //關閉降溫電機 } while(Key1==0); //等待按鍵松開 } if(flag==1) //允許調整上限溫度值 { if(Key2==0) //上下限溫度加按鍵按下 { delay_anjian(5); //延時去抖 if(Key2==0) //再判斷上下限溫度加按鍵是否按下 { if(high>low) //如果上限溫度>下限溫度 { high++; //上限溫度自加1 while(high==126){high=low+1;}//當上限溫度加到126℃時,上限溫度設定為比下限溫度高1℃ q_kz=b_kz=s_kz=g_kz=1; //關閉數碼管顯示 } } while(Key2==0); //等待按鍵松開 } if(Key3==0) //上下限溫度減按鍵按下 { delay_anjian(5); //延時去抖 if(Key3==0) //再判斷上下限溫度減按鍵是否按下 { if(high-low

溫馨提示

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

評論

0/150

提交評論