【《基于FOGA的环境温度的采集及数据通信分析》5300字】_第1页
【《基于FOGA的环境温度的采集及数据通信分析》5300字】_第2页
【《基于FOGA的环境温度的采集及数据通信分析》5300字】_第3页
【《基于FOGA的环境温度的采集及数据通信分析》5300字】_第4页
【《基于FOGA的环境温度的采集及数据通信分析》5300字】_第5页
已阅读5页,还剩13页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FOGA的环境温度的采集及数据通信分析目录TOC\o"1-3"\h\u10117基于FOGA的环境温度的采集及数据通信分析 1140961.1VerilogHDL及Vivado设计流程简介 17161.2DS18B20与FPGA单路通信 349791.2.1DS18B20简介 374501.2.2单总线协议 6183701.2.3DS18B20与FPGA通信 8168031.3FPGA的UART接口设计 14134101.1.1UART通信协议 1444041.1.2UART接口设计 15温度控制,首先要对环境温度进行检测,然后根据当前温度和预设温度判断加热还是降温,以实现温度控制。第二章已经说过,本设计选用DS18B20温度传感器实现对环境温度的采集,在DS18B20获取了环境温度后,传给FPGA进行判断,控制加热降温模块运行,并通过蓝牙和串口传输给手机和电脑。1.1VerilogHDL及Vivado设计流程简介FPGA编程常用的硬件描述语言有VerilogHDL和VHDL两种,它们在编程功能上能够完成相同的工作,也就是说一个基于FPGA的设计,能够通过VHDL实现,也就能够通过VerilogHDL实现,二者没有本质上的区别。对于这两种硬件编程语言,笔者在本科学习期间都曾接触过,亲身使用后对比觉得,VHDL比VerilogHDL更加严谨,而VerilogHDL的灵活性则更高一些,且使用起来也相对简单。因此,现在多数的FPGA开发往往使用VerilogHDL。根据任务书的要求,本设计使用VerilogHDL。XilinxFPGA使用的编程软件也有两种,ISE和Vivado,二者在FPGA设计流程上基本一致,使用起来也是大同小异。根据任务书要求,本设计使用Vivado。在对智能温控器的各个模块进行设计时,本次设计使用VerilogHDL和Vivado软件遵循的流程如图3-1所示。图3-1Vivado设计流程具体步骤如下:1)新建项目并选定FPGA型号:xc7a35tftg256-1。2)定义输入输出口及模块的各个引脚。3)使用VerilogHDL编写程序完成模块的各项功能。4)参照basys3开发板管脚分配表编写约束文件。5)进行综合和实现,如果报错,根据Vivado给出的提示进行修改。6)生成比特流文件,在开发板上验证功能,如有问题对相应代码进行修改。1.2DS18B20与FPGA单路通信第二章对DS18B20温度传感器的外部结构和特性进行了初步的介绍,接下来将深入研究DS18B20的内部结构和测温原理。另外,DS18B20采用单总线协议进行通信,本节将在介绍了单总线协议的基础上设计DS18B20与FPGA之间的通信。1.2.1DS18B20简介DS18B20的内部结构如图3-2所示。图3-2DS18B20内部结构图1.2.1.1光刻ROM光刻ROM中包含64位序列号,它的(低位)前8位是产品类型编码,中间48位是每个温度传感器的唯一序号,最后8位是前面56位的CRC(循环冗余校验)码,如图3-2所示。这64位序列号是在出厂前被光刻好的,可以看作是每个DS18B20的地址序列码,也可以理解为每个DS18B20的身份证号码。正是因为每个DS18B20的光刻ROM中的64位序列号都是各不相同的,所以,微控制器可以利用单总线对多个DS18B20进行寻址,进而实现一根总线上挂接多个DS18B20进行通信。图3-364位光刻ROM1.2.1.2温度传感器温度传感器完成温度采集的工作,测量结果以16位符号扩展的二进制补码的形式提供,存放形式如图3-4所示。图3-4DS18B20温度存放形式其中,第一个字节的高四位对应温度的整数值,低四位对应温度的小数值,第二个字节低三位对应温度的整数值,高五位对应温度的符号,存储温度示例如表3-1所示。表3-1DS18B20存储温度举例温度(℃)数据输出二进制十六进制+125000001111101000007D0h+25.500000001100110000198h+5.125000000000101001000A2h+0.062500000000000000010001h000000000000000000000h-0.06251111111111111111FFFFh-5.1251111111110101110FF5Eh-25.51111111001101000FE61h-551111110010010000FC90h1.2.1.3配置寄存器配置寄存器的低5位恒为“1”,最高位TM是测试模式位,用于设置DS18B20是在工作模式还是在测试模式,一般是在工厂中将其设为测试模式,即1,测试结果正确则准备出厂,并将该位设置为工作模式,即0。中间的R1和R0供用户设置分辨率,如图3-5所示。图3-5配置寄存器所以,作为用户的我们能操作的只有R1和R0这两位,不同的二进制数值对应的分辨率如表3-2所示。表3-2DS18B20的不同分辨率R1R0分辨率/位009011010111112在DS18B20出厂时,R1R2被设置为“11”,即12位分辨率,本设计任务书中要求的温度分辨率为0.0625℃,恰好对应12位,所以在设计过程中不需要进行修改。值得注意的是,在应用时要注意分辨率对应的转换时间,确保在温度转换完成后再进行温度的读取。本设计用到的12位分辨率的转换时间是750ms,所以在设计时至少要留出750ms的转换时间,设计时如果忽略这一点,将会导致结果出现问题。1.2.1.4内部存储器存储器包括9个字节的暂存存储器和掉电不丢失的EEPROM存储单元,如图3-6所示。图3-6内部存储器转换得到的温度值以二进制补码形式存放在暂存器的第0和第1个字节中。单片机通过引脚DQ读出该温度值,读取时低位在前,高位在后;低字节在前,高字节在后。当符号位S=0时,直接将二进制转换为十进制;当符号位S=1时,需要先将读取到的补码转换为原码,再转换为十进制。DS18B20内部还设有温度报警触发器TH和TL,可以通过软件写入报警的上下限。由于本设计中没有涉及报警系统,在此不详细说明。DS18B20有数据总线供电(即寄生电源)和外部供电两种供电方式。相比于数据总线供电方式,利用外部供电方式的测量速度更快,且工作更加稳定可靠,抗干扰能力更强。基于上述优点,本设计中采用外部供电方式,即把DS18B20的VCC引脚与basys3开发板的+5V相连,无非是比数据总线供电方式多用到一根导线。由于外部供电方式的连接方法比较简单,而本设计中没有用到寄生电源供电方式,所以不对DS18B20的供电方式进行详细的介绍。1.2.2单总线协议1.2.2.1单总线协议简介单总线即1-wire,是一种外围串行扩展总线技术,由美国DALLAS公司研发。与SPI、I2C串行数据通信方式不同,单总线采用单根信号线进行传输,既传输时钟又传输数据,而且数据的传输是双向的。单总线有很多优点,如结构简单、成本低廉、便于总线的扩展和维护等[7]。采用单总线协议的系统由一个总线主节点、一个或多个从节点组成,适用于单主机系统,可以控制一至多个从机。一般情况下,主机是微控制器,从机往往是单总线器件,它们之间只通过一条信号线进行数据传输。当只有一个从机设备时,将按单节点系统操作;当有多个从设备时,则按多节点系统操作[8]。本设计中,FPGA作为主机,DS18B20作为从机,由于仅需要实现对单点环境温度的采集,所以使用到的从机数量只有一个。1.2.2.2单总线通信过程单总线通过1根信号线实现主机与从机之间的数据传输,所以它对时序的要求十分严格。基本的时序包括复位及应答时序、写一位时序、读一位时序。在复位及应答时序中,主器件发出复位信号后,从器件要在规定时间内反馈应答信号;在位读和位写时序中,主器件要在规定的时间内读入或写出数据[9]。具体的单总线通信过程如下。1.初始化初始化过程=复位脉冲+应答脉冲。主机通过拉低单总线产生复位脉冲,维持480~960us后释放总线,此时低电平跳变为高电平的上升沿,然后进入接收模式。当检测到上升沿之后,单总线器件延时15~60us,然后拉低总线60~240us来产生应答脉冲。主机接收到从机的脉冲说明单总线器件就绪,初始化过程完成[10]。初始化时序图如图3-4所示:图3-4初始化过程中的复位与应答脉冲2.写操作写操作包括写0时间隙和写1时间隙两种。当数据线拉低后,在15~60us内对数据线进行采样。数据线低电平为写0,高电平为写1。主机要产生一个写1时间隙,就必须把数据线拉低,在写时间隙开始后的15us内允许数据线拉高(即在0~15us内释放总线)。主机要产生一个写0时间隙,就必须把数据线拉低并保持60us。写操作时序图如图3-5所示:图3-5写时序图1.读操作与写操作一样,读操作至少需要60us,并且至少需要经过1us的恢复时间才可以进行下一次独立的读操作,任何读操作都是由主机拉低总线并保持至少1us后,再释放总线开始,若发送“1”,则保持总线为高电平;若发送“0”,则拉低总线并在该周期结束后释放总线。读操作时序图如图3-6所示:图3-6读时序图在图3-4、3-5、3-6中,黑色实线代表系统主机拉低总线,灰色实线代表主机拉低总线,黑色虚线代表上拉电阻总线拉高。1.2.3DS18B20与FPGA通信在介绍了DS18B20结构和单总线通信原理的基础上,本节将介绍DS18B20的指令及其测温原理,并利用VerilogHDL进行DS18B20与FPGA通信的设计。1.2.1.1DS18B20指令DS18B20的指令包括ROM操作指令和存储器(RAM)操作指令,如表3-1和表3-2所示[11]。由于本设计只用到一片DS18B20进行测温,对于ROM指令,只需要用到跳过ROM指令。对于存储器指令,只需要用到温度转换指令和读储存器指令,所以在此不对DS18B20的ROM指令和存储器指令全部进行详细的介绍,其各种指令的功能已在表中表述清楚。表3-1ROM指令表3-2RAM指令温度转换流程如图3-7所示。图3-7DS18B20温度转换流程1.2.1.2DS18B20测温步骤进行ROM操作主机复位操作,即DS18B20初始化。主机对DS18B20写跳过ROM指令(CCH)。主机对DS18B20写启动温度转换命令(44H)。延时等待,让DS18B20完成温度转换。注意:每个指令字节在写的时候都是低位在前、高位在后。进行RAM操作主机复位操作。主机对DS18B20写跳过ROM指令(CCH)。主机发出读取RAM(BEM)指令,DS18B20接到指令后按照低字节、低位在前的顺序依次将9个字节的内容送出数据。1.2.1.3DS18B20与FPGA通信设计本节在了解了各种原理的基础上,将其转化为VerilogHDL编程语言,并利用Vivado平台进行设计,实现DS18B20与FPGA的通信。部分程序代码如下:case(state) RESET1:begin //初始化1 cnt<=cnt+1; if(cnt<'d500) begin DQ_out<=0; link<=1; end elseif(cnt<'d1000) begin link<=0; end else begin cnt<=0; state<=WRITE_CC1;//进入下一状态,跳过ROM data_w<=8'hcc; cnt_bit<=0; end end WRITE_CC1:begin //跳过ROM cnt<=cnt+1; if(cnt<'d15) begin DQ_out<=0; link<=1; end elseif(cnt<'d75) begin DQ_out<=data_w[cnt_bit]; end elseif(cnt<'d80) begin link<=0; end else begin cnt<=0; cnt_bit<=cnt_bit+1; if(cnt_bit=='d7) begin state<=WRITE_44;//进入下一状态,温度转换 cnt_bit<=0; data_w<=8'h44; end end endWRITE_44:begin //温度转换 cnt<=cnt+1; if(cnt<'d15) begin DQ_out<=0; link<=1; end elseif(cnt<'d75) begin DQ_out<=data_w[cnt_bit]; end elseif(cnt<'d80) begin link<=0; end else begin cnt<=0; cnt_bit<=cnt_bit+1; if(cnt_bit=='d7) begin state<=WAIT_800MS;//进入下一状态,等待800ms cnt_bit<=0; end end end WAIT_800MS:begin //等待800ms,即800000us cnt<=cnt+1; if(cnt=='d800000) begin cnt<=0; state<=RESET2;//进入下一状态,再次初始化 end end RESET2://第二次初始化,此处代码和第一次初始化相同,省略。 WRITE_CC2://第二次跳过ROM,此处代码和第一次跳过ROM相同,省略。WRITE_BE:begin //读取温度指令 cnt<=cnt+1; if(cnt<'d15) begin DQ_out<=0; link<=1; end elseif(cnt<'d75) begin DQ_out<=data_w[cnt_bit]; end elseif(cnt<'d80) begin link<=0; end else begin cnt<=0; cnt_bit<=cnt_bit+1; if(cnt_bit=='d7) begin state<=READ1;//进入下一状态,读取温度 cnt_bit<=0; end end end READ1:begin //读取温度前八位 cnt<=cnt+1; if(cnt<'d4) begin DQ_out<=0; link<=1; end elseif(cnt=='d4) begin link<=0; end elseif(cnt=='d14) begin data_r[cnt_bit]<=DQ_in; end elseif(cnt>'d65) begin cnt<=0; cnt_bit<=cnt_bit+1; if(cnt_bit=='d7) begin cnt_bit<=0; temp_data[7:0]<=data_r; state<=READ2;//进入下一状态,读取温度后八位 end end end READ2://读取温度后八位,此处代码与读取温度后八位基本一致,省略。1.3FPGA的UART接口设计HC-06蓝牙模块使用的是标准的UART通信协议,所以本设计采用UART协议实现FPGA和HC-06之间的通信。1.1.1UART通信协议UART,通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),是一种通用串行数据总线,用于异步通信。在嵌入式设计的主机与辅机设备的通信中,UART有着广泛的应用。一般情况下,UART串行接口采用的是RS-232-C电气标准进行通信。RS-232-C是美国电子工业协会EIA(ElectronicIndustryAssociation)制定的一种串行物理接口标准。一般的通信只会用到RS-232-C中的2个信号,TXD和RXD,分别表示数据发送和数据接收,所以用户不需要掌握所有RS-232-C信号的定义。UART接口定义如表3-1所示。表3-1UART接口定义接口名称接口定义Tx发送数据端Rx接收数据端GND接地两条信号线上的状态高电平代表‘1’,低电平代表‘0’,工作期间Rx和Tx两条信号线完全独立,数据在信号线上以字节的单位进行传输,每个字节可以有5~9个bit。每个字节传输完成后,可以选择对传输的数据进行校验以保证数据正确性。另外,值得注意的是,要将通信设备的GND(地)连在一起,否则无法进行通信。数据线TXD和RXD的电平标准为:逻辑1=-3V~-15V;逻辑0=+3~+15VUART接口连接方式如图3-7所示。需要注意的是,主机的Tx要与辅机的Rx相连,同理,辅机的Tx要与主机的Rx相连,不能连接同名,否则会导致系统出错。此外,还要注意连接时两个UATR电平,如果电平范围不一致,则需要做电平转换,然后再连接。图3-7UART硬件连接RS-232-C标准规定的数据传输速率为9600、19200、115200等波特率。波特率是衡量符号传送速率的指标,表示每秒传送的符号数。如果波特率为9600,那么发送和接收数据都应该为9600bits/s。本设计采用9600bits/s进行通信。1.1.2UART接口设计basys3开发板上并没有成型的UART接口,所以我们需要使用VerilogHDL编写UART接口以实现相应的功能。UART以字符为传输单位,通过一条传输线将数据逐位顺序传送,通信过程中,不同字符之间的时间间隔不是固定值,但同一字符中两个相邻位之间的时间间隔是固定的,数据的传送速率用波特率表示,指的是每秒钟传送的码元符号的个数,或单位时间内载波参数的变化次数[12]。如每秒传送240个字符,而每个字符包含10位(1个起始位,1个停止位,8个数据位),此时的波特率为2400Bd。传输时序如图3-8所示。图3-8UART传输时序图UART的信号线上共有两种状态,分别用逻辑1和逻辑0表示,即高电平和低电平。数据线在空闲时保持高电平。其中UART各位的意义如下:起始位(StartBit):发出逻辑0信号,表示传输字符的开始。数据位(DataB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论