基于FPGA的超声波雷达数据采集系统.doc_第1页
基于FPGA的超声波雷达数据采集系统.doc_第2页
基于FPGA的超声波雷达数据采集系统.doc_第3页
基于FPGA的超声波雷达数据采集系统.doc_第4页
基于FPGA的超声波雷达数据采集系统.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

西南科技大学研究生课程设计报告课程名称: 现代数字系统设计 设计名称:基于fpga的超声波雷达数据采集系统 姓 名: 王桂山 学 号: 2015000102 课程教师: 刘桂华教授 起止日期: 2015/12/27-2016/1/22 西南科技大学信息工程学院制6设 计 任 务 书学生班级: 现代数字系统设计 学生姓名: 王桂山 学号:2015000102设计名称: 基于fpga的超声波雷达数据采集系统efpg液晶显示屏 起止日期: 2015/12/27-20151/22 课程教师: 刘桂华教授 设计要求:设计要求:(1) 完成对工业超声波雷达通信协议系统设计。(总)(2) 对该设计进行解析的实时性、准确性验证,证明验证方案的正确性。(3) 给出经过传输到上位机(肖悦)后的数据流,对数据流内的每一帧的起始位、数据位、校验位。每个数据位都要有必要的说明。(4)液晶显示屏能够通过波形图时序图等,完成图像的传输。(5)液晶显示屏能够显示数据分析变化、颜色变化、微调的数据能够被体现,灵活掌握对阵彩色液晶屏的应用。(6)液晶显示屏能够通过获得自模数据来显示字符。 教学提示:(1) 系统说明系统框图如图1所示。 图1 系统框图端口信号说明如表2所示。表1 超声波雷达端口信号说明信号i/o说明transtarti复位信号,低电平复位portname7:0i超声波雷达端口号,有8种取值98、96、97、99、114、115分别代表a、b、c、d、e、h端口distance7:0i距离数据,单位cm,最小值0x15,表示障碍物距离当前端口映射的超声波探头距离15cm,最大值0x250,表示障碍物距离当前端口映射的超声波探头距离250cm,transtart有效的同时,超声雷达送出数据。nextcommand7:0i控制命令,具体为8位二进制值8b10001000,表示当前端口值数据传输完成,预备传输下一端口的值。tranendi数据包包尾指示,和数据包最后一个字节同步,且只维持一个时钟周期(2)lcd控制说明 lcd 的接口时序波形如图1所示。vsync 是场同步信号,低电平有效,从时序图可以看出,vsync 是每一场(即也可以理解为每送一幅完整图像)的同步信号;与此类似,hsync 是行同步信号,也是在每一行数据传输的开始产生几个时钟周期的低脉冲。这两个信号用于同步当前的数据信号,根据固定的脉冲约定,我们在某些时钟上升沿前将图像数据送到数据总线上供 lcd 内部锁存。 图2.lcd数据传输说明表2.lcd数据传输的时间参数表3.lcd控制命令传输的时间参数(3) sram传输协议 sram 内部的结构如图所示,要访问实际的 momory 区域,fpga 必须送地址(a0-a14)和控制信号(ce#oe#we#),sram 内部有与此对应的地址译码(decoder)和控制处理电路(control circuit)。这样,数据总线(i/o0-i/o7)上的数据就可以相应的读或写,其结构如图3所示。图3.sram数据传输结构框图表4.sram数据传输的时间参数序号管脚i/o方向描述1a0-a14input地址总线2ceninput芯片使能输入,低有效。3oeninput输出使能输入,低有效。4weninput写使能输入,低有效。5i/o0-7input数据输入/输出总线。6vcc电源。7gnd数字地要写数据时,(这里是相对于用 fpga 操作 sram 而言的,软件读写可能有时间顺序的问题需要注意),比较高效率的操作是送数据和地址。图4.sram读写时序图把 ce#和 we#拉低。然后延时 wct时间再把 ce#和 we#拉高,这时就把数据写入了相应地址了,就这么简单。读数据就更简单了,只要把需要读出的地址放到 sram 的地址总线上,把 ce#和 oe#拉低,然后延时一段时间后就可以读出数据了。时序图中列出的相关时间参数如表所示。 表5.sram时间控制边缘的时间参数表(3)数据采集系统数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广泛引用在各个领域。在该系统中需要将模拟量转换为数据量,而 a/d是将模拟量转换为数字量的器件,他需要考虑的指标有:分辨率、转换时间、转换误差等等。而单片机是该系统的基本的微处理系统,它完成数据读取、处理及逻辑控制,数据传输等一系列的任务。在该系统中采用的是8052系列的单片机。而数据的显示则采用的是12864lcd液晶显示屏,该器件比较直观,在生活中接触也较多。 数据采集系统一般由信号调理电路,多路切换电路,采样保持电路,a/d,单片机等组成。(4) 显示部分因为汉字本身的特点,显示汉字始终是计算机在我国应用普及的一个障碍。随着单片机和显示技术的发展,加上人们不满足单片机系统采用 led 数码管的简单显示,利用单片机控制液晶显示成为当前显示系统的主流。本文主要引用lcd液晶显示器为显示设备。实现的一个可以显示汉字、字符和动态显示汉字的液晶显示器设备。基于fpga的超声波雷达数据采集系统一、 设计目的和意义1.1设计的目的和意义超声波避障技术在车辆运动中广泛应用,现成的车载超声波雷达的优势是性能稳定、多路传感,劣势是难以二次开发。为项目开发的需要,解析超声雷达的通信协议就显得重要。本设计源于西南科技大学“xx核环境遥操作机器人”的子项目“基于超声扫描的机器人环境障碍信息识别”,有很强的实用性。 通过基于fpga的超声波雷达数据解析系统,深入的理解fpga设计的原理,理解和运用sram数据保存与读取,理解与运用rtc实时时间更新,运用lcd进行数据显示,熟悉uart双向通信,pc端数据采集、处理、保存、调用等常用的fpga对传感器信号开发的整套流程,有很强的科研与学术价值。二、 设计原理2.1设计的整体原理 图1 .基于fpga的超声波雷达数据采集系统框图原理:利用fpga快速采集i/o口信号与并行处理的能力,将超声波雷达获取的多路距离信息读取,并实时传输。由于超声波测量需要的实际驱动频率是40khz,6路超声波理论上要求单片机响应速度不能低于40*6*8khz,也就是2mhz,同时uart串口一般波特率要求9600,液晶屏刷新频率72hz,综合要求单片机没有倍频需要至少20mhz,端口数需要47个。故采用cyclone iv e 系列ep4ce6e22c8芯片,芯片可用i/o引脚多于150,主频25mhz,满足设计的要求。2.2设计的硬件组成2.3设计的组成(1)设计内容(2)设计方案(3)项目进度(4)设计思路(5)成果展示三、 详细设计步骤超声波雷达传输协议解析 数据解析的流程数据解析的matlab主程序数据解析的结果fpga超声波数据采集系统框图数据解析的软件构成:数据解析的fpga软件构成数据解析的fpga端软件编程环境数据解析的pc端软件构成数据解析的pc端软件编程环境系统设计原理本设计的硬件电路主要包括上位机、lcd液晶显示屏、sy-cy4学习板、超声波测距模块以及电脑等五大模块组成。数字电路高度集成化是现代电子发展的大势所趋,片上系统(soc)的概念也就应运而生。它是指在单个芯片上集成一个完整的系统,一般包括系统级芯片控制逻辑模块、微处理器微控制器内核模块、数字信号处理器模块、存储器或存储器控制模块、与外部通信的各种接口协议模块、含有 adcdac 的模拟前端模块、电源及功耗管理模块,它是一个具备特定功能、应用于特定产品的高度集成电路。 原理:总线桥,通俗的理解桥就是用来连接河两岸的,一定听说过主板上的南桥和北桥吧。cpu 很好很强大,可以处理海量数据,但是再强大也没法发出声音、显示图像啊,术业有专攻嘛,cpu 就是干数据运算和控制的活,别的基本不管。因此,cpu 需要通过桥和外围设备进行信息交互,把需要进行处理的数据接收进来,把处理完的数据发送出去,可能说得不是很专业,但是基本就是这样了。cpu的引脚终归是有限的,如果一个cpu要和所有外设都搭个独木桥,那么恐怕咱们的 cpu 要比得上巴掌大才够在肚子底下容下那么多“脚”了。这么看,这个桥还真不能是独木桥。至少该是一座纵横南北的立交桥,再形象一点说,这座立交桥的交错中心点是贯通的,处于这个中心点的车可以通过处于任何高度的道路驶向四面八方。那么,我们所说的 cpu 就处于这样的核心位置。好,这里不再深入了,总线其实就是 cpu 的一组满足一定协议的引脚的集合,这组 引脚可以和多个同样满足这个特定协议的不同外设进行连接。当 cpu 要用这个总线和某个外设交互信息时,就会在它们之间搭起一座“独木桥”,其它外设就只能望桥兴叹。总线从某种意义上看就是为了节约引脚而出现的,当然从另一种意义上看也是为了统一信息交互方式而出现的。这里 fpga 外面挂了个“总线桥”,用于这个系统和外部设备交互,其实 fpga 内部的 sopc 也有个总线桥,它的名字叫做“avalon”, avalon 总线,以后当你越是使用它也就会越多的发现它的强大。上面提到 nios ii 只是一个处理器而已,而 avalon 总线就是要把 nios ii 和所有其它在 fpga内甚至 fpga外定制的外设连接起来。当然你可以理解那个“系统互联逻辑”(system interconnect fabric)就是 avalon,但是请记住,avalon 只是 system interconnect fabric 的一种形式而已。 说个桥就说到 fpga 里面去了,说完才发现其实 fpga 系统内和常见的嵌入式系统的架构有着异曲同工之妙,个中奥妙只能用心的人才会体味得到了。系统设计框图三:fpga液晶显示屏一主要外置硬件: 1、lcd简介lcd 的接口时序波形如图所示。vsync 是场同步信号,低电平有效,从时序图可以看出,vsync 是每一场(即也可以理解为每送一幅完整图像)的同步信号;与此类似,hsync 是行同步信号,也是在每一行数据传输的开始产生几个时钟周期的低脉冲。这两个信号用于同步当前的数据信号,根据固定的脉冲约定,我们在某些时钟上升沿前将图像数据送到数据总线上供lcd内部锁存。 如表所示,这是lcd 时序图中对应的时间参数。2、功能简介如图所示,本实例除了 sf-cy4 开发板,还需要 sf-lcd 子板用于连接 3.5 寸 320*240 的真彩色液晶屏。fpga 内部产生 32 级红色的 colorbar 以及 lcd 时序用于驱动显示。lcd 的驱动大体如图所示。3、模块划分本实例模块划分如图所示。lcd_controller.v 模块产生 32 级红色 colorbar 和 lcd 驱动时序。 sf-cy4 开发板和 sf-lcd 子板的装配连接如图所示。4、板级调试连接好下载线,给 cy4 开发板供电。 打开 quartus ii,进入下载界面,将本实例工程下的 cy4.sof 文件烧录到 fpga 中在线运行。 如图所示,可以看到显示器上出现 32 级红色的 colorbar。图:液晶显示模块液晶显示模块用于显示采集好的数据,由efpg液晶显示屏来完成。fpga截图(如上图接线,vcc供5v电源,gnd为地线,trig 触发控制信号输入,echo 回响信号输 出等四支线。) 实物规格(sf-cy4外形尺寸图)四、lcd 字符显示驱动之字符取模1、字符取模要显示字符,首先需要获得字模数据,我们使用字模软件 pctolcd2002。该字模软件用1bit 代表一个像素点,即它只能表示2种颜色的图像,当然不是仅仅局限于黑和白了,用户可以根据需要来决定这1bit 数据(0或1)代表的色彩。 下面说明设计中需要的字符是如何取模的,启动取模软件 pctolcd2002,点击菜单栏的“模式”,选择“字符模式”。再点击菜单栏的“选项”(或点击如图所示的齿轮图标),在弹出的对话框中设置如图所示(行后缀为英文的“;”)。此外,在主界面中,我们设置字符宽度为64*64(实际上如果我们是给字符取模,它默认为32*64),在主界面下方的字模输入框中输入了大写字母 a,接着点击它右侧的“生成字模”按钮(图中没有示意),则在输出栏中出现了一大串32bit一行,并且行后缀为“;”的字 符,copy 他们,后面马上就会用上。32*64 点阵的字符“a”取模后的数据如下。实际上这些数据如果我们用二进制的0和1一位位的将他们排列开来,则我们可以看到 1 可以排列出一个字母“a”出来。正是根据这个原理,我们后面会每行32位的将他们送往液晶屏显示,一共有64行这样的显示。基于前面取到的字模数据,我们假定从屏幕的(0,0)坐标到(31,63)坐标区域(对应就是32*64的点阵)内显示字符。那么当坐标计数器刷新到(0,0)坐标点的时候我们就要相应判断第一行数据的 bit31 的值,然后决定送哪种色彩(0 代表一种色彩,1 代表另一种色彩)。当坐标计数器刷新到(1,0)坐标点的时候我们就要相应判断第一行数据的bit30的值直到刷新到(31,0)时判断第一行数据的 bit0 的值,由此完成了首行字模数据的译码。往后的译码都和首行类似,64行字模数据寻址完毕后,大写字母“a”便出现在我们的屏幕上。当然了,为了显示得美观,我们特意将这个32*64的大写字母“a”放到了 320*240 的lcd 的正中央。那么它的坐标就不是(0,0)到(31,63)的区域了。而是(144,104)到(175,135)这个区域。我们这个实例最终要显示的效果如图7.86 所示。在(144,104)到(175,135)这个区域内,字符“a”以蓝(16h001f)字红(16hf800)底显示,lcd 的其他显示区域则为黑色(16h0000)。lcd显示电路设计采用lcd液晶显示屏显示。其具有体积小、功耗低、界面美观大方 等优点,这里使用yb1602液晶屏,1602显示模块用点阵图形显示字符,显示模式分为2行16个字符。它具有16个引脚,其正面左起为第一脚,如下图所示: 第一脚gnd:接地。 第二脚vcc:+5v电源。 第三脚vo:对比度调整端。使用时通过接一个10k的电阻来调节。 第四脚rs:寄存器选择信号线。 第五脚rw:读写信号线。 第六脚e:使能端,当e由高电平跳变为低电平时执行命令。 第714脚:8位数据线d0d7。 第十五脚bla:背光电源正极输入端。 第十六脚blk:背光电源负极输入端。(lcd显示电路)(1602操作指令)液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a”。 因为1602识别的是ascii码,试验可以用ascii码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如a。1602通过d0d7的8位数据端传输数据和指令。显示模式设置:(初始化)001100000x38设置162显示,57点阵,8位数据接口;显示开关及光标设置:(初始化)00001dcbd显示(1有效)、c光标显示(1有效)、b光标闪烁(1有效)000001nsn=1(读或写一个字符后地址指针加1&光标加1),n=0(读或写一个字符后地址指针减1&光标减1),s=1且n=1(当写一个字符后,整屏显示左移)s=0当写一个字符后,整屏显示不移动数 据指针设置:数据首地址为80h,所以数据地址为80h+地址码(0-27h,40-67h)其他设置:01h(显示清屏,数据指针=0,所有显示=0);02h(显示回车,数据指针=0)四、系统整体软件介绍(1)、软件功能简介实例(1)读取 system id 外设的两个寄存器值,一个是 id 值,另一个是 timestamp 值。软件流程如图所示。示例(1)首先做一个最简单的软件实例,即通过 jtag uart 在 eds 的 nios console 中每个 3秒钟打印一串“hello nios ii”的字符。软件流程如图所示。示例(2)使用秒定时中断,递增显示到数码管上的 4 位数据。软件流程如图所示。 实例(1)如图上 示例(1)如图上 示例(2)如图上sytem id 的两个寄存器,其描述如下。 设组件的寄存器 1 取值为自 1970 年 1 月 1 日以来到该外设生成时的总秒数。(2)、软件代码解析(本实例(1)的软件代码如上:) 1、iord_altera_avalon_sysid_qsys_id(sysid_base)函数即读取我们定义的system id外设的 id 值,sysid_base 是我们定义的 system id 外设的基址。 2、iord_altera_avalon_sysid_qsys_timestamp(sysid_base) 函数即读取我们定义的system id 外设的 timestamp 值。本示例(1)的软件代码很简单。如图上所示:printf()是标准的输入输出函数,它所对应的设备在 bsp editor 中可以设定,我们当前的设定是 jtag uart,如图所示。usleep()函数也是标准的库函数,它表示以 us 为单位的延时。如我们输入 3000000 则延时 3000000us,即 3000ms=3s。在示例(2)中宏定义,使用简单的 iowr 函数可以读写数码管组件的地址,从而实现数码管显示控制。数码管显示值是 4 位的 10 进制数,但是我们在 verilog 编写定义时,写入的数据是 32位,bit31-24 代表显示到数码管千位的数据;bit23-16 代表显示到数码管百位的数据;bit15-8代表显示到数码管十位的数据;bit7-0 代表显示到数码管个位的数据。(3)、板级调试实例(1):首先,我们需要将 quartus ii 工程中产生的 cy4.sof 文件烧录到 cy4 开发板的 fpga 中。 接着,在 eds 下,将程序 run 起来。 片刻后,我们可以在 eds 的 nios console 中看到如图所示打印出来的字符串。system id 的值正是我们在 qsys 所设定的,而 timestamp 的值自己可以再换算,是不是从 1970 年 1 月 1 日到今天所经过的秒数(这个值可以根据自己实验得到的为准,分别出现过各种不同的情况)。 示例(1)首先,我们需要将 quartus ii 工程中产生的 cy4.sof 文件烧录到 cy4 开发板的 fpga 中。 接着,我们在 eds 下,点击菜单“run run configuration”。接着如图所示,在弹出的选项卡中,选择 project 下的 project name 为 nios2ex1。在 target connection 中,点击右侧的“refresh connections”按钮,直到左侧的 processors和 byte stream devices 出现我们工程所对应的处理器和下载线名称。 在示例(2)中,首先,我们需要将 quartus ii 工程中产生的 cy4.sof 文件烧录到 cy4 开发板的 fpga 中。 接着,在 eds 下,将程序 run 起来。 接着我们可以看到数码管上的数据每秒递增。五、 设计结果及分析电气参数系统软件设计(本人主要负责efpg液晶显示器的部分工作,主要工作是李志雄大师哥做的。)六、 体会今年选修这现代数字系统设计节课收获很多,之前完全不懂这节课的内容,上课一点听不懂,上机做实验一点不会,后来碰巧遇到大师哥,在大师哥的带领和帮助下,从开始的茫然、完全不知道,到后来的看书,设计开发板,调电路,偶尔通宵练习各种fpga实例,到最后能独立完成试着一小部分任务,一路走来,感受颇多。学习fpga主要经历了第一阶段: (1)学习verilog语言,熟悉verilog语法。 (2)学习fpga,熟悉quartusii软件的功能,逻辑算法设计,接口模块(rs232,lcd,vga,spi,i2c等)的设计,时序分析,硬件优化等,自己开始设计简单的fpga板子。 (3)学习niosii,熟悉niosii的开发流程,熟悉开发软件(sopc,niosii ide),了解niosii的基本结构,设计niosii开发板,编写niosii c语言程序,调试板子各模块功能。 第一个阶段,现在主要的硬件描述语言有vhdl,verilog两种。 有c语言的基础,学起verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。学习verilog没有看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就进入了学习的第二个阶段。 所有的项目制作都是在李志雄大师哥带领下进行的,大师哥自己买了一块fpga的开发板做练习,熟悉quartusii的各种功能,比如ip的调用,各种约束设置,时序分析,logiclock设计方法等,不过做到后面发现fpga的资源的利用,几乎快要用完。硬件完成后,大部分的时间都在写程序,感觉verilog跟差不多,就将原来写成的代码翻译了一下,每写一段代码就测试一下。起初并不知道在quartus里还有逻辑分析仪的功能,所以程序出了问题只能使劲的分析代码,猜想问题可能出在哪里,万不得已时才做一下仿真(后来看很多有做程序都先做仿真,仿真通过后再下载到目标板里运行测试,但到现在李志雄大师哥的仿真关还没过),所以做得很累。大师哥感到这样做下去到时间结点肯定结了不了项目,就找fpga的qq群向高手们请教经验,知道了可以quartus的逻辑分析仪来观察信号。后面的程序找问题就容易多了,按照ata协议、sdram手册、及各外围芯片手册一步步写下去,当然其中也遇到了各种各样的问题,但很快得到解决。 简单说一下体会吧,归结起来就三个字:做、想、问。书读千遍,不如做一遍;看别人做百次,不如自己做一次;就是要实践。实践的动力一方面来自兴趣,别一方面来自己压力,个人觉得后者更重要。有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。在做的过程中要多想,多想想问题出现的原因,问题解决后要多问几个为什么,这也是经验积累的过程,最好要写项目日志,把问题及原因、解决的办法都写进去。还要多问,遇到问题经历了痛苦的思索后还得不到解决就要问了,问搜索引擎,问网友,问同学,一篇文章、朋友们的点拨都可能帮助自己解决问题。 f

温馨提示

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

最新文档

评论

0/150

提交评论