datasheet

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

2008-03-24来源: www.laogu.com 关键字:CRC校验  仿真波形  存储器控制  串行输出  数字温度传感器  配置寄存器  系统复位

  

  l 引言

  DS18B20是DALLAS公司生产的一线式数字温度传感器,采用3引脚T0-92型小体积封装;温度测量范围为-55℃~+125~C,可编程为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通信不存在被迫关闭中断的情况,可以满足对实时性要求严格的应用要求。

  2 ProASICplus系列FPGA简介

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

  因为ProASICplus系列FPGA基于Flash技术,利用Flash开关保存内部逻辑,因此不需要另外的器件。由于不需要上电配置过程,因此具备上电就立即工作的特点。不用配置器件,系统的保密性提高。

  笔者在电力监控的产品中利用APA150型FPGA实现了逻辑控制、A/D采样控制和FIFO存储等功能,并利用剩余的资源实现了DS18B20的通信功能。APA150在整个系统中充当协处理器,使主CPU从繁重的实时处理中解脱出来。

  3 DS18B20简介

  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操作时序

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

  

  

  4 FPGA与DS18B20的通信

  4.1 DS18B20的操作模块

  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)。图3示出是该模块的仿真波形

  

  

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

  4.2 FPGA与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地址,便于产品生产、维护和管理。

 

关键字:CRC校验  仿真波形  存储器控制  串行输出  数字温度传感器  配置寄存器  系统复位

编辑:ssb 引用地址:http://www.eeworld.com.cn/gykz/2008/0324/article_63.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:FPGA与DSP的高速通信接口设计与实现
下一篇:基于ARM的嵌入式系统中从串配置FPGA的实现

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

CRC校验码在单片机中的程序实现的求取

由单片机嵌入式系统与微机组成的工业检测和数据采集系统中,计算机与单片机之间经常需要进行数据通信。在数字通信过程中,干扰有可能使接收到的二进制数和发送的不一致,造成“0”和“1”互变的差错。一个实用的通信系统必需能发现这种差错,并加以纠正或给出重新发送信息。CRC(CyclICRedundancy Code循环冗余码),也称多项式编码。是一种检错效率高、原理简单、易于实现的通信编码,是目前在数字通信领域应用最为广泛的一种检验方式。如16位的 CRC—CCITT标准可以检测出所有的单位错、双位错、奇位数错及小于等于16位的突发错,大于17位的突发错检错率为99.9984%[1]。可见, CRC码的检错率要大大高于一般的奇偶校验
发表于 2018-03-05
CRC校验码在单片机中的程序实现的求取

STM32F4学习笔记11——CRC循环冗余校验

关于CRC校验有以下几个方面 1.模2除(也就是异或)。 2.多项式与二进制关系(x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0,x的最高幂次为R,转换成对应的二进制数有R+1位。)。CRC基本原理 循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示
发表于 2017-09-20
STM32F4学习笔记11——CRC循环冗余校验

CRC校验在STM32和C#中使用

/* Enable CRC clock */    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);    //STM32CRC  u32 CRC32(u8 *pBuf, u16 nSize)  {          u32 index = 
发表于 2017-01-03

CRC16-循环冗余校验

【例子】通过CRC-16循环冗余校验的方式实现数据传输与控制,例如控制LED灯、蜂鸣器、发送数据到上位机。     由于是数据传输与控制,需要定制一个结构体、共用体方便数据识别,同时增强可读性。从数据帧格式定义中可以定义为“PKT_CRC_EX”类型。 识别数据请求什么操作可以通过以下手段来识别:识别数据头部1、数据头部2,操作码。当完全接收数据完毕后通过校验该数据得出的校验值与该数据的尾部的校验值是否匹配。若匹配,则根据操作码的请求进行操作;若不匹配则丢弃当前数据帧,等待下一个数据帧的到来。 结构体定义如下:(1)typedef  struct
发表于 2016-12-31

基于STM32的CRC校验说明

;这个是全局变量,在main函数和USART.H中都有定义unsigned short TxBuf[10];unsigned short RxBuf[RxCountMax];unsigned short RxCnt;unsigned short TxCnt;unsigned short Rx50msCnt;unsigned long pAddr1,pAddr2,pAddr3,pAddr4;//CRC16校验算法unsigned short CRC_CHECK(unsigned short *Buf, unsigned short CRC_CNT){    unsigned short CRC_Temp; 
发表于 2016-12-27
基于STM32的CRC校验说明

CRC16校验程序

//CRC16校验在通讯中应用广泛,这里不对其理论进行讨论,只对常见的3种//实现方法进行测试。方法1选用了一种常见的查表方法,类似的还有512字//节、256字等查找表的,至于查找表的生成,这里也略过。// ---------------- POPULAR POLYNOMIALS ----------------//  CCITT:      x^16 + x^12 + x^5 + x^0             
发表于 2016-11-24

小广播

最新视频课程更多

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved