0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的温度传感器(ds18b20)驱动设计

FPGA技术江湖 来源:FPGA技术江湖 2025-01-16 14:08 次阅读

本篇主要讨论基于FPGA温度传感器(ds18b20)驱动设计---第一版

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

设计实现:利用FPGA驱动DS18b20,读取到温度数值显示到数码管上。

首先介绍DS18b20。

DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。

DS18B20 数字温度计提供 9-12位摄氏温度测量(9-12位是测量精度),它的测温范围为-55~+125℃。

编程的分辨率为9-12位,对应的分辨率温度分别为0.5度、0.25度、0.125度、0.0625度。 测量温度是需要转换时间的(将外界的问题转换为数字量),9bit的精度需要最大93.75ms;10bit的精度需要最大187.5ms;11bit的精度需要最大375ms;12bit的精度需要最大750ms。 上电后,默认的精度为12位,我们一般也采用这个精度。如果觉得这个转换时间较长,可以考虑配置为其他的精度。

每个DS18B20都有一个独特的64位序列号,从而允许多只 DS18B20同时连在一根单线总线上;因此很简单就可以用一个微控制器去控制很多覆盖在一大片区域的DS18B20。这一特性在HVAC环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。

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

通过上述实物图可以看到,DS18B20有三个管脚,VDD(电源管脚),DQ(数据线),GND(地线)。 在使用时,也可以不通过VDD供电,而采用DQ供电(此种模式在此不再介绍)。 在平常使用时,VDD接电源3V~5V,GND接地,DQ上面需要接一个上拉电阻(阻值通常为4.7K,或者10K),DQ就是进行通信的数据线(单数据总线)。 了解了使用的电路特性后,就得琢磨一下,如何利用一个数据线DQ来进行控制这个温度传感器。 下图是DS18B20的框图:

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

64bit的rom中的数值时固定的。高八位为:28h(表示为DS18b20);后续的48位为:芯片的序列号(每一个DS18B20都不相同);最后八位:前面56位的CRC校验序列。 DS18B20支持在一个总线上面加载多个DS18B20,那么此时就需要获取每一个DS18B20的ROM,这样就可以精准的控制每一个器件了。 在此我们不对在一个总线上加载多个DS18B20的情况,只讨论加载一个DS18B20的情况。 读取ROM的64bit的命令为33H,后面跟着读取64bit,就是器件的ROM值(只能用在总线上只有一个器件的情况)。 匹配ROM的命令为55H,后面跟着写入64bit数据,只有和这64bit的数据相同的器件才会开始工作。 跳过ROM的命令为CCH,接收到这个命令的器件,不需要匹配就可以直接工作(只能用在总线上只有一个器件的情况)。 在此我们不做多器件的情况,所以可以直接发送跳过ROM的命令。 DS18B20的测温是需要被通知的,也就说我们需要给器件发送一个开始测温的命令,他才会开始测量温度,并且转换称为数字信号(16bit的有符号数)。 分频率为12位,使用16bit后面的12位(11:0)。 分频率为11位,则16bit的最后一个bit不使用(11:1)。 ······

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

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

上图为默认精度(12bit、0.0625度),如果第12位为0,表示为正温度,测量出来的数据乘以0.0625就可以了。如果第12为1,表示为负温度,则需要将测量出来的数据减去1,然后所有位取反,得到的结果再乘以0.0625度。上述的表示方式就是有符号数在数字电路中的表示形式。 16bit的数字信息存储在内部暂存器中,占用两个字节(在0、1字节)。

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

测温的命令为44H。 暂存器的第四个4字节就是配置分辨率的寄存器

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

TM设置为0即可;

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

可以通过配置这个寄存器的值,来配置我们想要的分辨率。在此,我将不配置此寄存器,使用默认分辨率12bit。 写入暂存器的命令为4EH,后面跟着写入3个字节的数据,这三个字节写入到暂存器的2、3、4的位置。 读出暂存器的命令为BEH,后面跟着读出N个字节的数据,如果只是想读取温度,那么只需要读出两个字节的数据就可以了。 基本的命令差不多都介绍完事了,那么下面开始介绍时序。 首先:在发送命令之前,器件要求必须要被初始化。时序如下:

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

