FPGA与DS18B20型温度传感器通信的实现

发布者:Joyful222Life最新更新时间:2007-04-29 来源: 电子开发网关键字:数字  引脚  编程  寄存 手机看文章 扫描二维码
随时随地手机看文章

DS18B20是DALLAS公司生产的一线式数字温度传感器,采用3引脚TO-92型小体积封装;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。

一线式(1-WIRE)串行总线是利用1条信号线就可以与总线上若干器件进行通信。具体应用中可以利用微处理器的I/O端口对DS18B20直接进行通信,也可以通过现场可编程门阵列(FPGA)等可编程逻辑器件(PLD)实现对1-WIRE器件的通信。

本文介绍利用ACTEL公司的ProASICplus系列FPGA实现与DS18B20的通信功能。FPGA可以将读出DS18B20的48位ID号和12位温度测量结果保存在内部寄存器中,微处理器可以随时快速地从FPGA寄存器中读取这些信息。

一般在使用DS18B20时往往采用微处理器的I/O端口实现与该器件的通信,这种方法虽然比较容易和方便,但是,因为DS18B20的一线式串行总线对时序要求比较严格,因此,为了保证与DS18B20的通信可靠性,微处理器与DS18B20通信时需要采用关闭中断的办法,以防止操作时序被中断服务破坏。

利用FPGA实现与DS18B20通信不存在被迫关闭中断的情况,可以满足对实时性要求严格的应用要求。

2ProASICplus系列FPGA简介

ProASICplus系列FPGA是ACTEL公司推出的基于Flash开关编程技术的现场可编程门阵列,包括从7.5万门的APA075型到100万门的APAl000型,具有高密度、低功耗、非易失、含有嵌入式RAM及可重复编程等特点。

因为ProASICplus系列FPGA基于Flash技术,利用Flash开关保存内部逻辑,因此不需要另外的器件。由于不需要上电配置过程,因此具备上电就立即工作的特点。不用配置器件,系统的保密性提高。
 
笔者在电力监控的产品中利用APA150型FPGA实现了逻辑控制、A/D采样控制和FIFO存储等功能,并利用剩余的资源实现了DS18B20的通信功能。APA150在整个系统中充当协处理器,使主CPU从繁重的实时处理中解脱出来。

3DS18B20简介

3.1内部结构


DS18B20的内部结构如图1所示,主要由以下几部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH(温度高)和TL(温度低)、配置寄存器、暂存寄存器(SCRATCHPAD)、存储器控制逻辑。DQ为数字信号输入/输出端。



ROM中的64(8位产品家族编号、48位ID号、8位CRC)位序列号是出厂前刻好的,这64位序列号具有惟一性,每个DS18B20的64位序列号均不相同。

8位CRC生成器可以完成通信时的校验。

暂存寄存器有9个字节,包含温度测量结果、温度报警寄存器、CRC校验码等内容。

3.2操作步骤

对DS18B20的操作分为3个步骤:初始化、ROM命令和DS18B20功能命令。

3.2.1初始化

FPGA要与DS18B20通信,首先必须完成初始化。FPGA产生复位信号,DS18B20返回响应脉冲。

3.2.2ROM命令

该步骤完成FPGA与总线上的某一具体DS18B20建立联系。ROM命令有搜寻ROM(SEARCH ROM)、读ROM(READ ROM)、匹配ROM(MATCH ROM)、忽略ROM(SKIP ROM)、报警查找等命令(ALARM SEARCH)。

这里,FPGA只连接1个DS18B20,因此只使用读ROM命令,来读取DS18B20的48位ID号。

3.2.3?DS18B20功能命令

FPGA在该步骤中完成温度转换(CONVERTT)、写暂存寄存器(WRITE SCRATCHPAD)、读暂存寄存器(READ SCRATCHPAD)、拷贝暂存寄存器(COPYSCRATCHPAD)、装载暂存器寄存器(RECALL E2)、读供电模式命令(READ POWER SUPPLY)。

文中不用温度报警功能,因此在本步骤中只需完成温度转换,然后通过读暂存寄存器命令完成温度转化的结果。

3.3操作时序

2所示。从时序图中可以看出,对DS18B20的操作时序要求比较严格。利用FPGA可以实现这些操作时序。



4FPGA与DS18B20的通信

4.1DS18B20的操作模块


FPGA需要完成DS18B20的初始化、读取DS18B20的48位ID号、启动DS18B20温度转换、读取温度转化结果。读取48位ID号和读取温度转换结果过程中,FPGA还要实现CRC校验码的计算,保证通信数据的可靠性。


以上操作反复进行,可以用状态机来实现。状态机的各种状态如下:

 RESET1:对DS18B20进行第一次复位,然后进入DELAY状态,等待800μs后,进入CMD33状态。
  CMD33:对DS18B20发出0×33命令,读取48位ID值。
GET_ID:从DS18B20中读取48位ID值。
  RESET2:对DS18B20进行第二次复位,然后进入DELAY状态等待800μs后,进入CMDCC状态。
  CMDCC:向DS18B20发出忽略ROM命令,为进入下一状态作准备。
  CMD44:向DS18B20发出启动温度转换命令,然后进入DELAY状态等待900ms后进入下一状态。
  RESET3:对DS18B20进行第三次复位。
  CMDCC2:
向DS18B20发出忽略ROM命令,为了进入下一状态作准备。
  GET_TEMP:从DS18B20中读取温度测量数值。
  DELAY:等待状态。
  WRITE_BIT:向DS18B20中写入数据位状态。
  READ_BIT:从DS18B20中读取数据位状态。在该状态中每读取1位数据,同时完成该数据位的CRC校验计算。所有数据都读取后,还要读取8位CRC校验位。这8位校验位也经过CRC校验计算,如果通信没有错误,总的CRC校验结果应该是0。这时可将通信正确的数据保存到id和temp_data寄存器中。

设计中采用Verilog语言建立DS18B20操作模块”DS18B20_PROC”。在该模块中实现以上的状态机功能。该模块的定义为module DS18B20?PROC(sysclk,reset,dq_pim,id,temp_data,dq_ctl)。


 
从仿真波形可以看出,系统上电后的10ms左右,FPGA可以读出DS18B20的48位ID值,这样,主CPU在系统复位后很短的时间内就可以读取ID值,进行相应的处理。

4.2FPGA与CPU的接口

在FPGA中,要实现对DS18B20的通信处理,主模块要实现对DS18B20_PROC模块的调用及建立与CPU之间的接口。

与CPU之间的接口通过建立若干寄存器实现。温度测量值和48位ID可以用4个16位寄存器保存。CPU通过读取这些寄存器可以获得温度测量数值和48位ID值。

CPU、FPGA及DS18B20的连接原理如图4所示。

 
5结束语


在系统中,FPGA可以分担许多主处理器的工作,提高整体实时性,降低CPU处理的严格实时约束,从而降低CPU软件处理的难度。同时,由于ACTEL公司的ProASICplus系列FPGA的保密特性,可以增强产品知识产权的保护。

本设计应用在电力监控产品中。测量出的装置内部温度用于电量测量精度补偿和报警,对保证产品测量精度和可靠运行具有重要意义。48位ID值用于产品的惟一编码标识和以太网MAC地址,便于产品生产、维护和管理。

关键字:数字  引脚  编程  寄存 引用地址:FPGA与DS18B20型温度传感器通信的实现

上一篇:DSP和FPGA构成的3/3相双绕组感应发电机励磁控制系统
下一篇:FPGA与DSP的高速通信接口设计与实现

推荐阅读最新更新时间:2024-03-30 21:23

基于FPGA的移位寄存器流水线结构FFT处理器设计与实现
0 引言   快速傅里叶变换(FFT)在雷达、通信和电子对抗等领域有广泛应用。近年来现场可编程门阵列(FPGA)的飞速发展,与DSP技术相比,由于其并行信号处理结构,使得FPGA能够很好地适用于高速信号处理系统。由于Altera等公司研制的FFT IP核,价钱昂贵,不适合大规模应用,在特定领域中,设计适合于自己领域需要的FFT处理器是较为实际的选择。   本文设计的FFT处理器,基于FPGA技术,由于采用移位寄存器流水线结构,实现了两路数据的同时输入,相比传统的级联结构,提高了蝶形运算单元的运算效率,减小了输出延时,降低了芯片资源的使用。在OFDM系统的实际应用中,因它可以采用快速傅里叶变换,能方便快捷地实现调制和解调,故
[嵌入式]
基于FPGA的移位<font color='red'>寄存</font>器流水线结构FFT处理器设计与实现
51单片机实现通讯协议的串口通讯编程
我们以51单片机为例。51中一般针对串口通讯编程,通常采取中断接受查询发送的方式。中断函数在接受数据到达时被重复调用,其实是个重复入栈的过程,所以不宜将函数写的太长,函数太长一般会导致栈太深占用系统资源,二是处理时间过长,可能导致通讯出错。为了防止在处理数据过程中不受干扰,通常在处理接受数据前关闭中断,处理完后再开。 通常的的编程方式如下: static void UartInterruptService(void) interrupt 4 { ES = 0; RI = 0; uart_process(SBUF); ES=1; } 下面重点介绍数据处理函数 uart_process(SBUF); 其实很多时候,对于通讯
[单片机]
51单片机实现通讯协议的串口通讯<font color='red'>编程</font>
携手领先企业,华为以新ICT助力工业数字化转型
德国汉诺威2017年4月24日电 /美通社/ -- 4月24日-28日,华为以“新ICT,迈向数字化转型之路”为主题,在德国亮相2017汉诺威工业博览会(HANNOVER MESSE 2017),围绕工业数字化,携手业界合作伙伴集中展示了基于物联网、行业云、全云网络、企业无线等新ICT技术的产品及解决方案,演绎工业数字化的全场景实践,涵盖制造、能源、交通(物流)等行业,并与GE、英特尔、东芝、T-System等宣布全新的重磅合作。 2017汉诺威工业博览会的主题是“产业集成-创造价值”,经历了机械化和电气化革命之后,制造业正朝着工业互联网的方向迈进。全互联的智能工业将对传统制造业进行重新定义,人、应用系统、智能机器正在以前所未
[工业控制]
基于DSP的数字移相器-变压变频器模块的设计与实现
  移相器简介   两个同频信号,特别是工频信号之间的移相,在电力行业的继电保护领域中是一个模拟、分析事故的重要手段。传统的移相方式都是通过三相供电用特殊变压器抽头,以跨相的方法进行移相,可统称为电工式移相。还有一种方法就是在信号衰减后,经模拟电路或数字电路实现移相,再由功放进行放大输出,一般称为电子式移相。工频信号经倍频电路(一般为3600或36000倍频)产生倍频信号送至微CPU,由其经过D/A转换器进行波形重新合成,同时微CPU改变合成波形的起始点时间,再经功放放大输出实现移相,一般称为程控式移相。   现在常用的数字移相器由以下几个功能模块组成:变频单元(变压变频器),变流单元(升流器),移相单元(数字相位表),数字电
[嵌入式]
基于DSP的<font color='red'>数字</font>移相器-变压变频器模块的设计与实现
重新定位的科沃斯商用机器人,如何布局线下数字化?
近日,科沃斯商用机器人举办2020线上新品发布会。此次发布会上,科沃斯商用机器人“官宣“了六款机器人——工具型金融服务机器人BENEBOT5旺宝5、大屏营销服务机器人SHOWBOT秀宝、巡检盘点机器人THINGBOT-C、巡检扫货机器人THINGBOT-S、巡检测温机器人THINGBOT-T和通用运动底盘NIMBOT敏宝。 2015年,科沃斯商用机器人发布了第一款公共服务机器人旺宝1。自此以后,科沃斯便在金融、零售、政务、医疗等垂直领域持续深耕。 “自从进入商用机器人领域后,我们一直在思考,我们的客户到底需要什么样的机器人?经过多年探索后,我们用最朴素但却本质的答案来回应:刚需、专业和可靠。”科沃斯商用机器人首席执行官高倩说。 在
[机器人]
用IXP网络处理器设计的数字家庭媒体中心系统
摘 要 随着电子消费类设备需求的不断增加以及Internet数字媒体内容的迅猛发展,家庭网络中的数字媒体内容开始持续增长,人们更加迫切地需要增强对等通信与信息共享的能力。本文描述了一种基于IXP网络处理器架构的数字家庭媒体中心系统(DHMCS)的设计及其实现。 关键词 ARM,家庭媒体系统,嵌入式系统,NMPR,UPnP 1 引 言 1.1 数字家庭的广泛应用 数字技术和计算机技术的飞速发展正不断产生众多的数码产品,从个人电脑、手机、PDA到MP3、数字电视、DVD、DV/DC,数字家电产品已经步入了人们的日常生活之中。同时,宽带通信与互联网应用的普及也极大地促进了数字媒体内容的发展。因此,构建一个宽带接入、内部互联、内
[应用]
英伟达Omniverse,数字孪生“地球”
文/VR陀螺 小钻风 当元宇宙之火熊熊燃烧时,今年4月英伟达CEO黄仁勋在主题演讲中大谈特谈,顶着“工程师元宇宙”出道的Omniverse开始落地,但元宇宙一词却在黄仁勋新一轮GTC大会的主题演讲中销声匿迹。 图源:英伟达  Omniverse似乎向人们证明了,我就是我,不一样的烟火,有没有元宇宙加身,是不是所谓的元宇宙概念,不影响我存在的价值,以及我将为未来世界带来的改变。   黄仁勋:用USD统一3D格式,虚拟世界将像网站一样不断涌现  整场主题演讲,黄仁勋只字未提元宇宙,Omniverse、虚拟世界与数字孪生却贯穿全程。 黄仁勋的描述之下,2D信息将向3D转变,我们将迎来众多3D的虚拟世界。黄仁勋在演讲中说“互联网改变
[机器人]
使用STM32寄存器点亮LED灯
事先声明哦,我也是最近才开始学32的,不过我会尽可能详细的讲解这些小知识点 我们口中常说的LED灯其实是指LED发光二极管,关于这一点涉及到的知识点,我已经在51单片机教程中提及(同点亮LED灯),故而不再详述。 刚开始接触STM32的时候,觉得他的操作明显区别于51,比如我们点亮一个LED灯,直接控制相应的IO口即可;但32不一样,我们需要先设置时钟控制寄存器 RCC_APB2ENR|=1 4; //一共32位 然后设置它的工作方式,输出速度。 GPIOC_CRL&=~(0x0f (4*i)); //控制第i+1个led GPIOC_CRL|=(3 (4*i)); //3可以表示为0011,然后在它的前面补零,凑
[单片机]
使用STM32<font color='red'>寄存</font>器点亮LED灯
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新工业控制文章
换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved