0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的溫度傳感器(ds18b20)驅(qū)動(dòng)設(shè)計(jì)

FPGA技術(shù)江湖 ? 來源:FPGA技術(shù)江湖 ? 2025-01-16 14:08 ? 次閱讀

本篇主要討論基于FPGA溫度傳感器(ds18b20)驅(qū)動(dòng)設(shè)計(jì)---第一版

b1a3256c-d39f-11ef-9310-92fbcf53809c.jpg

設(shè)計(jì)實(shí)現(xiàn):利用FPGA驅(qū)動(dòng)DS18b20,讀取到溫度數(shù)值顯示到數(shù)碼管上。

首先介紹DS18b20。

DS18B20是常用的數(shù)字溫度傳感器,其輸出的是數(shù)字信號(hào),具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。

DS18B20 數(shù)字溫度計(jì)提供 9-12位攝氏溫度測量(9-12位是測量精度),它的測溫范圍為-55~+125℃。

編程的分辨率為9-12位,對(duì)應(yīng)的分辨率溫度分別為0.5度、0.25度、0.125度、0.0625度。 測量溫度是需要轉(zhuǎn)換時(shí)間的(將外界的問題轉(zhuǎn)換為數(shù)字量),9bit的精度需要最大93.75ms;10bit的精度需要最大187.5ms;11bit的精度需要最大375ms;12bit的精度需要最大750ms。 上電后,默認(rèn)的精度為12位,我們一般也采用這個(gè)精度。如果覺得這個(gè)轉(zhuǎn)換時(shí)間較長,可以考慮配置為其他的精度。

每個(gè)DS18B20都有一個(gè)獨(dú)特的64位序列號(hào),從而允許多只 DS18B20同時(shí)連在一根單線總線上;因此很簡單就可以用一個(gè)微控制器去控制很多覆蓋在一大片區(qū)域的DS18B20。這一特性在HVAC環(huán)境控制、探測建筑物、儀器或機(jī)器的溫度以及過程監(jiān)測和控制等方面非常有用。

b1bdac3e-d39f-11ef-9310-92fbcf53809c.png

通過上述實(shí)物圖可以看到,DS18B20有三個(gè)管腳,VDD(電源管腳),DQ(數(shù)據(jù)線),GND(地線)。 在使用時(shí),也可以不通過VDD供電,而采用DQ供電(此種模式在此不再介紹)。 在平常使用時(shí),VDD接電源3V~5V,GND接地,DQ上面需要接一個(gè)上拉電阻(阻值通常為4.7K,或者10K),DQ就是進(jìn)行通信的數(shù)據(jù)線(單數(shù)據(jù)總線)。 了解了使用的電路特性后,就得琢磨一下,如何利用一個(gè)數(shù)據(jù)線DQ來進(jìn)行控制這個(gè)溫度傳感器。 下圖是DS18B20的框圖:

b1ccd218-d39f-11ef-9310-92fbcf53809c.png

64bit的rom中的數(shù)值時(shí)固定的。高八位為:28h(表示為DS18b20);后續(xù)的48位為:芯片的序列號(hào)(每一個(gè)DS18B20都不相同);最后八位:前面56位的CRC校驗(yàn)序列。 DS18B20支持在一個(gè)總線上面加載多個(gè)DS18B20,那么此時(shí)就需要獲取每一個(gè)DS18B20的ROM,這樣就可以精準(zhǔn)的控制每一個(gè)器件了。 在此我們不對(duì)在一個(gè)總線上加載多個(gè)DS18B20的情況,只討論加載一個(gè)DS18B20的情況。 讀取ROM的64bit的命令為33H,后面跟著讀取64bit,就是器件的ROM值(只能用在總線上只有一個(gè)器件的情況)。 匹配ROM的命令為55H,后面跟著寫入64bit數(shù)據(jù),只有和這64bit的數(shù)據(jù)相同的器件才會(huì)開始工作。 跳過ROM的命令為CCH,接收到這個(gè)命令的器件,不需要匹配就可以直接工作(只能用在總線上只有一個(gè)器件的情況)。 在此我們不做多器件的情況,所以可以直接發(fā)送跳過ROM的命令。 DS18B20的測溫是需要被通知的,也就說我們需要給器件發(fā)送一個(gè)開始測溫的命令,他才會(huì)開始測量溫度,并且轉(zhuǎn)換稱為數(shù)字信號(hào)(16bit的有符號(hào)數(shù))。 分頻率為12位,使用16bit后面的12位(11:0)。 分頻率為11位,則16bit的最后一個(gè)bit不使用(11:1)。 ······

b1e344c6-d39f-11ef-9310-92fbcf53809c.png

b1f3d6c4-d39f-11ef-9310-92fbcf53809c.png