控制器需要拉低DQ,至少保持480us(最大不超过960us,建议:600us),然后释放总线控制(由于DQ被上拉,所以会被拉成高电平)。如果器件存在并且可以正常工作,器件会拉低DQ一段时间60-240us。 所以建议:控制器拉低DQ960us,释放总线控制,检测DQ是否还会拉低。主机从释放总线控制开始,要等待600us的时间去检测DQ是否拉低,如果有拉低则证明器件存在并且可以工作,如果没有拉低,则证明器件不存在或者不可以工作。 证明器件存在并且可以工作后,我们就可以向器件发送命令了。 发送命令和和数据以低位优先。 发送1bit的时序为:

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

如果控制器想要发送1bit0,那么直接拉低DQ100us即可,然后释放总线;如果控制器想要发送1bit1,那么拉低DQ5us,然后释放总线即可。无论是写0,还是写1,建议每一bit的时长110us。 读取命令和数据以低位优先。 读取1bit的时序为:

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

如果控制器想要读取的话,那么拉低DQ5us的时间,释放总线,在10us时,读取总线的电平值即可获得读取值。建议每一bit的时长110us。 实现DS18B20的驱动主要有三步: 第一步:初始化DS18B20; 第二步:ROM命令(紧跟任何数据交换请求); 第三步:DS18B20功能命令(紧跟任何数据交换请求); 所以我们上电后,工作的过程如下: 初始化、发送跳过ROM命令 、发送转换温度命令;等待750ms;初始化、发送跳过ROM命令、发送读取暂存器的命令、读取两个字节的数据。不断重复以上的过程即可。 上面的工作方式模式为:总线上是一个器件、分辨率为默认的12bit、没有匹配ROM。 DS18B20一般会制作到一个板卡上面,下面是笔者自制的板卡;

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

如果有需要的小伙伴,可以点击下面的链接:

https://item.taobao.com/item.htm?ft=t&id=862024382902
设计实现:利用FPGA驱动DS18b20,读取到温度数值显示到数码管上。

1. 温度传感器为DS18B20。

2. 总线上只有一个器件、温度分辨率为12bit(默认)、跳过ROM指令。

3. 将温度显示到数码管上。

4. 温度精确到小数点后2位。

5. 数码管共计6个,最前面显示是否为负温度(不显示为正温度,显示一横杠为负温度)。

6. 数码管共计6个,后面五个显示温度,前面三个显示整数、后面两个显示小数。

7. 数码管共计6个,整数与小数中间点亮小数点。

8. 利用LED显示是否初始化成功,LED点亮表示初始化成功,LED熄灭表示初始化失败。

使用平台:本次设计应用Altera的平台设计(芯片:EP4CE10F17C8)、使用的DS18B20板卡为市面上常见的,如果没有的同学,可以联系笔者购买。

开发软件:quartus 18.0

开发语言:Verilog HDL

作者QQ:746833924

说明:本篇设计中不涉及到ip电路,如果在其他平台,rtl代码依然可以适用,当其他板卡电路不同时,会导致不同的现象出现,如有需要修改代码请联系作者;如需作者使用的板卡,请联系作者;

设计思想如下:

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

ds18b20_drive模块的功能为驱动ds18b20,获取温度,并且输出符号和温度的BCD码;seven_tube_drive模块的功能将符号和温度的BCD码输出,并且在右侧第三个数码管点亮小数点用以区分整数和小数。 ds18b20_drive模块采用状态机的方式实现。 读取到温度信息后,转换为BCD码输出; 首先判断温度的正负性,然后计算它的绝对值。 绝对值要乘以0.0625,此时乘以625,相当于扩大了10000倍,然后除以100,则表示扩大了100倍(因为我们需要保留两位小数 ,正好扩大100倍使小数都变成了整数)。

  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

数码管驱动采用最基本动态驱动即可,在此不做介绍;

相关参考代码为:

通过网盘分享的文件:温度传感器DS18b20驱动--第一版
链接: https://pan.baidu.com/s/1es-KpmP4PqZbaR76kTDlYA?pwd=vins
提取码: vins

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1643

    文章

    21933

    浏览量

    613017
  • 温度传感器
    +关注

    关注

    48

    文章

    3016

    浏览量

    157775
  • DS18B20
    +关注

    关注

    10

    文章

    782

    浏览量

    81887

