计算机课程设计报告--基于FPGA的漏磁检测电路设计.doc_第1页
计算机课程设计报告--基于FPGA的漏磁检测电路设计.doc_第2页
计算机课程设计报告--基于FPGA的漏磁检测电路设计.doc_第3页
计算机课程设计报告--基于FPGA的漏磁检测电路设计.doc_第4页
计算机课程设计报告--基于FPGA的漏磁检测电路设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

基于FPGA漏磁检测电路设计计算机课程设计论文 题 目: 基于FPGA的漏磁检测电路设计学 院: 测试与光电工程学院 专业名称: 电子科学与技术班级学号: 09083120 学生姓名: 陶智 指导教师: 柴明钢 二零一二年六月 基于FPGA漏磁检测电路设计 学生姓名:陶智 班级:090831 指导老师:柴明钢摘要: 铁磁材料缺陷的漏磁检测是一种有效的无损检测技术,能够在不影响和破坏材料的属性的情况下,完成对设备和材料存在的缺陷检测。它在提高生产安全性、防止事故的发生、减小经济损失中发挥非常重要的作用。传统的集成电路设计中,传感器的控制通常由MCU(以C51单片机为代表)来完成。以往的传感器,其精度比较低,采样周期较长,MCU尚且可以胜任。但是随着对检测速度、精度的要求越来越高,检测过程会产生非常大的数据,处理和保存这些数据就超出了MCU的能力,因此很有必要对检测技术进行改进。FPGA(Field-Programmable Gate Array现场可编程门阵列)具有高速、高集成度和在线可编程等优点,在设计过程中具有极大的灵活性和可靠性,本设计中采用Altera 公司的Cyclone ii系列EP2C5T144C8N。本次设计根据漏磁检测原理,设计了基于FPGA的漏磁检测硬件电路控制模块,克服传统的以MCU作为控制器带来的采样速度和效率上的瓶颈。这些模块主要包括磁场信号采集、通道选择、模数转换、串口通信等4个模块。其中磁场信号采集利用霍尔传感器UGN3503,通道选择用CD4052BE实现,模数转换用ADC0809实现;串口通信模块实现FPGA与PC机通信。在设计过程中,用VHDL语言来编写总体控制部分实现对各模块的控制,包括控制通道选择的地址信号、控制模数转换的开始与停止及控制FPGA的串口发送。从QUARTUS II软件仿真结果可以看出,FPGA作为总体控制模块,能够实现数据的实时采集,体现了其对外围电路的良好控制性。从调试结果可以得出,基于FPGA的漏磁检测系统及控制具备相当的可行性及实用性。关键字:漏磁检测 FPGA 信号采集 串口通信目 录1 引言32 系统的软件设计32.1 设计平台Quartus II42.2 通道选择控制模块42.3 A/D转换控制模块52.4 串口通信模块62.5 分频与倍频模块83 仿真与调试93.1 FPGA调试简介93.2 通道选择控制模块仿真及调试93.3 A/D转换控制模块仿真及调试103.4 串口通信模块仿真及调试113.5 顶层设计仿真及调试124 设计结果与总结134.1 结果与总结13参考文献14致谢14 1.引言 管道作为一种经济、高效而安全的物料传输手段,在石油化工及天然气等产业中具有不可替代的作用。但铁磁性油气输送管道因长时间的腐蚀、磨损及意外的机械损伤等原因会形成机械裂纹和腐蚀穿孔等各种缺陷。如果不能及时发现、修理这些缺陷,将导致输送效率降低、输送介质泄露等恶性事故。因此研究高效、经济可行的管道长距离无损检测技术及研发高精度在线管道漏磁检测系统具有极大的现实意义和经济效益。 管道检测技术的研究已有近四十年历史,它是一个涉及多学科领域的研究项目,具有大量的理论研究问题和大量的工程技术问题。六十年代初,美英率先将无损检测技术(NDT)应用于清管器(PIG)上,将原来用于清管作业的PIG改进为具有信息采集、处理、存储等功能的智能检测PIG。随后,各国先后研制出漏磁型、超声型、涡流型的智能检测PIG。目前应用于管道无损检测的方法包括有超声检测、射线检测、涡流检测、漏磁检测及渗透检测,这五种方法就是人们常说的五大常规无损检测技术。除此以外,还包括有微波检测技术、激光检测技术、红外检测技术等非常规检测手段,在这些方法中漏磁检测技术是应用最广泛、技术最成熟的铁磁性管道缺陷检测技术,它适于多种传输介质,对铁损失等最常见的管道缺陷有非常好的检测效果。 2 系统的软件设计2.1 设计平台Quartus IIFPGA中软件设计的平台是Altera公司的Quartus II开发系统,Quartus II是综合性的PLD开发软件,支持原理图,各种硬件描述语言以及多种设计输入形式,自身带有综合器和仿真器,可以完成从硬件设计,软件设计,仿真到硬件配置的完整设计流程。Quartus II同时支持Altera公司的IP核,包含了各种宏功能模块库,使用户可以直接利用已经经过编译的成熟模块,如本设计中用到的双口RAM模块,简化了设计中的复杂性,并且可以缩短设计的周期。Quartus II的设计输入方法有很多种,可以灵活的运用,主要方法有三种,简要介绍如下:第一种方法就是原理图输入法,这种方法是最为直接的方法,由用Quartus II提供的各种原理图库进行设计输入。为提高效率,采用这种方法输入的时候应采用自顶向下逻辑分块,即把大规模的电路划分成若干小块的方法。一般如果对系统了解很深,并且系统速率的要求较高,或这系统中如果时间特性要求较高,就可以采用这种方法。原理图输入的缺点虽然仿真容易但是效率很低,但是这样的方法便于信号观察以及电路的调整,看起来也很直观。第二种方法就是硬件描述语言输入:Quartus II支持多种硬件描述。描述语言的优点是效率高,结果也容易仿真,信号观察也较方便。但语言输入必须依赖综合器,只有好的综合器才能把语言综合成优化的电路。对于大量的规范的、易于用语言描述、易于综合的电路可以采用这种输入方法。第三种方法网表输入:对在其它软件系统上设计的电路,可以采用这种方法,而不必重新进行输入。现实中为了保证设计的效率,功能的完整往往采用多种方法相结合的方式,而不是拘泥于某一种,例如本设计中就是利用前两种方法相结合,在利用QuartusII自身提供的相关模块基础上自行设计其他模块。这样就可以提高设计的速度和整个FPGA模块的准确度。2.2通道选择控制模块 本次设计的漏磁检测系统在实际应用时运用到的传感器量很大,管道轴向和径向一般都要放置传感器。比如说100个传感器的话我们就可以用8个十六选一和1个八选一的数据选择器,这样就需要通道选择控制信号去与这些芯片的地址信号相连,从而选中100个传感器。但是考虑到实验室条件和成本,我只用了四个霍尔传感器,但还是需要通道选择控制模块去选中传感器。系统每隔0.2ms采样一个传感器,所以通道选择模块输出的地址信号的周期为0.2ms(频率为5khz)。而系统用到的EP2C5T144C8芯片的系统时钟为50Mhz,因此需要系统将时钟分频处理。最终得到了实现目标要求的代码。部分代码如下所示: -designed by G_XW the address block entity address is port( clk:in std_logic; address_signal:out std_logic_vector(1 downto 0);end ;architecture one of address is begin process(clk) variable q :integer range 0 to 3; begin if clkevent and clk=1 then if(q=3) then q:=0; else q:=q+1; end if; end if;address_signalALE=0;START=0;LOCK=1;OE=0;next_stateALE=1;START=1;LOCK=1;OE=0;next_stateALE=0;START=0;LOCK=0;OE=0; IF (EOC=1) THEN next_state=st3; ELSE next_stateALE=0;START=0;LOCK=0;OE=1;next_stateALE=0;START=0;LOCK=1;OE=1;next_statenext_state=st0; END CASE;END PROCESS COM;REG: PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1) THEN current_state=next_state; END IF;END PROCESS REG;LATCH1: PROCESS(LOCK) BEGIN IF LOCK=1 AND LOCKEVENT THEN DOUT=REG_0; END IF;END PROCESS LATCH1;END behav;由于ADC0809采用通用串口通信方式。此种通信方式比较简单,并且 FPGA的IO口也支持此种通信协议。因此ADC0809在与FPGA通信时,无需再对IO口进行编程,它的数据总线可以直接与FPGA的IO口连接,进行数据交换。2.4串口通信模块异步串行通信要求的传输线少,可靠性高,传输距离远,被广泛应用于微机和外设的数据交换。实现串口通信主要需要完成两部分工作:将串口电平转换为设备电路板的工作电平,即实现RS-232电平和TTL/CMOS电平的转换;接收并且检验串行的数据,将数据变成并行的并提供给处理器处理。实现RS-232电平和TTL/CMOS电平转换可以用接口芯片来实现,实现数据的串行到并行转换用的是UART,它们是实现串行通信必不可少的两个部分。虽然目前大部分处理器芯片中都集成了UART,但是一般FPGA芯片却没有这个特点,所以使用FPGA作为处理器可以有两个选择,第一个选择是使用UART芯片进行串并转换,第二个选择是在FPGA内部实现UART功能。异步串行通讯是一帧一帧进行传输,帧与帧之间的间隙不固定,间隙处用空闲位(高电平)填补,每帧传输总是以逻辑(低电平)状态的起始位开始,停止位结束。信息传输可随时地或间断地进行,不受时间的限制。因此,异步通讯简单、灵活,对同步时钟要求可低些。异步通讯方式规定了传输格式,都以相同的帧格式传送。每帧信息由起始位、数据位、奇偶校验位和停止位组成。帧与帧之间用高电平分开。根据串行通信的协议,发送串行数据一般是:1个起始位,1个数据位,1个或多个停止位,这样,发送起始位以后表明传输开始。传送与接受的双方设定好同样的传输位数,直到1个数据位送完以后,送停止位。此时我们便可以开始针对FPGA和上位机进行编程。部分代码如下所示:-designed by G_XWarchitecture behavior of transfer istype state_type is (xidle,xstart,xwait,xshift); -状态机signal state : state_type:=xidle;signal txds : std_logic; signal tx_reg:std_logic_vector(9 downto 0); -输出数据begin-tx_reg=1& txbuf & 0;tx_reg=1011110010;process(bclk,reset,w_en,txbuf)variable cnt16:integer range 0 to 3:=0; -计数器,用来发送variable bitcnt: integer range 0 to 9 :=0; -控制发送位数beginif rising_edge(bclk) thenif reset=0 then state=xidle; -异步初始化,状态机设置为空闲状态txdsif w_en=1 then -开始发送信号触发state=xstart; -跳转到发送初始位状态else stateif cnt16=2 then -计数器到16就状态跳转到输出状态state=xshift;cnt16:=0;elsecnt16:=cnt16+1;state=xstart;end if;txds if cnt16 =3 then -计数器计数到15跳转到下一状态if bitcnt=10 then -如果输出8位完成,就转到结束传输状态state=xidle;bitcnt:=0;cnt16:=0;elsestate=xshift; -如果还没有输出8位,那么跳转到输出状态end if;cnt16 :=0;else cnt16:=cnt16+1;statetxds=tx_reg(bitcnt); bitcnt:=bitcnt+1; -输出数据位的序号自动加1state -容错设计,其他情况一律跳转到空闲状态state=xidle;end case;end if;end if;txd=txds; -输出数据end process;end behavior;2.5分频模块前面所介绍的通道选择控制、A/D转换控制、串口通信模块所需的时钟都需要将系统时钟50Mhz进行分频,分别是10000分频、100分频、1250分频。因为分频原理是一样,所以这里只给出100分频模块的部分代码,其它分频不再赘述了。-designed by G_XW the fenpin100 blockarchitecture one of fenpin100 is constant m:integer:=50;beginprocess(clk_in)variable count:integer range 0 to 99;beginif(clk_inevent and clk_in=1)thenif(count=99)then count:=0;elsecount:=count+1;end if;if(countm)thenclk_out=0;elseclk_out=1;end if;end if;end process;3 仿真与调试3.1 FPGA调试简介在FPGA硬件语言设计完成之后需要对其进行仿真与调试,成功之后才能制板。在这里用到的调试工具为Altera公司自己推出的Quartus II,该软件集FPGA设计,仿真,调试于一体。仿真采用嵌入在软件中的SignalTap II。在FPGA的仿真中进行功能仿真有两种激励的输入方式,一种是传统的波形输入,另一种则是使用Testbench。后者是指验证平台,它通过编写代码,对输入产生预定的激励,然后有选择的观察输出,并可以验证输出是否符合设计要求。在本次设计中我们采用传统的波形输入法对系统各模块,包括顶层模块进行仿真。并通过仿真来验证我们在第三节所设计模块的正确性。3.2 通道选择控制模块仿真及调试将3.2节所设计的模块代码通过Quartus II软件进行编译,顺利通过编译后生成模块图。模块图如图3.1所示, 图3.1通道选择控制模块其仿真结果如图3.2所示: 图3.2通道选择控制模块仿真结果由图3.2可知,clk为系统时钟经5000分频后的时钟信号,address1.0为地址信号输出,它输出给通道选择芯片hcf4052的连个地址信号管脚。从图中可以看到,地址信号address以0.1ms的周期依次输出0、1、2、3,使得hcf4052可以周期性地选中四个传感器。由此我们可以判断,通道选择控制模块设计成功。3.3 A/D转换控制模块仿真及调试将3.3节所设计的模块代码通过Quartus II软件进行编译,顺利通过编译后生成模块图。模块图如图3.3所示。 图3.3 ADC0809模块仿真结果如下图所示: 图3.4 ADC0809仿真结果 由仿真图形我们可以看到:clk为ADC0809工作时序,通过对系统时钟分频得到。在第一个时钟上升沿ALE和START变为高电平,此时ADC0809将地址信号锁存,并且将复位。第二个上升沿时ALE和START变为低电平,此时ADC0809开始模数转换,同时检测EOC的状态,当其为高电平时表示转换结束,所以在第三次和第四次上升沿OE均输出高电平,第四个上升沿时ADC0809将转换好的数据传给fpga,因此我们看到这时DOUT为71H。综上所述,A/D转换控制模块设计成功。3.4串口通信模块仿真及调试 将3.4节所设计的模块代码通过Quartus II软件进行编译,顺利通过编译后生成模块图。模块图如图3.4所示。 图3.4串口通信模块 图中bclk为串口发送数据的时钟信号,需要对系统时钟进行倍频再分频得到。由通信协议我们知道:下位机频率与上位机波特率要对应。由于漏磁检测系统一般数据量大,所以上位机设置的波特率为56000bps,故fpga串口发送的频率为56000。串口通信本系统串口通信只用到了发送功能,因此为了检验程序的正确与否,我们在程序中先发常数,然后发给pc,借助串口调试助手进行调试。3.5 顶层设计仿真及调试系统顶层设计图如下所示 图3.6顶层设计示意图在Quartus II中将前面介绍过的通道选择控制模块、A/D转换控制模块、串口通信模块、分频与倍频模块结合起来,用原理图的输入方法设计出了顶层原理图。最后我们将设计好的顶层综合编译,通过下载器下载到目标板上,经测试表明,本次设计所设定的要求基本得以实现。综合器综合的结果如图3.7所示。从中我们可以看出,系统占用的IO口不多,而底层的逻辑门电路占用的也不大,这表明我们的设计还较合理。 图3.7顶层设计综合结果5设计结果与总结5.1结果与总结 通过Altera数据手册提供的关于Quartusll JTAG配置步骤将编译并且仿真好的程序代码文件通过JTAG接口烧写进FPGA的SRAM中这里不是先将程序烧写迸配置芯片EPCS4,目的是为了防止程序不能达到预期的目的时,方便在线调试(CPLD具有带电擦写功能,因此CPLD同样具备此优势)。FPGA的优点就是更改程序代码后可以实时地下载给FPGA观察运行情况。经过几次调试后修改,终于得到了让我们比较满意的结果。前面说道过,这个实验如果能在一根有缺陷的管道中进行,那么就能看到某个位置的曲线与周围曲线有明显不同,技术人员就能分析出管道的缺陷在哪。并且随着科技的发展,新传感器的发明,新技术的应用,在漏磁检测上,也一定会有新的创新出现。因此本次设计存在着相当的前景。在做计算机课程设计的过程中,必须做到有一个大纲,做到各个模块的功能的实现,这样才容易实现整个的功能的实现。参考文献1.蒋奇,王太勇.钢管漏磁检测信号的时频分析J.机电设备,2002(2):16-20.2.邢燕好.基于FPGA的漏磁检测系统设计D.沈阳:沈阳工业大学,2005.3.廖超平.EDA技术与VHDL实用教程M。北京:高等教育出版社,2007.4.李莉,路而红.电子设计自动化(EDA)D.北京:中国电力出版社,2009.5.林敏,方颖立.VHDL数字系统设计与高层次组合M.北京:电子工业出版社,2002.致谢经过几个星期的学习,与组员的讨论,终于在此完成了计算机课程设计。由于自己以前接触过VHDL硬件描述语言,所以相对来说容易一些。但是依然要感谢我的指导老师柴老师,组员以及各位同学的帮助。如果没有他们的帮助,我不可能完成的这么快,也不可能考虑的如现在全面。在这里首先我要感谢柴明钢老师,他的认真教导,他的耐心鼓励,他的认真负责,都使我感觉到这几周受益匪浅,在以后的学习和生活中,他都是我的榜样。其次,我也必须谢谢王鹏同学的帮助,他给予了我们的模块思想与思路。还有吴青云同学,他是一个虚心接受别人建议的组员,我们合作很愉快,希望以后还有一起做课程设计或学习的机会。他们之中有的比我有经验,懂得比我多,当碰到难题我们就一起讨论,有不懂的地方他们也是不遗余力地教我。所以非常感谢这些人的帮助,以使得我掌握了更多的知识,我也将再接再厉,不辜负给的期望。 附录源程序代码1.Transfer模块-这段程序是串口通信的发送部分-时钟频率是串口通信波特率的15倍-计数器计数满16才进行下一位的输出-数据输出变化占一个周期,保持数据占14个周library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity transfer is PORT( txbuf:in std_logic_vector(7 downto 0); -发送十六进制代码 bclk:in std_logic; reset:in std_logic; -复位 w_en:in std_logic; -发送使能 txd:out std_logic); -发送端end transfer;architecture behavior of transfer istype state_type is (xidle,xstart,xwait,xshift); -状态机signal state : state_type:=xidle;signal txds : std_logic; signal tx_reg:std_logic_vector(9 downto 0); -输出数据begin-tx_reg=1& txbuf & 0;tx_reg=1011110010;process(bclk,reset,w_en,txbuf)variable cnt16:integer range 0 to 3:=0; -计数器,用来发送variable bitcnt: integer range 0 to 9 :=0; -控制发送位数beginif rising_edge(bclk) thenif reset=0 thenstate=xidle; -异步初始化,状态机设置为空闲状态txdsif w_en=1 then -开始发送信号触发state=xstart; -跳转到发送初始位状态else stateif cnt16=2 then -计数器到16就状态跳转到输出状态state=xshift;cnt16:=0;elsecnt16:=cnt16+1;state=xstart;end if;txds if cnt16 =3 then -计数器计数到15跳转到下一状态if bitcnt=10 then -如果输出8位完成,就转到结束传输状态state=xidle;bitcnt:=0;cnt16:=0;elsestate=xshift; -如果还没有输出8位,那么跳转到输出状态end if;cnt16 :=0;else cnt16:=cnt16+1;statetxds=tx_reg(bitcnt); -数据位输出,只有这个状态决定输出,然后跳转状态保持数据位bitcnt:=bitcnt+1; -输出数据位的序号自动加1state -容错设计,其他情况一律跳转到空闲状态state=xidle;end case;end if;end if;txd=txds; -输出数据end process;end behavior;2.fenpin500模块library ieee;use ieee.std_logic_1164.all;entity fenpin500 isport( clk_in:in std_logic; clk_out:out std_logic );end fenpin500;architecture one of fenpin500 is -if system clock is60MHz,THEN 1250fenpinconstant m:integer:=625;beginprocess(clk_in)variable count:integer range 0 to 1249;beginif(clk_inevent and clk_in=1)thenif(count=1249)then count:=0;elsecount:=count+1;end if;if(countm)thenclk_out=0;elseclk_out=1;end if;end if;end process;end one;3.fenpin100模块library ieee;use ieee.std_logic_1164.all;entity fenpin100 isport( clk_in:in std_logic; clk_out:out std_logic );end fenpin100;architecture one of fenpin100 is -after fen pin ,the period is 2us(500khz) constant m:integer:=50;beginprocess(clk_in)variable count:integer range 0 to 99;-if system clock is 20MHz,then 20000 fenpinbeginif(clk_inevent and clk_in=1)thenif(count=99)then count:=0;elsecount:=count+1;end if;if(countm)thenclk_out=0;elseclk_out=1;end if;end if;end process;end one;4.fenpin模块library ieee;use ieee.std_logic_1164.all;entity fenpin isport( clk_in:in std_logic; clk_out:out std_logic);end fenpin;architecture one of fenpin is -after fen pin ,the period is 0.2ms(5khz) constant m:integer:=5000;beginprocess(clk_in)variable count:integer range 0 to 9999;-if system clock is 20MHz,then 20000 fenpinbeginif(clk_inevent and clk_in=1)thenif(count=9999)then count:=0;elsecount:=count+1;end if;if(countm)thenclk_out=0;elseclk_out=1;end if;end if;end process;end one;5.address模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity address

温馨提示

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

评论

0/150

提交评论