不少新朋友来问,有没有好玩的GNSS定位应用推荐?那么不妨基于小巧易用的合宙Air530Z模组,来简单做一个业余无线电相关的GNSS小玩具。
今天特别分享@W_Linus大佬的开源作品——基于合宙Air530Z的定位器&授时器。
1
项目主要准备工作
基于合宙Air530Z的定位器&授时器,使用STM32G030F6P6单片机进行数据处理以及显示,使用0.96寸ST7735屏幕作为显示终端,同时将GNRMC数据通过串口发送到电脑,供上位机处理,使用按键进行交互。
- 主要物料 -
01. GNSS模块:合宙Air530Z
GNSS模块我选用了合宙的Air530Z,原因是这个模块使用较为方便,原生支持有源GPS天线,效果OK。同时支持北斗三号、GPS以及格洛纳斯系统。
02. 单片机:STM32G030F6P6
对我来说方便开发,资源充足是很重要的因素。所以我决定在STM32系列MCU里面进行选择,项目制作前期STM32的价格一直居高不下,不过STM32G0系列却是一股清流。粗略估计了下所需要的资源后,我最终选择了STM32G030F6P6。
03. 屏幕:0.96寸 ST7735 LCD
至于信息的显示,肯定需要使用屏幕。不过是使用LCD还是OLED屏幕呢?我最终决定使用LCD屏幕。原因也很简单:它可以显示不同的色彩,制作出来的界面更加漂亮。所以,屏幕最终定型为0.96寸 ST7735 LCD屏幕。

04. 其他元器件:参见文末原工程链接BOM表
- 硬件设计 -
大框架定下来了,我便着手进行PCB的绘制。到目前为止,我已经绘制了3个版本的PCB。每一次迭代的原因几乎都是发现了一些之前忽略掉的,而现在发现了能难受半天的小缺陷。不过,每个版本都是可以正常使用的。


- 程序开发 -
至于程序,得益于之前玩GNSS模块的成果,没有费多大功夫就写出了初版基本可用的程序。使用STM32CubeMX工具和MDK工具链进行开发,是大多数像我一样的新手的选择罢:

一开始我想着是准备上RT-Thread实时系统的,后面又想了想感觉没多大必要,于是就采取了裸机跑程序的方案。事实证明,没有外加存储器的情况下,屏幕所使用的字库非常占用Flash空间。
当前版本下采用O1优化,程序大小已经来到了惊人的31.54KB,距离塞满我这颗32KB ROM的MCU只差一步之遥。

MCU开了两个串口,一个用于和模块通信,另一个与上位机进行通信。与模块之间的数据流是持续不断的,所以我在这里使用了DMA来进行串口的数据接收以减轻CPU的负担,同时避免丢失数据包。
- 硬件制作 -
既然程序准备OK了,那么就等待PCB到货进行焊接制作了。全贴片方案果然还是使用加热台来进行焊接最安逸了 :

焊接完成并且烧录程序后,我们就得到了这样的成果:

2
主要功能及开源交流
合宙Air530Z模块在使用有源天线以及在存在后备电源供电的情况下时,热启动定位非常迅速,几乎可以说是秒定位。不过当模块内存储的历书过期后,使用冷启动就要稍微慢一些了。
- 主要功能 -
根据功能内容的实现和显示差异,我将程序分为了如下几个功能界面:
01.启动界面
上电时,我们会看到一个启动界面(飞机上未录制,此处使用之前的图片素材)。

02.详细信息首界面
开机后默认会进入详细信息界面:系统将会显示当前时间、速度、经纬度以及梅登海德网格。最上方的状态栏则指示了当前定位情况、系统温度(MCU内置的温度传感器,使用了工厂校准值)和电池剩余电量指示(电压估算,没有使用库仑计,因此并不精准,只能作为参考)。

03.日期与时间专题显示界面
通过PCB顶部的右侧按钮可以进行翻页,进入日期与时间的专题显示。此时还可以通过顶部的左侧按钮,切换UTC时间与CST(即北京时间)。

04.速度专题显示界面
接下来的一页是速度的专题显示,一共三组数值:分别是km/h、m/s和节。事实上显示的速度换算关系并不精准,原因是内容刷新时间并不一致。刷新存在先后关系,导致并非展示同一时刻下的数据。

05.系统信息显示界面
再接下来的一页是系统信息的展示,内容有当前系统温度(对,和状态栏上那个是一样的)、当前系统工作电压(通过使用ADC对内置的Vrefint通道进行采样,再通过内置的通道校准值来计算实际的3.3V供电电压)、当前电池电压以及固件版本。

06.报文信息显示界面
最后一页是原始的GNSS报文展示,我这里为了解析方便,设定了模块只使用GNRMC报文。GNRMC已经足够使用,缺点则是没有高程信息以及卫星数量的报告。后面如果有时间,我再尝试加上其它报文(如GNGLL、GNGGA等)的解析功能吧。

在屏幕展示这些数据的同时,MCU与上位机通信的串口也不会闲着。它会实时转发模块发来的GNRMC数据包,这样,我们将这个设备插上电脑(它自带了CH340N芯片),便可以同步使用例如BktTimeSync之类的软件,来利用GNSS系统对电脑进行授时了。这对于在野外操作FT8等严格要求时序的通联模式有较大帮助。
现在的固件只包含了以上功能,接下来我会尝试继续完善这个小玩具。比如增加更多报文的解析、自定义启动屏幕的呼号显示等功能,再将现在的GUI美化一下。希望剩余的ROM还能支持我这么干~
-
STM32
+关注
关注
2305文章
11123浏览量
371212 -
定位器
+关注
关注
2文章
191浏览量
20010 -
GNSS
+关注
关注
9文章
950浏览量
50734
发布评论请先 登录
罗德与施瓦茨宣布推出新频段 R&S ZNB3000 矢量网络分析仪,频率高达 54 GHz
1218 MHz 高输出 GaN CATV 功率倍增器 Amp扩音器 skyworksinc
870 MHz、25 dB 增益 CATV 功率倍增器 Amp扩音器 skyworksinc
1 GHz、28 dB 增益 CATV 功率倍增器 Amp扩音器 skyworksinc
新知|Verizon与AT&T也可以手机直接连接卫星了
多模块配置!YU系列USB、Type-C连接器为工控机打造"全能型"数据传输方案
TFT&LCD,是电阻屏还是电容屏?
全球首台双模式键合设备问世,中国半导体封装再破"卡脖子"难题
罗德与施瓦茨与u-blox合作验证最新汽车GNSS模块
如何判断产品需不需要做AT&T认证?AT&T测试内容和要求分享
凌科电气YU系列工业级连接器登场,解锁USB&Type-C多模块新体验!
上新 | 超全模块超乎想象,YU系列USB&Type-C多模块工业级连接器新品惊喜上市

合宙Air530Z+STM32,自制GNSS定位器&授时器
评论