溫度感測器在微控器環境下的連接設計
字体放大 字体缩小 字体恢复 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)
溫度感測器在微控器環境下的連接設計
 
 

要將DS18B20、DS18S20與DS1822等單線式(1-Wire)元件與微控器連接有幾種方法,包括簡單的軟體解決方案,到採用DS2480等串列介面晶片,或者是將VHDL 1-Wire主控端控制器整合到客製化的ASIC上。

這篇文章將介紹給讀者最簡單的軟體解決方案,以達成微控器與任意個與DS18B20, DS18S20與DS1822詳細時序與運作條件的目的,匯流排的電源透過串接到3V至5.5V的4.8kOHM提升電阻來提供,由於每個元件都擁有64-bit的ROM識別碼,因此理論上可以在匯流排上連接無限個1-Wire元件。

硬體組態

1顯示了採用多個1-Wire溫度感測器情況下硬體組態的簡化示意圖,其中採用單線式的匯流排可以提供元件所需的通訊功能與電源,匯流排的電源透過串接到3V至5.5V的4.8kOHM提升電阻來提供,由於每個元件都擁有64-bit的ROM識別碼,因此理論上可以在匯流排上連接無限個1-Wire元件。

介面的時序

DS18x20/DS1822通訊主要透過稱為“時間槽(time slots)”的方式以便讓資料能夠在1-Wire匯流排上傳輸來達成,每個通訊週期都以一個由微控器發出的重置脈波(reset pulse)開始,然後接著一個由DS18x20/DS1822等所發出的回應(presence pulse)脈波,請見圖2。

寫入動作會由匯流排主控端將1-Wire匯流排由邏輯高電位拉到邏輯低電位來啟動,所有的寫入時間槽長度必須介於60μs到120μs之間,同時在每個週期間擁有最少1μs的回復時間,寫入“0”與寫入“1”的時間槽形式可參考圖3,在寫入“0”的動作時,主控端微控器會將匯流排拉到低電位達一個時間槽的時間長度,但是在寫入“1”的動作時,微控器會先將匯流排拉到低電位,然後在時間槽啟始後的15μs內放開。

另一方面,在讀取資料時,微控器會先將匯流排拉到低電位1μs然後放開,以便DS18x20/DS1822能夠取得匯流排控制權並提供有效的資料,同樣地所有的讀取時間槽長度也必須介於60μs到120μs之間,每個週期間也必須要有1μs的回復時間,請見圖3。

軟體控制

為了要能夠精確地控制1-Wire介面的特殊時序需求,我們必須先建立幾個重要的關鍵函式(function),首先是對所有讀寫控制都相當重要的“時間延遲”功能,這個函式完全由微控器的速度控制,在這篇文章中我們採用了與8051相容的DS5000微控器,執行速度為11.059MHz。圖4的程式範例為建立時間延遲的C語言函式。.

時間延遲範例

由於每個通訊週期必須由微控器所發出的重置信號來啟動,因此重置功能為另一個最重要的函式。重置時間長度為480us,透過設定一個3單位再加上25單位的延遲,重置脈波長度將能夠符合要求,請參考以下的範例。在重置信號之後,微控器必須放開匯流排以便DS18x20/DS1822可以透過將匯流排拉到低電位來加以回應,請注意,如果匯流排上接有多個溫度感測器,那麼它們將會同時發出回應脈波。

重置範例

6~圖9的讀取與寫入函式碼提供了所有資料位元與資料位元組讀寫動作的四個基本結構範例。

元件搜尋演算法

為了能夠將1-Wire網路概念做最佳利用,微控器必須要能夠與連接到網路上的任意數目元件溝通,要達成這項功能,微控器必須透過圖4中所描述的元件搜尋(Search ROM)演算法來取得匯流排上每個元件的獨特64-bit ROM辨識碼。圖10後的元件搜尋程式碼解釋了匯流排上接有4顆從屬端元件的情況,並提供了元件搜尋的範例,當所有的ROM辨識碼都被找出以後,我們就可以使用Match ROM指令來與匯流排上的任意特定元件溝通。

ROM辨識碼搜尋範例

在進行ROM辨識碼搜尋動作時,匯流排主控端必須重覆執行一個簡單的三步驟常式:

.由從屬端元件讀取一個ROM辨識碼位元。

.讀取該位元的互補位元。

.寫入該位元的選擇值。

