發布日期:2022-05-11 點擊率:45
摘 要:在分布式測溫系統中應用了大量的新型傳感器DS18B20,DS18B20是單總線數字溫度傳感器網" href="http://m.lqeedmx.cn/jscontent.asp?id=56&categoryid=67" target="_blank">溫度傳感器其硬件接線簡單,但時序非常復雜。正確使用單總線數字溫度傳感器,分析其時序關系,基于時序編制正確程序具有及其重要意義。文中結合時序圖對初始化時序、寫時序和讀時序進行了詳細闡述,并給出了實現各種時序的軟件程序。應用初始化時序和讀寫時序實現了溫度采集,并以傳感器64位序列號讀取程序的設計說明了時序的綜合應用。說明了溫度采集程序的設計思路。并給出了分布式測溫系統中的溫度顯示。文中基于時序進行溫度的正確讀取與顯示已經應用于分布式測溫系統中。
關鍵詞:寫時序;讀時序;溫度傳感器;溫度采集
Abstract: A lot of new temperature sensors DS18B20 are used in distributed temperature measurement system. DS18B20 is a single bus digital temperature sensor. The hardware connection of temperature sensor is simple and time slots are very complex. Using the single bus temperature correctly, analyzing time slots and designing the program based on correct time slots have an important meaning. Initialization timing, writing time slots and reading slots are expounded in this paper in detail. Software program of realizing each time slots is provided. The temperature sampling is realized by use of initialization timing, writing time slots and reading slots. The design of 64-bit serial number reading program illustrates synthetical application of time slots. The design method of temperature sampling is illustrated. The temperature display is given out for distributed temperature measurement system. The accurate temperature reading and display based on time slots have been applied in distributed temperature measurement system.
Key words: Writing Time Slots; Reading Time Slots; Temperature Sensor; Temperature Sampling
1.引言
在分布式測溫系統中應用了大量的新型傳感器DS18B20,DS18B20是單總線數字溫度傳感器其硬件接線簡單,但時序非常復雜。要實現溫度的正確讀取,既要有對DS18B20的ROM操作命令,又有一些功能命令。這些命令的執行,既有一定順序,又有特定含義。都需要基于數字溫度傳感器初始化時序、寫時序和讀時序,按照嚴格的時序配合才能完成溫度正確采集與讀取。因此要想正確使用單總線數字溫度傳感器,必須分析其時序關系,并且基于時序編制正確程序。單總線數字溫度傳感器時序分析與應用研究具有及其重要意義。
2.數字溫度傳感器時序
DS18B20與單片機只通過一條數據線連接,所以其數據的傳輸方式為串行方式。為了正確讀取溫度值,必須嚴格按照時序配合關系,進行程序編制。 DS18B20有嚴格的通信協議來保證數據傳輸的正確性和完整性。通信協議規定了總線上的多種信號的時序。如:復位脈沖、響應脈沖、寫0、寫1、讀0和讀 1等信號的時序。DS18B20是在嚴格的時序控制下進行正常操作的。換句話講,就是用較為復雜的軟件來換取簡單的硬件接口。因此要正確使用 DS18B20,就必須了解其初始化時序、寫時序和讀時序。
2.1 數字溫度傳感器初始化時序
初始化時序有時也稱復位時序,它是數據線上所有傳輸過程的開始。整個初始化過程由主設備發出的復位脈沖和DS18B20的響應脈沖組成。在主設備初始化的過程中,主設備通過拉低數據線至少480μS ,DS18B20即認為是接收到一個初始化脈沖,接著主設備釋放數據線,在數據線上上拉電阻的作用下,數據線電平被拉高,并且主設備進入接收模式。在DS18B20檢測到上升沿后,延時15~60μS ,接著通過拉低總線60~240μS以產生應答脈沖。初始化時序如圖2所示。圖1是圖2、圖3和圖4的線型示意圖。
圖1 線型示意圖
圖2 初始化時序
在分布式測溫系統中CPU采用AT89S52,溫度讀取的初始化程序如下所示:
DAT BIT P1.0
INI10: SETB DAT
MOV R2, #185
INI11: CLR DAT
DJNZ R2, INI11 ; 復位脈沖時間600us
SETB DAT ; 釋放數據線
MOV R2, #28
INI12: DJNZ R2, INI12 ; 等待60us
CLR C
ORL C, DAT ; 有無應答低電平
JC INI10 ; 若無應答,初始化失敗
MOV R6, #40
INI13: ORL C, DAT
JC INI14 ; 數據線變高。初始化成功
DJNZ R6, INI13 ; 低電平最多240us
SJMP INI10 ; 低電平持續大于240us,失敗
INI14: MOV R2, #222
INI15: DJNZ R2, INI15 ; 應答信號至少要持續480us
RET
2.2 數字溫度傳感器寫時序
寫時序包括寫“0”時序和寫“1”時序。寫“1”時序用于主設備向DS18B20寫入1,寫“0”時序用于主設備向DS18B20寫入0。無論是哪種寫時序都至少需要60μS ,且在兩次獨立的寫時序之間至少需要1μS的恢復時間。兩種寫時序均起始于主設備拉低數據線電平。對于寫“1”時序,主設備在拉低數據線之后,緊接著必須在15μS之內釋放數據線,由上拉電阻將數據線拉至高電平;而對于寫“0”時序,在主設備拉低數據線后,只需在整個時序內保持低電平即可至少60μS。在寫時序開始后的15~60μS期間內,DS18B20讀取數據線電平狀態。如果此期間數據線為高電平 ,則對器件寫入邏輯1,否則寫入邏輯0。寫時序如圖3所示。
圖3 數字溫度傳感器寫時序
寫一位程序如下所示。程序中DAT為I/O口P1.0。
WIR11: SETB DAT ; 拉高電平
MOV R4, #5
NOP
CLR DAT ; 高電平持續2us后拉低
WIR12: DJNZ R4, WIR12 ; 等待10微秒
MOV DAT, C ; 發送1位
MOV R4, #23
WIR13: DJNZ R4, WIR13 ; 保證寫時間大于60us
SETB DAT
RET
2.3 溫度傳感器讀時序
DS18B20只有在檢測到主設備啟動讀時序后才向主設備傳輸數據。所以一般在主設備發送了讀數據命令后,必須馬上產生讀時序,以便DS18B20能夠傳輸數據。所有的讀時序都至少需要60μS,且在兩次獨立的讀時序之間至少需要1μS的恢復時間。每個讀時序都由主設備發起,先使數據線為高電平,然后拉低數據線至少1μS,再釋放數據線。在主設備發出讀時序之后,DS18B20開始在數據線上發送數據0或1。若其發送1,則保持數據線為高電平。若發送 0,則DS18B20拉低數據線,在該時序結束后釋放數據線。DS18B20發出的數據在起始時序之后15μS內保證可靠有效。因而主設備在讀時序期間必須釋放數據線,并且要在時序開始后的15μS之內讀取數據線狀態。寫時序如圖4所示。
圖4 數字溫度傳感器讀時序
讀一位程序如下所示:
RE11: SETB DAT ; 使數據線為高電平
NOP
NOP
CLR DAT ; 高電平持續2us后拉低數據線
MOV R4, #4
NOP ; 持續低電平2us
SETB DAT ; 釋放數據線
RE12: DJNZ R4, RE12 ; 等待8us
MOV C, DAT ; 讀入一位
MOV R5, #28
RE13: DJNZ R5, RE13 ; 保證一個讀周期持續60us
SETB DAT ; 使數據線為高電平
RET
3.初始化以及讀寫時序應用
3.1 溫度采集程序設計
單總線數字溫度傳感器DS18B20要完成溫度的采集需要按順序完成如下幾個步驟:初始化、跳過ROM匹配、啟動轉換、等待轉換完成、初始化、匹配 ROM、讀便箋式存儲器、CRC校驗、溫度格式轉換、保存溫度值以及顯示等其他處理。按照此步驟,程序設計時首先就要按照初始化時序執行2.1所介紹的初始化程序INI10,其次要將跳過ROM匹配命令(代碼為CCH)寫入到DS18B20中,此時需根據2.2所介紹的數字溫度傳感器寫時序編寫對 DS18B20一個寫入字節程序WRITE,將跳過ROM匹配命令寫入DS18B20。為了完成溫度啟動轉換,需要將啟動轉換命令寫入DS18B20中。用延時750ms等待轉換完成。隨后再按照初始化時序執行本文中2.1所介紹的初始化程序INI10,用寫入一個字節程序將匹配ROM命令(代碼為 55H)寫入到DS18B20中。為了完成讀便箋式存儲器操作,需要先結合數字溫度傳感器寫時序將讀便箋式存儲器命令(代碼為BEH)寫入到 DS18B20中,再用溫度傳感器讀時序編寫的讀一個字節程序READ,連續讀取DS18B20便箋式存儲器中9個字節的內容。由此可見,要想實現溫度正確采集,需要結合上述所介紹的初始化時序、溫度傳感器寫時序和溫度傳感器讀時序,才可以將所需的命令寫入與讀出。完成溫度的正確讀取。
3.2 溫度傳感器序列號讀取程序設計
每個單總線數字溫度傳感器DS18B20出廠時都有唯一的一個64位序列號,在使用溫度傳感器之前,需事先將每個溫度傳感器逐一掛接在I/O口如 P1.0上,再讀取溫度傳感器的序列號。當I/O口上掛接一個溫度傳感器DS18B20時,可以用讀ROM命令完成64位序列號的讀取。程序設計思路是首先將讀ROM命令(代碼為33H)送入累加器A中,隨后調用寫入一個字節程序WRITE,然后調用讀64位序列號程序DXLH。在寫入一個字節程序 WRITE中,置循環次數為8,再調用寫入一位子程序,嚴格按照時序關系,執行傳感器寫時序,循環8次寫完一個字節。在讀64位序列號程序DXLH中,置內部RAM首地址為30H,置循環次數為8,調用讀一個字節程序READ,將讀取數據存放在內部RAM中。循環8次讀完8個字節即64位序列號。讀出的 64位序列號將存放到內部RAM 30H ~ 37H單元中。讀一個字節程序READ如下所示。
READ: MOV R6, #8 ; 循環次數為8
SETB DAT ; 讀出一位程序,執行傳感器讀時序
NOP
NOP
RD11: CLR DAT
MOV R4, #4
NOP ; 持續低電平2us
SETB DAT ; 釋放數據線
RD12: DJNZ R4, RD12 ; 等待8us
MOV C, DAT ; 讀入一位
RRC A ; 將讀入數據移入累加器A
MOV R5, #28
RD13: DJNZ R5, RD13 ; 保證一個讀周期持續60us
DJNZ R6, RD11 ; 循環8次讀一個字節
SETB DAT
RET
上述程序執行完畢,可將溫度傳感器的64位序列號存放在單片機內部RAM 30H ~ 37H單元中。
4.分布式測溫系統中溫度顯示
分布式測溫系統中,采用液晶顯示可以實現房間號的顯示,實際溫度的顯示,報警上限值的顯示以及報警發生時的時間。還可以循環顯示多個房間的實際溫度和上限值。如圖5所示。
圖5 分布式測溫系統中對應房間溫度以及報警上限顯示
5.結束語
正確讀取多個單總線數字溫度傳感器DS18B20的溫度在分布式測溫系統中是非常重要的。由于在程序設計時必須根據嚴格的時序關系,因此本文作者創新點是詳細闡述了初始化時序、讀寫時序等復雜邏輯關系,設計了正確的溫度序列號讀取程序和溫度讀寫程序并能夠進行液晶顯示。由于單總線數字溫度傳感器 DS18B20各個功能的實現是通過各種ROM命令與操作功能命令實現的,這些命令一環扣著一環,每個環都是一個時序的集合。在進行程序調試時,不能像調試其它程序一樣用單步執行來進行跟蹤,因此對錯誤查找和程序優化帶來了很大的難度。在遇到程序運行出錯時,只能夠根據錯誤現象來分析、推測、修改和再運行來解決,而不能直接定位。文中所介紹的單總線數字溫度傳感器DS18B20程序設計思路與方法,目前已較好地應用于分布式測溫系統中,并且滿足一定精度要求。
參考文獻
[1] 沙占友,智能化集成溫度傳感器原理與應用[M],機械工業出版社,2002
[2] 周月霞,孫傳友,DS18B20硬件連接及軟件編程 [J],傳感器世界,2001.12
[3] Dallas Semiconductor. DS18B20 1-Wire Digital Thermometer [Z]. Dallas Semiconductor Co, 2002
[4] 徐維濤,郝曉弘,OCXO恒溫槽溫度控制系統控制方法研究[J],微計算機信息,2006年第 3 期
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV