FPGA温度测量设计论文 - 图文

更新时间:2024-06-02 09:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

FPGA温度测量设计

摘 要

温度作为一种最基本的环境参数,与人民的生活有着密切关系。温度的测量和控制在工业、农业、国防、医疗等各个领域中应用普遍。温度测量仪是一种常用的检测仪器。

本文首先介绍了DS18B20的工作原理,利用数字温度传感器DS18B20的数据接口特点,展示了FPGA(Field-Programmable Gate Array,即现场可编程逻辑门阵列)的使用方法以及Verilog HDL(HDL:Hardware Discription Language)语言的编程,完成了基本温度测量功能。给出了硬件电路和软件设计,此设备具有结构简单、转换速度快、精确性高,扩展性好等优点。

关键词:FPGA;DS18B20;测温;Verilog HDL语言

1

Design of temperature measurement based on FPGA

Abstract

Tenperture is one of the most basic environmental parameters, and it has a close relationship with people's life. In industry, agriculture, national defense,medical and other fields, temperature measurement and control was widely used.The temperature measuring instrument is a kind of common testing instrument.

In this paper,first we introduces the work principle of DS18B20,and the characteristics of data interface of digital temperature sensor DS18B20, demonstrated how to use FPGA(Field-Programmable Gate Array) and the Verilog HDL(HDL:Hardware Discription Language)programming language,accomplished the function of temperature measurement. Given the hardware circuit and software design.The device has the advantages of simple structure,fast transform speed,high accuracy,good scalability,and so on.

Key Words: FPGA;DS18B20;Temperature measurement;Verilog HDL language

2

目 录

中文摘要..................................................................................................1 英文摘要..................................................................................................2 1 绪论 ..........................................................................................................................................1

1.1题目背景意义 ................................................. 1 1.2工作内容 ..................................................... 2

1.2.1技术指标和要求.................................................................................................2 1.2.2设计的难点重点.................................................................................................2

2 系统方案设计 .....................................................................................................................3

2.1温度测量原理及方法 ........................................... 3 2.2系统方案及方框图 ............................................. 3 2.3FPGA技术 ..................................................... 4 2.4DS18B20温度传感器 ............................................ 6

2.4.1DS18B20特性介绍 ............................................................................................6 2.4.2DS18B20测温原理 ............................................................................................7 2.4.3DS18B20供电方式 ................................................................................. 8 2.4.4DS18B20时序 ......................................................................................... 9 2.4.5DS18B20操作命令 ............................................................................... 10 2.5硬件设计 .................................................... 11

2.5.1FPGA最小系统硬件原理图 ................................................................................. 11

2.5.2DS18B20的连接 ................................................................................... 12 2.5.3数码管显示电路 ................................................................................... 12 2.5.4电源电路 ........................................................................................................... 13 2.5.5时钟电路 ........................................................................................................... 13 2.5.6复位电路 ........................................................................................................... 13 2.6软件设计流程图 .............................................. 13 3 功能模块建立及仿真 ........................................................................................................ 15

3.1QuartusⅡ及VHDL语言 ......................................... 15

3

3.1.1QuartusⅡ介绍 ....................................................................................... 15 3.1.2Verilog HDL介绍 .................................................................................. 16 3.1.3QuartusⅡ的使用 ................................................................................... 17 3.2分频 ........................................................ 19 3.3温度信号采集 ................................................ 20 3.4数码管显示 .................................................. 20 3.5顶层原理图 .................................................. 21

4 下载调试及实际测量 .................................................................................................. 22 5 设计遇到的问题及误差分析 .................................................................................. 23

5.1设计遇到的问题及分析 ........................................ 23 5.2误差分析 .................................................... 23

6 总结 ....................................................................................................................................... 24 致 谢........................................................................................................................................ 25 参考文献 .................................................................................................................................. 26 毕业设计(论文)知识产权声明 .................................................................... 27 毕业设计(论文)独创性声明 ......................................................................... 28

4

1绪论

1 绪论

1.1 题目背景意义

温度是表征物体冷热程度的物理量,是国际单位制七个基本物理量之一,作为一种最基本的环境参数,与人民的日常生活有着密切关系。温度的测量和控制在工业、农业、国防、医疗等各个领域中应用普遍。

温度测量方法也有很多,基本分为两大类,接触式和非接触式。接触式测温方法包括膨胀式测温、电量式测温、接触式光电,热色测温等几类。接触测温法在测量时需要与被测物体或介质充分接触,一般测量的是被测对象和传感器的平衡温度,测量时会对被测温度有影响。非接触式测温方法不需要与被测对象接触,因而不会有干扰,动态特性很好,但会受到被测对象表面状态或测量介质的影响。

电量式测温方法主要利用材料的电势,电阻或其他电性能与温度的单值关系进行温度测量,包括热电偶温度测量、热电阻和热敏电阻的温度测量、集成芯片温度测量等。

随着电子技术的发展,可以将感温元件和相关电子线路集成在一个小芯片上,构成一个小型化,一体化及多功能化的专用集成电路芯片,输出信号可以是电压、频率、或总线数字信号,使用非常方便,适用于便携式设备,有着广泛的适用范围。

FPGA(Filed-Programmable Gate Array)即现场可编程逻辑门阵列,是在PAL、GAL、CPLD等可编程器件基础上进一步发展的产物,它是作为专用集成电路领域中的一种半制定电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。与单片机或其他技术相比较而言,FPGA芯片内部集成了很多有用的模块,其运行速度快,编程较为简单,适用场合多,拓展性强,降低了设计难度。DS18B20温度传感器接线方便,封装多样,具有体积小、使用方便、耐磨耐碰等优点,适用于各种狭小空间设备数字测温和控制领域,是各种温度测量场合的首选产品。

在本文中,利用FPGA器件与DS18B20温度传感器设计实现了一种数字温度测量仪,检测室温,与其它系统相比较,此测量仪具有结构简单、抗干扰能力强、精确性高、转换速度快、扩展性好等优点。通过本设计可以对FPGA技术加深印象,在今后的设计与开发工作中将大有用处。

1

西安工业大学毕业设计(论文) 1.2 工作内容

1.2.1技术指标和要求

在本次设计中,我们需要用DS18B20测量实时温度,用四位共阳数码管来显示,要求达到以下几个要求 技术指标:

测量范围:15~25℃,分辨率:0.5℃,显示位数:4位显示带小数点

工作要求:

1.了解温度测量系统设计不同方案,确定方框图;

2.掌握数字传感器及FPGA芯片功能,划出硬件原理图;

3.根据模块划分设计系统软件,学习VHDL或Verilog语言,并在

QuartusⅡ环境下仿真,观察正确性; 4.完成电路硬件组装及调试 1.2.2设计的难点重点

1.软件设计部分重点是流程图的设计与各模块编程,难点在于编程的实现以及DS18B20温度传感器与FPGA芯片之间的通信;

2.硬件部分要深入理解DS18B20器件,难点在于各个电路单元单路设计和各单元电路的连接;

3.整个设计重点在于熟练的掌握DS18B20的工作原理和应用QuartusⅡ软件。

2

2系统方案设计

2 系统方案设计

2.1 温度测量原理及方法

温度是表征物体冷热程度的物理量,温度测量仪是利用物质各种物理性质随温度变化的规律,把温度转换为电量并显示的一种仪器,温度的测量和控制已经发展为重要的课题,在工程应用和科学研究等很多场合都十分需要,比如大型饲养场,蔬菜大棚等等。

温度的测量方法有最基本的两种,接触式和非接触式,非接触式又称为辐射测温。大多数情况下,我们都采用接触式测量方法,利用温度传感器或相关器件,比如基于AT89C51单片机的温度测量和基于ARM的温度测量系统等等,经过比较,决定采用FPGA技术和温度传感器DS18B20组成的系统来实现测量温度的功能。后面将对其进行阐述。

2.2 系统方案及方框图

鉴于使用FPGA,开发板上没有温度传感器,所以需要添加传感器DS18B20,而DS18B20有两种传输途径,一种是无线传输,一种是有线传输。对于无线传输,优点是测量更加灵活方便,不局限于线的长度,缺点是必须增加外部设备,增加了设计的难度,所以我们采用第二种,有线传输方式,在实现功能的同事设备简单,难度降低。DS18B20是将采集到的无难度信号转换为9到12位的串行数据,而数码管显示是通过8位并行数据,所以需要对采集到的串行数据进行转化处理送到数码管来显示。FPGA工作频率是1MHz,开发板上时钟信号是50MHz,所以需要通过编程来实现分频,经过考虑,画出系统方框图(图1)

分 频 温度信号采集 FPGA控制 数码管显示

图2.1 系统方案设计

3

西安工业大学毕业设计(论文) 分频:将50MHz的时钟频率进行分频产生1MHz频率信号,为FPGA器提供正常工作频率。

温度信号采集:从外界获得温度信号,发送给FPGA控制模块;

FPGA控制:根据DS18B20所遵循的初始化时序、读时序、写时序等通信协议对DS18B20传感器进行初始化和访问,将从DS18B20读取的二进制温度信息进行处理送给数码管;

显示模块:从FPGA控制模块获得输出数据,将其译为七段值,在共阳数码管上显示采集到的温度信息。

2.3 FPGA技术

FPGA(Field-Programmable Gate Array,即现场可编程门阵列),它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。是美国Xilinx公司于1984年首先开发的一种通用型用户可编程器件。FPGA既具有门阵列器件的高集成度和通用性,又有可编程逻辑器件用户可编程的灵活性。它是作为专用集成电路(ASIC)领域中的一种半制定电路出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的特点。

以硬件描述语言(VHDL或Verilog)所完成的电路设计,可以经过简单的综合与布局,快速烧至FPGA上进行测试,是现在IC设计验证的技术主流。这些可编程元件可以被用来实现一些基本的逻辑电路(比如AND、OR、NOT、XOR)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编程的元件里也包含记忆元件若触发器或者其他更完整的记忆块。

传统上FPGA只能实现相对较小的逻辑电路,随着工艺技术的提高, FPGA的容量和性能也不断提高,如今FPGA已经被用于实现大的逻辑电路甚至整个系统。这些大的系统相对于传统上一直作为FPGA市场目标的小逻辑分支电路有着很大的不同。其中一个最重要的不同就是这些大的系统中包含存储器。所以,要有效的在FPGA中实现存储器,结构的支持至关重要。

FPGA一般来说比专用集成芯片的速度要慢,无法完成复杂设计,但是功耗低。他们也有很多优点,比如可以快速成品,可以修改程序或者改正程序中的错误,而且造价十分便宜。FPGA从诞生以来,经历了从配角到主角的过程,从初期开发应用到限量生产应用再到大批量生产应用的发展历程。从技术上来说,最初只是逻辑器件,现在强调平台概念,加入数字信号处理、嵌入式处理、高速串行和其他高端技术,从而被应用到更多的领域,让更多学FPGA的人看到了希望,其广阔的前景正是我们选择的原因之一。由于用户可以迅速对PLD进行编程,按照需求实现特殊功能,与ASIC和ASSP相比,PLD在灵活性、开发成本以及产品及时面市方面更具优势,所以未来FPGA将会是一个非常有前景的行业。FPGA由于其结构的特殊性,可以重复编程,开发周期较短,越来越受人们的青睐。

4

西安工业大学毕业设计(论文) 其工作原理如下,FPGA采用了逻辑单元阵列LCA(Logic Cell Array)的概念,内部包括可配置逻辑模块(Configurable Logic Black),输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA是可编程器件,与传统逻辑电路和门阵列相比,FPGA结构不同,FPGA利用小型查找表(16x1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O模块。由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的连接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。

其基本特点是:采用FPGA设计专用集成电路(ASIC),用户不需要投片生产,就能得到想用的芯片;可做其他全定制或半定制ASIC电路的中试样片;内部有丰富的触发器和I/O引脚;是专用集成电路中设计周期最短、开发费用最低、风险最小的器件之一;采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无需专用的FPGA编程器,只需用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的功能。所以,FPGA使用起来非常灵活。

FPGA设计也有自己的原则,其原则如下: 1.面积与速度的平衡互换原则

这里的面积指的是FPGA的芯片资源,包括逻辑资源和I/O资源等;这里的速度指的是FPGA工作的最高频率(和DSP或者ARM不同,FPGA设计的工 作频率是不固定的,而是和设计本身的延迟紧密相连)。 在实际设计中,使用最小的面积设计出最高的速度是每一个开发者追求的目标,但是“鱼和熊掌不可兼得”,取舍之间展示了一个开发者的智慧。

2.硬件可实现原则

FPGA设计通常会使用HDL语言,比如Verilog HDL或者VHDL。当采用HDL语言来描述一个硬件电路功能的时候,一定要确保代码描述的电路是硬件可实现的。

Verilog HDL语言的语法与C语言很相似,但是它们之间有着本质的区别。C语言是基于过程的高级语言,编译后可以在CPU上运行。而Verilog HDL语言描述的本身就是硬件结构,编译后是硬件电路。因此,有些语句在C语言的环境中应用是没有问题的,但是在HDL语言环境下就会导致结果不正确或者 不理想。

3.同步设计原则

5

西安工业大学毕业设计(论文) 同步电路和异步电路是FPGA设计的两种基本电路结构形式。异步电路的最大缺点是会产生毛刺。同步设计的核心电路是由各种触发器构成的。这类电路的任何输出都是在某个时钟的边沿驱动触发器产生的。所以,同步设计可以很好地避免毛刺的产生。随着可编程逻辑技术的不断进步和创新,FPGA已被广泛应用于通信、航天、医疗电子、工业控制等领域。上90年代后期FPGA市场就已经过一番激烈整合,许多业者不是退出PLD(可程序化逻辑装置)市场,就是出售其PLD业务部门,或将PLD业务部门分立成独立公司,或进行购并等。时至今日,FPGA市场的主要业者仅剩数家,包括Altera、Xilinx(赛灵思,过去称为:智霖科技)、Actel、Atmel、Lattice。

FPGA(现场可编程逻辑器件)产品的应用领域已经从原来的通信扩展到消费电子、汽车电子、工业控制、测试测量等广泛的领域。而应用的变化也使FPGA产品近几年的演进趋势越来越明显:一方面,FPGA供应商致力于采用当前最先进的工艺来提升产品的性能,降低产品的成本;另一方面,越来越多的通用IP(知识产权)或客户定制IP被引入FPGA中,以满足客户产品快速上市的要求。此外,FPGA企业都在大力降低产品的功耗,满足业界越来越苛刻的低功耗需求。

由于其现场逻辑功能可重构且具有高集成度、高密度和高性能等特点,因而得到了迅猛发展。FPGA芯片所包含的资源越来越丰富,可实现的功能也越来越强,这使得FPGA在电子电路设计中越来越重要。目前FPGA已经渗透到人们日常生活的各个方面,在手机、电视、数码相机、洗衣机、电冰箱、空调,甚至电饭锅、手表里,都有它们的身影。在工业自动化控制、通信、仪器仪表、汽车、船舶、航空航天、军事设备、消费类电子产品等领域更是它们的天下。

2.4 DS18B20温度传感器

2.4.1DS18B20特性介绍

DS18B20数字式温度传感器,与传统的热敏电阻有所不同,它采用集成芯片,单总线技术,能够有效地减小外界的干扰,提高测量的准确性或者精度,同事,它可以直接将温度信号转化成串行数字信号提供给微处理器,由于接口简单,使得数据传输和处理更加简单化,它是部分功能电路的集成,使得总体设计更加简洁,有效地降低了成本,在搭建与焊接电路时,更加省时省力,调试起来也十分方便,从而大大缩短了研发周期。DS18B20的主要特征:

1.采用单总线接口方式与微处理器连接时,仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好、抗干扰能力强,适合于恶劣环境的现场测温,使用方便;

2.测量范围宽,精度高,DS18B20的测量范围是-55℃~+125℃;在-10℃~85℃范围内,精度为±0.5℃;

6

西安工业大学毕业设计(论文) 3.在使用中不需要任何外围元件;

4.多个DS18B20可以并联在唯一的三线上,实现多点测温;

5.供电方式灵活,DS18B20可以通过内部寄生电路从数据线上获取电源,也可以外界电源;

6.测量参数可配置,DS18B20的测量分辨率可通过程序设定9~12位; 7.负压特性,电源极性接反时温度计不会因发热而烧毁,但不能正常工作; 8.掉电保护功能,DS18B20内部含有EEPROM,在系统掉电后,仍可保存功能。

下面将对其内部结构做以介绍,DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2-2所示。

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图2-2所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3-4所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分率。

图2.2 DS18B20内部结构图 图2.3 DS18B20引脚图 2.4.2DS18B20测温原理

DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一个频率稳定的计数脉冲。

7

西安工业大学毕业设计(论文) 高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。

初始时,计数器1预置的是与-55℃相对应的一个预置值。以后计数器1每一个循环的预置数都由斜率累加器提供。为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。

DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃时,温度寄存器的最低位就进位然后置0。这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5℃,四舍五入最大量化误差为±1/2LSB,即0.25℃。

温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。

DS18B20测量温度时使用特有的温度测量技术。DS18B20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性度加以补偿。测量结果存入温度寄存器中。一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。 2.4.3DS18B20供电方式

DS18B20有两种供电方式,一种是寄生电源强上拉供电方式(图2.4),一种是外部供电方式(图2.5),如下图:

图2.4 寄生电源强上拉供电方式电路图

在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ 处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。为了使 DS18B20 在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到

8

西安工业大学毕业设计(论文) E2存储器操作时,用MOSFET 把 I/O 线直接拉到 VCC 就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最10μS内把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺点就是要多占用一根I/O口线进行强上拉切换。

图2.5 外部电源供电方式电路

在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个 DS18B20传感器,组成多点测温系统。在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85℃。 2.4.4DS18B20时序

DS18B20的工作方式看似简单,只是单线传输,直接解读,其实初始化与读写操作比较复杂,时序要求非常精确,一下将一一介绍

初始化:使用DS18B20时, 首先需将其复位, 然后才能执行其它命令。复位时, 主机将数据线拉为低电平并保持480us~960us,然后释放数据线, 再由上拉电阻将数据线拉高15us~60us,等待DS18B20发出存在脉冲, 存在脉冲有效时间为60 us~240us,这样,就完成了复位操作。其复位时序如图2.6所示

2.6 初始化时序 2.7 写时序

写时隙:在主机对DS18B20写数据时, 先将数据线置为高电平, 再变为低电平, 该低电平应大于1us。在数据线变为低电平后15us内,根据写“1”或写“0” 使数据线变高或继续为低。DS18B20将在数据线变成低电平后15us~ 60us内对数据线进行采样。要求写入DS18B20的数据持续时间应大于60us而小于120us,两次写数据之间的时间间隔应大于1us。写时隙的时序如图2.7所示

9

西安工业大学毕业设计(论文) 读时隙:当主机从DS18B20读数据时, 主机先将数据线置为高电平, 再变为低电平, 该低电平应大于1us,然后释放数据线,使其变为高电平。DS18B20在数据线从高电平变为低电平的15us内将数据送到数据线上。主机可在15us后读取数据线。读时隙的时序如图2.8所示

图2.8 读时隙

2.4.5DS18B20操作命令

主机可通过一线端口对DS18B20进行操作,其步骤为:初始化命令(复位)→ROM功能命令→存储器功能命令→执行/数据,DS18B20的ROM命令有5个,存储器命令有6个。命令的执行都是由复位、多个读时隙和写时隙基本时序单元组成。因此,只要将复位、读时隙、写时隙的时序了解清楚, 使用DS18B20就比较容易了, 其操作指令如下。

1.Read ROM[33H]

2.Match ROM[55H]:这个是匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。所有和64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多个器件时都可以使用。

3.Skip ROM[0CCH]:这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。如果总线上不止一个从机,在Skip ROM命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突(漏极开路下拉效果相当于相“与”)。

4.Search ROM[0F0H]:当一个系统初次启动时,总线控制器可能并不知道单线总线上有多个器件或它们的64位编码,搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。

5.Alarm Search[0ECH]:这条命令的流程和Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,知道再一次测得的温度值达不到报警条件。

6.Write Scratchpad[4EH]:这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。

7.Read Scratchpad[0BEH]:这个命令读取暂存器的内容。读取将从第1个字节开始,一直进行下去,直到第9(CRC)字节读完。如果不想读完所有字

10

西安工业大学毕业设计(论文) 节,控制器可以在任何时间发出复位命令来中止读取。

8.Copy Scratchpad[48H]:这个命令把暂存器的内容拷贝到DS18B20的E2ROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个0,如果拷贝结束的话,DS18B20则输出1。如果使用寄生电源,总线控制器必须在这条命令发出后立即启动强上拉并保持10ms。

9.Convert T[44H]:这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1,。如果使用寄生电源,总线控制必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。

10.Recall E2:这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上电时自动执行,这样器件一上电,暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读数据隙,器件会输出温度转换忙的标识:0为忙,1为完成。

11.Read Power Supply[0B4H]:若把这条命令发给DS18B20后发出读时间隙,器件会返回它的电源模式:0为寄生电源,1为外部电源。

2.5 硬件设计

设计采用FPGA器件和DS18B20实现温度测量,核心芯片采用ALTERA公司生产的CycloneII系列EP2C8Q208C8芯片,将DS18B20与FPGA开发板焊接在一起,同时使能温度传感器和数码管显示模块,元件安装示意图如图2.9所示,该系统要正常工作,还需要电源电路、下载电路、时钟电路,复位电路等单元电路支持,下面将对其进行说明。

图2.9 FPGA开发板与DS18B20的连接

2.5.1FPGA最小系统硬件原理图

FPGA测温最小系统主要由FPGA器件、时钟电路、电源电路、显示电路

11

2.5.2DS18B20的连接

2.5.3数码管显示电路

等组成。硬件原理图如图2.10

图2.11 DS18B20原理图

西安工业大学毕业设计(论文) 图2.10 FPGA测温最小系统原理图

利用开发板与DS18B20组成温度测量模块,原理图如图2.10所示。在设计温度传感器部分时,由于DS18B20进行精确转换时需要I/O引脚保持大电流供电,这样对FPGA芯片引脚造成很大压力,所以要使DS18B20的引脚接外部电源。该电路使用外部供电方式,外部电源供电方式工作可靠,稳定,抗干扰能力强,设计起来也是十分方便。

开发板上有8位共阳七段数码管。当位码驱动信号为低电平0时,对应的数码管才能操作;当段码驱动信号为低电平0时,对应的段码点亮。如图2.11

图2.12 数码管显示电路

12

西安工业大学毕业设计(论文) 2.5.4电源电路

电源通过接口,通过功能板由低压差线性稳压器LMS1117-3.3和LM1117-ADJ转换成稳定的1.2V,为FPGA提供内部逻辑阵列电源、3.3V电压为FPGA提供IO电源和其它的芯片及电路的工作电源,并在核心板上加入滤波电容来增加系统稳定性。如图2.12所示

图2.13 FPGA电源电路

2.5.5时钟电路

该开发板采用50MHz有源贴片晶体为系统提供运行时钟。EP2C8Q208C8开发板为客户提供8个CLK 时钟使用,这些时钟都可以用作普通的输入引脚。电路原理如图2.13所示。

图2.14 时钟电路 图2.15 复位电路

2.5.6复位电路

用户可以通过编程实现复位功能,复位按键放置在功能板上左下角图,硬件原理如图2.14所示。

2.6 软件设计流程图

DS18B20采用一根I/O总线读写数据,有严格的读写时序要求,需要多次进行读写,设计采用状态机控制时序,FPGA控制DS18B20实现温度转换的程序流程如图2.15所示。

13

西安工业大学毕业设计(论文) 开始 时钟分频 数码显示 计数器计数 16位数据 发送复位脉冲 发送Read Scratchpad 应答 发送Skip ROM 发送Skip ROM 应答 发送Convert T 等待温度转换 图2.16 软件设计流程图

发送复位脉冲

14

3功能模块建立及仿真

3 功能模块建立及仿真

3.1 QuartusⅡ及VHDL语言

3.1.1QuartusⅡ介绍

QuartusⅡ是Altera公司提供的综合性PLD/FPGA开发软件,属于平台化设计工具。用户可以在QuartusⅡ中实现整个数字集成电路的FPGA设计流程。它在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境Max+plusⅡ的更新换代产品。支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusⅡ可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。QuartusⅡ支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,Quartus Ⅱ通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Max plusⅡ作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Max plusⅡ的更新支持,QuartusⅡ与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在QuartusⅡ中包含了许多诸如SignalTapⅡ、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Max plusⅡ友好的图形界面及简便的使用方法。

Altera QuartusⅡ作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。其功能十分强大,QuartusⅡ提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局连线编辑;LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性

15

3功能模块建立及仿真

能影响较小或无影响的后续模块;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTapⅡ逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。 3.1.2 Verilog HDL介绍

Verilog HDL(HDL:Hardware Discription Language)是一种硬件描述语言,是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。

Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995.

Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在

16

西安工业大学毕业设计(论文) 与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。但Verilog HDL较自由的语法,也容易造成初学者犯一些错误,这一点要注意。下面列出的是Verilog硬件描述语言的主要能力:

基本逻辑门,例如and、or和nand等都内置在语言中;用户定义原语( UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。 · 开关级基本结构模型,例如pmos 和nmos等也被内置在语言中;提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。能够描述层次设计,可使用模块实例结构描述任何层次。设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。Verilog HDL不再是某些公司的专有语言而是I E E E标准。人和机器都可阅读Verilog 语言,因此它可作为E D A的工具和设计者之间的交互语言。Verilog HDL语言的描述能力能够通过使用编程语言接口( P L I)机制进一步扩展。P L I是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级( RT L)到算法级,包括进程和队列级。能够使用内置开关级原语在开关级对设计完整建模。同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。在行为级描述中, Verilog HDL不仅能够在RT L级上进行设计描述,而且能够在体系结构级描述及其算 法级行为上进行设计描述。能够使用门和模块实例化语句在结构级进行结构描述。在Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。Verilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或)。对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。可以显式地对并发和定时进行建模。提供强有力的文件读写能力。语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。 3.1.3 QuartusⅡ的使用

QuartusⅡ是一种用Altera的专业EDA工具,支持原理图输入,HDL硬件描述语言的输入等多种输入方式,相比大家也都学过数字电子技术基础(数电),实验课的时候用的就是这个工具,当时我们就是使用原理图输入的方式来进行

17

西安工业大学毕业设计(论文) 数字系统的设计的,这是一种属于上世纪七八十年代的数字系统设计方式,现在我们学的就是硬件描述语言的输入方式,利用类似高级程序的设计方法来设计出数字系统。这是一种上世纪九十年代开始兴起并会在当前有巨大发展,更加是未来半个世纪内会成为数字系统设计最重要的设计方式,接下来我们需要对这种智能的EDA工具进行初步的学习。使大家以后的设计更加容易上手。

图3.1 QuartusⅡ主界面

第一步:打开主界面如图3.1所示

快捷工具栏:提供设置(setting),编译(compile)等快捷方式,方便用户使用,用户也可以在菜单栏的下拉菜单找到相应的选项。菜单栏:软件所有功能的控制选项都可以在其下拉菜单中找到。编译及综合的进度栏:编译和综合的时候该窗口可以显示进度,当显示100%表示编译或者综合通过。信息栏:编译或者综合整个过程的详细信息显示窗口,包括编译通过信息和报错信息。

第二步:新建工程(file>new Project Wizard)

1.工程名称:

图3.2 工程名与文件名

第一行为工程保存路径,第二行为工程名,第三行为顶层模块名,须跟工程名相同,在文件输入时,顶层模块必须和工程字相同(图3.2)完成后NEXT直接到窗口2。

2.选择芯片型号:在Family选择芯片系列型号,以本设计为例,选择CycloneⅡ找到EP2C8Q208C8芯片,选择完成后finish,新工程建立完成。

18

西安工业大学毕业设计(论文)

图3.3芯片选择

第三步:编程及检错,在工具栏File下点击New,新建一个VerilogHDL文件,在此可以将已经编写完成的程序直接粘贴在工作区(注意实体名与工程名要相同),这样便提高了工作效率。将文件保存。保存后,加点主界面按钮,完成后,无错误点击确定,有错误进行修改。

第四步:锁定引脚,设置管脚:单击主界面Assignment按钮→Pins,在弹出的界面设定对应管脚(Node name为端口名,Location为管脚),双击Location选择您需要的管脚,如图3.4所示

图3.4 设置管脚

第五步:整体编译,单击主界面按钮,进行编译,完成无错误后点击确定,有责进行修改。

第六步:下载调试。单击主界面按钮,在弹出的窗口,单击Hardware Setup…,然后选中File所在行中的Program/Configure,单击Start,等待结果。

图3.4 调试

3.2 分频

由于FPGA开发板上时钟信号为50MHz,FPGA工作频率为1MHz,所以需要通过编程来实现分频功能,为FPGA和显示电路提供正常时钟信号。对其在QuartusⅡ9.0环境下仿真,结果如图3.5所示

19

西安工业大学毕业设计(论文)

图3.5 50MHz分频为1MHz

分频部分可以单独做一个模块,也可以不用,在后面的设计中直接用编程来实现分频,将分频部分加入整个编程可以减小一定的工作量,所以,在整个电路原理图中不会出现单独的分频模块。

3.3 温度信号采集

由于DS18B20的操作相对比较复杂,所以单独设置一个模块专门处理其初始化,鉴于数码管的显示模块设置是并行输入的,所以此模块兼备DS18B20的传输数据处理,把串行数据处理成并行数据。此模块的输入就一个是时钟,另一个就是DS18B20的串行实时温度代码(12位),其与DS18B20之间就一根线相连,实现对其初始化与数据接收,还要对接收的串行数据进行储存使之可以并行输出,以提供给显示模块。仿真模块如图3.6所示,时序图如3.7所示

图3.6信号采集模块

图3.7信号采集时序

3.4 数码管显示

从控制模块输出的十进制数接入到显示模块中,将其译码为七段值,输出到共阳数码管上显示,显示模块编程后模块图如图所示:

20

西安工业大学毕业设计(论文)

图3.7数码管显示模块

在FPGA开发板上显示出来的温度用四位数码管显示,其中第一位是符号位,即温度的正负值,“1”代表负值,“0”代表正值,后三位显示温度值。

3.5 顶层原理图

将所有模块编译完成后,将整体原理图设置为顶层文件,在QuartusⅡ主界面工栏Tools下可查看其RTL图。如图3.8所示

图3.8顶层图

工程文件中含有三个“.v”文件,seg7x8_drive.v是数码管显示功能模块,ds18b20_drive.v是温度传感器的控制模块,ds18b20_seg7.v为顶层模块,实例化了前面两个模块,并将采集的温度值送至数码管中进行显示。其中最主要的温度传感器的控制模块ds18b20_drive.v。该程序对DS18B20进行控制, 而且加入了分频,不仅可以简化程序, 还可以缩短1次温度转换所需的时间。这样的话, 1次温度转换和数字温度值输出循环所涉及到的控制命令、数据交换和所需时隙如图3.9所示。

将文件设置为顶层文件十分必要,这样做的目的是为了后面编译与下载的是整个工程,而不是某个模块,如果不做置顶,将会出现,管脚设定时端口不全,只有部分端口,下载结果错误等情况,很多初学者在做工程时总会出现错误这样的错误,所以在刚开始时要养成良好的习惯。

21

4下载调试

4 下载调试及实际测量

本设计所用芯片是CycloneⅡ系列EP2C8Q208C8芯片,EP2C8Q208C8芯片作为核心处理器进行设计,CycloneⅡ系列芯片可以说是目前市场上性价比最高的芯片,比第一代的EP1C6或者EP1C12等芯片设计、内部的逻辑资源上都有很大的改进,同时价格也可以被广大客户接受;所以选择下载FPGA芯片为EP2C8Q208C8,将顶层文件仿真完成后进行管脚配置,在菜单栏Assignment中选择Pins项设定引脚,在弹出的窗口中设置好各个输入输出端与硬件相对应的引脚,管脚连接如图4.1所示,设置完成后关闭窗口并编译完成。

图4.1 管脚设定

将FPGA的下载数据线一端连接FPGA电路板,一端接计算机USB口,确认计算机已与开发板连接好后,打开开发板电源开关,在主工作界面里单击Programmer项,在弹出的窗口中选择Hardware Setup,,点击Start开始下载运行。运行结果如下图所示,第一位是正负符号位,后面三位是温度值。晚上在宿舍桌子上面,如图4.2所示,测得室内温度为22.5℃,再将手指放在传感器上后,如图4.3所示,测得温度为24.5℃,不过稍微有些不稳定。

图4.2 室内温度 图4.3手指加上的温度

22

5设计遇到的问题及误差分析

5 设计遇到的问题及误差分析

5.1 设计遇到的问题及分析

在整个设计中遇到了诸多问题,比如编程错误、比如下载错误等等,下面我们对设计中遇到的问题做以总结和分析。

1.编程错误,在编程的过程中遇到的问题有很多,在编程时实体名和文件名不同,这样的错误导致在软件编译时无法完成,所以在编程时必须注意文件名和实体名相同:缺少END语句,一行编完没有“;”等类似情况,很多情况下编程时由于着急或者马虎,会忘记这些小细节,这些错误也是由于没养成良好的习惯造成的,所以编程需要养成良好的习惯,要细心编写。

2.软件使用错误,QuartusⅡ软件使用起来步骤比较繁琐,对于刚应用的人来说很容易漏掉某个步骤,这个经过反复使用便可解决。

3.硬件部分的设计,这点也是设计的难点,后来经过找资料,问同学,解决了硬件问题,下载调试时也会出现一些问题,由于FPGA开发板用的是USB Blaster连接到电脑上,用外接电源上电,所以,USB线与电源线的连接也有先后顺序,应先连USB线,后接电源,再打开开发板上的电源开关,如果顺序错乱,可能引起无法实现功能的后果。

5.2 误差分析

误差是不可避免的,测量既有误差。在整个系统设计中采用温度传感器来测量,所以也有误差。经分析,本设计出现误差有三个方面,一是采用的温度传感器,其测得结果是外界温度和传感器温度的平均值;二是温度分布不均匀,三是传感器本身有一定误差,通过研究得到其误差为±0.5℃。

23

6总结

6 总结

本文利用FPGA与DS18B20设计并实现了一种用于检测室温的简易的数字温度测量仪。在QuartusⅡ开发平台上,利用VHDL语言完成软件程序设计,并完成硬件电路板设计,最后下载验证。设计实现了基于可编程器件FPGA,完全利用VHDL编程实现的智能温度测量系统,可用于检测温度变化不悬殊,精度要求不是非常高的场合进行单点温度测量,比如可用于室内温度检测、医疗仪器设备上等,具有结构简单、测量精确性高、使用方便、扩展性能好的优点。若对电路加以改动后还可以对粮食仓库、楼宇智能控制、煤矿等场合进行多点温度检测,拓展空间大。

经过本次设计,熟练的掌握了QuartusⅡ环境的使用,对FPGA器件也有了进一步的认识,基本掌握了VHDL语言的编程规范,并且对于设计一个系统有了较为深刻的印象。在本次课程设计中,我首先要衷心感谢我的指导老师严成华老师!他认真、严谨得给我们确定了设计提纲和进度。从开题到找资料,再到初、中期检查的准备、论文的撰写以及设计中遇到的其他问题,他都给以了我悉心的指导。在此次课程设计中,还得感谢我的同学,感谢他在我整个设计过程中给予的帮助!

24

致谢

致 谢

感谢导师杨永侠教授的关心、指导和教诲。杨永侠教授追求真理、献身科学、严以律己、宽已待人的崇高品质对学生将是永远的鞭策。

作者在攻读学士学位期间的工作自始至终都是在杨永侠教授全面、具体的指导下进行的。杨老师渊博的学识、敏锐的思维、民主而严谨的作风,使学生收益匪浅,终生难忘。

感谢实验室老师的关心和帮助。

感谢我的学友和朋友们对我的关心和帮助。

25

参考文献

参考文献

[1] 蒋鸿宇,王勇,植涌.由DS18B20的多点温度测量系统[J].单片机及嵌入式系统应用,2007(1):59-61.

[2] 赵海兰,赵祥伟.智能温度传感器DS18B20的原理与应用[J].现在电子技术,2003(4):32-34.

[3] 姜君威,齐蓉.基于FPGA和DS18B20的多路温度测量系统[J].机电一体化,2009(11),67-69.

[4] 王晓娟,张海燕,梁延兴.基于DS18B20的温度实时采集与显示系统的设计与实现[J].2007:38-41.

[5] 党峰,王敬农,高国旺.基于DS18B20的数字式温度计的实现[J].山西电子技术,2007(3)

[6] 金伟正.单线数字温度传感器的原理与应用[J].仪表技术与传感器, 2000(7):42-43.

[7] 褚振勇,翁木云.FPGA设计及应用[M].西安:西安电子科技大学出版社,2003. [8] 朱明成.用户现场可编程门阵列技术应用与未来.深圳大学学报(理工版),1995,12(1~2) [9] 颜丽娜,张铁民.基于DS18B20测温系统的设计[J].机械与电子,2010(11):80-81.

[10] 袁伟亭,周润景.FPGA与DS18B20组成的测温系统的设计[J].内蒙访古大

学学报(自然科学版),2006,37(4):459-463.

[11] 何文龙,房建东.基于FPGA的数字温度传感器控制方法[J].电子测量技术,

2008,31(11):178-181.

[12] 潘松,黄继业.EDA技术实用教程[M].北京:科学技术出版社,2003. [13] 高有堂.EDA技术及应用实践[M].北京,清华大学出版社,2006.

[14] L.Michalski,K.Eckersdorf,J.Kucharski,J.McGhee.Temperture Measurement

(Second Edition)[M].England John Wiley & Sons L td.2001 [15] DS18B20 Datasheet[EB/OL].Dallas: Dallas Semico nductor Corporation,

2005.

26

毕业设计(论文)知识产权声明

毕业设计(论文)知识产权声明

本人完全了解西安工业大学有关保护知识产权的规定,即:本科学生在校攻读学士学位期间毕业设计(论文)工作的知识产权属于西安工业大学。本人保证毕业离校后,使用毕业设计(论文)工作成果或用毕业设计(论文)工作成果发表论文时署名单位仍然为西安工业大学。学校有权保留送交的毕业设计(论文)的原文或复印件,允许毕业设计(论文)被查阅和借阅;学校可以公布毕业设计(论文)的全部或部分内容,可以采用影印、缩印或其他复制手段保存毕业设计(论文)。

(保密的毕业设计(论文)在解密后应遵守此规定)

毕业设计(论文)作者签名:

指导教师签名: 日期:

27

毕业设计(论文)独创性声明

毕业设计(论文)独创性声明

秉承学校严谨的学风与优良的科学道德,本人声明所呈交的毕业设计(论文)是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,毕业设计(论文)中不包含其他人已经发表或撰写过的成果,不包含他人已申请学位或其他用途使用过的成果。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了致谢。

毕业设计(论文)与资料若有不实之处,本人承担一切相关责任。

毕业设计(论文)作者签名:

指导教师签名:

日期:

28

附录一

温度测量最小系统硬件图

29

附录二

Verilog HDL源程序,一共包含三个“.v”文件 1. ds18b20_drive.v module ds18b20_drive(

input clk, // 50MHz时钟 input rst_n, // 异步复位

inout one_wire, // One-Wire总线 output [15:0] temperature // 输出温度值 );

//++++++++++++++++++++++++++++++++++++++ // 分频器50MHz->1MHz 开始

//++++++++++++++++++++++++++++++++++++++ reg [5:0] cnt; // 计数子

always @ (posedge clk, negedge rst_n) if (!rst_n) cnt <= 0; else

if (cnt == 49) cnt <= 0;

else

cnt <= cnt + 1'b1;

reg clk_1us; // 1MHz 时钟

always @ (posedge clk, negedge rst_n) if (!rst_n)

clk_1us <= 0; else

if (cnt <= 24) // 24 = 50/2 - 1 clk_1us <= 0; else

clk_1us <= 1; //-------------------------------------- // 分频器50MHz->1MHz 结束

//--------------------------------------

//++++++++++++++++++++++++++++++++++++++ // 延时模块 开始

30

//++++++++++++++++++++++++++++++++++++++

reg [19:0] cnt_1us; // 1us延时计数子 reg cnt_1us_clear; // 请1us延时计数子

always @ (posedge clk_1us) if (cnt_1us_clear) cnt_1us <= 0; else

cnt_1us <= cnt_1us + 1'b1; //-------------------------------------- // 延时模块 结束

//--------------------------------------

//++++++++++++++++++++++++++++++++++++++ // DS18B20状态机 开始

//++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++ // 格雷码

parameter S00 = 5'h00; parameter S0 = 5'h01; parameter S1 = 5'h03; parameter S2 = 5'h02; parameter S3 = 5'h06; parameter S4 = 5'h07; parameter S5 = 5'h05; parameter S6 = 5'h04; parameter S7 = 5'h0C; parameter WRITE0 = 5'h0D; parameter WRITE1 = 5'h0F; parameter WRITE00 = 5'h0E; parameter WRITE01 = 5'h0A; parameter READ0 = 5'h0B; parameter READ1 = 5'h09; parameter READ2 = 5'h08; parameter READ3 = 5'h18;

reg [4:0] state; // 状态寄存器 //-------------------------------------

31

reg one_wire_buf; // One-Wire总线 缓存寄存器

reg [15:0] temperature_buf; //采集到的温度值缓存器(未处理) reg [5:0] step; // 子状态寄存器 0~50 reg [3:0] bit_valid; // 有效位

always @(posedge clk_1us, negedge rst_n) begin

if (!rst_n) begin

one_wire_buf <= 1'bZ; step <= 0; state <= S00;

end else begin

case (state)

S00 : begin

temperature_buf <= 16'h001F;

state <= S0; end

S0 : begin // 初始化 cnt_1us_clear <= 1;

one_wire_buf <= 0; state <= S1; end S1 : begin

cnt_1us_clear <= 0;

if (cnt_1us == 500) // 延时500us begin

cnt_1us_clear <= 1;

one_wire_buf <= 1'bZ; // 释放总线 state <= S2; end

end S2 : begin

cnt_1us_clear <= 0;

32

if (cnt_1us == 100) // 等待100us

begin

cnt_1us_clear <= 1; state <= S3; end end

S3 : if (~one_wire) //若18b20拉低总线,初始化成功 state <= S4;

else if (one_wire) // 否则,初始化不成功,返回S0 state <= S0; S4 : begin

cnt_1us_clear <= 0;

if (cnt_1us == 400) // 再延时400us begin

cnt_1us_clear <= 1; state <= S5; end

end

S5 : begin // 写数据 if (step == 0) // 0xCC begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 1) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 2)

begin one_wire_buf <= 0;

step <= step + 1'b1; state <= WRITE01; end

else if (step == 3) begin

one_wire_buf <= 0;

33

step <= step + 1'b1;

state <= WRITE01; end

else if (step == 4) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 5) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 6)

