基于FPGA的温度检测系统设计.docx

上传人:b****4 文档编号:5000543 上传时间:2022-12-12 格式:DOCX 页数:12 大小:452.78KB
下载 相关 举报
基于FPGA的温度检测系统设计.docx_第1页
第1页 / 共12页
基于FPGA的温度检测系统设计.docx_第2页
第2页 / 共12页
基于FPGA的温度检测系统设计.docx_第3页
第3页 / 共12页
基于FPGA的温度检测系统设计.docx_第4页
第4页 / 共12页
基于FPGA的温度检测系统设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于FPGA的温度检测系统设计.docx

《基于FPGA的温度检测系统设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的温度检测系统设计.docx(12页珍藏版)》请在冰豆网上搜索。

基于FPGA的温度检测系统设计.docx

基于FPGA的温度检测系统设计

湖北民族学院科技学院信息工程学院

数字系统与Verilog设计报告

题目:

基于FPGA的温度检测系统设计

姓名:

学号:

指导老师:

2014/6/23

摘要

本文利用数字温度传感器DS18B20的数据接口和特点,阐述了一种基于现场可编程门阵列(FPGA)控制DS18B20的方法。

使用FPGA作为控制器,严格控制DS18B20的时序,在单总线上实现读写功能,完成测量数字温度的功能。

将测量的二进制数转换为BCD码,并通过数码管显示。

系统设计使用Verilog语言。

关键字:

数字温度传感器,数字温度检测,FPGA,Verilog语言

 

1引言

温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。

随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。

单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。

FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

随着温度检测理论和技术的不断更新,温度传感器的种类也越来越多,在微机系统中使用的传感器,必须是能够将非电量转换成电量的传感器,目前常用的有热电偶传感器、热电阻传感器和半导体集成传感器等,每种传感器根据其自身特性,都有它自己的应用领域。

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计利用数字温度传感器DS18B20的数据接口和特点。

使用FPGA作为控制器,严格控制DS18B20的时序,在单总线上实现读写功能,完成测量数字温度的功能。

将测量的二进制数转换为BCD码,并通过数码管显示。

随着人们生活水平的不断提高,FPGA控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

21世纪科学技术的发展日新月异,科技的进步带动了测量技术的发展,现代控制设备的性能和结构发生了巨大的变化,我们已经进入了高速发展的信息时代,测量技术也成为当今科技的主流之一,被广泛的应用于生产的各个领域。

2设计实现

2.1FPGA简介

FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

  特点介绍:

1)采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。

2)FPGA可做其它全定制或半定制ASIC电路的中试样片。

3)FPGA内部有丰富的触发器和I/O引脚。

4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

5)FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

  可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

  FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。

用户可以根据不同的配置模式,采用不同的编程方式。

  加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。

当需要修改FPGA功能时,只需换一片EPROM即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

2.2DS18B20的通讯协议

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:

每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

由于DS18B20是采用一根I/O总线读写数据,因此DS18B20对读写数据位有严格的时序要求。

DS18B20遵循相应的通信协议从而保证数据传输的正确性和完整性。

该通信协议定义了多种信号时序:

初始化时序、写时序、读时序。

2.2.1初始化时序

初始化时序中,控制器发送一个480us-960us的低电平的复位信号,然后释放总线,也就是总线为高电平,此时,控制器准备接收DS18B20的反应信号,当总线释放后,如果存在DS18B20,那么DS18B20将在15-60us内发送一个持续60-240us的反应信号。

2.2.2写时序

因为本设计总线上只挂了一个DS18B20,所以不用读取64位序列号,直接发送rom命令写时序有写1和写2时序首先将总线拉低电平拉低后15us之内必须把所要向DS18B20写的数据传到总线上DS18B20将在15us-60us内采样总线上的数据,如果为高则写1,为低则写0,写完一次后释放总线。

每两次写数据之间时隙要大于1us。

2.2.3读时序

读时序时总线拉低电平大于1us后然后释放总线准备接收DS18B20传来的数据,DS18B20将在总线拉低后15us之内将数据传到总线上,因此控制器必须在拉低电平然后释放总线15us之内采样总线上的数据。

每次读取一位数据不小于60us。

