薛定谔的猫

推荐一款GPS接收机模块

0
阅读(4102)

       世界顶级 GPS 厂商 u-blox 公司的 LEA-5S 模组,拥有世界先进的 GPS 接收机技术。使用瑞士 u-blox 公司的 LEA-5S 模组,第 5 代 GPS 接收机,搭载了高性能的 50 通道 ublox 5 技术, 超过 100 万个有效相关器 32 通道采集引擎的处理能力
使得模组可进行大规模并行搜索。拥有 SuperSense ® kickstart 技术,在信号微弱时可加速捕获 GPS 卫星信号。u-blox GPS 接收机拥有先进的噪音抑制技术和创新的RF 架构,使接收机的抗干扰能力更强。同时u-blox GPS接收机还提供惯性导航、精确授时和A-GPS等技术。

功能特性
‹  高精度,高性能 GPS 接收机
‹  带有可充电后备电池,可实现热启动 1 秒钟快速定位
‹  天线开路、短路检测功能(LEA-5 系列特有)
‹ TTL 电平的 UART 接口,方便连接各种处理器
‹ 5V/2A 直流电源输入
‹ 1 路 RS232 电平串口,1 路 USB2.0 接口
‹  方便连接计算机,配有专业 GPS 测试软件
‹  电源和工作状态指示灯
‹  引出全部信号线,供开发测试使用

应用领域
汽车电子:民用车载 GPS 导航仪;物流车量追踪管理系统;车量防盗系统;城
市智能交通管理系统等
手持设备:智能手机,PDA,适用于个人旅游及野外探险的各种手持导航设备
科学考查:地图测绘,水下地形测量,地质灾害监测
工业农业:精细农业(无人耕种) ;工程机械控制;工程建筑测量;石油电力等
行业对设施的管理和监测
航空航海:飞机航路引导,船舶行驶导航

主要特性
‹ 50 个通道的 u-blox 引擎,100 万个以上的有效相关器
‹  具备 KickStart 功能,信号微弱时可实现加速启动
‹  可同步追踪 GPS 及伽俐略导航卫星信号
‹ -160dBm 的 SuperSense 捕获和跟踪灵敏度
‹  热启动和辅助启动首次定位时间小于 1 秒
‹  集成天线短路检测功能,可外接天线开路检测电路
‹  提供多种接口:UART,USB,IIC

芯片引脚

引脚定义:
No.  Pin Name  I/O  Description
1  SDA2  I/O  DDC Data
2  SCL2  I/O  DDC Clock
3  TXD1  O  Serial Port 1 TXD
4  RXD1  I  RXD(do not leave open)
5  NC    Not Connected
6  VCC  I  Supply voltage
7  GND  I  Ground(digital)
8  VCC_OUT  O  Output volage
9  CFG_COM1  I  Configuration Pin
10  RESET_N  I  
11  V_BCKP  I  Backup voltage supply
12  Reserved    
13  GND  I  Ground
14  GND  I  Ground
15  GND  I  Ground
16  RF_IN  I  GPS signal out
17  GND  I  Ground
18  VCC_RF  O  Output voltage RF section

19  V_ANT  I  Antenna Bias voltage
20  AADET0_N  I  Active Antenna Detect
21  NC    Not Connected
22  NC    Not Connected
23  NC    Not Connected
24  VDDUSB  I  USB Supply
25  USB_DM  I/O  USB Data
26  USB_DP  I/O  USB Data
27  EXTINT0  I  External Interrup Pin
28  TIMEPULSE  O  Time Pulse(1PPS)

布局结构

//======================================================================
//======================================================================
//  工程名称: XC-GPS开发板测试程序  基于XC-STC单片机开发板
//  文件名称:  main.c
//  功能描述:  GPS模组接收定位信息,在LCD上显示
//    头文件:  LCD.h GPS.h display.h
//  程序分析: GPS模组通过串口向单片机发送固定格式的数据
//    单片机的串口接收到数据后,进行解析,在LCD上显示
//    定位信息包括:
//              日期时间,经纬度,速度,航向,海拔高度,使用卫星数量
//  硬件连接: 连接方法请参考《XC-GPS开发板使用手册》 程序使用串口2  
//  维护记录: 2011-03-12   V2.0    xgc移植到XC-STC开发板
//======================================================================

