|
本帖最后由 topdog 于 2020-2-20 23:27 编辑
Microduino-UM220-III 是使用和芯星通针对车辆监控/导航、手持设备、电信/电力授时、气球探空等应用推出的北斗/GPS双系统模块。UM220-III是UM220系列模块的第三代产品,采用和芯星通完全自主知识产权的低功耗GNSS SoC芯片——(HumbirdTM)1,是目前市场上尺寸最小的完全国产化的北/GPS模块,集成度高、功耗低,非常适合对尺寸、功耗要求高的北斗规模应用。
本次交流主要针对UM220-III 精密授时的功能应用制作一款GPS的时钟。UM220-III 提供高精确度的1PPS 输出,授时精度优于20ns。支持单星授时,可由用户配置授时模式。完全满足电力同步、电信基站等精密授时应用。
主要器材有microduino-coreUSB,UM220-III -GPS模块,oled1306,BM电池组。在此强调的是注意gps的天线,下图照片上的天线是gps专用的,要收北斗的就要配双模或者北斗单模的天线。
首先我们把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> 年 ;*hh 是对时区的矫正,一般为00。
搞懂了各个字符串的作用,那么我就在编写程序中使用Arduino推荐的字符串操作函数对相应的数据进行截取,首先是把$GNZDA剥离出来,使用startsWith()函数,其次,以221358为例子,它在字符串的位置是7至17,这是UTC标准时间,即 自1924年2月5日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。它以格林尼治天文台的经线为0 度经线,将世界分为24 个时区,我国首都北京在第八时区。22代表小时,13代表分钟,58代表秒钟。对它们的截取使用substring()函数,再用toInt()把它转化成数字进行北京时区的小时的计算,接着把区域时间小时字符串替换utc小时字符串,使用了replace()函数。
代码分享github:
本程序的特点是使用了Arduino的字符串操作函数,还是有独特性的。
|
|