基於sparant6系列FPGA的小專案設計 4

2021-10-18 16:37:09 字數 2420 閱讀 5509

說明:

ds18b20是一款單匯流排數字溫度感測器,即它的供電和資料都是通過一根匯流排來進行互動,供電採用寄生電源方式;而對於資料它可以直接將溫度轉換成數碼訊號輸出,即不需要額外的adc模組,具有體積小、低功耗、抗干擾能力強、精度高等優點。ds18b20數字溫度感測器接線方便,封裝後可應用於各種場所測溫,如電纜溝測溫、機房測溫、農業大棚測溫、彈藥庫測溫等各種非極限溫度場所。適用於各種狹小空間裝置數字測溫和控制領域。

ds18b20的溫度轉換精度可以讓使用者通過指令方式進行配置,它提供了9bit-12bit的溫度轉換精度,該感測器的溫度檢測範圍為-55℃至+125℃,在範圍-10℃至+85℃之間具有±0.5℃的精度。每個ds18b20都有乙個獨一無二的64位序列號,所以可以在一根匯流排上連線多個ds18b20裝置。因此在乙個分布式的大環境裡用乙個微控制器控制多個ds18b20是非常簡單的。

根據上圖ds18b20結構可以看出,其內部主要分為64bit的rom和乙個快取記憶體器,其中64bit的rom內部儲存著每個ds18b20的唯一序列號,他是由廠家寫入不可修改的,另外在其快取記憶體器結構中我們主要關心兩個低位元組byte0,byte1——儲存著轉換後的溫度資料。

對於主要的溫度數字測量,我們可以通過配置暫存器的方式實現9、10、11、12位溫度轉換,其精度分別為0.5℃、0.25℃、0.125℃、0.0625℃解析度,若不設定則預設為12位的轉換精度,其中隨著轉換精度的提高,必然導致溫度轉換時間的增加,例如12位轉換精度則需要750ms的轉換時間。若要測量溫度,主裝置必須向ds18b20傳送溫度轉換命令[44h]才能開始溫度轉換。溫度轉換後,轉換的溫度值將會儲存在快取記憶體器的溫度暫存器中。只有通過讀快取記憶體器命令[beh]才能將資料讀出,資料通過1位匯流排傳輸,傳輸順序為低位到高位依次傳輸。溫度資料中包含「符號」(s)位,表示溫度的正負。因此只有byte0位元組和byte1位元組低三位表示的是讀取的溫度資料,而byte1位元組高五位表示的則是溫度正負。其溫度轉換關係圖如圖3所示。

在快取記憶體器中,byte4位元組是用來配置暫存器,使用者只需要通過改變r1、r0的值就可以實現ds18b20的配置,在上電時預設為r1=1、r0=1(12位解析度)。

ds18b20的資源確認後,接下來我們需要確定它各種命令狀態的對應的匯流排時序狀態,以便後面同過fpga來進行時序控制。首先要明白的是它的初始換——復位脈衝和存在脈衝,每次ds18b20要傳送rom命令之前,必須對裝置進行初始化,而其初始化主要是由主裝置發出的復位脈衝及ds18b20 響應的存在脈衝組成。其時序如圖6所示。

在初始化狀態,匯流排上的主裝置通過拉低匯流排最少480us來表示傳送復位脈衝。傳送完之後,主裝置要釋放匯流排進入接收模式。當匯流排釋放後,5kω的上拉電阻將匯流排拉至高電平。當ds18b20檢測到該上公升沿訊號後,其等待15us至60us後將匯流排拉低60us至240us來實現傳送乙個存在脈衝。

寫時序:主裝置向ds18b20寫命令分寫0和寫1兩種情況。當主裝置將匯流排從高電平拉至低電平時,啟動寫時序,所有的寫時序持續時間最少為60us,每個寫時序間的恢復時間最少為1us。當匯流排(dq)拉低後,ds18b20在15us至60us之間對匯流排進行取樣,如果採的dq為高電平則發生寫1,如果為低電平則發生寫0。如果要產生寫1時序,必須先將匯流排拉至邏輯低電平然後釋放匯流排,允許匯流排在寫時序開始後 15us內上拉至高電平。若要產生寫0時序,必須將匯流排拉至邏輯低電平並保持不變最少 60us。

讀時序:當我們傳送完讀快取記憶體器[beh]命令時,必須及時地生成讀時序,只有在讀時序ds18b20才能向主裝置傳送資料。每個讀時隙最小必須有 60us 的持續時間以及每個讀時隙間至少要有1us的恢復時間。當主裝置將匯流排從高電平拉至低電平超過1us,啟動讀時隙。

當啟動讀時序後,ds18b20將會向主裝置傳送「0」或者「1」。ds18b20通過將匯流排拉高來傳送1,將匯流排拉低來傳送0。當讀時序完成後,dq引腳將通過上拉電阻將匯流排拉高至高電平的閒置狀態。從ds18b20中輸出的資料在啟動讀時序後的15us內有效,所以,主裝置在讀時隙開始後的15us內必須釋放匯流排,並且對匯流排進行取樣。

ps:詳細控制**見資源檔案

Python系列6 函式

函式從某種角度來講也是一種控制流程,這種控制流程的特點在於函式更加的靈活。函式定義語法 def 函式名 形參 函式體 def my abs x if x 0 return x else return x def myprint print 今天你吃飯沒 myprint 今天你吃飯沒定義函式時,需要確...

ES6系列 ES6簡介

2015年6月17日,ecmascript的第六個版本正式發布,該版本正式名稱為ecmascript 2015,但通常被稱為ecmascript 6或者es6。瀏覽器對es6的支援情況 es6主要應用於node.js,如果想用在瀏覽器中,就需要使用轉碼器 將es6 轉成es5 這意味著,可以用es6...

Spring系列 6 總結(1)

spring當然不僅僅只包括我們前面看到的這些技術,但其核心的思想主要是ioc aop這兩塊。在前面的幾塊中我們著重講了aop,最後簡單介紹了一下ioc.這個系列介紹到這兒,基本涉及了spring主要思想和技術,並建立了自己的乙個簡單的aop模型。一 我們首先來看看我們用到了那些關鍵性技術 1 動態...