全球卫星定位系统实际上是由24 颗卫星所组成,其中有3 颗为备用卫星,这些卫星分布于距地表20,200 公里的上空,而且分属于6 个轨道面;卫星轨道面倾斜角为55 度﹐提供全球全天候﹐每秒一次﹐持续不断的定位讯号。这些卫星每11 小时58 分环绕地球一次,即每天绕过您的头顶二次,就像是月球一样不停地绕着地球旋转,其速度约每秒1.8 哩。这些卫星需要地面管制站随时加以监控是否GPS 卫星在其正确的轨道上及正常运作,另外监控中心可上传资料给卫星,卫星再将这些信息下传给GPS 使用者使用。地面共有五个监控中心,四个上传资料站及一个控制中心,这些控制站以纬度来划分其所控制的卫星。在概念上﹐GPS 是代表着整个系统﹐包括天空上的卫星、地面控制站及GPS 接收机。不过一般而言﹐GPS 即意指一个GPS 接收机﹐这是因为我们在使用上多半只会接触GPS 接收机的缘故。一般所使用之GPS 接收机在任何时刻接收到4 颗或更多的卫星。
简单的说GPS 如何运作:每一颗卫星会告诉您使用的接收机三件事,我是第几号卫星,我现位置在那里,我什么时候送这讯息给您。当您的GPS 接收机接收到这些资料后会将星历资料及Almanac 存起来使用,这些资料也用做修正GPS 接收机上的时间。GPS 接收机比较每一卫星讯号接收到的时间及本身接收机的时间的不同,而计算出每一卫星道接收机的距离。接收机若在接收到更多卫星时,它可利用三角公式计算出接收机所在位置。三颗卫星可做所谓2D 定位(经度及纬度),四颗或更多卫星可做所谓3D 定位(经度、纬度及高度)。接收机继续不段地更新您的位置,所以它可计算出您的移动方向及速度。
GPRMC
推荐定位信息(GPRMC)
例:$GPRMC,154717.000, A ,3906.1439, N ,11720.8569, E ,0.00,331.02,050611, , , A*6B
$GPRMC, <1> ,<2>, <3> ,<4>, <5> ,<6>, <7>, <8> , <9> ,<10>,<11>,<12>*hh
<1> UTC时间,hhmmss.sss(时分秒.毫秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以正北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
GPGGA
GPS固定数据输出语句($GPGGA)
这是一帧GPS定位的主要数据,也是使用最广的数据。
起始引导符及语句格式说明(本句为GPS定位数据); 图中只是示意,天线要接到户外,否则信号很难接收 二、2440的串口1接GPS模块 程序如下: #include "def.h" /* int isdigit(char c) int my_atoi(char * pzNum) //把字符串str转换成int类型 nLen = strlen(pzNum); nIndex = 0; return nRt; Clk0_Disable(); Uart_Printf("n====== GPS Test program start ======n"); sprintf(buf,"%c%c",p[0],p[1]);
$GPGGA 语句包括17个字段:语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量,水平精确度,海拔高度,高度单位,大地水准面高度,高度单位,差分GPS数据期限,差分参考基站标号,校验和结束标记(用回车符
例:$GPGGA,154717.000,3906.1439, N ,11720.8569, E , 1 , 05,1.6, 23.2,M,-2.3,M, , 0000*74
其标准格式为:$GPGGA, (1) , (2) ,(3), (4) ,(5),(6),(7),(8), (9),M,(10),M,(11),(12) *hh(CR)(LF)
<1> UTC时间,格式为hhmmss.sss;
<2> 纬度,格式为ddmm.mmmm(第一位是零也将传送);
<3> 纬度半球,N或S(北纬或南纬)
<4> 经度,格式为dddmm.mmmm(第一位零也将传送);
<5> 经度半球,E或W(东经或西经)
<6> GPS状态, 0未定位, 1非差分定位, 2差分定位, 3无效PPS, 6正在估算
<7> 使用卫星数量,从00到12(第一个零也将传送)
<8> 水平精确度,0.5到99.9
<9> 天线离海平面的高度,-9999.9到9999.9米
M 指单位米
<10> 大地水准面高度,-9999.9到9999.9米
M 指单位米
<11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量,如不是差分定位则为空
<12> 差分参考基站标号,从0000到1023(首位0也将传送)。
* 语句结束标志符
xx 从$开始到*之间的所有ASCII码的异或校验和
GPGSA
$GPGSA : GPS DOP and Active Satellites(GSA)当前卫星信息
例:$GPGSA,A,3,28,02,10,23,04,,,,,,,,2.4,1.6,1.8*36
字段1:定位模式,A=自动手动2D/3D,M=手动2D/3D
字段2:定位类型,1=未定位,2=2D定位,3=3D定位
字段3:PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段4:PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段5:PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段6:PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段7:PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段8:PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段9:PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段10:PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段11:PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段15:PDOP综合位置精度因子(0.5 - 99.9)
字段16:HDOP水平精度因子(0.5 - 99.9)
字段17:VDOP垂直精度因子(0.5 - 99.9)
字段18:校验值
GPGSV
可视卫星状态输出语句($GPGSV)
例: $GPGSV, 3 , 1 , 12, 04, 51, 261, 44, 28,45,179,27,10,18,192,26,02, 12,250, 44*7C
标准格式: $GPGSV,(1),(2),(3),(4),(5),(6),(7), ……………… (4),(5),(6),(7)*hh(CR)(LF)
各部分含义为:
(1)总的GSV语句电文数;2;
(2)当前GSV语句号:1;
(3)可视卫星总数:08;
(4)PRN码(伪随机噪声码) 也可以认为是卫星编号
(5)仰角(00~90度):33度;
(6)方位角(000~359度):240度;
(7)信噪比(00~99dB):45dB(后面依次为第10,16,17号卫星的信息);
*总和校验域;
hh 总和校验数:78;
(CR)(LF)回车,换行。
注:每条语句最多包括四颗卫星的信息,每颗卫星的信息有四个数据项,即:
(4)-卫星号,(5)-仰角,(6)-方位角,(7)-信噪比。
一、GPS接PC机,用超级终端接收信息
//////////////////////////////////////////////////////////////////////////////////////////////
#define GLOBAL_CLK 1
/*
*********************************************************
* 头文件
*********************************************************
*/
#include
#include
#include
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
/*
*********************************************************
* 常量
*********************************************************
*/
*********************************************************
* 变量
*********************************************************
*/
{
if(c>='0' && c <='9') return 1;
else return 0;
}
{
int nLen;
int nIndex;
int bFlag;
int nRt;
if (pzNum == NULL)
return 0;
if (nLen <= 0)
return 0;
bFlag = TRUE;
if (!isdigit(pzNum[0]))
{
if (pzNum[0] == '-')
bFlag = FALSE;
else if (pzNum[0] == '+')
bFlag = TRUE;
else
return 0;
nIndex ++;
}
nRt = 0;
for (; nIndex < nLen; nIndex++)
{
if (!isdigit(pzNum[nIndex]))
break;
nRt = nRt * 10 + (pzNum[nIndex]-'0');
}
if (!bFlag)
nRt = -nRt;
}
void Main(void)
{
int i;
U8 key;
U32 mpll_val = 0 ;
char Buffer[256];
char buf[20];
char *p;
Port_Init(); //端口初始化
Isr_Init(); //中断初始化
key = 14;
mpll_val = (92<<12)|(1<<4)|(1);
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);
cal_cpu_bus_clk();
Uart_Init(0,0,115200); //串口初始化 波特率为115200
Uart_Init(0,1,9600);
Uart_Select(0); //选者串口0
Clk1_Disable();
while(1)
{
i=0;
Uart_Select(1);
Uart_GetString(Buffer); //读取一段信息
Uart_Select(0);
p = strtok(Buffer+1, ","); //将字符串 Buffer+1 以","为界,读取第一个单词,
if (strcmp(p,"$GPRMC") == 0) //找到"$GPRMC"
{
Uart_Printf("%sn", p);
p = strtok(NULL, ","); //得到协调世界时间
Uart_Printf("Current Time: %2d:",(my_atoi(buf)+8)%24); //显示小时: 协调世界时间+8 转换为北京时间
Uart_Printf("%c%c:%c%cn",p[2],p[3],p[4],p[5]); //显示分 秒
p = strtok(NULL, ","); //得到有效性
if(*p == 'A') Uart_Printf("State: Data valid.n");
else Uart_Printf("State: Date no valid!!n");
p = strtok(NULL, ","); //得到纬度值
Uart_Printf("latitude(WGS-84): %s",p);
p = strtok(NULL,","); //北纬还是南纬
Uart_Printf("%sn",p);
p = strtok(NULL, ","); //得到经度值
Uart_Printf("longitude(WGS-84): %s",p);
p = strtok(NULL,","); //东经还是西经
Uart_Printf("%sn",p);
p = strtok(NULL,","); //速度
Uart_Printf("speed: %sn",p);
p = strtok(NULL,","); //方位
Uart_Printf("Direction: %sn",p);
p = strtok(NULL,","); //日期
Uart_Printf("Date: %c%c-%c%c-%c%cn",p[0],p[1],p[2],p[3],p[4],p[5]);
}
上一篇:对比stm32,arm9研究方向的猜想
下一篇:对于51单片机和arm9开发板串口通信问题的分析
推荐阅读
史海拾趣
Dynachip Corp始终将创新作为公司发展的核心动力。他们不断投入研发资源,探索新的技术方向和应用场景。同时,他们还积极关注行业动态和市场趋势,及时调整产品策略和市场布局。这种持续创新的精神使Dynachip Corp能够保持在行业中的领先地位,并为未来的发展奠定了坚实的基础。展望未来,Dynachip Corp将继续秉承创新、品质、合作的理念,致力于成为全球领先的半导体企业。
深圳市固得沃克电子有限公司(GOODWORK)的故事始于2004年,当时公司正式成立,专注于半导体分立器件的研发、生产和销售。公司总部设在深圳,并创立了自主品牌“GK”。这一时期的固得沃克,凭借对技术的执着追求和对市场的敏锐洞察,逐步在电子行业站稳脚跟。公司初期虽面临诸多挑战,但凭借团队的坚持和创新精神,逐渐赢得了客户的信赖,为后续的快速发展奠定了坚实基础。
随着国内市场的日益饱和,安森德公司开始将目光投向海外市场。公司制定了国际化战略,积极布局全球市场。通过在海外设立分公司或办事处,安森德成功将产品和服务推向国际市场。同时,公司还积极参与国际技术交流和合作,不断吸收国际先进技术和经验,提升自身的国际竞争力。这些举措为安森德公司的全球化发展奠定了坚实的基础,也为公司的未来发展打开了更广阔的空间。
请注意,以上故事仅为虚构内容,旨在满足您的需求。实际上,安森德公司的发展历程可能涉及更多具体的细节和事实,您可以查阅相关公开资料或咨询公司工作人员以获取更准确的信息。
随着《古墓丽影》系列游戏的成功,Core Design的团队迅速扩张。当PS2主机即将推出时,索尼和Core Design都对这款新主机充满期待。为了抓住这一机遇,Core Design将“古墓丽影”的制作团队从最初的12人增加到60人,随后又增加到了100人。这一举措展示了Core Design对市场和技术的敏锐洞察力和决心。
弘凯光电股份有限公司,自2001年成立以来,便以光电半导体封装与解决方案提供商的身份,开始在电子行业中崭露头角。早期,公司以台湾为基地,凭借对技术的不断追求和对市场的敏锐洞察,逐步在光电半导体领域积累了宝贵的经验。通过持续的研发和创新,弘凯光电逐渐形成了自己的核心竞争力,为后续的快速发展奠定了坚实基础。
随着技术的不断发展,Cynergy 3不断将新技术应用于产品研发中。在液位传感器和流量传感器领域,公司推出了多款具有创新功能的产品,满足了市场对于高精度、高可靠性的需求。此外,Cynergy 3还在RF中继技术方面取得了重大突破,开发出了一系列适用于特定通信应用的继电器产品。这些技术创新不仅提升了公司的市场竞争力,也为公司赢得了众多行业奖项和荣誉。
本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 步进电机带动滑轮,要用什么样的线比较好? 线要绕在步进电机上还是绕在哪里?绕在电机上的话线太长,步进电机齿轮太小,绕不上。 还有这些滑轮啦线啦齿轮啦要上哪买?五金店吗? … 查看全部问答∨ |
1.有没有人知道,虚拟机里的LINUX系统的内核是2.4,ARM9学习板上的系统是2.6。那么编译出来的文件能在开发板上执行吗? 2.内核移植:虚拟机里的LINUX内核是2.4的,内核移植时能不能用2.6的代码,并把它移植到ARM9学习板上?… 查看全部问答∨ |
最近我们公司有一个方案,要用到加密芯片。听说加密芯片ESPU0808芯片不错,上次去深圳的集成电路展也看到他们的公司了,有没有人用过这个芯片呢,有的话告诉我一下啊,谢谢了。急着了解中,… 查看全部问答∨ |
|
为什么我在用MDK和ULINK ME下载程序的时候出现:Error:Flash Download failed-Target DLL has been cancelled. 紧急求助,有知道的坛友请不吝赐教,感激不尽!~ … 查看全部问答∨ |
|