




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
全天候温度纪录仪的设计与FPGA实现控温项目方案一、 设计相关1.1 设计题目全天候温度纪录仪的设计与FPGA实现1.2 选题背景当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与传统的电子产品在设计上的显著区别是大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。FPGA开发技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。基于Verilog HDL语言的设计开发更是灵活多变,容易上手,方便开发人员开发新产品。时代在发展,人们的物质生活水平在不断提高,新产品、新技术层出不穷,电子技术的发展更是日新月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。一个方便实用的温度计对于大众来说更是生活中不可或缺的一件产品。美国ALTERA公司的可编程逻辑器件采用全新的结构和先进的技术,加上最新的QUARTUS开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计本节将从FPGA嵌入式应用开发技术与温度计发展的客观实际出发,通过对该技术发展状况的了解,以及课题本身的需要,指出研究基于FPGA的芯片系统与设计全天候温度记录仪的设计与实现的必要性。1.3 设计要求本设计要求设计一个温度计,通过温度传感器(DS18B20)周期的测量温度数据,同时将数据存储在EEPROM AT24C02中,在需要读取数据温度纪录时,读出温度纪录至板载LCD(1602)液晶显示器显示。二、 系统设计2.1 系统设计图图2-1 系统设计图2.2 系统设计说明本设计是基于FPGA的温度记录仪,整体系统设计如下,首先由FPGA控制器驱动DS18B02温度传感器对当前温度进行周期性采集,并且对采集到的数据进行处理,然后存入EEPROM AT24C02只读存储器,最后利用LCD1602液晶显示屏进行显示。同时本系统通过向用户提供按键,方便用户读取历史温度记录。三、 硬件设计3.1 FPGA简介3.1 1 FPGA芯片的介绍FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件。3.12 FPGA基本结构FPGA具有可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块来实现不同的设计。FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。这3种可编程电路是:可编程逻辑模块、输入/输出模块(IOB-I/O Block)和互连资源。可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路。(1) CLB是FPGA的主要组成部分。图3-1是CLB基本结构框图,它主要由逻辑函数发生器、触发器、数据选择器等电路组成。CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G、F和H。G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G和F,而另一个输入信号是来自信号变换电路的输出H1。这个函数发生器能实现3输入变量的各种组合函数。这3个函数发生器结合起来,可实现多达9变量的逻辑函数。CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。CLB中的逻辑函数发生器F和G均为查找表结构,其工作原理类似于ROM。F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输出。另一方面,逻辑函数发生器F和G还可以作为器件内高速RAM或小的可读写存储器使用,它由信号变换电路控制。(2) 输入/输出模块IOB。IOB提供了器件引脚和内部逻辑阵列之间的连接。它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器。缓冲器的输出分成两路:一路可以直接送到MUX,另一路经延时几纳秒(或者不延时)送到输入通路D触发器,再送到数据选择器。通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器。图3-1 CLB基本结构当IOB控制的引脚被定义为输出时,CLB阵列的输出信号OUT也可以有两条传输途径:一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器。IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通VCC、地线或者不接通,用以改善输出波形和负载能力。(3) 可编程互连资源IR。可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。IR主要由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。3.13 FPGA一般设计流程图 3-2 FPGA设计流程图3.2 LCD1602液晶显示3.21 LCD 1602实物显示:图 3-3 LCD1602实物图3.22 功能:用来显示当前的温度值,和显示查询的温度值。3.23 接口信号说明:表 3-1 接口信号表3.24 时序图图 3-4 时序图3.25 LCD 1602指令1) 0X38设置为16*2显示,5*7点阵,8位数据接口2) 0X0C说明 这里0C表示的是开显示,不显示光标,光标不显示,完整描述如下:指令码:00001DBC D=1 开显示 D=0 关显示 C=1 显示光标 C=0 不显示光标 B=1 光标闪烁 B=0 光标不闪烁3.3 DS18B20温度传感器3.31 DS18B20实物图图 3-5 DS 18B20 实物图3.32 功能:采集当前周围温度信息值。3.33 DS18B20接口引脚信息表 3-2 接口引脚图序号名 称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。3.34 DS18B20的读写操作图3-6 写操作写时隙分为写0和写1,时序如图,在写数据时间间隙的前15us总线需要是被控制器拉置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15-60us,采样时间内如果控制器将总线拉高则表示写1,如果控制器将总线拉低则表示写0。每一位的发送都应该有一个至少15us的低电平起始位随后的数据0或1应该在45us内完成。整个位的发送时间应该保持在60-120us,否则不能保证通信的正常。3.35 DS18B20的读操作图3-7 读操作读时隙时也是必须先由主机产生至少1us的低电平,表示读时间的起始。随后在总线被释放后的15us中DS18B20会发送内部数据位。注意必须要在读间隙开始的15us内读数据为才可以保持通信的正确。通信时,字节的读或写是从高位开始的,即A7到A0。控制器释放总线,也相当于将总线置1。3.4 AT24C02读写模块3.41 IIC 总线协议简介IIC 总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。 IIC总线是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,最高传送速率 100kbps。IIC 总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据;结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据;应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。3.42 AT24C02简介AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8 位字节,该器件通过 IIC 总线接口进行操作。通过器件地址输入端 A0、A1和A2 可以实现将最多8个AT24C02器件连接到IIC 总线上。AT24C02的存储容量为2KB,内容分成32页,每页8B,共256B,操作时有两种寻址方式:芯片寻址和片内子地址寻址。芯片寻址:AT24C02的芯片地址为1010,其地址控制字格式为 1010A2A1A0R/W。其中 A2,A1,A0 可编程地址选择位。A2,A1,A0 引脚接高、低电平后得到确定的三位编码,与 1010 形成 7 位编码,即为该器件的地址码。R/W 为芯片读写控制位,该位为 0,表示芯片进行写操作。片内子地址寻址:芯片寻址可对内部 256B 中的任一个进行读/写操作,其寻址范围为 00FF,共 256 个寻址单位。对 AT24C02 的基本操作有字节写,连续读。操作时序如下:图3-8 字节写图3-9 连续读3.43 模块驱动方案:在主模块里例化了3个子模块,简单说一下各个模块的功能:串口发送模块:负责将 FPGA 通过 IIC 接口读取 AT24C02 的数据通过串口发送给 PC,这样我们就可以通过串口调试助手查看读到的数据与写入的数据是否一致来调试。IIC 控制命令产生模块:负责发送控制命令如连续读、随机读、字节写及页写等给IIC 发送与接收模块,该模块不与 AT24C02 直接打交道。IIC 发送与接收模块:根据接收到IIC 控制命令产生模块发送的控制命令来操作AT24C02,该模块与 AT24C02 直接打交道。3.5 按键模块设计K1复位键:按下复位键所有模块进入复位状态。E2PROM AT24C02不清零。K2 上翻页:查询上一个计数周期的采集值。K3 下翻页:查询下一个计数周期的采集值。以下是按键和复位电路图 图3-10 按键图 图3-11 复位图四、 软件设计4.1 Quartus II软件介绍Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。软件界面如图:图4-1 软件界面图4.2 系统架构图图 4-2系统架构图4.3 系统控制器4.31 作用主要负责各个模块复位与启动,数据采集与处理以及任务调度等工作。当出现复位信号时,所有模块进入复位状态,但AT24C02不清零。针对AT24C02的数据可以采用上翻页和下翻页组合按键,同时按下进行清零。4.32 实现方法(1)、做出各模块驱动(部分代码见代码附录)。(2)、制作计数器当产生周期性信号时,控制器读取DS18B20数据,在控制器内部进行处理,将处理完的结果送入E2PROM进行存储,同时送入LCD1602进行显示。当按键信号出现时,分为以下两种。1、复位信号,上面已经解释,不再赘述;2、K2和K3单个出现信号,若没有周期信号,直接读取E2PROM数据,送入LCD 1602显示;若有周期信号,进行等待,固定等待1S,重复上述工作3、当K2或K3同时按下时,无需判断周期性信号,直接清零。控制器向ROM发送操作指令,进行温度转换,读写操作,周期性数据采集使用计数器产生周期性采集信号,具体周期时间暂定为5分钟。4.4 系统调试在系统调试时,我们使用的是Altera公司的Cyclone IV EP4CE40F23I7。在本系统中用到复位电路、电源电路、时钟电路、JTAG下载电路、DS18B20传感器电路、1602LCD液晶显示屏和AT24C02存储器等主要电路。具体的硬件调试过程中,有很多细节时要注意,首先插上JTAG下载线,然后打开系统的电源。因为系统的时钟频率直接影响本设计的各个模块的正常运行,所以一定要把时钟选正确。做好准备工作以后,系统上电,使用 Quartus II选取EP4CE40F23I7型的FPGA器件,进行编译。编译之后,将综合生成的配置文件使用JTAG下载到开发板上。然后进行实物验证:上电后,各个模块正常工作,LCD1602显示温度值,五分钟更新一次。按下K1键各个模块复位,此时AT24C02不清零,K2和K3同时按下模块复位和AT24C02清零。与预期基本相同,符合题目要求。五、 代码附录5.1 顶层模块module Temperate(CLK,RST_n,K1,K2,K3,LCD_DATA,LCD_RW,LCD_RS,LCD_EN,LCD_B,one_wire;Tem,SCL,SDA,LED,TXD)input CLK;input RST_n;input K1;input K2;input K3;output 7:0LCD_DATA;output LCD_RW;output LCD_RS;output LCD_EN;output LCD_B;reg 7:0LCD_DATA;reg LCD_RW;reg LCD_RS;reg LCD_EN;inout one_wire;output 15:0Tem;inout SDA;output SCL;output LED;output TXD;assign LCD_B=1; LCD1602 U0( .CLK(CLK), .RST_n(RST_n), .LCD_RW(LCD_RW), .LCD_RS(LCD_RS), .LCD_EN(LCD_EN), .LCD_B(LCD_B), .LCD_DATA(LCD_DATA);DS18B20 U1( .CLK(CLK), .RST_n(RST_n), .Tem(Tem); wire 7:0wr_data;wire 7:0wr_rd_addr;wire 7:0data_out;AT24C02_Ctrl U2( .CLK50M(CLK), .RST_n(RST_n), .SDA(SDA), .SCL(SCL), .LED(LED), .TXD(TXD) ); endmodule 5.2 LCD驱动部分代码module lcm(CLOCK_50, LCD_DATA, LCD_RW, LCD_RS, LCD_EN,LCD_BLON );input CLOCK_50;output 7:0LCD_DATA;output LCD_RW;output LCD_RS;output LCD_EN;output LCD_BLON;reg 7:0LCD_DATA;reg LCD_RW ;reg LCD_RS;reg LCD_EN;reg clk_1k=1b0;reg 20:0counter=0;reg 10:0counter1=0;assign LCD_BLON=1;always(posedge CLOCK_50) if(counter=25000) begin clk_1k=clk_1k; counter=0; end else counter=counter+1; always(posedge clk_1k)/ begin if(counter11023) counter1=counter1+1; casex (counter1) 400:begin LCD_DATA=8b00111000; /0x38 设置显示模式 LCD_RW=1b0; LCD_RS=1b0; end 401:LCD_EN=1b1; 410: /0x0c 开显示 关光标 begin LCD_DATA=8b00001100; LCD_RW=1b0; LCD_RS=1b0; end 411: LCD_EN=1b1; 420: begin /0x01 清屏幕 LCD_DATA=8b00000001; LCD_RW=1b0; LCD_RS=1b0; end421: LCD_EN=1b1; 430: begin /0x06 读或者写后 自动加1 LCD_DATA=8b00000110; LCD_RW=1b0; LCD_RS=1b0; end431: LCD_EN=1b1; 440:begin /0xc0 定位到第二行 LCD_DATA=8b11000000; LCD_RW=1b0; LCD_RS=1b0; end441: begin LCD_EN=1b1; ack=1; end /根据数字的ASCII码值显示数据 631: LCD_EN=1b1; default: LCD_EN=1b0; endcase endendmodule5.3 DS18B20驱动模块module Temperature( input clk, / 50MHz时钟input rst_n, / 异步复位 inout one_wire, / One-Wire总线 output 15:0 temperature / 输出温度值); reg rst_n; reg 19:0count; always(posedge clk) begin if(count20h80000) begin rst_n=1; count=count+1; end else if(count20h8ffff) begin rst_n=0; count=count+1; end else rst_n1MHz 开始/+/-此处省略分频部分的代码- / 分频器50MHz-1MHz 结束/-/延时模块的使用/+/ 延时模块 开始/+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 + 1b1;/-/ 延时模块 结束/+/ DS18B20状态机 开始/+/ 格雷码parameter S00 = 5h00;parameter S0 = 5h01;parameter S1 = 5h03;parameter S2 = 5h02;parameter S3 = 5h06;parameter S4 = 5h07;parameter S5 = 5h05;parameter S6 = 5h04;parameter S7 = 5h0C;parameter WRITE0 = 5h0D;parameter WRITE1 = 5h0F;parameter WRITE00 = 5h0E;parameter WRITE01 = 5h0A;parameter READ0 = 5h0B;parameter READ1 = 5h09;parameter READ2 = 5h08;parameter READ3 = 5h18;reg 4:0 state; / 状态寄存器reg one_wire_buf; / One-Wire总线 缓存寄存器reg 15:0 temperature_buf; / 采集到的温度值缓存器(未处理)reg 5:0 step; / 子状态寄存器 050reg 3:0 bit_valid; / 有效位 always (posedge clk_1us, negedge rst_n)begin if (!rst_n) begin one_wire_buf = 1bZ; step = 0; state = S00; end else begin case (state) S00 : begin temperature_buf = 16h001F; 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 = 1bZ; / 释放总线 state = S2; end end S2 : begin cnt_1us_clear = 0; 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年2月养老护理员初级模考试题+答案
- 2025年全国叉车操作A证考试题库(含答案)
- 蒲江保洁服务知识培训班课件
- 蒲城县医院急救知识培训课件
- 葡萄酒知识培训课程课件
- 常用日语考试招生简章及答案
- 常德社工考试真题试卷及答案
- 叉车培训理论考试题库及答案
- 线性运算题目及答案
- 2025年餐厅食品供应商合同标准版模板
- 热控专业培训课件
- 人教版九年级化学下册全册教案
- CRH380B型动车组制动系统
- 植入式静脉给药装置(输液港)-中华护理学会团体标准2023
- SH石油化工金属管道布置设计规范
- 外国文学史第二版马工程课件 第四章 17世纪文学
- 皮肤的结构与生理功能
- 院感培训试题及
- 开发区财政管理改革研究
- 三维数字城市建模及数据获取课件
- 电气照明系统课件
评论
0/150
提交评论