匯流排主控端必須重覆這個三步驟常式64次,也就是每個ROM辨識碼就得執行一次,在完成一次完整的辨識碼搜尋動作後,匯流排主控端將能夠取得匯流排上一個從屬元件的辨識碼,其它的元件以及所配備的ROM辨識碼可以透過重覆執行以上步驟來取得。

ROM辨識碼搜尋的流程可以由以下在單一1-Wire匯流排上連接有4個不同元件的範例來說明,其中4個元件的ROM辨識碼假設分別為:

ROM1    00110101...

ROM2    10101010...

ROM3    11110101...

ROM4    00010001...

搜尋的步驟如下:

1. 匯流排主控端透過產生重置脈波來啟動起始動作,接著從屬元件同時發出回應脈波加以回應。

2. 接著匯流排主控端在1-Wire(tm)匯流排上發出Search ROM元件搜尋指令。

3. 每個連接在匯流排上的元件會透過將各自ROM辨識碼的第一個位元放到1-Wire匯流排上來加以回應,接著主控端讀取匯流排上的值,在這個範例中,ROM1與ROM4會在1-Wire匯流排上放入0,也就是將它拉到低電位,ROM2與ROM3則會在1-Wire匯流排上放上1,也就是允許匯流排維持在高電位,而結果則為匯流排上所有元件輸出的邏輯AND運算結果,因此主控端將會讀到0,接著1-Wire匯流排上的所有元件會透過將各自ROM辨識碼第一個位元的互補位元放置到1-Wire匯流排上來加以回應,ROM1與ROM4將會發出1到匯流排上,也就是允許它維持在高電位,而ROM2與ROM3則會發出0將匯流排拉到低電位,因此匯流排主控端在讀取匯流排時將會再次讀到0。

依從屬元件的ROM辨識碼不同,匯流排主控端從兩次讀取動作讀到的資料將會有四種不同的可能組合,以下將對各種組合逐一說明:

00 表示連接到匯流排上的元件在目前的ROM辨識碼位元讀取時有衝突位元,也就是存在不同的位元狀態。

01 所有連接到匯流排上的元件在這個位元皆為0。

10 有連接到匯流排上的元件在這個位元皆為1。

11 表示1-Wire匯流排上沒有任何元件。

在這個例子中,匯流排主控端在兩次讀取時都讀到0,也就代表了在這個1-Wire匯流排上擁有幾個在ROM辨識碼第一位元分別為0與1的從屬元件。

4. 為了回應以上的資料,匯流排主控端會在匯流排上寫入一個0信號,這個動作將會把ROM2與ROM3排除在接下來的搜尋動作外,使得好像只有ROM1與ROM4連接到1-Wire(tm)匯流排上。

5. 接著匯流排主控端會執行另外兩個讀取動作並得到依續為0與1的讀取結果,這表示所有連接在匯流排上的元件第二個ROM辨識碼位元為0。

6. 接下來匯流排主控端寫入0以便維持ROM1與ROM4的匯流排連接。

7. 匯流排主控端繼續執行兩個讀取動作並得到兩個0,告訴主控端表示1-Wire匯流排上有元件的第三個ROM辨識碼為0,也有元件為1。

8. 匯流排主控端接著寫入0到匯流排上,這一次排除ROM1使得ROM4成為唯一還“連線”在匯流排上的元件。

9. 最後匯流排主控端由ROM4讀取剩下的ROM辨識碼位元並視情況存取ROM4元件,此時我們已經完成了第一個ROM辨識碼搜尋步驟,匯流排主控端已經透過取得ROM4的ROM辨識碼辨識出1-Wire匯流排上的一個從屬元件,也就是ROM4。

10.這時匯流排主控端可以透過重覆步驟1到7來進行新的ROM辨識碼搜尋動作。

11.接著匯流排主控端將1寫到匯流排上而不是步驟8 的0,這個動作將去除ROM4,使ROM1成為唯一“連線”的元件。

12.接下來匯流排主控端可以由ROM1讀取剩餘的辨識碼位元並視情況與其溝通,這時我們也完成了第二個ROM辨識碼的搜尋動作,主控端已經辨識出匯流排上另一個從屬元件ROM1。

13.匯流排主控端透過重覆1到3的步驟開始新的ROM辨識碼搜尋動作。

14.匯流排主控端寫入1到匯流排上,而不是步驟4的0 ,這個動作會將ROM1與ROM4排除在接下來的搜尋動作外,讓ROM2與ROM3“連線”到匯流排上。