2.3DS18B20程序流程图

FPGA控制DS18B20实现温度转换的程序流程如下图所示。

程序流程图

2.3电源连接

DS18B20可使用寄生电源,可以在I/O引脚处于高电平时“偷”些能量,储存在电容中供正常使用,但进行精确转换时需要I/O引脚保持大电流供电,这样对FPGA芯片引脚造成很大压力,所以使用VDD引脚接外部电源。

DS18B20电源连接图

DS18B20进行温度转换需要很大电流,工作最大电流可达1mA。

使用VDD引脚接外部电源供电的优点在于I/O线上不需要在温度变换期间保持高电平。

这样就可以有效的保护FPGA芯片,也可在单总线上放置多数目的DS18B20。

使用外部电源,通过发出SkipROM跳过命令,然后发出ConvertT变换命令,可以完成温度变换。

3模块设计

3.1DS18b20驱动模块

DSl820数字温度计提供12位(二进制)温度读数指示器件的温度信息经过单线接口送入DSl820或从DSl820送出因此从主机CPU到DSl820仅需一条线(和地线)DSl820的电源可以由数据线本身提供而不需要外部电源因为每一个DSl820在出厂时已经给定了唯一的序号因此任意多个DSl820可以存放在同一条单线总线上这允许在许多不同的地方放置温度敏感器件DSl820的测量范围从-55度到+125度增量值为0.5度可在1s(典型值)内把温度变换成数字量。

Verilog程序如下:

moduleds18b20(iCLK,iRESET,oWIRE,oFLAG,oDATA);

inputiCLK,iRESET;

outputreg[11:

0]oDATA;

outputregoFLAG;

inoutregoWIRE;

parameterdo_reset=6'b000001,

release_bus=6'b000010,

wait_presence=6'b000100;

parameterwrite=6'b001000,

wait_conver=6'b010000,

read=6'b100000;

parameterSkip_Word=8'b11001100,

Tconvert_Word=8'b01000100,

Tempreg_Word=8'b10111110;

reg[63:

0]counter;

reg[7:

0]byte_counter;

reg[5:

0]nstate;

reg[7:

0]temp_word;

reg[7:

0]addr;

reg[15:

0]Temp_buffer;

always@(posedgeiCLK)begin

if(~iRESET)begin

nstate<=do_reset;

byte_counter<=0;

counter<=0;

oFLAG<=0;

oDATA<=0;

temp_word<=Skip_Word;

addr<=1;

Temp_buffer<=0;

oWIRE<=0;

end

else

case(nstate)

do_reset:

begin

oFLAG<=0;

if(counter==499)begin

nstate<=wait_presence;

counter<=0;

oWIRE<=1;

end

elsebegin

counter<=counter+1;

oWIRE<=0;

end

end

wait_presence:

begin

if(counter==400)begin

nstate<=release_bus;

counter<=0;

oWIRE<=1;

end

…………….

模块创建如下:

3.2温度数据处理模块

得到的12bit的温度数据信息,可相应进行各种处理,如多次到平均等,另外,需将其由二

进制转换为BCD码。

Verilog程序如下:

modulebin2bcd(in_bin,out_bcd);

input[11:

0]in_bin;

output[11:

0]out_bcd;

reg[11:

0]out_bcd;

always@(in_bin)

begin

out_bcd[11:

8]=in_bin[11:

4]/10;

out_bcd[7:

4]=in_bin[11:

4]%10;

if(in_bin[3])

out_bcd[3:

0]=5;

end

endmodule

模块创建如下:

3.3温度显示模块

FPGA实现LED静态显示控制

运用硬件描述语言设计一个显示译码驱动器,即将要显示的字符译成8段码。

由于FPGA

有相当多的引脚端资源,如果显示的位数N较少,可以直接使用静态显示方式,即将每一个数码管都分别连接到不同的8个引脚线上,共需要8×N条引脚线控制,如左图所示。

采用FPGA实现LED数码管动态显示控制

N个LED数码管以静态方式显示时,需用到8×N条引脚线。

在较为复杂的系统中,FPGA的引脚端资源是有限的。

因此对于多个LED数码管显示,可以采用扫描方式来实现LED数码管动态显示。