原文标题:基于FPGA的温度传感器(ds18b20)驱动设计

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐
    热点推荐

    基于STM32的DS18B20温度传感器设计

    DS18B20内置了64位产品序列号,方便识别身份,在一根线上可以挂接多个DS18B20传感器,通过64位身份验证,可以分别读取来至不同传感器采集的
    的头像 发表于 03-07 11:44 1.4w次阅读
    基于STM32的<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b><b class='flag-5'>传感器</b>设计

    DS18B20数字温度传感器驱动设计与实现

    在一时候我们需要相对简单的检测温度信号,而DS18B20就是一款功能和应用都相对简单的温度传感器,通过单线就可以实现检测温度信号的需求。这一
    发表于 12-12 14:47 4686次阅读
    <b class='flag-5'>DS18B20</b>数字<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>的<b class='flag-5'>驱动</b>设计与实现

    DS18B20温度传感器是什么

    DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器
    发表于 04-27 08:14

    DS18B20温度传感器实验

    STM32学习记录:DS18B20温度传感器实验(HAL库)实验摘要DS18B20简述STMCubeMX引脚配置芯片选型引脚和时钟配置生成ARM-MDK工程编写
    发表于 08-18 07:44

    DS18B20数字温度传感器驱动过程是怎样的

    DS18B20数字温度传感器的特性有哪些?DS18B20数字温度传感器
    发表于 10-26 07:24

    数字温度传感器DS18B20的设计及应用

    数字温度传感器DS18B20的设计及应用 1引言 DS18B20是DALLAS公司生产的一线式数字温度
    发表于 04-02 18:00 2990次阅读
    数字<b class='flag-5'>温度</b><b class='flag-5'>传感器</b><b class='flag-5'>DS18B20</b>的设计及应用

    温度传感器DS18B20驱动方法

    在这一小节中将对DS18B20 温度传感器进行介绍,包括其功能、结构、驱动方法等内 容。 (1)DS18B20
    发表于 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'>驱动</b>方法

    DS18B20完成温度检测的技巧

    介绍了DS18B20 温度传感器 的结构和特点以及用DS18B20温度传感器进行
    发表于 08-23 10:44 190次下载
    <b class='flag-5'>DS18B20</b>完成<b class='flag-5'>温度</b>检测的技巧

    温度传感器DS18B20

    温度传感器DS18B20 51例程,亲测可用
    发表于 06-14 15:36 21次下载

    智能温度传感器DS18B20的原理与应用

    DS18B20是DALLAS公司生产的单线数字温度传感器,他具有独特的单线总线接口方式。文章详细的介绍了单线数字温度传感器
    发表于 10-11 18:19 49次下载

    DS18B20温度传感器温度程序和驱动以及案例实现资料说明

    本文档的的主要内容详细介绍的是DS18B20温度传感器温度程序和驱动以及案例实现资料说明,本文件包含整个
    发表于 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'>驱动</b>以及案例实现资料说明

    ds18b20的特性_ds18b20温度传感器应用

    本文首先介绍了ds18b20的特性,其次介绍了DS18B20工作原理,最后介绍了ds18b20温度传感器应用。
    发表于 04-24 09:10 1.2w次阅读
    <b class='flag-5'>ds18b20</b>的特性_<b class='flag-5'>ds18b20</b><b class='flag-5'>温度</b><b class='flag-5'>传感器</b>应用

    ds18b20温度传感器如何使用

    DS18B20是一款广泛使用的数字温度传感器,它具有高精度、低功耗和易于使用的特点。 DS18B20温度
    的头像 发表于 09-03 16:51 1413次阅读

    ds18b20温度传感器怎么接线

    DS18B20是一种广泛使用的数字温度传感器,它基于1-Wire(一线)通信协议工作。这种传感器因其高精度、易用性和低成本而受到欢迎。 DS18B2
    的头像 发表于 10-18 14:50 3674次阅读

    DS18B20温度传感器的工作原理和硬件设计

    通过本文可以了解DS18B20温度传感器工作原理、硬件设计、DS18B20单总线接口驱动编写。
    的头像 发表于 10-24 14:38 9665次阅读
    <b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b><b class='flag-5'>传感器</b>的工作原理和硬件设计