您现在的位置是:首页 > 编程 > 

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

2025-07-21 18:31:43
基于FPGA的温度传感器(ds18b20)驱动设计 本篇主要讨论基于FPGA的温度传感器(ds18b20)驱动设计---第一版设计实现:利用FPGA驱动DS18b20,读取到温度数值显示到数码管上。 首先介绍DS18b20。 DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20 数字温度计提供 9-12位摄氏温度测量(9-1

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

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

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

首先介绍DS18b20。

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

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

可编程的分辨率为9-12位,对应的分辨率温度分别为0.5度、0.25度、0.125度、0.0625度。

测量温度是需要转换时间的(将外界的问题转换为数字量),9bit的精度需要最大9.75ms;10bit的精度需要最大187.5ms;11bit的精度需要最大75ms;12bit的精度需要最大750ms。

上电后,默认的精度为12位,我们一般也采用这个精度。如果觉得这个转换时间较长,可以考虑配置为其他的精度。

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

通过上述实物图可以看到,DS18B20有三个管脚,VDD(电源管脚),DQ(数据线),GD(地线)。

在使用时,也可以不通过VDD供电,而采用DQ供电(此种模式在此不再介绍)。

在平常使用时,VDD接电源V~5V,GD接地,DQ上面需要接一个上拉电阻(阻值通常为4.7K,或者10K),DQ就是进行通信的数据线(单数据总线)。

了解了使用的电路特性后,就得琢磨一下,如何利用一个数据线DQ来进行控制这个温度传感器。

下图是DS18B20的框图:

64bit的rom中的数值时固定的。高八位为:28h(表示为DS18b20);后续的48位为:芯片的序列号(每一个DS18B20都不相同);最后八位:前面56位的CRC校验序列。

DS18B20支持在一个总线上面加载多个DS18B20,那么此时就需要获取每一个DS18B20的ROM,这样就可以精准的控制每一个器件了。

在此我们不对在一个总线上加载多个DS18B20的情况,只讨论加载一个DS18B20的情况。

读取ROM的64bit的命令为H,后面跟着读取64bit,就是器件的ROM值(只能用在总线上只有一个器件的情况)。

匹配ROM的命令为55H,后面跟着写入64bit数据,只有和这64bit的数据相同的器件才会开始工作。

跳过ROM的命令为CCH,接收到这个命令的器件,不需要匹配就可以直接工作(只能用在总线上只有一个器件的情况)。

在此我们不做多器件的情况,所以可以直接发送跳过ROM的命令。

DS18B20的测温是需要被通知的,也就说我们需要给器件发送一个开始测温的命令,他才会开始测量温度,并且转换称为数字信号(16bit的有符号数)。

分频率为12位,使用16bit后面的12位(11:0)。

分频率为11位,则16bit的最后一个bit不使用(11:1)。

······

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

16bit的数字信息存储在内部暂存器中,占用两个字节(在0、1字节)。

测温的命令为44H。

暂存器的第四个4字节就是配置分辨率的寄存器。

TM设置为0即可;

可以通过配置这个寄存器的值,来配置我们想要的分辨率。在此,我将不配置此寄存器,使用默认分辨率12bit。

写入暂存器的命令为4EH,后面跟着写入个字节的数据,这三个字节写入到暂存器的2、、4的位置。

读出暂存器的命令为BEH,后面跟着读出个字节的数据,如果只是想读取温度,那么只需要读出两个字节的数据就可以了。

基本的命令差不多都介绍完事了,那么下面开始介绍时序。

首先:在发送命令之前,器件要求必须要被初始化。时序如下:

控制器需要拉低DQ,至少保持480us(最大不超过960us,建议:600us),然后释放总线控制(由于DQ被上拉,所以会被拉成高电平)。如果器件存在并且可以正常工作,器件会拉低DQ一段时间60-240us。

所以建议:控制器拉低DQ960us,释放总线控制,检测DQ是否还会拉低。主机从释放总线控制开始,要等待600us的时间去检测DQ是否拉低,如果有拉低则证明器件存在并且可以工作,如果没有拉低,则证明器件不存在或者不可以工作。

证明器件存在并且可以工作后,我们就可以向器件发送命令了。

发送命令和和数据以低位优先。

发送1bit的时序为:

如果控制器想要发送1bit0,那么直接拉低DQ100us即可,然后释放总线;如果控制器想要发送1bit1,那么拉低DQ5us,然后释放总线即可。无论是写0,还是写1,建议每一bit的时长110us。

读取命令和数据以低位优先。

读取1bit的时序为:

如果控制器想要读取的话,那么拉低DQ5us的时间,释放总线,在10us时,读取总线的电平值即可获得读取值。建议每一bit的时长110us。

实现DS18B20的驱动主要有三步:

第一步:初始化DS18B20;

第二步:ROM命令(紧跟任何数据交换请求);

第三步:DS18B20功能命令(紧跟任何数据交换请求);

所以我们上电后,工作的过程如下:

初始化、发送跳过ROM命令 、发送转换温度命令;等待750ms;初始化、发送跳过ROM命令、发送读取暂存器的命令、读取两个字节的数据。不断重复以上的过程即可。

上面的工作方式模式为:总线上是一个器件、分辨率为默认的12bit、没有匹配ROM。

DS18B20一般会制作到一个板卡上面,下面是笔者自制的板卡;

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

代码语言:javascript代码运行次数:0运行复制
.htm?ft=t&id=86202482902

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

1. 温度传感器为DS18B20。

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

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

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

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

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

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

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

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

开发软件:quartus 18.0

开发语言:Verilog HDL

作者QQ:7468924

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

设计思想如下:

ds18b20_drive模块的功能为驱动ds18b20,获取温度,并且输出符号和温度的BCD码;seven_tube_drive模块的功能将符号和温度的BCD码输出,并且在右侧第三个数码管点亮小数点用以区分整数和小数。

ds18b20_drive模块采用状态机的方式实现。

读取到温度信息后,转换为BCD码输出;

首先判断温度的正负性,然后计算它的绝对值。

绝对值要乘以0.0625,此时乘以625,相当于扩大了10000倍,然后除以100,则表示扩大了100倍(因为我们需要保留两位小数 ,正好扩大100倍使小数都变成了整数)。

代码语言:javascript代码运行次数:0运行复制
      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

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

相关参考代码为:

代码语言:javascript代码运行次数:0运行复制
通过网盘分享的文件:温度传感器DS18b20驱动--第一版
链接:  
提取码: vins

ED

本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2025-01-15,如有侵权请联系 cloudcommunity@tencent 删除数据fpga工作配置设计

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1174027.html

相关标签:无
上传时间: 2025-07-21 13:30:36
留言与评论(共有 8 条评论)
本站网友 农工商红利卡
10分钟前 发表
那么拉低DQ5us的时间
本站网友 58同城深圳
23分钟前 发表
6. 数码管共计6个
本站网友 北京inn大厦
1分钟前 发表
所以建议:控制器拉低DQ960us
本站网友 xp系统主题包
29分钟前 发表
表示为负温度
本站网友 中国千万富翁
26分钟前 发表
分辨率为默认的12bit
本站网友 凯立德算号器
3分钟前 发表
则16bit的最后一个bit不使用(11
本站网友 惠州房屋出租
24分钟前 发表
而采用DQ供电(此种模式在此不再介绍)