GPS的FPGA实现.ppt_第1页
GPS的FPGA实现.ppt_第2页
GPS的FPGA实现.ppt_第3页
GPS的FPGA实现.ppt_第4页
GPS的FPGA实现.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

基于FPGA的GPS采集器设计与实现 项目骨干: 组长:余江 组员:木荣、洪光 仁飞、文斌 超 GPS模块简介: GPS (Global Position System), 即全球定位系统,它是 一个由覆盖全球的24颗卫星组成 的卫星系统。 GPS系统包括3个基本组成部分: (1)太空部分,即空中的GPS 卫星 (2)控制部分,即地面的GPS卫星 (3)监控系统用户部分,即GPS的移 动用户端 GPS模块简介: Samsung 公司的GPD14B02 GPS模块简介: 数据流 : GPS模块简介: 模块输出信息主要包括4个部分: (1)位置测定系统定位资料GPGGA $GPGGA,063740.998,2234.2551,N,11408.0339,E,1,08,00.9,000 53.A,M,-2.1,M,*7B (2)偏差信息和卫星状态GPGSA $GPGSA,A,3,06,16,14,22,25,01,30,20,01.6,00.9,01.3*0D (3)导航系统卫星相关资料GPGSV $GPGSV,2,1,08,06,26,075,44,16,50,227,47,14,57,097,44,22,17,1 69,41*70 $GPGSV,2,2,08,25,49,352,45,01,64,006,45,30,13,039,39,20,15,3 12,34*7A (4)最起码的GNSS信息GPRMC $GPRMC,012724.000,A,2234.3157,N,11408.0921,E,0.00,29010 8,A*71 GPS模块简介: 我们所关心的是GPRMC这条信息,因为其中包括当前格林 威治时间、经度、纬度、日期等。 设计结构图 实现方式: 2、纯硬件语言 (Verilog HDL和VHDL) 1、NiosII 软硬协同 1、NiosII 软硬协同 1、NIOS II 编程方法 2、项目系统结构 3、项目程序 1、 NIOS II 编程方法 (1)最底层的寄存器操作,我们 可以自己按照altera的文档定义寄 存器结构体。然后写函数直接对 结构体进行操作。然后自己写函 数操作寄存器,要对这些寄存器 ,就要根据system.h里面的各个 设备的基地址来操作结构体。 (2)altera提供的软件接口和函数, 他封装好了函数,屏蔽了寄存器的 操作。 IORD_ALTERA_AVALON_PIO_DATA(base) IORD_ALTERA_AVALON_PIO_DIRECTION(b ase) IORD_ALTERA_AVALON_PIO_IRQ_MASK(b ase) IORD_ALTERA_AVALON_PIO_EDGE_CAP(b ase) 1、 NIOS II 编程方法 (3)HAL提供了硬件寄存器操作 和c语言编程的接口,相当于系统 调用Linux中的系统调用。相当于 实现了设备驱动,我们可以调用 其中的一些函数编程序。在 SOPC Builder生成硬件系统以后 ,NIOS II IDE 能够自动生成对应 的HAL系统库。 1、 NIOS II 编程方法 目前Nios II 的大部分开发都是在 HAL(hardwareabstraction layer) 的基础上进行的。HAL系统库是 一个轻量级的运行环境,提供了 简单的和硬件通讯的设备驱动程 序。HAL API集成了ANSI C标准 库,这些API允许你用标准C函数 (例如:printf,fopen,fwrite等等) 去存取设备。 图2 HAL体系结构 应为有了这样的接口,所以我们不用考虑底层,直接用C语言编程。 (4) HAL API集成了ANSI C标准 库,可以直接调用标准的C函数 编程。 在IDE里面编译以后,system.h文 件中有这样的定义: #define UART_NAME “/dev/uart“ #define UART_TYPE “altera_avalon_uart“ #define UART_BASE 0x00041000 #define UART_SPAN 32 #define UART_IRQ 0 1、 NIOS II 编程方法 可以用以下的代码直接从设备中读 出数据 FILE* fd; fd = fopen (“/dev/uart“,“r+“); if (fd = 0) perror(“Open uart errorn“); exit(1); 1、 NIOS II 编程方法 2、项目系统结构 UART 波特率为9600,连接DE2的GPIO,接收GPS串 行数据,lcd显示数据 。 3、项目程序 一般有两种方式: 1、用altera软件接口 int set_baudrate(alt_u32 brate) IOWR_ALTERA_AVALON_UART_DIVISOR(UART_BASE,(unsigned int)(CPU_FRE/brate+0.5); return 0; /串口接收中断服务程序 void uart_ISR(void* context,alt_u32 id) temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE); raw_bufreceive_count+=temp; int uart_init(void) /设置波特率为9600 set_baudrate(baudrate); IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);/接收中断使能 IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x00);/清状态标志 IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE, 0x00);/清接收寄存器 alt_irq_register(UART_IRQ,NULL,uart_ISR); return 0; 2、用标准C函数 本项目用的是第二种方法。 主要函数: void gps_pro(char *)/处理数据 void lcd_display(FILE *lcd)/显示信息 结构体用来存储信息 struct gps_info int time; char status;char latitude_valueBUF_SIZE; char longtitude_valueBUF_SIZE;char dateBUF_SIZE; rmc_info; 3、项目程序 大概问题 1、IDE的使用问题,包括标准输入输出,调试级别,优化 级别,标准库的包含问题(要根据系统的ram资源大小 折中选择)等。 2、一开始对可以直接用C语言编程不是很理解,C语言和 硬件系统是如何联系的。后来通过分析HAL和寄存器等 有所了解。 3、LCD方面,NIOS里面用户不需要设置LCD_ON.在 quartus里面,不用的管脚一定要设置三态,因为默认接 地,LCD_ON低电平,不会工作。 GPS数据的解析与显示( Verilog HDL) gps_data70 data_ready 解析GPRMC并将所需信息放到memory中 GPS_TXD UART接收 解析GPRMC信息并显示 Time_ram Latitude_ram Longitude_ram LCD1602 FPGA 实现数据解析并在LCD1602上显示框图 系统RTL原理图 UART接收模块 停止位 MSBLSB 开 始 位 第n个字节数据流 这个模块的好坏直接影响后续模块能否正确解析数据并显示。 通过示波器可以观察到,从GPS_TXD输出的信号是一串脉冲信号。输出的串行 数据遵从RS232标准,特征如下: 没有数据发送时,输出一直是高电平; 数据是一个bit 一个bit 的输出,低位在前,高位在后; 发送一个字符需要10bit, 即 1个开始位(低电平)、8个数据位、1个停止位 每个字符的8bit数据由ASII 码表示(如:$的ASII码是0x24); RxD gps_data70 data_ready data_ready 信号产生状态机 波特率产生器 数据接收状态机 UART接收模块 这个模块做两件事: 将串行的输入数据转换为并行的数据(8bit)输出; 每接收完一个字符就产生一个单时钟周期脉冲信号。 此UART接收模块主要包括两个功能组成部分:波特率产生器和串 行数据接收状态机。 波特率产生器通过对系统时钟(50M)分频得到9600Hz的时钟。 数据处理显示模块 我们所关心的是以“$GPRMC”开头的这条信息,所以首先需检测到 “$GPRMC”这六个字符, 用一个状态机就可以实现(这个就是我们在数字电路中 所学的序列检测器),然后将后续的时间、经纬度信息存储起来。 这个过程中遇到的主要问题是不知道信息如何存储并读出。其中采用了以下方案 : 用移位寄存器(如: reg 60:0 gps_data),这里犯了一个严重错误:移位寄 存器是一位一位的存储,而我们的数据是一个字符一个字符的存储(8 位) 用ram (quartus 自带IP) 开始因为RxD_ready 信号的问题,导致数据存储不正确 (如:RxD_ready 不是一个时钟周期导致同一字符被存了好多次),放弃了使 用。 定义一个memory类型的数据, 如 : reg7:0 Time_ram15:0 , 这由16个单元,每个单元由8个寄存器组成。存储 和读取很方便,类似于C语言中的一维数组。 “$GPRMC”检测、时间、经纬度信息存储状态机 数据处理显示模块 注:复位时在S0状态,信息有效时,S6状态存储 时间信息,S7状态存储纬度信息,S8状态存储经 度信息。每个状态在RxD_ready 信号有效时读取 RxD. 基于FPGA的GPS数据采集 (VHDL) 串并转换 序列检测 高速数据与低速数据 测试方法 疑问解决 串并转换 协议(说好了的事,不能变卦) 停止位 MSBLSB 开 始 位 第n个字节数据流 Datareday信号产生(并转串也用到) process (rst,clk16x,no_bits_rcvd) begin if rst = 1 then reday = 0 ; elsif clk16xevent and clk16x = 1 then if std_logic_vector(no_bits_rcvd) = “1010“ then reday = 1 ; else reday=0 ; end if; end if ; end process ;

温馨提示

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

评论

0/150

提交评论