上圖為默認(rèn)精度(12bit、0.0625度),如果第12位為0,表示為正溫度,測量出來的數(shù)據(jù)乘以0.0625就可以了。如果第12為1,表示為負(fù)溫度,則需要將測量出來的數(shù)據(jù)減去1,然后所有位取反,得到的結(jié)果再乘以0.0625度。上述的表示方式就是有符號(hào)數(shù)在數(shù)字電路中的表示形式。 16bit的數(shù)字信息存儲(chǔ)在內(nèi)部暫存器中,占用兩個(gè)字節(jié)(在0、1字節(jié))。

b2105a56-d39f-11ef-9310-92fbcf53809c.png

測溫的命令為44H。 暫存器的第四個(gè)4字節(jié)就是配置分辨率的寄存器。

b225bc16-d39f-11ef-9310-92fbcf53809c.png

TM設(shè)置為0即可;

b2417c12-d39f-11ef-9310-92fbcf53809c.png

可以通過配置這個(gè)寄存器的值,來配置我們想要的分辨率。在此,我將不配置此寄存器,使用默認(rèn)分辨率12bit。 寫入暫存器的命令為4EH,后面跟著寫入3個(gè)字節(jié)的數(shù)據(jù),這三個(gè)字節(jié)寫入到暫存器的2、3、4的位置。 讀出暫存器的命令為BEH,后面跟著讀出N個(gè)字節(jié)的數(shù)據(jù),如果只是想讀取溫度,那么只需要讀出兩個(gè)字節(jié)的數(shù)據(jù)就可以了。 基本的命令差不多都介紹完事了,那么下面開始介紹時(shí)序。 首先:在發(fā)送命令之前,器件要求必須要被初始化。時(shí)序如下:

b24fcc2c-d39f-11ef-9310-92fbcf53809c.png

控制器需要拉低DQ,至少保持480us(最大不超過960us,建議:600us),然后釋放總線控制(由于DQ被上拉,所以會(huì)被拉成高電平)。如果器件存在并且可以正常工作,器件會(huì)拉低DQ一段時(shí)間60-240us。 所以建議:控制器拉低DQ960us,釋放總線控制,檢測DQ是否還會(huì)拉低。主機(jī)從釋放總線控制開始,要等待600us的時(shí)間去檢測DQ是否拉低,如果有拉低則證明器件存在并且可以工作,如果沒有拉低,則證明器件不存在或者不可以工作。 證明器件存在并且可以工作后,我們就可以向器件發(fā)送命令了。 發(fā)送命令和和數(shù)據(jù)以低位優(yōu)先。 發(fā)送1bit的時(shí)序?yàn)椋?

b26a38e6-d39f-11ef-9310-92fbcf53809c.png

如果控制器想要發(fā)送1bit0,那么直接拉低DQ100us即可,然后釋放總線;如果控制器想要發(fā)送1bit1,那么拉低DQ5us,然后釋放總線即可。無論是寫0,還是寫1,建議每一bit的時(shí)長110us。 讀取命令和數(shù)據(jù)以低位優(yōu)先。 讀取1bit的時(shí)序?yàn)椋?

b282a07a-d39f-11ef-9310-92fbcf53809c.png

如果控制器想要讀取的話,那么拉低DQ5us的時(shí)間,釋放總線,在10us時(shí),讀取總線的電平值即可獲得讀取值。建議每一bit的時(shí)長110us。 實(shí)現(xiàn)DS18B20的驅(qū)動(dòng)主要有三步: 第一步:初始化DS18B20; 第二步:ROM命令(緊跟任何數(shù)據(jù)交換請(qǐng)求); 第三步:DS18B20功能命令(緊跟任何數(shù)據(jù)交換請(qǐng)求); 所以我們上電后,工作的過程如下: 初始化、發(fā)送跳過ROM命令 、發(fā)送轉(zhuǎn)換溫度命令;等待750ms;初始化、發(fā)送跳過ROM命令、發(fā)送讀取暫存器的命令、讀取兩個(gè)字節(jié)的數(shù)據(jù)。不斷重復(fù)以上的過程即可。 上面的工作方式模式為:總線上是一個(gè)器件、分辨率為默認(rèn)的12bit、沒有匹配ROM。 DS18B20一般會(huì)制作到一個(gè)板卡上面,下面是筆者自制的板卡;

b2988f84-d39f-11ef-9310-92fbcf53809c.png

如果有需要的小伙伴,可以點(diǎn)擊下面的鏈接:

https://item.taobao.com/item.htm?ft=t&id=862024382902
設(shè)計(jì)實(shí)現(xiàn):利用FPGA驅(qū)動(dòng)DS18b20,讀取到溫度數(shù)值顯示到數(shù)碼管上。

1. 溫度傳感器為DS18B20。