15.匯流排主控端執行兩個讀取動作並取得兩個0。

16.匯流排主控端在匯流排上寫入0來排除ROM3,讓ROM2成為匯流排上唯一“連線”的元件。

17.匯流排主控端讀取ROM2上其它的ROM辨識位元並視情況與ROM2元件溝通,到這裡我們完成了第三個ROM辨識碼的搜尋動作,同時主控端也已經辨識出從屬元件ROM2。

18.接著匯流排主控端透過重覆步驟13到15進行第四個也是最後一個ROM辨識碼的搜尋動作。

19.匯流排主控端在匯流排上寫入1而非步驟16的0來排除ROM2讓ROM3成為唯一“連線”的元件。

20.最後匯流排主控端由ROM3讀取剩餘的ROM辨識碼位元並完成第四個ROM辨識碼搜尋動作,也就是辨識出ROM3元件,到這裡主控端已經辨識出匯流排上所有連接的從屬元件,也就是說,從此匯流排主控端就可以使用個別的ROM辨識碼來進行元件的單獨存取控制。

注意:匯流排主控端透過每個ROM辨識碼搜尋過程取得一個1-Wire元件的獨特ROM辨識碼,因此,取得單一ROM辨識碼所耗費的時間為:

960μs + (8 + 3 x 64) 61μs = 13.16 m

因此匯流排主控端在一秒鐘內大約可以辨識出75個不同的1-Wire從屬元件。

搜尋ROM辨識碼程式範例

在以下的程式碼中,「搜尋元件」函式首先發出一個1-Wire重置信號來找出是否有任何元件連接,如果有,則喚醒它們。接著呼叫「First」函式來取得位元間的差異並回到「Next」,用來辨識出連線的單一獨特元件。

其中「Next」函式功能較為複雜,負責執行搜尋匯流排上每個元件獨特64-bit ROM辨識碼的大部份工作。圖14則為「Next」函式:

執行循環冗餘檢查

循環冗餘檢查(Cyclic Redundancy Check, CRC)可以透過底下的函式來達成,同時應該包含在執行搜尋ROM函式中進行。

讀取元件的溫度資訊

如果在匯流排上只有單一元件,那麼我們可以直接使用下列的溫度讀取(Read Temperature)函式,但如果在匯流排上有多個元件連接,為了避免資料衝突,必須先使用「Match ROM」函式來選擇特定的元件。

17的程式範例特別針對DS18x20溫度感測器所設計,要將這個程式碼應用到DS18B20或DS1822上,必須依照溫度暫存器格式的不同稍加修改,請參考各元件的規格書來取得溫度暫存器相關資訊。

讀取SCRATCH PAD記憶體內容

Scratch Pad記憶體提供給使用者所有的元件相關資料,包括溫度、TH與TL可程式溫度量測設定,以及使用在小數點溫度測量上的Count Remain與Count Per C資料,其中Scratch Pad記憶體內還包含了CRC位元組。

Read ROM」指令可以用來在匯流排上只有單一元件時讀取64-bit ROM辨識碼,如果有多個元件時則必須使用「Search ROM」函式。

Match ROM”函式必須提供選擇匯流排上特定元件所需的64-bit ROM辨識碼。

日期:2005年06月24日   来源: 
相关文章:
·用超低功耗MSP430单片机设计数据采集系统 2005-06-27
·Atmega16在开关磁阻电机调速系统中的应用 2005-06-28
·火灾探测器受干扰的原因及改进方法 2005-07-02
·特殊构件的焊接技术 2005-10-18
·触摸屏的工作原理及典型应用 2005-11-25
·高质量C++/C编程指南---类的构造函数,析构函数,赋值 2005-12-13
·基于ATmega8的新型电动自行车调速控制系统设计 2005-12-20
·电子产品高温老化的原理以及一间智能温控老化室的应用 2006-01-05
·新近成功开发无霍尔传感器无刷电机控制器 2006-01-20
·归纳一下最近比较流行的电动自行车技术 2006-01-23
·电子工作台 --- workbench 电子仿真软件 2006-05-23
·液晶字模工具 ------ HZDotReader V3 2006-05-23
·51系列单片机仿真软件----伟福e6000w  2006-05-23
·无传感器无刷电机驱动控制器系统的优点 2006-06-10
·PIC单片机C语言编译器 --PICC 8.05 完整破解版 2006-07-09