




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、齊 齊 哈 爾 大 學 綜合實踐(論文)題 目 基于STM32的溫控風扇學 院 通信與電子工程學院 專業(yè)班級 學生姓名 學生學號 指導教師 朱磊 綜合實踐(論文)摘要:隨著科技的日新月異,智能家居逐漸走入普通家庭,風扇作為基本的家用電器也將成為智能家居的一部分。這里介紹的是以STM32單片機為控制單元并結(jié)合嵌入式技術(shù)設(shè)計的一款具有溫控調(diào)速、液晶顯示溫度等信息的智能電風扇。經(jīng)過前期設(shè)計、制作和最終的測試得出,該風扇電源穩(wěn)定性好,操作方便,運行可靠,功能強大,價格低廉,節(jié)約能耗,能夠滿足用戶多元化的需求。該風扇具有的人性化設(shè)計和低廉的價格很適合普通用戶家庭使用。 關(guān)鍵詞:STM32單片機電風扇溫控
2、調(diào)速I26綜合實踐(論文)目 錄摘 要I第1章 緒論11.1 概述11.2 設(shè)計目的及應用1第2章 溫控電風扇方案論證22.1 溫度傳感器的選擇22.2 控制核心的選擇2 2.3 顯示電路的選擇32.4 調(diào)速方式的選擇3第3章 溫控電風扇硬件設(shè)計53.1 硬件系統(tǒng)總體設(shè)計53.2 本系統(tǒng)各器件簡介53.2.1 DS18B20簡介5 3.2.2 STM32簡介7 3.2.3 LCD1602液晶屏簡介8 3.3 各部分電路設(shè)計9 3.3.1 溫度傳感器的電路9 3.3.2 LCD1602液晶屏顯示電路10第4章 溫控電風扇軟件設(shè)計114.1 軟件系統(tǒng)總體設(shè)計114.2 系統(tǒng)初始化程序設(shè)計11 4.
3、3 溫度采集與顯示程序設(shè)計12結(jié)論14參考文獻15附錄116附錄225I第1章 緒論1.1概述傳統(tǒng)電風扇多采用機械控制,功能單一,噪聲大,定時時間短,搖頭模式固定,變檔風速變化較大。針對這些缺點,本文采用了一款性價比高、功耗低的基于ARM CortexM3內(nèi)核的STM32單片機作為控制單元制作了一臺智能電風扇,該風扇巧妙地運用溫度傳感技術(shù)、液晶顯示技術(shù)等,把智能控制技術(shù)應用到家用電器的控制中,可以根據(jù)環(huán)境溫度的采樣實現(xiàn)風速的自動調(diào)整,并根據(jù)采集到的溫度顯示到液晶屏上。采用的芯片功能強大,方便進行功能擴展。 1.2設(shè)計目的及意義春夏(夏秋)交替時節(jié),白天溫度依舊很高,電風扇應高轉(zhuǎn)速、大風量,使人
4、感到清涼;到了晚上,氣溫降低,當人入睡后,應該逐步減小轉(zhuǎn)速,以免使人感冒。雖然電風扇都有調(diào)節(jié)不同檔位的功能,但必須要人手動換檔,睡著了就無能為力了,而普遍采用的定時器關(guān)閉的做法,一方面是定時時間長短有限制,一般是一兩個小時;另一方面可能在一兩個小時后氣溫依舊沒有降低很多,而風扇就關(guān)閉了,使人在睡夢中熱醒而不得不起床重新打開風扇,增加定時器時間,非常麻煩,而且可能多次定時后最后一次定時時間太長,在溫度降低以后風扇依舊繼續(xù)吹風,使人感冒;第三方面是只有簡單的到了定時時間就關(guān)閉風扇電源的單一功能,不能滿足氣溫變化對風扇風速大小的不同要求。又比如在較大功率的電子產(chǎn)品散熱方面,現(xiàn)在絕大多數(shù)都采用了風冷系
5、統(tǒng),利用風扇引起空氣流動,帶走熱量,使電子產(chǎn)品不至于發(fā)熱燒壞。要使電子產(chǎn)品保持較低的溫度,必須用大功率、高轉(zhuǎn)速、大風量的風扇,而風扇的噪音與其功率成正比。如果要低噪音,則要減小風扇轉(zhuǎn)速,又會引起電子設(shè)備溫度上升,不能兩全其美。為解決上述問題,我們設(shè)計了這套溫控自動風扇系統(tǒng)。本系統(tǒng)采用高精度集成溫度傳感器,用單片機控制,能顯示實時溫度,并根據(jù)使用者設(shè)定的溫度自動在相應溫度時作出小風、大風、停機動作,精確度高,動作準確。 第2章 溫控電風扇方案論證2.1溫度傳感器的選擇溫度傳感器可由以下幾種方案可供選擇:方案一:選用熱敏電阻作為感測溫度的核心元件,通過運算放大器放大由于溫度變化引起熱敏電阻電阻的變
6、化、進而導至的輸出電壓變化的微弱電壓變化信號,再用AD轉(zhuǎn)換芯片ADC0809將模擬信號轉(zhuǎn)化為數(shù)字信號輸入單片機處理。方案二:采用熱電偶作為感測溫度的核心元件,配合橋式電路,運算放大電路和AD轉(zhuǎn)換電路,將溫度變化信號送入單片機處理。方案三:采用數(shù)字式集成溫度傳感器DS18B20作為感測溫度的核心元件,直接輸出數(shù)字溫度信號供單片機處理。對于方案一,采用熱敏電阻有價格便宜、元件易購的優(yōu)點,但熱敏電阻對溫度的細微變化不敏感,在信號采集、放大、轉(zhuǎn)換過程中還會產(chǎn)生失真和誤差,并且由于熱敏電阻的R-T關(guān)系的非線性,其本身電阻對溫度的變化存在較大誤差,雖然可以通過一定電路予以糾正,但不僅將使電路復雜穩(wěn)定性降低
7、,而且在人體所處溫度環(huán)境溫度變化中難以檢測到小的溫度變化。故該方案不適合本系統(tǒng)。對于方案二,采用熱電偶和橋式測量電路相對于熱敏電阻其對溫度的敏感性和器件的非線性誤差都有較大提高,其測溫范圍也非常寬,從-50攝氏度到1600攝氏度均可測量。但是依然存在電路復雜,對溫度敏感性達不到本系統(tǒng)要求的標準,故不采用該方案。對于方案三,由于數(shù)字式集成溫度傳感器DS18B20的高度集成化,大大降低了外接放大轉(zhuǎn)換等電路的誤差因素,溫度誤差很小,并且由于其感測溫度的原理與上述兩種方案的原理有著本質(zhì)的不同,使得其溫度分辨力極高。溫度值在器件內(nèi)部轉(zhuǎn)換成數(shù)字量直接輸出,簡化了系統(tǒng)程序設(shè)計,又由于該傳感器采用先進的單總線
8、技術(shù)(1-WRIE),與單片機的接口變的非常簡潔,抗干擾能力強。關(guān)于DS18B20的詳細參數(shù)參看下面“硬件設(shè)計”中的器件介紹。22控制核心的選擇方案一:采用電壓比較電路作為控制部件。溫度傳感器采用熱敏電阻或熱電偶等,溫度信號轉(zhuǎn)為電信號并放大,由集成運放組成的比較電路判決控制風扇轉(zhuǎn)速,當高于或低于某值時將風扇切換到相應檔位。方案二:采用STM32單片機作為控制核心。以軟件編程的方法進行溫度判斷,并在端口輸出控制信號。對于方案一,采用電壓比較電路具有電路簡單、易于實現(xiàn),以及無需編寫軟件程序的特點,但控制方式過于單一,不能自由設(shè)置上下限動作溫度,無法滿足不同用戶以及不同環(huán)境下的多種動作溫度要求,故不
9、在本系統(tǒng)中采用。對于方案二,以STM32單片機作為控制器,通過編寫程序不但能將傳感器感測到的溫度通過顯示電路顯示出來,而且用戶能通過鍵盤接口,自由設(shè)置上下限動作溫度值,滿足全方位的需求。并且通過程序判斷溫度具有極高的精準度,能精確把握環(huán)境溫度的微小變化。故本系統(tǒng)采用方案二。23顯示電路的選擇方案一:采用五位共陽數(shù)碼管顯示溫度,動態(tài)掃描顯示方式。方案二:采用液晶顯示屏LCD顯示溫度對于方案一,該方案成本低廉,顯示溫度明確醒目,在夜間也能看見,功耗極低,顯示驅(qū)動程序的編寫也相對簡單,這種顯示方式得到廣泛應用。不足的地方是掃描顯示方式是使五個LED逐個點亮,因此會有閃爍,但是人眼的視覺暫留時間為20
10、MS,當數(shù)碼管掃描周期小于這個時間時人眼將感覺不到閃爍,因此可以通過增大掃描頻率來消除閃爍感。對于方案二,液晶體顯示屏具有顯示字符優(yōu)美,不但能顯示數(shù)字還能顯示字符甚至圖形的優(yōu)點,這是LED數(shù)碼管無法比擬的。而且硬件連接簡單,因此本系統(tǒng)采用方案二。24調(diào)速方式的選擇方案一:采用數(shù)模轉(zhuǎn)化芯片DAC0832來控制,由單片機根據(jù)當前環(huán)境溫度值輸出相應數(shù)字量到DAC0832中,再由DAC0832產(chǎn)生相應模擬信號控制晶閘管的導通角,從而通過無級調(diào)速電路實現(xiàn)風扇電機轉(zhuǎn)速的自動調(diào)節(jié)。方案二:采用單片機軟件編程實現(xiàn)PWM(脈沖寬度調(diào)制)調(diào)速的方案。PWM為英文Pulse Width Modulation的縮寫,
11、它為按一定的規(guī)律改變脈沖序列的脈沖寬度,以調(diào)節(jié)輸出量和波形的一種調(diào)節(jié)方式,在PWM驅(qū)動控制的調(diào)節(jié)系統(tǒng)中,最常用的為矩形波PWM信號,在控制時需要調(diào)節(jié)PWM波得占空比。占空比為指高電平持續(xù)時間在一個周期時間內(nèi)的百分比。在控制電機的轉(zhuǎn)速時,占空比越大,轉(zhuǎn)速就越快,若全為高電平,占空比為100%時,轉(zhuǎn)速達到最大。用單片機I/O口輸出PWM信號時,有如下兩種方案:(1) 利用軟件延時。當高電平延時時間到時,對I/O口電平取反,使其變成低電平,然后再延時一定時間;當?shù)碗娖窖訒r時間到時,再對該I/O口電平取反,如此循環(huán)即可得到PWM信號。在本設(shè)計中應用了此方案。(2) 利用定時器??刂品桨概c(1)相同,只
12、為在該方案中利用單片機的定時器來定時進行高低電平的轉(zhuǎn)變,而不為用軟件延時。應用此方案時編程相對復雜。對于方案一,該方案能夠?qū)崿F(xiàn)對直流風扇電機的無級調(diào)速,速率變化靈敏,但為D/A轉(zhuǎn)化芯片的價格較高,與其溫控狀態(tài)下無級調(diào)速性能相比性價比不高。對于方案二,相對于其他用硬件或者軟硬件相結(jié)合的方案實現(xiàn)對電機進行調(diào)速而言,采用PWM 用純軟件的方案來實現(xiàn)調(diào)速過程,具有更大的靈活性,并可大大降低成本,能夠充分發(fā)揮單片機的性能,對于簡單速率控制系統(tǒng)的實現(xiàn)提供了一種有效的途徑。綜合考慮選用方案二。第3章 溫控電風扇硬件設(shè)計3.1硬件系統(tǒng)總體設(shè)計本次設(shè)計采用STM32單片機做主控芯片,通過DS18B20采集溫度,
13、將溫度顯示在 LCD1602上。根據(jù)溫度的不同,利用STM32對風扇進行調(diào)速,總體硬件設(shè)計如圖1所示:圖1 系統(tǒng)總體結(jié)構(gòu)框圖3.2本系統(tǒng)各器件簡介 3.2.1 DS18B20簡介DS18B20是美國DALLAS半導體公司繼DS1820之后最新推出的一種改進型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測溫度并且可根據(jù)實際要求通過簡單的編程實現(xiàn)912位的數(shù)字值讀數(shù)方式??梢苑謩e在93.75 ms和750 ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B2
14、0供電,而無需額外電源,因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡單可靠性更高。他在測溫精度、轉(zhuǎn)換時間、傳輸距離、分辨率等方面較DS1820有了很大的改進,給用戶帶來了更方便的使用和更令人滿意的效果。 DS18B20簡介:(1)獨特的單線接口方式:DS18B20與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。(2)在使用中不需要任何外圍元件。(3)可用數(shù)據(jù)線供電,電壓范圍:+3.0 +5.5 V。(4)測溫范圍:-55 +125 。固有測溫分辨率為0.5 。(5)通過編程可實現(xiàn)912位的數(shù)字讀數(shù)方式。(6)用戶可自設(shè)定非易失性的報警上下限值。(7)支持多點組網(wǎng)功能,多個
15、DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點測溫。(8)負壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。單線(1wire)技術(shù):該技術(shù)采用單根信號線,既可傳輸時鐘,也能傳輸數(shù)據(jù),而且是雙向傳輸。適用于單主機系統(tǒng),主機能夠控制一個或多個從機設(shè)備,通過一個漏極開路或三態(tài)端口連至該數(shù)據(jù)線,以允許設(shè)備在不發(fā)送數(shù)據(jù)時能釋放該線,而讓其他設(shè)備使用。單線通常要求外接一個5K的上拉電阻,這樣當該線空閑時,其狀態(tài)為高電平。主機和從機之間的通訊分成三個步驟:初始化單線器件、識別單線器件和單線數(shù)據(jù)傳輸。單線1wire協(xié)議由復位脈沖、應答脈沖、寫0、寫1、讀0、讀1,這幾種信號類型實現(xiàn),這些信號中
16、除了應答脈沖其他都由主機發(fā)起,并且所有指令和數(shù)據(jù)字節(jié)都是低位在前。DS18B20直接將測量溫度值轉(zhuǎn)化為數(shù)字量提交給單片機,工作時必須嚴格遵守單總線器件的工作時序。DS18B20 內(nèi)部結(jié)構(gòu)及管腳如圖2,圖3所示:圖2 DS18B20內(nèi)部結(jié)構(gòu)圖圖3 DS18B20外形及管腳圖3.2.2 STM32簡介STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應用專門設(shè)計的ARM Cortex-M內(nèi)核,其中STM32F1系列有:STM32F103“增強型”系列,STM32F101“基本型”系列,STM32F105、STM32F107“互聯(lián)型”系列。 增強型系列時鐘頻率達到72MHz,是同類產(chǎn)品中性能最
17、高的產(chǎn)品;基本型時鐘頻率為36MHz,以16位產(chǎn)品的價格得到比16位產(chǎn)品大幅提升的性能,是32位產(chǎn)品用戶的最佳選擇。兩個系列都內(nèi)置32K到128K的閃存,不同的是SRAM的最大容量和外設(shè)接口的組合。時鐘頻率72MHz時,從閃存執(zhí)行代碼,STM32功耗36mA,是32位市場上功耗最低的產(chǎn)品,相當于0.5mA/MHz。 內(nèi)核:ARM32位Cortex-M3 CPU,最高工作頻率72MHz,1.25DMIPS/MHz。單周期乘法和硬件除法。存儲器:片上集成32-512KB的Flash存儲器。6-64KB的SRAM存儲器。時鐘、復位和電源管理:2.0-3.6V的電源供電和I/O接口的驅(qū)動電壓。POR、
18、PDR和可編程的電壓探測器(PVD)。4-16MHz的晶振。內(nèi)嵌出廠前調(diào)校的8MHz RC振蕩電路。內(nèi)部40 kHz的RC振蕩電路。用于CPU時鐘的PLL。帶校準用于RTC的32kHz的晶振。低功耗:3種低功耗模式:休眠,停止,待機模式。為RTC和備份寄存器供電的VBAT。調(diào)試模式:串行調(diào)試(SWD)和JTAG接口。DMA:12通道DMA控制器。支持的外設(shè):定時器,ADC,DAC,SPI,IIC和UART。3個12位的us級的A/D轉(zhuǎn)換器(16通道):A/D測量范圍:0-3.6 V。雙采樣和保持能力。片上集成一個溫度傳感器。2通道12位D/A轉(zhuǎn)換器:STM32F103xC,STM32F103x
19、D,STM32F103xE獨有。最多高達112個的快速I/O端口:根據(jù)型號的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16個外部中斷向量。除了模擬輸入,所有的都可以接受5V以內(nèi)的輸入。最多多達11個定時器:4個16位定時器,每個定時器有4個IC/OC/PWM或者脈沖計數(shù)器。2個16位的6通道高級控制定時器:最多6個通道可用于PWM輸出。2個看門狗定時器(獨立看門狗和窗口看門狗)。Systick定時器:24位倒計數(shù)器。2個16位基本定時器用于驅(qū)動DAC。最多多達13個通信接口:2個IIC接口(SMBus/PMBus)。5個USART接口(ISO7816接口,LI
20、N,IrDA兼容,調(diào)試控制)。3個SPI接口(18 Mbit/s),兩個和IIS復用。CAN接口(2.0B)。USB 2.0全速接口。SDIO接口。ECOPACK封裝:STM32F103xx系列微控制器采用ECOPACK封裝形式。3.2.3LCD1602液晶屏簡介1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形。其實物圖如圖4所示:圖4 LCD1602實物圖1602
21、LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊。1602采用標準的16腳接口,其中:第1腳:GND為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高。第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時讀取信息,負跳變時執(zhí)行指令。第714腳:D0D7為8位雙向數(shù)據(jù)端。第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負極。3.3 各部分
22、電路設(shè)計3.3.1 溫度傳感器電路本模塊用更為優(yōu)秀的DS18B20作為溫度傳感器,STM32單片機作為處理器,配以溫度顯示作為溫度控制輸出單元。整個系統(tǒng)力求結(jié)構(gòu)簡單,功能完善。電路圖如圖2所示。系統(tǒng)工作原理如下:DS18B20數(shù)字溫度傳感器采集現(xiàn)場溫度,將測量到的數(shù)據(jù)送入STM32單片機的GPIO口,經(jīng)過單片機處理后顯示當前溫度值,并與設(shè)定溫度值的上下限值作比較,若高于設(shè)定上限值或低于設(shè)定下限值則控制電機轉(zhuǎn)速進行自動調(diào)整。圖5DS18B20溫度計原理圖3.3.2 LCD1602液晶屏顯示電路本模塊采用LCD1602對溫度進行顯示,液晶體顯示屏具有顯示字符優(yōu)美,不但能顯示數(shù)字還能顯示字符甚至圖形
23、的優(yōu)點,其電路設(shè)計如下圖:圖6液晶顯示電路第4章 溫控電風扇軟件設(shè)計4.軟件系統(tǒng)總體設(shè)計本次設(shè)計控制系統(tǒng)軟件使用C語言編程。使用模塊化設(shè)計,除主程序外,還有各功能子程序,分別執(zhí)行直流電機驅(qū)動調(diào)速及溫度采集、顯示等功能,編輯環(huán)境采用集成開發(fā)環(huán)環(huán)境Keil。程序總體運行流程圖如下:圖7 程序運行流程圖4.2 系統(tǒng)初始化程序設(shè)計系統(tǒng)初始化包括STM32系統(tǒng)定時器初始化,GPIO口初始化以及LCD1602初始化等,具體設(shè)計流程圖如圖8:圖8 初始化程序流程圖4.3溫度采集與顯示程序設(shè)計 DS18B20溫度傳感器進行溫度采集時,要依次進行初始化,ROM操作指令,存儲器操作指令,數(shù)據(jù)傳輸?shù)炔僮鳎唧w程序設(shè)
24、計流程如圖9:圖9 溫度采集與顯示流程圖結(jié)論 本次設(shè)計的系統(tǒng)以STM32單片機為控制核心,以溫度傳感器DS18B20檢測環(huán)境溫度,實現(xiàn)了根據(jù)環(huán)境溫度變化調(diào)節(jié)不同的風扇電機轉(zhuǎn)速,在一定范圍能能實現(xiàn)轉(zhuǎn)速的連續(xù)調(diào)節(jié),LCD1602能連續(xù)穩(wěn)定的顯示環(huán)境溫度,實現(xiàn)了基于單片機的溫控風扇的設(shè)計。本系統(tǒng)設(shè)計可推廣到各種電動機的控制系統(tǒng)中,實現(xiàn)電動機的轉(zhuǎn)速調(diào)節(jié)。在生產(chǎn)生活中,本系統(tǒng)可用于簡單的日常風扇的智能控制,為生活帶來便利;在工業(yè)生產(chǎn)中,可以改變不同的輸入信號,實現(xiàn)對不同信號輸入控制電機的轉(zhuǎn)速,進而實現(xiàn)生產(chǎn)自動化,如在電力系統(tǒng)中可以根據(jù)不同的負荷達到不同的電壓信號,再由電壓信號調(diào)節(jié)不同的發(fā)電機轉(zhuǎn)速,進而調(diào)
25、節(jié)發(fā)電量,實現(xiàn)電力系統(tǒng)的自動化調(diào)節(jié)。綜上所述,該系統(tǒng)的設(shè)計和研究在社會生產(chǎn)和生活中具有重要地位。參考文獻1 曹巧媛.單片機原理及應用.北京:電子工業(yè)出版社,2002.22 王倫.電風扇原理與維修技術(shù).北京:新時代出版社,19993 張毅剛.新編MCS-51單片機應用設(shè)計.哈爾濱工業(yè)大學出版社,2006.104 梁廷貴,王裕琛.可控硅觸發(fā)電路語音電路分冊.北京:科學技術(shù)文獻出版社,200326附錄程序1. 主函數(shù)#include "stm32f10x.h"#include "bsp_SysTick.h"#include <LCD1602.h>#
26、include "bsp_ds18b20.h"int main() int PWM,low,zhouqi; float wendu; int wendu1; zhouqi=500; low=zhouqi-PWM; SysTick_Init(); init1602(); lcdpos(1,0); writestring("TEM: 00.0"); GPIO_SetBits(GPIOB,GPIO_Pin_0); while( DS18B20_Init() lcdpos(0,0); writestring(" no ds18b20 exit"
27、;); lcdpos(0,0); writestring("ds18b20 exit"); for(;) DS18B20_Get_Temp(wendu); if (wendu<0) lcdpos(1,4); writestring("-"); wendu1=wendu*100; lcdpos(1,5);write_dat(wendu1/10000+0x30);lcdpos(1,6);write_dat(wendu1%10000/1000+0x30);lcdpos(1,7);write_dat(wendu1%1000/100+0x30);lcdpos
28、(1,9);write_dat(wendu1%100/10+0x30); lcdpos(1,10);write_dat(wendu1%10+0x30);Delay_ms(2000); if(wendu1>30) low=500; GPIO_SetBits(GPIOB,GPIO_Pin_0); Delay_ms(PWM); if(wendu1<15) low=0; GPIO_SetBits(GPIOB,GPIO_Pin_0); Delay_ms(PWM); if(wendu1>=15&wendu1<20) low=100; GPIO_SetBits(GPIOB,G
29、PIO_Pin_0); Delay_ms(PWM);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(low); if(wendu1>=20&wendu1<25) low=200; GPIO_SetBits(GPIOB,GPIO_Pin_0); Delay_ms(PWM); GPIO_ResetBits(GPIOB,GPIO_Pin_0); Delay_ms(low); if(wendu1>=25&wendu1<30) low=300; GPIO_SetBits(GPIOB,GPIO_Pin_0); Delay_ms(P
30、WM); GPIO_ResetBits(GPIOB,GPIO_Pin_0); Delay_ms(low); 2. DS18B20子程序#include "bsp_ds18b20.h"/* * 函數(shù)名:DS18B20_GPIO_Config * 描述 :配置DS18B20用到的I/O口 * 輸入 :無 * 輸出 :無 */static void DS18B20_GPIO_Config(void) /*定義一個GPIO_InitTypeDef類型的結(jié)構(gòu)體*/ GPIO_InitTypeDef GPIO_InitStructure; /*開啟DS18B20_PORT的外設(shè)時鐘*/
31、 RCC_APB2PeriphClockCmd(DS18B20_CLK, ENABLE); /*選擇要控制的DS18B20_PORT引腳*/ GPIO_InitStructure.GPIO_Pin = DS18B20_PIN; /*設(shè)置引腳模式為通用推挽輸出*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*設(shè)置引腳速率為50MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*調(diào)用庫函數(shù),初始化DS18B20_PORT*/ GPIO_Init(DS18B20_PORT, &
32、amp;GPIO_InitStructure); GPIO_SetBits(DS18B20_PORT, DS18B20_PIN); /* * 函數(shù)名:DS18B20_Mode_IPU * 描述 :使DS18B20-DATA引腳變?yōu)檩斎肽J?* 輸入 :無 * 輸出 :無 */static void DS18B20_Mode_IPU(void) GPIO_InitTypeDef GPIO_InitStructure; /*選擇要控制的DS18B20_PORT引腳*/ GPIO_InitStructure.GPIO_Pin = DS18B20_PIN; /*設(shè)置引腳模式為浮空輸入模式*/ GPIO
33、_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /*調(diào)用庫函數(shù),初始化DS18B20_PORT*/ GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);/* * 函數(shù)名:DS18B20_Mode_Out_PP * 描述 :使DS18B20-DATA引腳變?yōu)檩敵瞿J?* 輸入 :無 * 輸出 :無 */static void DS18B20_Mode_Out_PP(void) GPIO_InitTypeDef GPIO_InitStructure; /*選擇要控制的DS18B20_PORT引腳*/ GPIO_Ini
34、tStructure.GPIO_Pin = DS18B20_PIN; /*設(shè)置引腳模式為通用推挽輸出*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*設(shè)置引腳速率為50MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*調(diào)用庫函數(shù),初始化DS18B20_PORT*/ GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);/* *主機給從機發(fā)送復位脈沖 */static void DS18B20_Rst(void) /* 主機設(shè)置
35、為推挽輸出 */ DS18B20_Mode_Out_PP(); DS18B20_DATA_OUT(LOW); /* 主機至少產(chǎn)生480us的低電平復位信號 */ Delay_us(750); /* 主機在產(chǎn)生復位信號后,需將總線拉高 */ DS18B20_DATA_OUT(HIGH); Delay_us(15);/* * 檢測從機給主機返回的存在脈沖 * 0:成功 * 1:失敗 */static uint8_t DS18B20_Presence(void) uint8_t pulse_time = 0; /* 主機設(shè)置為上拉輸入 */ DS18B20_Mode_IPU(); while( DS
36、18B20_DATA_IN() && pulse_time<100 ) pulse_time+; Delay_us(1); / * 經(jīng)過100us后,存在脈沖都還沒有到來*/ if( pulse_time >=100 ) return 1; else pulse_time = 0; /* 存在脈沖到來,且存在的時間不能超過240us */ while( !DS18B20_DATA_IN() && pulse_time<240 ) pulse_time+; Delay_us(1); if( pulse_time >=240 ) return
37、 1; else return 0;/* * 從DS18B20讀取一個bit */static uint8_t DS18B20_Read_Bit(void) uint8_t dat; /* 讀0和讀1的時間至少要大于60us */ DS18B20_Mode_Out_PP(); /* 讀時間的起始:必須由主機產(chǎn)生 >1us <15us 的低電平信號 */ DS18B20_DATA_OUT(LOW); Delay_us(10); / * 設(shè)置成輸入,釋放總線,由外部上拉電阻將總線拉高 */ DS18B20_Mode_IPU(); /Delay_us(2); if( DS18B20_DA
38、TA_IN() = SET ) dat = 1; else dat = 0; /* 這個延時參數(shù)請參考時序圖 */ Delay_us(45); return dat;/* * 從DS18B20讀一個字節(jié),低位先行 */uint8_t DS18B20_Read_Byte(void) uint8_t i, j, dat = 0; for(i=0; i<8; i+) j = DS18B20_Read_Bit(); dat = (dat) | (j<<i); return dat;/* * 寫一個字節(jié)到DS18B20,低位先行 */void DS18B20_Write_Byte(ui
39、nt8_t dat)uint8_t i, testb;DS18B20_Mode_Out_PP();for( i=0; i<8; i+ ) testb = dat&0x01; dat = dat>>1;/* 寫0和寫1的時間至少要大于60us */ if (testb) DS18B20_DATA_OUT(LOW); /* 1us < 這個延時 < 15us */ Delay_us(8); DS18B20_DATA_OUT(HIGH); Delay_us(58); else DS18B20_DATA_OUT(LOW); /* 60us < Tx 0 &l
40、t; 120us */ Delay_us(70); DS18B20_DATA_OUT(HIGH); /* 1us < Trec(恢復時間) < 無窮大*/ Delay_us(2); void DS18B20_Start(void) DS18B20_Rst(); DS18B20_Presence(); DS18B20_Write_Byte(0XCC);/* 跳過 ROM */ DS18B20_Write_Byte(0X44);/* 開始轉(zhuǎn)換 */uint8_t DS18B20_Init(void) DS18B20_GPIO_Config(); DS18B20_Rst(); retur
41、n DS18B20_Presence();float DS18B20_Get_Temp(float f_tem) uint8_t tpmsb, tplsb; short s_tem;DS18B20_Rst(); DS18B20_Presence(); DS18B20_Write_Byte(0XCC);/* 跳過 ROM */DS18B20_Write_Byte(0X44);/* 開始轉(zhuǎn)換 */DS18B20_Rst();DS18B20_Presence(); DS18B20_Write_Byte(0XCC);/* 跳過 ROM */ DS18B20_Write_Byte(0XBE);/* 讀溫度值 */ tplsb = DS18B20_Read_Byte(); tpmsb = DS18B20_Read_Byte(); s_tem = tpmsb<<8; s_tem = s_tem | tplsb; I f( s_tem < 0 )/* 負溫度 */ f_tem = (s_tem+1) * 0.0625; else f_tem = s_tem * 0.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機織物的性能與運動服要求考核試卷
- 體育會展物流與供應鏈管理優(yōu)化考核試卷
- 國際物流與跨境交通運輸考核試卷
- 礦業(yè)信息安全培訓課件
- 服務(wù)可持續(xù)性考核試卷
- 信托項目的合同管理與履行考核試卷
- 電子垃圾回收利用項目投資合同
- 工程項目擔保合同
- 國際融資租賃合同
- 中學生閱讀后的思考征文
- 2023年第27屆希望杯〞八年級全國數(shù)學邀請賽試卷與參考答
- 世界著名童話故事英文繪本故事丑小鴨
- 四年級科學下冊課件 第四課 河流和湖泊 冀人版 25張
- 綠色簡約墻體商務(wù)風PPT模板
- GB/T 462-2003紙和紙板水分的測定
- QC演示:提高檢查井周邊密實度
- 年度應急演練計劃表
- 英語板書設(shè)計(課件)
- 智能中臺數(shù)據(jù)底座解決方案
- 《財政與金融》課程教學大綱
- 《國際稅收》教案
評論
0/150
提交評論