毕业设计(论文)-基于FPGA的数据采集器.doc_第1页
毕业设计(论文)-基于FPGA的数据采集器.doc_第2页
毕业设计(论文)-基于FPGA的数据采集器.doc_第3页
毕业设计(论文)-基于FPGA的数据采集器.doc_第4页
毕业设计(论文)-基于FPGA的数据采集器.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

引言 数据采集是获取信息的基本手段。数据采集技术作为信息科学的一个重要分支,是以传感器、信号测量与处理、微型计算机等技术为基础而形成的一门综合应用型技术。数据采集作为现代测控技术的基础,己经广泛应用于工业生产、科学研究的诸多领域。在工业生产中,应用数据采集系统可以得到工业现场的温度、湿度、电压、电流等技术参数,所得结果可以反馈给用户和控制系统,为提高产品质量、降低成本提供信息;在科学研究方面,数据采集可以提供大量的现场信息,成为探索科学奥秘的重要手段1。 如何对信号进行实时采集、实时存储,保证信号不丢失,以满足工业现场的需要,一直是数据采集系统研究的一个重要方向。国外方面234,随着国外微电子技术、计数机技术、测控技术和数字通信技术的发展,目前国外数据采集技术已经较初期有了很大的发展。从近来国外公司展示的新产品可以看出,主要的发展可以概括为功能多样,体积减小和使用方便等三个方面。国外在研制和使用数据采集系统方面发展迅速,基于medwin技术的数据采集器也发展较深,在体积和性能具有很大优势得采集器多以fpga为平台,但价格相对来说就不具有竞争力。成本较低的数据采集系统多以单片机为主芯片,但是在性能和速度方面就不具有优势。目前国外的数据采集方面的研究主要着重于传感器,高精度、高速度的传感器层出不穷而且在价格上有了很大进步。比如美国尼高力仪器技术公司08年生产的2700型 数据采集器,完美地将数据记录仪、程控开关与数字表的优势集于一身,是一 款高精度、多功能、使用方便的多路数据采集器。同年惠普公司生产的hp34970a 型数据采集器具有612位分辨率,0004基本直流精确度和高达250通道秒的扫描率,非易失性存储器可保存多达50000个带有时间标记的读书,可测包括直流 电压、交流电压等等数据。虽然这些数据采集器的功能无比强大,但是成本都较昂贵。 国内方面567,国内数据采集器与目前国外数据采集器相比,在技术上仍然存 在着一定的差距,主要表现在:由于受国内振动等传感器水平的限制,分析频率范围不宽,在工业方面给一些低速的机器或轴承的诊断等带来了一定的困难;由于数据采集器的内存不大,数据采集器本身的信号处理功能不强,在现场只能做一些简单诊断,精密诊断需要离线到计算机上去做,现场精密诊断功能较弱;设备的软件水平,仍在设备维修管理和基本频谱分析上徘徊,机器故障诊断专家系统还需完善,软件人机界面有待改进设备的性能与成本的协调还缺乏一定的优势。近年来,发达国家在研制和使用数据采集系统方面发展较为迅速,仪器的性能先进,使用范围广,且耐用可靠,但价格较为昂贵,在测量功能、测量通道和数据齐全等方面存在不同程度的缺陷。例如北京凯文斯系统集成有限责任公司e16系列epp并口宽动态范围的高精度数据采集器,数据通道最大可以达到16个,采样最高频率决定于微机的cpu及处理速度,一 般为6080khz。北京测振仪器厂2007年研制的hz9609数据采集器振动分析 仪,它采用中文显示,直观醒目,操作简单方便;采用先进的微电脑技术,工作可靠;采用频谱分析技术和故障诊断技术,是进行数据采集、完成设备状态分析和故障诊断的得力助手。它可以与微机通讯,建立设备状态数据库,可测量振动信号的加速度、速度和位移,还可测量电压信号和转速信号,采样频率为1hz到10khz。在经过对国内外现有的数据采集行业产品的性能、价格和功能了解,其大概情况是,国外的数据采集器的精度高,速度快,功能强大,但是价格比较昂贵,并且一般来说体积都比较大,操作也复杂,可再编程能力比较弱。而国内的采集器虽然价格低,但是在性能上还有上升的空间,所以在我国现有的基础上,融合更为先进的技术、工艺,制造出性价比更高,可再编程能力高,小巧而又实用的的测量仪器不失为仪器开发领域的一个热点。 论文的组织结构包括:引言,介绍了课题背景,课题研究的目的和意义,并对现阶段此研究的情况进行了分析。第1章系统分析及方案设计,对整个系统进行了需求分析,并介绍了整体设计方案的制定以及可靠性的设计和分析。第2章系统硬件设计,包括各部分接口设计以及pcb设计。第3章系统软件设计,即针对各模块的vhdl编程。第4章仿真与调试,针对已设计的工程,通过仿真器进行仿真调试。第5章系统实现与设计结果,分析了采集结果并讨论了采集结果是否符合要求。第6章总结与展望,对本次论文进行总结,并对本次研究的不足进行了总结。1. 系统分析及方案设计1.1设定系统目标本次设计主要目标是采集系统内、外的数据,并加以处理显示。对于数据采集的对象则选取了系统内部电压值与外部温度值。之所以选择温度与电压,是因为两者具有很强的代表性。在实际监测中,温度和电压也是非常重要的监测对象,有很强的实用性。本次系统设计的具体目标如下:1. 有较好的人机显示控制界面。2. fpga能对系统内部电压进行数据采集。3. 能对读取的开关量进行相关显示。4. 能实现led灯不同的频闪。5. 能与上位机进行通信。6. fpga通过i2c总线能对ad7416进行模拟量的数据采集。7. 能将采样得到的数据送往lcd显示。1.2系统整体方案分析与器件选择完整的数据采集过程通常由数据的通道选择、采样、处理、显示构成,有时也要对数据进行适当的处理。其中,控制模块起到了核心作用,他作为控制信号产生和处理的中枢对这些外围电路进行着实时的监控和管理。设计过程中采用fpga作为控制器,完成对ad转换器的控制,并将采集到的数据存储到一定的存储单元,通过串口在lcd12232上显示。具体涉及的外围电路中,电压采集部分主要应用adc0809作为数据采集芯片,对输入的模拟量进行ad转换;温度采集部分主要由ad7416作为数据采集芯片。数据处理部分则通过硬件设计来完成;按键控制部分利用4个按键来控制0809、ad7416转换通道选择;图形显示部分输出当前采集到的电压、温度值。之所以选择fpga来完成此工作,原因如下:fpga生成的硬件系统是基于并行方式运行的,在同一个时钟周期内可以进行多个操作,因此同一项功能由fpga实现将比用微控制器实现运行速度快很多。fpga可以实现许多复杂的特殊功能逻辑,减小了部件数量,缩短了开发周期,并且在fpga中可以实现比微处理器更为复杂的逻辑功能,很多算法可以很容易地在fpga中实现。其次,fpga在体积方面有更高的优势,其可以同时达到体积小,引脚多即可以控制的信号路数多的要求。随着半导体工艺的进步,fpga的产品不仅性价比高,同时可以在较恶劣的环境下完成其他数字器件所不能完成的任务。因此,尽管在与上位机通讯、串口通讯上稍显繁琐(相比于单片机),我们仍选用fpga来完成设计。介于成本的考虑,我们采用低成本的epm1270144来完成本次设计。温度采集芯片ad74168是有8个管脚的温度监测器。该温度监测器可通过多路复用器的0通道进行访问。片上寄存器可编程控制极限温度,当温度超过极限时漏极开路温度过热指示器(oti)处于工作状态。ad7416是10位,5通道的adc,采集精度为0.25。其片上温度传感器可用2.7v5.5v电压供电。该装置包含一个约15s的转换器,5通道多路复用器,温度传感器,时钟振荡器,跟踪-保持器和一个2.5v的参考电压。其数据传输采用i2c通信协议。lcd122329是一直由sed1520控制的,122*32点液晶显示屏。具有低功耗、供应电压范围宽等特点。具有16common和61segment输出,并可外接驱动ic扩展驱动。驱动方式为1/32duty,驱动电压2.513v。具有与68系列或80系列相适配的mpu接口功能,并有专用的指令集,可完成文本显示或图形显示的功能。pc机fpgaad7416键盘adc0809显示显示串行通信i2c通信rs232adc0809、rs232在此不做赘述。图1.1为系统框图。图1.1 系统整体框图在软件设计方面,fpga开发的主流语言为vhdl和verilog hdl两种语言,vhdl发展的比较早,语法要求比较严格,而verilog hdl则是在c语言的基础上发展起来的,语法要求相对比较松。经过两种设计语言的比较,在此选择利用vhdl语言来编写fpga模块。上位机接收和控制界面的软件应用的是已有的串口调试软件。1.3本章小结本章主要讨论了系统整体方案的设计,及系统目标的设定。包括了设计系统目标和系统整体方案设计和器件选择两个部分。确定了设计方案并选择了合适的器件。2. 系统的硬件设计2.1 fpga接口电路设计从第一节我们可以知道,fpga的任务是采集温度,电压,与上位机通讯,并将采集获得的数据送往lcd12232。(1) 与温度采集芯片接口设计ad7416是adi公司生产的8脚温度监测器。体积小,精度高,成本低。它采用i2c通信协议,采用单通道模拟输入,一路数字输出。其管脚结构图如下:图2.1 ad7416管脚结构图 表2.1给出了ad7416的管脚说明。图2.2为fpga与ad7416的接口电路。管脚号名称说明1sda数字i/o。双向数据串行总线。2scl数字输入。串行总线时钟。3oti逻辑输出。当通道0(温度传感器)的转换结果大于温度过热寄存器(otr)的8位数时,温度过热指示器(oti)置位。信号在连续读操作结束时重置。漏极开路输出。 4gnd跟踪-保持、比较器和电容dac、数字电路的参考地。5a2数字输入。串行总线地址的最高可编程位。6a1数字输入。串行总线地址的中间可编程位。7a0数字输入。串行总线地址的最低可编程位。8vdd正向供电电压,2.7v5.5v。表2.1 ad7416管脚功能说明 需要说明的是,ad7416的1脚sda,2脚scl是根据i2c总线协议制定的串行总线。oti为系统告警逻辑输出。fpga在接收由ad7416送出的数据时,必须按照i2c总线协议的规定,产生特定的clk信号(与scl相接)送给ad7416,然后按照制定的传输协议实现数据的传输。尤其要注意的是,由于i2c总线协议规定,sda双向数据串行总线在一个scl内只能传输一位数据,所以在匹配时钟时要特别注意。图2.2 ad7416与fpga接口图(2) 与adc0809接口设计adc0809芯片10是非常常用的模数采集芯片。0809是cmos的8位a/d转换器。片内有八路模拟开关,可控制8各模拟量中的一个进入转换器中。转换时间约为100ms,含锁存控制的8路多路开关,输出由三态缓冲器控制,单5v供电。其数据传送采用uart串口传输方式,故可直接与fpga通讯。其原理图如图2.3所示。adc0809 epm1270 startoeeocd7-d0 图2.3 adc0809与fpga原理图图中,d7d0是adc0809的8位数据总线,start为启动数模转换信号,高电平时有效。oe为输出使能信号,当其为高电平时,将转换好的数据传入8位数据总线。eoc为状态信号,低电平表示转换结束。(3) 与lcd12232接口设计本次设计采用深圳骏显科技生产的lcd12232-c型液晶,由两片sed1520芯片控制。因而lcd的电路特性与实际上就是sed1520的电路特性。sed1520的主要特性有:具有液晶显示驱动器,16路行驱动输出,级联可实现32路行输出;具有61路列驱动输出,可通过级联实现122路列驱动输出;内置时序发生器,可产生占空比为1/16和1/32两者种;内置显示存储器,显示存储器内的数据直接显示。实现fpga与sed1520数据连接关键在于如何将数据存入存储器。因而我们就必须了解sed1520的指令代码,并通过fpga产生相应的信号,实现与sed1520的通信。图2.4 lcd12232接口电路(4)fpga配置接口设计fpga有三类配置下载方式11:主动配置方式(as)和被动配置方式(ps)和最常用的(jtag)配置方式。as方式是由fpga引导配置操作过程,就是本设计中所利用到的配置方式,fpga处于主动地位,上电后fpga引导fpga配置芯片epcs4将存储的程序加载给fpga,而不需要外部计算机或控制器进行配置。ps方式则是指由外部计算机或控制器配置过程,通常是通过加强型配置器件(epci6,epc8等)来完成,但是这种配置方式成本较高,并且电路也较为复杂,在此并不在选择范围之内。还有一种就是jtag配置,jtag接口是一个业界标准,主要用于芯片测试等功能,使用ieee.std. 11491联合边界扫描接口引脚,可以使用altera下载电缆来完成。针对前两者(as和ps模式)而言,都需要配置芯片辅助fpga。并且两者都存在这一定的模式缺陷,即不能在线调试,而jtag模式可以在线调试。一般在即使程序仿真正确后,烧写到芯片里面也未必能出来正确的结果,有了在线调试功能,就可以在修改的过程中观察相应的结果变化。而且本次设计所使用的低成本fpga,具有数据掉电保存功能,即系统掉电以后,已下载到fpga中的工程并不会丢失。综合上述原因,我们在此选用jtag配置模式。其接口电路如图2.5所示。图2.5 jtag配置电路(5)rs232接口电路设计采用rs232串行通信标准12实现接收上位机的控制数据包,实现上位机与fpga通讯。之所以选择串行通信,是由于串行通信结构简单,可靠性高,并且成本较低。采用串行通信协议可以降低fpga与上位机通讯设计的难度,提高系统的可靠性。rs232协议的信号电平必须在(5-15)v之间,数据信号的逻辑电平“l电平必须低于-3v,逻辑电平“0”必须高于+3v。可见rs232接口标准采用的是负逻辑,其逻辑电平和ttl电平不一样,不能兼容,所以必须进行电平转换,在此选用的电平转换芯片为max3232,其电路图如图2.6所示:图2.7 rs232接口电路2.2 供电电源电路设计系统所需电源为7v,5v,3.3v。7v为电源转换电路的供电电压。5v为lcd12232,max232的驱动电压。3.3v为电路其他部分的通用电压(rs232除外)。在本次设计中,采用自行设计的ac_dc三路输出电源,220v交流输入,得到7v,+12.5v,-12.5v三路输出。图2.8为系统供电电路。图2.8 系统供电电源电路2.3 本章小结本章根据系统的制定方案,完成了系统的硬件设计,如fpga接口电路,系统供电电路,辅助电源的设计。并按照要求制作了pcb板,手工制作出了完整的硬件电路。并上电测试成功。3. 系统的软件设计3.1 设计平台quartus ii 简介软件设计的平台是altera公司的quartus ii开发系统,quartus ii13是综合性的pld开发软件,支持原理图,各种硬件描述语言以及多种设计输入形式,自身带有综合器和仿真器,可以完成从硬件设计,软件设计,仿真到硬件配置的完整设计流程。quartus ii同时支持altera公司的ip核,包含了各种宏功能模块库,使用户可以直接利用已经经过编译的成熟模块,如本设计中用到的双口ram模块,简化了设计中的复杂性,并且可以缩短设计的周期。quartus ii的设计输入方法有很多种,可以灵活的运用,主要方法有三种,简要介绍如下:第一种方法就是原理图输入法,这种方法是最为直接的方法,由用quartus ii提供的各种原理图库进行设计输入。为提高效率,采用这种方法输入的时候应采用自顶向下逻辑分块,即把大规模的电路划分成若干小块的方法。一般如果对系统了解很深,并且系统速率的要求较高,或这系统中如果时间特性要求较高,就可以采用这种方法。原理图输入的缺点虽然仿真容易但是效率很低,但是这样的方法便于信号观察以及电路的调整,看起来也很直观。第二种方法就是硬件描述语言输入:quartus ii支持多种硬件描述。描述语言的优点是效率高,结果也容易仿真,信号观察也较方便。但语言输入必须依赖综合器,只有好的综合器才能把语言综合成优化的电路。对于大量的规范的、易于用语言描述、易于综合的电路可以采用这种输入方法。第三种方法网表输入:对在其它软件系统上设计的电路,可以采用这种方法,而不必重新进行输入。quartus ii可以接受的网表有edif格式、vhdl格式及verilog格式等。采用这种方法的优点是充分利用了现有成熟的设计资源,但对于这种方法得到的电路,不宜于仿真时信号的观测,给仿真带来一定的困难。现实中为了保证设计的效率,功能的完整往往采用多种方法相结合的方式,而不是拘泥于某一种,例如本设计中就是利用前两种方法相结合,在利用quartusii自身提供的相关模块基础上自行设计其他模块。这样就可以提高设计的速度和整个fpga模块的准确度。3.2 温度控制模块 系统所用温度采集芯片是ad7416。此芯片是8脚贴片式封装,由第二节可知,其1、2脚为遵循i2c通信协议的串行信号、时钟总线,5、6、7脚为数据输入线。温度测量方法是在不同的电流下测量当前vbe的变化。如图3.1所示。vbe=kt/ln(n)式中,k是波尔兹曼常数,q 是电子电荷(1.61019库仑),t是绝对温度,n是电流比。图3.1 ad7416温度测量电路通过fpga控制ad7416,需如下几个步骤14:(1)首先fpga向ad7416发送初始化指令,ad7416的初始化相对简单,只需发送相应系统初始化指令即可。(2)fpga检测到ad7416返回的信号后,即通过“write”指令,选择配置寄存器,ad7416有六个寄存器,其地址从00h依次递加至05h。在此,我们选择结构寄存器1(地址为01h)。(3)fpga检测ad7416的响应信号后,即通过“write”指令选择其工作方式。ad7416有两者工作方式,在此我们选择第一种,指令代码是“18h”。然后fpga设定ad7416的溢出温度值。溢出温度值保存在结构寄存器2(地址02h)。(4)此时ad7416开始进行温度监测,fpga则不断检测是否有ad7416响应信号发生。检测到ad7416的响应信号后,fpga立即选择温度寄存器(地址00h),接收ad7416检测得到的数据。值得注意的是,根据i2c总线协议,ad7416传送数据的第一位和最后一位是数据最高位、结束标志位,在数据接收结束后,fpga必须发送数据接收完毕信号给ad7416,终止数据传送,置数据总线为高阻态。(5)当上述步骤完成后,视为一次采样终止,fpga将ad7416所有状态字赋逻辑态“0”,初始化传感器,等待下一次采样开始。由上述的5各步骤不难看出,对于ad7416的控制,关键在于对响应信号的检测,以及对相应信号做出相应的应答,即给出相应的状态字,控制传感器状态的变化。如此分析下来,我们选择状态机作为ad7416的状态控制器,来完成我们设定的目标。图3.2给出了ad7416的功能模块,3.3给出了ad7416的寄存器结构图。图3.2 ad7416的功能模块地址指针寄存器(为读/写操作选 择数据寄存器)温度值寄存器(地址00h)结构寄存器(地址)01h)thyst设定值寄存器(地址02h) toti设定值寄存器(地址03h)adc寄存器2(地址04h)结构寄存器(地址05h)串行总线接口地址数据sdascl图3.3 ad7416的内部寄存器结构图图3.3中,除了温度寄存器只读,其他寄存器进行可读写操作。通过分析,我们已经了解了ad7416工作的原理,但是一个新的问题摆在我们面前,那就是fpga的io口并不支持i2c通信协议。因此,我们还必须针对foga的io口进行编程,已满足系统目标的要求。i2c总线15是phlips公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。i2c总线只有两根双向信号线。一根是数据线sda,另一根是时钟线scl。i2c总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的sda及scl都是线“与”关系。i2c总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。图3.4描述了i2c总线关于数据位有效性的规定。图3.4 i2c总线关于数据位有效性的规定。scl线为高电平期间,sda线由高电平向低电平的变化表示起始信号;scl线为高电平期间,sda线由低电平向高电平的变化表示终止信号。起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将scl线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放scl线使之为高电平,从而使数据传送可以继续进行。 连接到i2c总线上的器件,若具有i2c总线的硬件接口,则很容易检测到起始和终止信号。对于不具备i2c总线硬件接口的fpga来说,为了检测起始和终止信号,必须保证在每个时钟周期内对数据线sda采样两次.图3.5给出了i2c规定的起始和终止信号。图3.5 起始和终止信号i2c规定每一个字节必须保证是8位长度。数据传送时,先传送最高位(msb),每一个被传送的字节后面都必须它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放sda线,以允许主机产生终止信号跟随一位应答位(即一帧共有9位)。由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。i2c总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(r/),用“0”表示主机发送数据(t),“1”表示主机接收数据(r)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。典型的i2c通信方式下图所示。 s从机地址oa数 据a数 据a|p图3.6 典型的i2c通信数据帧“0”表示数据由主机向从机传送,“1”则表示数据由从机向主机传送。a表示应答, 表示非应答(高电平)。s表示起始信号,p表示终止信号。通过分析可知,由于fpga不具备i2c接口,在设计过程中我们必须保证fpga不断对通信总线进行扫描,而且每个周期内扫描两次。并且要严格的按照i2c协议给出scl信号,以保证整个通信过程准确无误。由于fpga的io口需要进行大量数据处理,因此fpga的速度和硬件接口速度将会产生较大的偏差。为此,i2c数据总线上的数据传输要有一个较长的起始过程加以引导。至此,针对温度采集所面临的问题基本得以解决。按照分析结果,温度采集模块由两部分组成:ad7416控制模块和i2c通信模块。根据已有的资料和自己不断总结,最终得到了实现目标要求的代码。部分代码如下所示:- designed by l_ym and h_ys the i2c blockentity simple_i2c isport(clk : in std_logic;enable : in std_logic;nreset : in std_logic;clk_cnt : in unsigned(7 downto 0);- 4x scl -input signalsstart,stop,read_1,write_1,ack_in : std_logic;din : in std_logic_vector(7 downto 0);- output signalscmd_ack : out std_logic;ack_out : out std_logic;dout : out std_logic_vector(9 downto 0);- i2c signalsscl : inout std_logic;sda : inout std_logic);end entity simple_i2c;- designed by h_ys and l_ym the ad7416 blockentity ad7416_i2c_test isport ( clk_sys : in std_logic; -50mhznreset : in std_logic;dout : out std_logic_vector(9 downto 0); - data read from ad7416i2c_oti: in std_logic;warning : out std_logic;error : out std_logic; - no correct ack receivedscl : inout std_logic;sda : inout std_logic);end entity ad7416_i2c_test;上面两段代码表示ad7416模块的接口定义。3.3 adc0809电压采样模块由第二节分析我们知道adc0809采样原理比较简单:首先我们给出一个有效的start信号(高电平),随后状态信号eoc随即变成低电平。此时进入转换状态,周期约为100s。转换结束后,eoc变为高电平,此时外部可以控制oe由低电平变为高电平,进入有效输出阶段。下图是adc0809的采样状态图。图3.7 adc0809采样状态图由状态图我们可以发现,运用状态机来控制adc0809模块无疑是最佳选择。其核心代码如下:- designed by l_ym and h_ysbegin case current_state is when st0= next_statenext_state if(eoc=1)then next_state=st3;else next_statenext_statenext_state next_state=st0; end case;end process;由于adc0809采用通用串口通信方式。此种通信方式比较简单,并且 fpga的io口也支持此种通信协议。因此adc0809在与fpga通信时,无需再对io口进行编程,它的数据总线可以直接与fpga的io口连接,进行数据交换。3.4 lcd12232显示模块液晶显示屏已广泛应用于人们的日常生活中,在各种领域中起到越来越重要的位置。为了方便数据监测,并使的设计具有实用性,在本次设计中,加入lcd12232模块,用来显示系统采集到的数据。在第2.1节我们已经对lcd12232进行了初步的探讨,线面我们将深入的对lcd12232进行分析。lcd12232由两片sed1520芯片通过主从方式控制。控制lcd的输出,从本质上来讲就是控制sed1520芯片。sed1520控制指令有13条,在本次设计中我们只使用最常用的8条指令。下面给出了本次设计中使用到的sed1520芯片的指令集。指令代码(2进制)代码功能格式11100010复位10100100中断休眠1010100x占空比设置10100001ac显示110l4l3l2l1l0起始行设置1010111x显示开关101111p1p0页地址选择0c6c5c4c3c2c1c0列地址选择表3.1 sed1520指令集对于占空比设置,当x=1时,为1/16,当x=0时为1/32。对于起始行设置,由于液晶屏共有32行,其地址从00h开始到1fh截止。对于显示开关,当x=1时,显示开,x=0时显示关。页地址为b8h到bbh,列地址从00h到4fh。在使用时,只需将填入指定地址即可。lcd12232是字符点阵液晶。列地址指针和页地址寄存器组合唯一指定了显示屏上的一个点。值得注意的是列地址指针在每次操作后都会自加1,这使我们的设计难度下降了许多。字符点阵液晶的显示原理非常简单,即当显示屏上某一点所对应寄存器值为逻辑值“1”时,该点就显示。因此欲实现对lcd12232显示的控制,除了要熟悉它的指令集之外,还必须了解它的显示方法与待显示字字符模型。通过实验我们得到结论:液晶显示屏共有2屏(左、右屏),4页。其显示方法为,先显示高位寄存器,再显示低位寄存器(针对同一列)。也就是说,它采用的是自顶向下的显示方法。因此在生成字模时,我们应将待显示字“取反”后,再生成。lcd12232同样采用通用串行通信方式。因此只需将其数据总线与fpga的io相连即可进行数据传递。sed1520的读写时序如下图所示:图3.8 sed1520的读写时序通过fpga控制sed1520显示芯片的步骤如下:(1)初始化显示屏,设置占空比为1/32,采用顺时针(ac)显示模式,打开显示开关,设定初始页地址与列地址。(2)由于sed1520的显示寄存器在初始化后均默认存储数值为“1”,显然这不利与我们进一步的显示操作。因此我们将sed1520显示寄存器全部清零,实现清屏的效果。(3)通过使能信号选中左半屏(由主sed1520控制),将已产生的字模送往显示寄存器。在这里需要指出的是,lcd12232每半屏只有61列,因此为了显示的美观,我们需要精确的确定每个字符的大小。(4)选中右半屏,发送数据给显示寄存器(5)设定刷新频率,检测数据更新,操作结束。其接口部分代码如下:entity lcd12232 isport(clr,clk : in std_logic;-clk 50mad7416: in std_logic_vector(9 downto 0);adc0809 : in std_logic_vector(7 downto 0);uart: in std_logic_vector(7 downto 0);e1, e2 : out std_logic;rw, a0 : out std_logic;reset : out std_logic;db : out std_logic_vector(7 downto 0);end entity lcd12232;从代码我们看出,lcd12232控制模块的任务是接收ad7416、adc0809、串口的数据,控制lcd的工作状态,显示待显示的数据。3.5 串口通信模块异步串行通信要求的传输线少,可靠性高,传输距离远,被广泛应用于微机和外设的数据交换。实现串口通信主要需要完成两部分工作:将串口电平转换为设备电路板的工作电平,即实现rs-232电平和ttl/cmos电平的转换;接收并且检验串行的数据,将数据变成并行的并提供给处理器处理。实现rs-232电平和ttl/cmos电平转换可以用接口芯片来实现,实现数据的串行到并行转换用的是uart,它们是实现串行通信必不可少的两个部分。虽然目前大部分处理器芯片中都集成了uart,但是一般fpga芯片却没有这个特点16,所以使用fpga作为处理器可以有两个选择,第一个选择是使用uart芯片进行串并转换,第二个选择是在fpga内部实现uart功能。但所有的uart芯片都存在引脚较多、体积较大、与其他器件的接口较为复杂等缺点,从而会使设计的成本和难度增加。因此可以将需要的uart功能集成到fpga内部,而利用vhdl语言将uart的核心功能集成,不仅解决传统芯片的缺点,也使整个设计更加紧凑、稳定且可靠。这里我们需要解决就是rs232电平与ttl/cmos电平转换问题。芯片max23217是由maxim公司生产的,包含两路接收器和驱动器的ic芯片。适用于各种eia-232c通信接口。max232芯片内部有一个电源电压变换器,可以将输入的+5v电压转换成rs232所需的v电压。所以采用此芯片接口的串行电路只需一个单5v供电就可以了。由于rs232规定规定最大负载电容为2200pf,这个电容限制了传送距离和传送速度。故在一般情况下,rs232只适用于短距离通信。本系统与上位机通讯依靠rs232串行线,故不存在距离干扰通讯的问题。而采用max232芯片为系统提供rs232电平成本低且效果好,因此,我们将主要的经理投入到利用fpga实现uart异步通讯中去。首先,我们先简要uart的原理18:uart主要有uart内核、信号监测器、移位寄存器、波特率发生器、计数器、总线选择器和奇偶校验器总共7个模块组成,如图3.9所示:图3.9 uart原理图然后我们简要介绍uart的工作流程。uart的工作流程可以分为接收过程和发送过程两部分。接收过程指的是uart监测到rs-232总线上的数据,顺序读取串行数据并且将其输出给cpu的过程。当信号监测器监测到新的数据(rs-232输入逻辑变为0,即rs-232传输协议的起始位)就会触发接收过程。首先uart内核会重置波特率发生器和移位寄存器,并且设置移位寄存器的工作模式为波特率模式,以准备接收数据。其次,移位寄存器在波特率始终的驱动下工作,不断读取rs-232串行总线的输入数据,并且将数据保存在内部的寄存器内。数据发送过程可以用4个状态来实现,即空闲、加载、发送和发送完成,其中的空闲状态就是uart内核复位后的空闲状态,和上面介绍的数据接收过程的空闲状态一致。在了解了uart通信后,我们开始讨论pc机与fpga的通讯。rs232串行数据线包括一条数据pc传输数据的txd线和fpga接收数据的rxd线。另外还有一条接地线。fpga与pc机的通讯框图如图3.10所示。pctxdgndfpgarxdgnd图3.10 fpga与pc机的通讯框图异步串行通讯是一帧一帧进行传输,帧与帧之间的间隙不固定,间隙处用空闲位(高电平)填补,每帧传输总是以逻辑(低电平)状态的起始位开始,停止位结束。信息传输可随时地或间断地进行,不受时间的限制。因此,异步通讯简单、灵活,对同步时钟要求可低些。异步通讯方式规定了传输格式,都以相同的帧格式传送。每帧信息由起始位、数据位、奇偶校验位和停止位组成。帧与帧之间用高电平分开。根据串行通信的协议,发送串行数据一般是:1个起始位,1个数据位,1个或多个停止位,这样,发送起始位以后表明传输开始。传送与接受的双方设定好同样的传输位数,直到1个数据位送完以后,送停止位。此时我们便可以开始针对fpga和上位机进行编程。部分代码如下所示:entity uart is port(clk : in std_logic;clr : in std_logic;com_receive : in std_logic;data_in : in std_logic_vector(7 downto 0);com_transmit : out std_logic;display : out std_logic_vector(7 downto 0)-buffer);end uart;由代码我们可以清晰的看出,我们设定了一个8位数据传送祯,即fpga在与上位机通信时,所发送或接收的数据一定是8位的。最后我们将接收到的数据发往lcd或者led显示。3.6 本章小结在硬件设计完成后,我们完成了软件部分代码的编写。按照要求完成了系统各个模块的设计,包括:温度控制模块、adc0809监测电压模块、串口通信模块,lcd显示等。最后将各个模块综合,得到了顶层模块。4.仿真与调试4.1 fpga调试简介在fpga硬件语言设计完成之后需要对其进行仿真与调试,成功之后才能制板。在这里用到的调试工具为altera公司自己推出的quartus ii,该软件集fpga设计,仿真,调试于一体。仿真采用嵌入在软件中的signaltap ii。在fpga的仿真中进行功能仿真有两种激励的输入方式,一种是传统的波形输入,另一种则是使用testbench。后者是指验证平台,它通过编写代码,对输入产生预定的激励,然后有选择的观察输出,并可以验证输出是否符合设计要求。在本次设计中我们采用传统的波形输入法对系统各模块,包括顶层模块进行仿真。并通过仿真来验证我们在第三节所设计模块的正确性。4.2温度控制模块仿真及调试结果将3.2节所设计的模块代码通过quartus ii软件进行编译,顺利通过编译后生成模块图。模块图如图5.1所示。图4.1 温度控制模块仿真结果如下图所示:图4.2 温度控制模块仿真结果如图所示,clk_sys为系统时钟,dout为测试输出,在程序内我们给定dout的固定测试值00110101;nreset为系统复位信号,低电平有效,在仿真时,我们给定高电平,确保系统一直工作。error、warning和i2c_oti信号为系统告警信号,低电平表示系统安全工作。由图可以看到,scl的仿真结果是高电平,根据i2c总线协议,scl在闲时(因为此时我们并未将数据总线与ad7416连接,因此系统总线为闲置态)为高电平,sda则无输出,或输出阻态。因而,我们在这里仿真是正确的。将程序下载到开发板,开发板正常工作,有输出,可以得到相应的温度值。由此我们可以判断,温度控制模块设计成功。4.3adc0809采样模块仿真与调试结果将3.3节所设计的模块代码通过quartus ii软件进行编译,顺利通过编译后生成模块图。模块图如图5.3所示。 图4.3 adc0809模块仿真结果如下图所示:图4.4 adc0809仿真结果 由仿真图形我们可以看到:clk为系统时钟,ad_clk为adc0809工作时序,adda为输出(此时并未采样,因而输出结果为0),en、eoc均为1,表示其工作状态正常。控制adc0809状态改变的状态字ale、oe、start信号,随adc0809周期周期的发生改变。我们可以观察到,在一个adc0809周期内(时长约400s) ,系统完成了4次采样。模拟采样周期约100s。这与adc0809的采样周期相同,说明仿真结果正确。将程序下载到开发板后发现,系统工作正常,可以正确显示adc0809所监测的电压值。并且当电压值改变后,自行更新监测电压值。综上所述,adc0809监测电压模块设计正确。4.4lcd12232显示模块仿真与调试结果将3.4节所设计的模块代码通过quartus ii软件进行编译,顺利通过编译后生成模块图。模块图如图5.5所示。图4.5 lcd12232模块图图4.6 lcd12232仿真结果为了方便测试,我们将设计的lcd模块简化,去掉数据选择功能,仿真结果如图5.6所示。图中,clk为系统时钟,e1为主sed1520(lcd12232左半屏控制器)驱动信号,rw为读写使能信号,低电平为写状态。ao是指令数据选择信号。a0低电平表示写指令,高电平表示写数据。从图中我们可以清晰的看出,在a0为低电平的前9个lcd周期内,fpga通过数据总线向sed12232写入了8条指令。根据3.4节的指令集描述我们可以看出,前5条指令的作用是初始化sed1520,后三条指令的作用是选定第三页,第一行,第一列的显示寄存器。紧接着,a0跳转为高电平,fpga向sed1520发送数据ff,使相应的显示寄存器显示。将编写的程序下载至开发板,可以发现lcd12232可以成功显示预先存入的测试数据。通过上述的分析,我们不难得到结论,lcd12232显示模块设计成功。4.5 uart串口模块仿真与调试结果将3.5节所设计的模块代码通过quartus ii软件进行编译,顺利通过编译后生成模块图。模块图如图5.7所示。 图4.7 uart串行通信模块由于串口通信须借助串口调试工具进行调试,而非系统仿真,因此针对uart串口通信的仿真在此不做展示。图5.8为串口调试界面。图4.8 串口调试界面4.6 顶层设计仿真与调试结果系统顶层设计图如下所示:图4.9 顶层设计示意图在第二节我们曾经对系统所应实现的目标进行了讨论,从底层设计的示意图我们可以看出,之前我们所设计显示模块,温度控制模块,串行通信模块,电压监测模块等均在顶层设计中得到实现。但是非常遗憾的在lcd12232显示模块,由于lcd12232以及作者水平限制,无法同时显示温度,电压,串口通信的结果。分析其原因,在于针对温度和电压的显示,其周期相对较长,刷新频率只需设定在2hz。而异步串行通信响应快,易受周围环境影响,无法做到与温度、电压的同步显示。因此在硬件设计时,将串口通信的结果通过8个发光二极管来辅助显示,以此来实现最初的

温馨提示

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

评论

0/150

提交评论