极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6104|回复: 0

Microduino-UM220iiiN-GPS模块制作时钟

[复制链接]
发表于 2016-8-30 23:53:40 | 显示全部楼层 |阅读模式
Microduino-UM220-III 是使用和芯星通针对车辆监控/导航、手持设备、电信/电力授时、气球探空等应用推出的北斗/GPS双系统模块。UM220-III是UM220系列模块的第三代产品,采用和芯星通完全自主知识产权的低功耗GNSS SoC芯片——(HumbirdTM)1,是目前市场上尺寸最小的完全国产化的北/GPS模块,集成度高、功耗低,非常适合对尺寸、功耗要求高的北斗规模应用。

IMG_8165a.jpg

本次交流主要针对UM220-III 精密授时的功能应用制作一款GPS的时钟。UM220-III 提供高精确度的1PPS 输出,授时精度优于20ns。支持单星授时,可由用户配置授时模式。完全满足电力同步、电信基站等精密授时应用。

主要器材有microduino-coreUSB,UM220-III -GPS模块,oled1306,BM电池组。在此强调的是注意gps的天线,下图照片上的天线是gps专用的,要收北斗的就要配双模或者北斗单模的天线。

IMG_8166a.jpg

首先我们把microduino-coreUSB,UM220-III -GPS模块叠加,gps的输出在0,1管脚,和coreUSB的Serial1重叠。在Arduino For Microduino输入调试代码:

String inputString = " ";

boolean stringComplete = false;

void setup() {

Serial.begin(115200);

Serial1.begin(9600);

}

void loop() {

serialEvent();

if(stringComplete){

Serial.println(inputString);

}

}

void serialEvent() {

while (Serial1.available()>0){

char inChar =(char) Serial1.read();

inputString +=inChar;

if (inChar == '\n') {

stringComplete = true;

}

}

}

我们打开串口就可以看到一连串的代码。其中有一行:

$GNZDA,221358.000,30,08,2016,00,00*43 这是NMEA0183标准语句GPS时间信息。

解释一下:$GPZDA, <1> , <2> , <3> , <4> , , *hh<CR><LF>

$GPZDA,称作标头。<1> 时间,hhmmss.ss(时分秒)格式 <2> 日期 <3> 月份 <4>年 后面两个零是对时区的矫正一般为00。

搞懂了各个字符串的作用,那么我就在编写程序中使用Arduino推荐的字符串操作函数对相应的数据进行截取,首先是把$GNZDA剥离出来,使用startsWith()函数,其次,以221358为例子,它在字符串的位置是7至17,这是UTC标准时间,即 自1924年2月5日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。它以格林尼治天文台的经线为0 度经线,将世界分为24 个时区,我国首都北京在第八时区。22代表小时,13代表分钟,58代表秒钟。对它们的截取使用substring()函数,再用toInt()把它转化成数字进行北京时区的小时的计算,接着把区域时间小时字符串替换utc小时字符串,使用了replace()函数。

IMG_8164a.jpg

代码分享github:
本程序的特点是使用了Arduino的字符串操作函数,还是有独特性的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-9-22 12:09 , Processed in 0.083308 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表