#include "system/inc/STC_NEW_8051.H"
#include "system/inc/HeaderFileAll.H"
#include "system/inc/def.h"
#include <stdio.h>
#include <string.h>
U8 code init3[] = {"XC-GPS  测试程序"};
U8 code init4[] = {"搜索定位卫星...."};
//==========================================================
//LED_1    接收数据指示灯
//LED_2    GPRMC数据有效指示灯
//LED_3    GPGGA数据有效指示灯
//==========================================================
#define   REV_YES    LED_1 = 0
#define   REV_NO     LED_1 = 1
#define   RMC_YES    LED_2 = 0
#define   RMC_NO     LED_2 = 1
#define   GGA_YES    LED_3 = 0
#define   GGA_NO     LED_3 = 1
S8 xdata rev_buf[80];       //接收缓存
U8 rev_start = 0;     //接收开始标志
U8 rev_stop  = 0;     //接收停止标志
U8 gps_flag = 0;      //GPS处理标志
U8 change_page = 0;   //换页显示标志
U8 num = 0;           //接收缓存数组下标
extern GPS_INFO   GPS;  //在display.c中定义,使用时要加extern
/****************************************
显示文字初始化 
/****************************************/
void GPS_Init(void)
{
 LCD_12864_CoordinateString(0, 0, init1);
 LCD_12864_CoordinateString(1, 0, init2);
 LCD_12864_CoordinateString(2, 0, init3);
 LCD_12864_CoordinateString(3, 0, init4);
}
/****************************************
串口初始化 
/****************************************/
void Uart_Init(void)

 EA = 0;
 
 TMOD = 0x01;
 TH0  = 0x3c;
 TL0  = 0xb0;
 
 AUXR &= 0xf7;  //波特率不倍速
 S2CON = 0x50;  //8位数据,可变波特率
 BRT   = BPS_9600;   //设定独立波特率发生器重装值
 AUXR |= 0x04;  //独立波特率发生器时钟为Fosc,即1T
 AUXR |= 0x10;  //启动独立波特率发生器
 IE2  |= ES2;  //开串口2
 
 TR0 = 1;   //开定时器
 ET0 = 1;   //定时器1中断允许
 EA  = 1;   //全局中断 开 
}
/****************************************
主函数 
/****************************************/
void main(void)
{
 U8 error_num = 0;
    Uart_Init();     //初始化串口
 LCD_12864_Init();//初始化LCD
 GPS_Init();      //初始化GPS
 while(1)
 {
  if (rev_stop)   //如果接收完一行
  {
   TR0 = 1;    //开启定时器
   REV_YES;
   if (change_page % 2 == 1)  //换页
   {
    if (GPS_GGA_Parse(rev_buf, &GPS))  //解析GPGGA
    {
     GGA_YES;
     GPS_DisplayTwo();  //显示第二页信息
     error_num = 0;
     gps_flag = 0;
     rev_stop  = 0;
     REV_NO;
    }
    else
    {
     error_num++;
     if (error_num >= 20) //如果数据无效超过20次
     {
      GGA_NO;
      error_num = 20;
      GPS_Init();      //返回初始化
     }
     gps_flag = 0;
     rev_stop  = 0;
     REV_NO;
    }
   
   }
   else
   {
    if (GPS_RMC_Parse(rev_buf, &GPS)) //解析GPRMC
    {
     RMC_YES;
     GPS_DisplayOne();   //显示GPS第一页信息
     error_num = 0;
     gps_flag = 0;
     rev_stop  = 0;
     REV_NO; 
    }
    else
    {
     error_num++;
     if (error_num >= 20) //如果数据无效超过20次
     {
      RMC_NO;
      error_num = 20;
      GPS_Init();     //返回初始化
     }
     gps_flag = 0;
     rev_stop = 0;
     REV_NO;
    }
   }
  }
 }
}
/****************************************
定时器中断 
/****************************************/
void timer0(void) interrupt 1
{
 static U16 count = 0;
 TH0 = 0x3c;
 TL0 = 0xb0;
 count++;
 if (count == 500)  //10秒钟
 {
  count = 0;
  change_page++;  //换页
  if (change_page == 10)
   change_page = 0;
 } 
/****************************************
串口接收中断 
/****************************************/
void SUBF_Interrupt_Receive(void) interrupt UART2_INTNO
{
 U8 ch;
 U8 Temp_RI = 0;
 ES = 0;
 Temp_RI = S2CON & 0X01;
 if (1 == Temp_RI)
 { 
  ch = S2BUF;
  if ((ch == '$') && (gps_flag == 0))  //如果收到字符'$',便开始接收
  {
   rev_start = 1;
   rev_stop  = 0;
  }
 
  if (rev_start == 1)  //标志位为1,开始接收
  {
   rev_buf[num++] = ch;  //字符存到数组中
   if (ch == '\n')     //如果接收到换行
   {
    rev_buf[num] = '\0';
    rev_start = 0;
    rev_stop  = 1;
    gps_flag  = 1;
    num = 0;
   }
  }
 }
 S2CON &= 0xFE; //RI清0,重新接收 
 ES = 1; 
}