2. 總線上只有一個(gè)器件、溫度分辨率為12bit(默認(rèn))、跳過ROM指令。

3. 將溫度顯示到數(shù)碼管上。

4. 溫度精確到小數(shù)點(diǎn)后2位。

5. 數(shù)碼管共計(jì)6個(gè),最前面顯示是否為負(fù)溫度(不顯示為正溫度,顯示一橫杠為負(fù)溫度)。

6. 數(shù)碼管共計(jì)6個(gè),后面五個(gè)顯示溫度,前面三個(gè)顯示整數(shù)、后面兩個(gè)顯示小數(shù)。

7. 數(shù)碼管共計(jì)6個(gè),整數(shù)與小數(shù)中間點(diǎn)亮小數(shù)點(diǎn)。

8. 利用LED顯示是否初始化成功,LED點(diǎn)亮表示初始化成功,LED熄滅表示初始化失敗。

使用平臺(tái):本次設(shè)計(jì)應(yīng)用Altera的平臺(tái)設(shè)計(jì)(芯片:EP4CE10F17C8)、使用的DS18B20板卡為市面上常見的,如果沒有的同學(xué),可以聯(lián)系筆者購買。

開發(fā)軟件:quartus 18.0

開發(fā)語言:Verilog HDL

作者QQ:746833924

說明:本篇設(shè)計(jì)中不涉及到ip電路,如果在其他平臺(tái),rtl代碼依然可以適用,當(dāng)其他板卡電路不同時(shí),會(huì)導(dǎo)致不同的現(xiàn)象出現(xiàn),如有需要修改代碼請(qǐng)聯(lián)系作者;如需作者使用的板卡,請(qǐng)聯(lián)系作者;

設(shè)計(jì)思想如下:

b2b3d802-d39f-11ef-9310-92fbcf53809c.png