begin

one_wire_buf <= 0;

step <= step + 1'b1; state <= WRITE01; end

else if (step == 7)

begin

one_wire_buf <= 0;

step <= step + 1'b1; state <= WRITE01; end

else if (step == 8) // 0x44 begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 9) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 10) begin

34

one_wire_buf <= 0;

step <= step + 1'b1; state <= WRITE01; end

else if (step == 11) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 12) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 13) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 14)

begin

one_wire_buf <= 0;

step <= step + 1'b1; state <= WRITE01; end

else if (step == 15) begin

step <= step + 1'b1; state <= WRITE0;

end

// 第一次写完,750ms后,跳回S0 else if (step == 16) begin

one_wire_buf <= 1'bZ;

step <= step + 1'b1;

state <= S6;

35

end

// 再次置数0xCC和0xBE

else if (step == 17) // 0xCC begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 18) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 19)

begin

one_wire_buf <= 0;

step <= step + 1'b1;

state <= WRITE01; end

else if (step == 20) begin

step <= step + 1'b1; state <= WRITE01; one_wire_buf <= 0; end

else if (step == 21) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 22) begin

step <= step + 1'b1; state <= WRITE0; end

else if (step == 23) begin

one_wire_buf <= 0;

36

本文来源:https://www.bwwdw.com/article/q8l6.html

Top