當(dāng)前位置: 首頁(yè) > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 溫度傳感器
發(fā)布日期:2022-10-09 點(diǎn)擊率:78
一、概述
DS18B20數(shù)字溫度傳感器提供9bit到12bit的攝氏溫度測(cè)量精度和一個(gè)用戶可編程的非易失性且具有過(guò)溫和低溫觸發(fā)報(bào)警的報(bào)警功能。DS18B20采用的1-Wire即單總線通信方式,即僅采用一個(gè)數(shù)據(jù)線與微控制器進(jìn)行通信。該傳感器的溫度監(jiān)測(cè)范圍為-55℃至+125℃,并且在溫度超過(guò)-10℃至85℃之外時(shí)還具有+-0.5℃的精度。此外,DS18B20可以直接由數(shù)據(jù)線供電而不需要外部電源供電。(本篇文章重在以簡(jiǎn)單例子講清楚該型傳感器最難的部分即工作時(shí)序,同時(shí)向大家分享例程及自己遇到的編程中的“坑”,幫助大家少走彎路盡快上手該型傳感器,而不追求功能上的盡善盡美,因此本文仿真只能實(shí)現(xiàn)正整數(shù)溫度值的顯示,對(duì)于小數(shù)則進(jìn)行四舍五入后再顯示)
二、重要特性
獨(dú)特的1-wire總線接口僅需要一個(gè)管腳來(lái)通信每個(gè)設(shè)備的內(nèi)部ROM上都燒寫(xiě)了一個(gè)獨(dú)一無(wú)二的64位序列號(hào)多路采集能力使得分布式溫度采集應(yīng)用更加簡(jiǎn)單無(wú)需外圍元件能夠采用數(shù)據(jù)線供電;供電范圍為3.0V至5.5V溫度可測(cè)量范圍為-55℃至+125℃(-67℉至+257℉)溫度超過(guò)-10℃至85℃之外時(shí)還具有+-0.5℃的精度內(nèi)部溫度采集精度可由用戶自定義為9bit至12bit(上電默認(rèn)12bit)溫度轉(zhuǎn)換時(shí)間在12bit時(shí)達(dá)到最大值750ms用戶自定義非易失性的報(bào)警設(shè)置
三、工作指令
溫度轉(zhuǎn)換指令:0x44(即44H),啟動(dòng)Ds18b20啟動(dòng)轉(zhuǎn)換溫度讀暫存器指令:0xBE(即BEH),讀取暫存器中的九字節(jié)數(shù)據(jù)寫(xiě)暫存器置零:0x4E(即4EH),把數(shù)據(jù)寫(xiě)入暫存器的TH、TL賦值暫存器:0x48(即48H),把暫存器中的TH、TL寫(xiě)入EEPROM中讀電源供電方式:0xB4(即B4H):?jiǎn)?dòng)Ds18b20,發(fā)送電源供電方式重調(diào)EEPROM:0xB8(即B8H):把EEPROM中的TH、TL讀至?xí)捍嫫?br/>四·、通過(guò)單總線訪問(wèn)DS18B20的順序
初始化ROM操作指令存儲(chǔ)器操作命令執(zhí)行/數(shù)據(jù)
五、工作時(shí)序
(一)初始化(復(fù)位操作)
在初始化序列期間,總線上的主設(shè)備通過(guò)拉低1-wire總線超過(guò)480us來(lái)發(fā)送(TX)復(fù)位脈沖。之后主設(shè)備釋放總線而進(jìn)入接收模式(RX)。當(dāng)總線釋放后,5KΩ左右的上拉電阻將1-wire總線拉至高電平。當(dāng)DS18B20檢測(cè)到該上升沿后,其等待15us至60us后通過(guò)1-wire總線拉低60us至240us來(lái)是實(shí)現(xiàn)發(fā)送一個(gè)存在脈沖。
圖5.1? “復(fù)位”操作時(shí)序圖
根據(jù)上述描述及時(shí)序圖,可以寫(xiě)出“復(fù)位”操作的子函數(shù):
(二)控制器的“寫(xiě)”操作(先寫(xiě)低位后寫(xiě)高位)
“寫(xiě)”時(shí)段有兩種情況:寫(xiě)“1”時(shí)段和寫(xiě)“0”時(shí)段。控制器通過(guò)寫(xiě)1時(shí)段來(lái)向DS18B20中寫(xiě)入邏輯1以及通過(guò)寫(xiě)0時(shí)段來(lái)向DS18B20中寫(xiě)入邏輯0。每個(gè)寫(xiě)時(shí)段最小必須有60us的持續(xù)時(shí)間且堵路的寫(xiě)時(shí)段之間至少要有1us的恢復(fù)時(shí)間。兩個(gè)寫(xiě)時(shí)段都是由控制器通過(guò)將1-wire中先拉低來(lái)進(jìn)行初始化(詳見(jiàn)圖5.2)。
為了形成寫(xiě)1時(shí)段,在將1-wire總線拉低后,主設(shè)備必須在15us之內(nèi)釋放總線。當(dāng)總線釋放后,5KΩ的上拉電阻將總線拉高;為了形成寫(xiě)0時(shí)段,在將1-wire總線拉低后,在整個(gè)時(shí)段期間控制器必須一直拉低總線(至少60us)。
在控制器初始化寫(xiě)時(shí)段后,DS18B20將會(huì)在15us至60us的時(shí)間窗口對(duì)1-wire總線進(jìn)行采樣。如果總線在采樣窗口期間是高電平,則邏輯1被寫(xiě)入DS18B20;若總線是低電平,則邏輯0被寫(xiě)入DS18B20。
圖5.2 “寫(xiě)”操作時(shí)序圖
根據(jù)上述描述及時(shí)序圖,可以寫(xiě)出“寫(xiě)”操作的子函數(shù):
(三)控制器的“讀”操作(先讀低位后讀高位)
僅在讀時(shí)段期間DS18B20才能向主設(shè)備傳動(dòng)數(shù)據(jù)。因此,主設(shè)備在執(zhí)行完讀暫存寄存器[BEh]或讀取供電模式[B4h]后,必須及時(shí)的生成讀時(shí)段,這樣DS18B20才能提供所需的數(shù)據(jù)。此外,主設(shè)備可以在執(zhí)行完溫度轉(zhuǎn)換[44h]或拷貝EEPROM[B8h]命令后生成讀時(shí)段,以便獲得在“DS18B20功能命令”章節(jié)中提到的操作信息。
每個(gè)讀時(shí)段最小必須有60us的持續(xù)時(shí)間且獨(dú)立的寫(xiě)時(shí)段之間至少間隔1us。讀時(shí)段通過(guò)控制器將總線拉低超過(guò)1us再釋放總線來(lái)實(shí)現(xiàn)初始化(詳見(jiàn)圖5.3)。當(dāng)控制器初始化完讀時(shí)段后,DS18B20將會(huì)向總線發(fā)送0或1。DS18B20將通過(guò)拉高總線發(fā)送邏輯1,拉低總線發(fā)送邏輯0.發(fā)送完邏輯0后,DS18B20將會(huì)釋放總線,在通過(guò)上拉電阻將該總線拉至高電平的閑置狀態(tài)。從DS18B20中輸出的數(shù)據(jù)在初始化讀時(shí)序后僅有15us的有效時(shí)間。因此。控制器再開(kāi)始改讀時(shí)段后的15us之內(nèi)必須釋放總線,并且對(duì)總線進(jìn)行采樣。
圖5.3 “讀”操作時(shí)序圖
根據(jù)上述描述及時(shí)序圖,可以寫(xiě)出“讀”操作的子函數(shù)
六、注意事項(xiàng)(我踩過(guò)的坑)
1. 關(guān)于延時(shí)問(wèn)題
DS18B20最大的優(yōu)勢(shì)之一就是單總線通信,我們通過(guò)一根數(shù)據(jù)線就可以完成諸多操作,但作為代價(jià)的是,DS18B20的工作時(shí)序十分復(fù)雜,因此對(duì)定時(shí)精度要求極高。平時(shí)大家操作定時(shí)精度要求不高的傳感器可能會(huì)養(yǎng)成一個(gè)習(xí)慣,比如我們已經(jīng)有了一個(gè)1ms且0誤差的延時(shí)函數(shù),當(dāng)我們遇到一個(gè)20ms的延時(shí)需求時(shí),可能會(huì)通過(guò)for/while循環(huán)將延時(shí)為1ms的延時(shí)函數(shù)執(zhí)行20次。實(shí)際上,這樣的方式所達(dá)到的延時(shí)時(shí)間的遠(yuǎn)大于20ms的,但對(duì)于定時(shí)精度要求不高的傳感器,毫秒級(jí)的誤差不會(huì)帶來(lái)影響,但對(duì)于該傳感器則不可。所以,在這款傳感器的操作中,即使已經(jīng)有一個(gè)10us的延時(shí)函數(shù)而需要一個(gè)20us的延時(shí)時(shí),也要重新寫(xiě)一個(gè)20us的延時(shí)函數(shù),不可將10us的延時(shí)函數(shù)循環(huán)執(zhí)行兩次。
2. 關(guān)于總時(shí)序問(wèn)題
該傳感器中的所有操作都要遵循“初始化-ROM命令-DS18B20功能命令”的總時(shí)序。比如,測(cè)量溫度的操作要先后經(jīng)過(guò)“初始化-跳過(guò)ROM命令-轉(zhuǎn)換溫度命令”與“初始化-跳過(guò)ROM命令-讀取溫度命令”這兩大步。常犯的錯(cuò)誤為“初始化-跳過(guò)ROM命令-轉(zhuǎn)換溫度命令-讀取溫度命令”,也就是說(shuō)認(rèn)為初始化與ROM命令在操作傳感器的最初執(zhí)行一次即可,這種想法是錯(cuò)誤的。
3. 關(guān)于編程細(xì)節(jié)
在自己編程的過(guò)程中,遭遇了一個(gè)細(xì)節(jié)性的bug,即將命令值com與掩碼mask相與是否為0作為進(jìn)入if語(yǔ)句內(nèi)部的判斷條件的過(guò)程中,判斷條件是這么寫(xiě)的if(com&mask==0),而實(shí)際應(yīng)該寫(xiě)為if((com&mask)==0),即com&mask需要用括號(hào)括起來(lái)作為一個(gè)整體,否則會(huì)出錯(cuò)。
七、完整例程(例程均為自己編寫(xiě)且驗(yàn)證成功)
八、Proteus仿真圖
圖8.1 仿真圖
?
?
左肩理想右肩擔(dān)當(dāng),君子不怨永遠(yuǎn)不會(huì)停下腳步!
?
?
?
?
?
?
?
?
?
?
里面有ds18b20??梢栽O(shè)置溫度值
搜transducers,或者熱敏電阻(可調(diào)電阻),數(shù)字的話18B20
1、氧傳感器:當(dāng)氧傳感器故障時(shí),ECU無(wú)法獲取這些信息,就不知道噴射的汽油量是否正確,而不合適的油氣空燃比會(huì)導(dǎo)致發(fā)動(dòng)機(jī)功率降低,增加排放污染;
2、輪速傳感器:它主要是收集汽車的轉(zhuǎn)速來(lái)判斷汽車有沒(méi)有打滑的征兆,所以,就有一一個(gè)專門收集汽車輪速的傳感器來(lái)完成這項(xiàng)工作,一般安裝在每個(gè)車輪的輪轂上,而一旦傳感器損壞,ABS會(huì)失效;
3、水溫傳感器:當(dāng)水溫傳感器故障后,往往冷車啟動(dòng)時(shí)顯示的還是熱車時(shí)的溫度信號(hào),ECU得不到正確的信號(hào),只能供給發(fā)動(dòng)機(jī)較稀薄的混合氣,所以發(fā)動(dòng)機(jī)冷車不易啟動(dòng),且還會(huì)伴隨怠速運(yùn)轉(zhuǎn)不穩(wěn)定,加速動(dòng)力不足的問(wèn)題;
4、電子油門踏板位置傳感器:當(dāng)傳感器失效后,ECU無(wú)法測(cè)得油門位置信號(hào),無(wú)法獲得油門門踏板的正確位置,所以會(huì)出現(xiàn)發(fā)動(dòng)機(jī)加速無(wú)力的現(xiàn)象,甚至出現(xiàn)發(fā)動(dòng)機(jī)不能加速的情況;
5、進(jìn)氣壓力傳感器:進(jìn)氣壓力傳感器顧名思義就是隨著發(fā)動(dòng)機(jī)不同的轉(zhuǎn)速負(fù)荷,感應(yīng)一系列的電阻和壓力變化,轉(zhuǎn)換成電壓信號(hào),供ECU修正噴油量和點(diǎn)火正時(shí)角度。一般安裝在節(jié)氣門邊上,假如故障了會(huì)引起點(diǎn)火困難、怠速不穩(wěn)、加速無(wú)力等問(wèn)題。
文章參考資料
(基于DS18B20溫度傳感器溫控系統(tǒng)的Proteus仿真)
(LCD1602液晶顯示完全資料)
(單片機(jī)與液晶顯示器的接口)
一、實(shí)驗(yàn)?zāi)康?br/>1.了解溫度傳感器DS18B20原理
2.了解液晶顯示器的工作原理
3.學(xué)會(huì)DS18B20溫度傳感器數(shù)碼管顯示
4.學(xué)會(huì)DS18B20溫度傳感器液晶顯示.
二、實(shí)驗(yàn)原理
DS18B20 傳感器具有以下一些特性:
(1) 測(cè)溫范圍-55℃至+125℃,在-10℃至+85℃時(shí)的精度為正負(fù) 0.5℃; (2) 適應(yīng)電壓的范圍在 3.0 至 5.5V;
(3) 單線接口,只用一條口線就可以與微處理器的雙向通信;
(4) 支持多點(diǎn)組網(wǎng),多個(gè) DS18B20 并接在一根口線上就可實(shí)現(xiàn)多點(diǎn)測(cè)溫;
(5) 測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),通過(guò)單線串行傳輸給微處理器;
(6) 具有負(fù)壓特性,電源極性接反芯片不會(huì)燒壞,只是不能正常工作;
(7) 可編程分辨率為 9 至 12 位,對(duì)應(yīng)的分辨溫度分別是 0.5℃,0.25℃,0.125℃,
0.0625℃,能夠?qū)崿F(xiàn)高精度測(cè)溫。
(8) 在 9 位分辨率時(shí)可在 93.75ms 內(nèi)把溫度值轉(zhuǎn)換為數(shù)字;在 12 位分辨率時(shí)可在
750us 內(nèi)把溫度值轉(zhuǎn)換為數(shù)字;
(9) 傳送數(shù)據(jù)時(shí)可傳送 CRC 校驗(yàn)碼,抗干擾糾錯(cuò)能力強(qiáng)
DQ 端外接一個(gè)上拉電阻,與處理器的任一端口連接
DS18B20控制命令.
33H——讀ROM(讀取溫度傳感器ROM中的編碼)
55H——匹配ROM(發(fā)出該指令后,再發(fā)64位ROM編碼,用于匹配相應(yīng)的DS18B20)
F0H——搜索ROM用于確定掛接在同一總線上DS18B20的數(shù)量(DS18B20支持多點(diǎn)組網(wǎng))
CCH——跳過(guò)ROM,忽略64位ROM地址,直接向DS18B20發(fā)溫度變換命令
ECH——告警搜索命令,執(zhí)行后只有溫度超過(guò)設(shè)定值的上下限才做出響應(yīng).
44H——溫度轉(zhuǎn)換,啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換
BEH——讀溫度暫存器,讀內(nèi)部RAM中9字節(jié)的溫度數(shù)據(jù)
4EH——寫(xiě)暫存器.
主機(jī)與單個(gè) DS18B20 連接時(shí),不需要讀取或者匹配 ROM,只要使用跳過(guò)指令 CCH,就可以進(jìn)行數(shù)據(jù)轉(zhuǎn)換和讀取操作。
工作時(shí)序圖
Step1:數(shù)據(jù)線置低電平
Step2:延時(shí) 800us 左右(時(shí)間范圍為 480us 至 960us)
Step3:數(shù)據(jù)線拉高電平
Step4:延時(shí) 40us 左右(時(shí)間范圍為 15us 至 60us)
逐位讀取數(shù)據(jù),然后把 8 位數(shù)據(jù)組成 1 個(gè)字節(jié)。編寫(xiě)程序時(shí)分為兩個(gè)部分,一個(gè)實(shí)現(xiàn)讀
取一位數(shù)據(jù),另一個(gè)實(shí)現(xiàn)讀取一個(gè)字節(jié)數(shù)據(jù)。
讀取數(shù)據(jù)步驟
Step1:數(shù)據(jù)線置低電平
Step2:延時(shí)5us左右(大于1us)
Step3:數(shù)據(jù)線置高電平
Step4:延時(shí)10us(這次延時(shí)和第一次延時(shí)之和接近15us左右)
Step5:讀取一位數(shù)據(jù)
Step6:延時(shí)60us左右(大于45us)
Step7:重復(fù)上面步驟,直到讀完一個(gè)字節(jié)
寫(xiě)入數(shù)據(jù)分為寫(xiě)數(shù)據(jù)位1和數(shù)據(jù)位0
寫(xiě)數(shù)據(jù)1步驟:
Step1:數(shù)據(jù)線置低電平
Step2:延時(shí)5us左右(大于1us左右)
Step3:數(shù)據(jù)線置高電平
Step4:延時(shí)70us左右(大于55us即可)
寫(xiě)數(shù)據(jù)0步驟:
Step1:數(shù)據(jù)線置低電平
Step2:延時(shí)70us左右(大于60us左右)
Step3:數(shù)據(jù)線置高電平
Step4:延時(shí)5us左右
我們已經(jīng)了解了溫度傳感器的工作方式,但如何從溫度傳感器讀取數(shù)據(jù)顯示到液晶上面來(lái)呢?這里雖然也可以用數(shù)碼管顯示,但相比數(shù)碼管,液晶似乎更好一點(diǎn),在此之前,我們必須先了解一下液晶的工作原理.
溫度寄存器由兩個(gè)字節(jié)組成,分為低8位和高8位。一共16位。
其中,第0位到第3位,存儲(chǔ)的是溫度值的小數(shù)部分。
第4位到第10位存儲(chǔ)的是溫度值的整數(shù)部分。
第11位到第15位為符號(hào)位。全0表示是正溫度,全1表示是負(fù)溫度。
表格中的數(shù)值,如果相應(yīng)的位為1,表示存在。如果相應(yīng)的位為0,表示不存在
液晶顯示
LM016L的基本構(gòu)造與引腳說(shuō)明:
VSS-接地.
VDD-電源正極
VEE—液晶對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度
RS—數(shù)據(jù)/命令選擇—寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器
RW—讀寫(xiě)信號(hào)選擇,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。
E—使能信號(hào);當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
D0~D7—8位雙向數(shù)據(jù)口;
關(guān)于RW,RS的操作時(shí)序
在軟件控制問(wèn)題中,需要注意幾個(gè)問(wèn)題—基本問(wèn)題:各時(shí)段的端口狀態(tài)(電平)
液晶顯示器的初始化—設(shè)置初始狀態(tài)—置顯示狀態(tài)(電源、控制、數(shù)據(jù)端口等電平)
控制口RS/RW的控制指令變化—檢測(cè)、延時(shí)、檢測(cè)—發(fā)送數(shù)據(jù)問(wèn)題(電平)
輸出數(shù)據(jù)的獲取與傳遞(讀取/寫(xiě)入電平)
在編寫(xiě) LCD1602 程序前,我們必須了解其手冊(cè)上一些非常重要的
信息,如果這些信息不能理解透徹,編程可能會(huì)遇到或多或少的
問(wèn)題.
指令集:
LCD_1602 初始化指令小結(jié):
0x38 設(shè)置 162 顯示,57 點(diǎn)陣,8 位數(shù)據(jù)接口
0x01 清屏
0x0F 開(kāi)顯示,顯示光標(biāo),光標(biāo)閃爍
0x08 只開(kāi)顯示
0x0e 開(kāi)顯示,顯示光標(biāo),光標(biāo)不閃爍
0x0c 開(kāi)顯示,不顯示光標(biāo)
0x06 地址加 1,當(dāng)寫(xiě)入數(shù)據(jù)的時(shí)候光標(biāo)右移
0x02 地址計(jì)數(shù)器 AC=0;(此時(shí)地址為 0x80) 光標(biāo)歸原點(diǎn),但
是 DDRAM 中斷內(nèi)容不變
數(shù)據(jù)位如下
0x80是第一行的第一個(gè)字符,0x80+1是第一行第二個(gè),0x80+0x40是第二行第一個(gè)地址
寫(xiě)入顯示地址時(shí),要求最高位D7恒為高電平,即1000 0000 + 0100 0000 = 0x80 + 0x40
三、實(shí)驗(yàn)器件
1.DS18B20溫度傳感器
2.共陰數(shù)碼管7SEG
3.LM016L液晶顯示
四、實(shí)驗(yàn)實(shí)現(xiàn)
數(shù)碼管實(shí)現(xiàn)
LM016L實(shí)現(xiàn)
為簡(jiǎn)化代碼,下次改進(jìn)會(huì)將源碼上傳至Github.
功能實(shí)現(xiàn):
(一)LCD顯示
1.開(kāi)始動(dòng)畫(huà)
一個(gè)圖形向下移動(dòng)直至消失。
2.歡迎界面
打印出“歡迎使用溫度傳感器制作:柳玉誠(chéng)”字樣。
3.使用界面
(1)當(dāng)前溫度、溫度上限、溫度下限顯示。
(2)超上限報(bào)警等級(jí)、超下限報(bào)警等級(jí)顯示。
(3)風(fēng)扇檔位顯示。
(4)傳感器工作時(shí)間顯示。
(二)設(shè)置上下限
矩陣鍵盤0-9設(shè)置3位上下限,默認(rèn)上限100℃,下限25℃。
(三)超限報(bào)警
溫度超過(guò)上下限時(shí)LED燈閃爍,閃爍頻率通過(guò)按鈕調(diào)節(jié),共分6檔,默認(rèn)上限5檔,下限1檔。
(四)溫度控制
1.超下限時(shí):電阻絲加熱,恢復(fù)正常溫度時(shí)電阻絲迅速恢復(fù)常溫。
2.超上限時(shí):
通過(guò)調(diào)節(jié)高低電平占空比,使風(fēng)扇吹風(fēng)散熱,分為自動(dòng)檔和手動(dòng)檔。
自動(dòng)檔:
(1)超上限1-10℃時(shí):風(fēng)扇吹4檔自然風(fēng)(風(fēng)速先漸快后漸慢,如此往復(fù))。
(2)超上限11-20℃時(shí):風(fēng)扇吹1檔微風(fēng)。
(3)超上限21-35℃時(shí):風(fēng)扇吹2檔中風(fēng)。
(4)超上限35℃以上時(shí):風(fēng)扇吹3檔勁風(fēng)。
手動(dòng)檔:
不受超上限數(shù)值的影響,手動(dòng)調(diào)節(jié)1-4檔風(fēng)速。
下一篇: PLC、DCS、FCS三大控
上一篇: 電氣控制線路圖控制原