ds18b20_drive模塊的功能為驅(qū)動(dòng)ds18b20,獲取溫度,并且輸出符號(hào)和溫度的BCD碼;seven_tube_drive模塊的功能將符號(hào)和溫度的BCD碼輸出,并且在右側(cè)第三個(gè)數(shù)碼管點(diǎn)亮小數(shù)點(diǎn)用以區(qū)分整數(shù)和小數(shù)。 ds18b20_drive模塊采用狀態(tài)機(jī)的方式實(shí)現(xiàn)。 讀取到溫度信息后,轉(zhuǎn)換為BCD碼輸出; 首先判斷溫度的正負(fù)性,然后計(jì)算它的絕對(duì)值。 絕對(duì)值要乘以0.0625,此時(shí)乘以625,相當(dāng)于擴(kuò)大了10000倍,然后除以100,則表示擴(kuò)大了100倍(因?yàn)槲覀冃枰A魞晌恍?shù) ,正好擴(kuò)大100倍使小數(shù)都變成了整數(shù))。

  if(data_r[12] ==1'b1) begin
     temp_sign <= 4'he;
? ? ? ? ? data_1 = (~(data_r -?1'b1)) * 16'd625 /7'd100;
? ? ? ? end
? ? ? else begin
? ? ? ? ? temp_sign <= 4'hf;
? ? ? ? ? data_1 <= (data_r *?16'd625) /7'd100;
? ? ??end

數(shù)碼管驅(qū)動(dòng)采用最基本動(dòng)態(tài)驅(qū)動(dòng)即可,在此不做介紹;

相關(guān)參考代碼為:

通過網(wǎng)盤分享的文件:溫度傳感器DS18b20驅(qū)動(dòng)--第一版
鏈接: https://pan.baidu.com/s/1es-KpmP4PqZbaR76kTDlYA?pwd=vins
提取碼: vins

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21776

    瀏覽量

    604679
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    2961

    瀏覽量

    156233
  • DS18B20
    +關(guān)注

    關(guān)注

    10

    文章

    780

    瀏覽量

    80983

原文標(biāo)題:基于FPGA的溫度傳感器(ds18b20)驅(qū)動(dòng)設(shè)計(jì)

文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于STM32的DS18B20溫度傳感器設(shè)計(jì)

    DS18B20內(nèi)置了64位產(chǎn)品序列號(hào),方便識(shí)別身份,在一根線上可以掛接多個(gè)DS18B20傳感器,通過64位身份驗(yàn)證,可以分別讀取來至不同傳感器采集的
    的頭像 發(fā)表于 03-07 11:44 ?1.3w次閱讀
    基于STM32的<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>設(shè)計(jì)

    DS18B20數(shù)字溫度傳感器驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

    在一時(shí)候我們需要相對(duì)簡單的檢測溫度信號(hào),而DS18B20就是一款功能和應(yīng)用都相對(duì)簡單的溫度傳感器,通過單線就可以實(shí)現(xiàn)檢測溫度信號(hào)的需求。這一
    發(fā)表于 12-12 14:47 ?4423次閱讀
    <b class='flag-5'>DS18B20</b>數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>的<b class='flag-5'>驅(qū)動(dòng)</b>設(shè)計(jì)與實(shí)現(xiàn)

    DS18B20溫度傳感器是什么

    DALLAS最新單線數(shù)字溫度傳感器DS18B20簡介新的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟(jì) Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器
    發(fā)表于 04-27 08:14

    DS18B20溫度傳感器實(shí)驗(yàn)

    STM32學(xué)習(xí)記錄:DS18B20溫度傳感器實(shí)驗(yàn)(HAL庫)實(shí)驗(yàn)摘要DS18B20簡述STMCubeMX引腳配置芯片選型引腳和時(shí)鐘配置生成ARM-MDK工程編寫
    發(fā)表于 08-18 07:44

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用 1引言 DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度
    發(fā)表于 04-02 18:00 ?2845次閱讀
    數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b><b class='flag-5'>DS18B20</b>的設(shè)計(jì)及應(yīng)用

    溫度傳感器DS18B20驅(qū)動(dòng)方法

    在這一小節(jié)中將對(duì)DS18B20 溫度傳感器進(jìn)行介紹,包括其功能、結(jié)構(gòu)、驅(qū)動(dòng)方法等內(nèi) 容。 (1)DS18B20
    發(fā)表于 02-26 17:17 ?578次下載
    <b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b><b class='flag-5'>DS18B20</b>的<b class='flag-5'>驅(qū)動(dòng)</b>方法

    DS18B20完成溫度檢測的技巧

    介紹了DS18B20 溫度傳感器 的結(jié)構(gòu)和特點(diǎn)以及用DS18B20溫度傳感器進(jìn)行
    發(fā)表于 08-23 10:44 ?190次下載
    <b class='flag-5'>DS18B20</b>完成<b class='flag-5'>溫度</b>檢測的技巧

    溫度傳感器DS18B20

    溫度傳感器DS18B20 51例程,親測可用
    發(fā)表于 06-14 15:36 ?20次下載

    智能溫度傳感器DS18B20的原理與應(yīng)用

    DS18B20是DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器,他具有獨(dú)特的單線總線接口方式。文章詳細(xì)的介紹了單線數(shù)字溫度傳感器
    發(fā)表于 10-11 18:19 ?49次下載

    DS18B20溫度傳感器溫度程序和驅(qū)動(dòng)以及案例實(shí)現(xiàn)資料說明

    本文檔的的主要內(nèi)容詳細(xì)介紹的是DS18B20溫度傳感器溫度程序和驅(qū)動(dòng)以及案例實(shí)現(xiàn)資料說明,本文件包含整個(gè)
    發(fā)表于 04-09 08:00 ?1次下載
    <b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>的<b class='flag-5'>溫度</b>程序和<b class='flag-5'>驅(qū)動(dòng)</b>以及案例實(shí)現(xiàn)資料說明

    ds18b20的特性_ds18b20溫度傳感器應(yīng)用

    本文首先介紹了ds18b20的特性,其次介紹了DS18B20工作原理,最后介紹了ds18b20溫度傳感器應(yīng)用。
    發(fā)表于 04-24 09:10 ?1.1w次閱讀
    <b class='flag-5'>ds18b20</b>的特性_<b class='flag-5'>ds18b20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>應(yīng)用

    51單片機(jī)驅(qū)動(dòng)DS18B20溫度傳感器測量溫度

    51單片機(jī)驅(qū)動(dòng)DS18B20溫度傳感器測量溫度1.DS18B20
    發(fā)表于 11-21 11:51 ?41次下載
    51單片機(jī)<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>測量<b class='flag-5'>溫度</b>

    ds18b20溫度傳感器如何使用

    DS18B20是一款廣泛使用的數(shù)字溫度傳感器,它具有高精度、低功耗和易于使用的特點(diǎn)。 DS18B20溫度
    的頭像 發(fā)表于 09-03 16:51 ?757次閱讀

    ds18b20溫度傳感器怎么接線

    DS18B20是一種廣泛使用的數(shù)字溫度傳感器,它基于1-Wire(一線)通信協(xié)議工作。這種傳感器因其高精度、易用性和低成本而受到歡迎。 DS18B2
    的頭像 發(fā)表于 10-18 14:50 ?1717次閱讀

    DS18B20溫度傳感器的工作原理和硬件設(shè)計(jì)

    通過本文可以了解DS18B20溫度傳感器工作原理、硬件設(shè)計(jì)、DS18B20單總線接口驅(qū)動(dòng)編寫。
    的頭像 發(fā)表于 10-24 14:38 ?3050次閱讀
    <b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>的工作原理和硬件設(shè)計(jì)