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