实现方法是依次点亮各个LED数码管,循环进行显示,即一个数码管显示之后另一个数码管马上显示,利用人眼的视觉暂留特性,可以到多个数码管同时显示的效果。

采用扫描方式来实现LED数码管动态显示,控制好数码管之间的延时是相当重要。

根据人眼视觉暂留原理,LED数码管每秒的导通16次以上,人眼就无法分辨LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管是以一定频率在闪动的)。

但是,延时(导通频率)也不是越小越好,因为LED数码管达到一定亮度需要一定时间。

如果延时控制的不好则会出现闪动,或者亮度不够。

据经验,延时0.005秒可以达到满意的效果。

修改延时,亦能得到更多的显示效果,如加长延时,使得数码管显示一小段时间,再点亮下一个,即可得到数码管逐个显示的效果。

另外,显示的字符有变化时,可在延时到达后送一个低电平(共阴极数码管)让LED数码管先短暂熄灭,再显示下一个字符,可使在视觉上字符的变化更清晰。

Verilog程序如下:

moduledisplay_ds18b20(in_bcd,Seg,rst,se,clk);

input[11:

0]in_bcd;

inputclk,rst;

output[7:

0]Seg;

output[2:

0]se;

reg[7:

0]Seg;

reg[3:

0]r;

reg[2:

0]se;

parameterst0=1,st1=2,st2=3;

reg[1:

0]current_state,next_state;

always@(posedgeclk)

begin

case(current_state)

st0:

begin

r<=in_bcd[11:

7];

se<=3'b110;

next_state<=st1;

end

st1:

begin

r<=in_bcd[7:

4];

se<=3'b101;

next_state<=st2;

end

st2:

begin

r<=in_bcd[3:

0];

se<=3'b011;

next_state<=st0;

end

endcase

end

always@(*)

case(r)

4'h0:

Seg=8'b11111100;

4'h1:

Seg=8'b01100000;

4'h2:

Seg=8'b11011010;

4'h3:

Seg=8'b11110010;

4'h4:

Seg=8'b01100110;

4'h5:

Seg=8'b10110110;

4'h6:

Seg=8'b10111110;

4'h7:

Seg=8'b11100000;

4'h8:

Seg=8'b11111110;

4'h9:

Seg=8'b11110110;

default:

Seg=8'b00000000;

endcase

endmodule

模块创建如下:

4整体模块连接

5结束语

这次课程设计让我又一次加深了对Verilog语言的理解,并且在由Verilog这种纯软件的东西变成硬件的东西的过程中又对软硬件的工作过程有更深层次的理解。

而且我还做了之前Verilog课程设计没有接触过的一个流程——那就是综合。

当我看到自己写的程序编程一个个逻辑门的连接的时候,感觉自己离集成电路又近一步了

通过这次课程设计学习到很多东西,更加巩固了所学的一些知识,对FPGA的一些知识有了更加一步的认识,对电路抗干扰有了进一步的了解,对电路的设计有了些许的经验。

由于所掌握的专业技术知识有限,课题设计及样机制作仅限于基本阶段,离专业计量工程仪器还有不少距离。

例如系统的电路原理设计,样机工艺设计及制作,控制程序设计,信号处理,测量精度等方面都存在这样或那样的问题,使得性能样机未能做到尽善尽美。

这一切都将有待在今后的学习研究中进一步努力。

参考文献

[1].夏宇闻,2008,《Verilog数字系统设计教程》[M],北京航空航天大学出版社。

[2].蔡伟纲,2007,《NiosII软件架构解析》[M],西安电子科技大学出版社。

[3].ALTERA公司,《Cyclone-EP2C5使用手册》[EB/OL]。

[4].周树南、张伯颐,2006,《电路与电子学基础》[M],科学出版社。

[5].马义忠、常蓬彬、马浚,2005,《数字逻辑与数字系统》[M],高等教育出版社。

[6].黄智伟,2006,《全国大学生电子设计竞赛系统设计》[M],北京航空航天大学出版社。

[7].继华,2006,《设计与验证VerilogHDL》[M],人民邮电出版社。

[8].张洪润,2009,《FPGA/CPLD应用设计200例》[M],北京航空航天大学出版社。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1