基于STM32的北斗导航接收系统的设计
2021-11-22何泓稼刘培培蒋艳丽江智威
何泓稼,刘培培,蒋艳丽,江智威
(成都理工大学 信息科学与技术学院(网络安全学院、牛津布鲁克斯学院),四川 成都 610059)
0 引 言
导航在人类历史的发展进程中一直起着相当重要的作用。早在20世纪60年代初期,美国政府机构就对三维定位的卫星系统产生兴趣,并于1964年成功开发世界上第一个卫星导航系统——子午卫星系统。在这之后,世界各国相继发展并不断完善自己的卫星导航系统,北斗卫星导航系统是中国自主研发、独立运行的全球导航卫星系统(GNSS),自20世纪70年代发展至今,现与GPS、GLONASS和Galileo系统一起被誉为全球四GNSS。北斗卫星导航系统由空间部分、地面运行控制部分和用户终端部分组成。北斗导航终端设备已在多个领域有实际应用,并在近年的汶川、舟曲救灾过程中发挥了关键作用。国内司南导航、华测导航和芯星通等多家单位不断研究、开发新的北斗导航终端设备或接收机,并把各种新技术融入其中,使得北斗卫导终端设备能够适应各种应用需求。
北斗导航具有很好的精度,但是因为地理位置,海拔高低的不同而影响其工作的稳定性。
文中以北斗卫星导航终端设备为主进行分析与研究,在此基础上分析并利用STM32进行实践,并且使用最小二乘法减小所测经纬度的误差,使最后的结果更加准确。
1 系统总体设计
北斗导航接收系统主要以STM32F103C8T6单片机为核心,以北斗卫星接收模块和LCD12864液晶屏为原器件。北斗导航接收系统框图如图1所示,具体方案为:当单片机上电时,接收到外界的指令需要输出经度和纬度,调节相应的地理位置服务程序处理后,在显示屏上得到输出的目标。并且可以通过按键刷新经度与纬度的数据,同时显示不同的海拔和时间。根据所要求的功能,可以显示目标所在的经纬度,并且可以通过调试,系统测试之后精准显示目标的位置[1]。
图1 北斗接收系统框图
2 硬件模块介绍
2.1 STM32F103C8T6主控模块
STM32F103C8T6内核——32位的微控制器系统,其容量为64 KB,ARM Cortex-M性能。启动电压为1.9 V~3.5 V,工作温度为35 °C~75 °C。其引脚图如图2所示,相关参数如表1所示[2]。
图2 STM32引脚
STM32F103是一种增强型系列,它是由名叫意法半导体的公司所发明的。这个集团使用了性能比较高的处理器,内核的工作频率在69~73 MHz之间[3]。内核存在着高速存储器,加速数据的处理。其中内核含有128K字节的闪存,同时含有20K字节的SRAM。内核的优点是增强了I/O口的接触性能以及到两条APB总线的外设情况。这个类型的所有系列包括3个通用的16位计数/定时器、PWM定时器、两个12位的ADC、多个通信接口、一个CAN、一个USB、三个USART和两个SPI[4]。
STM32拥有的ARM核心,与世界上目前所有的ARM工具和软件兼容。
表1 STM32数据参数
2.2 BD ATGM332D-5N 3X电路模块
BD ATGM332D-5N 3X模块是一块北斗GPS双模块,在插上电,使用过后,模块的主电源断开,最特别的优点是后备电池可以保存一个小时左右的北斗数据。这种性能的优点是以此来支撑温启动和热启动,以至于在显示上实现精确的定位。北斗导航模块共有5个引脚,分别是VCC、GND、TXD、DXD、PPS,其功能如表2所示。
表2 北斗导航模块引脚输出
其中,PPS引脚的部分要求很严格。而且连接到模块之后,在内部自身状况好的情况下,自带状态指示灯:PPS,这种状态指示灯对需求很严格,PPS对接BD ATGM332D-5N 3X的输出端口,输出端口叫TIMEPULSE端口,TIMEPULSE这个数据端口的性能很强,如其抗输入特性很强。这种输出特性对配置要求很高,通过程序进行默认设置[5]。可以显示的状态为:PPS(即引脚)。
PPS静态的条件下,如出厂设置下,有2个状态:
(1)持续亮,这个情况表示系统工作,工作但未实现定位。
(2)黄灯闪烁一段时间,约100 ms灭,900 ms亮。这时模块为安全,表示定位成功。
这样,通过PPS指示灯的专门特性,就可以很方便、及时地判断模块的当前状态。
2.3 北斗和单片机连接线模块
根据北斗导航模块的引脚功能,设计出其与单片机的电路连接,BD ATGM332D上的接口逐一与相应的接口连接:TXD->RXD,RXD->TXD,GND->GND,VCC->VCC(5V),如图3所示。
图3 北斗导航模块与单片机电路连接图
2.4 LCD12864液晶电路设计模块
液晶显示模块可以大大降低数据的不清晰度,在上面显示字母、数字。还有更加突出的中文字型及图形的特点,可以呈现所需要呈现的大小图。LCD12864共有20个引脚,但只需要4个引脚[6]。LCD12864性能参数如图4所示。
汉字格式8×4个(16×16点阵)汉字格式(128(列)x 64(行))中文字型8 192个中文字型三种控制接口①8位微处理接口;②串行接口;③4位微处理接口ROM字型内置2M-位元中文字型ROM(CGROM)容量16K位的存储容量绘图区域64×256点图形可以与文字混合
3 系统算法设计
3.1 系统主程序设计
通过Keil仿真软件以及调试可以初步看到结果,显示器上观察。在Keil-uVision5平台上,采用C语言编写程序[7]。北斗导航接收系统采用模块化程序设计,除主程序外,还包括BD ATGM332D-5N 3X接收模块程序和LCD12864显示模块程序。北斗导航接收系统的主程序如图5所示。单片机、串口、12864初始化之后,接收到传过来的数据,显示在液晶上[8]。
分析步骤如下:
(1)电源通电,系统对STM32单片机、串口、LCD12864进行初始化。
(2)STM32接收外界的指令需要输出经度和纬度,调节相应地理位置服务程序处理后,在显示屏上得到输出目标。
图5 主程序流程
(3)通过按键刷新经度与纬度的数据,同时显示不同的海拔和时间。
(4)通过调试、系统测试之后精准显示所需要的位置。
(5)将经度和纬度的测量结果进行加权计算,加权计算公式为:
Y=(1-M/100)×N1+(M/100)×N2
(1)
其中,Y为加权计算后的距离,M为定点到所测距离,N1为所测地理位置的经度,N2为所测地理位置的纬度。
(6)将加权计算后的距离带入所求得的线性回归模型,求出最终结果。
(7)最终结果的输出包含多种形式,如可以通过LCD12864液晶显示屏幕直接显示所需要的经度和纬度。
LCD程序流程如图6所示。
图6 LCD程序流程
第一,把先前的LCD模块的I/O口设定为输出接口,设计到需要用哪些输出设置接口,必须要根据之前所设计的电路图和LCD设计的通信模式来确定。
第二,通过设定的初始化框图的情况,对LCD类似的原器件进行初始化,以此来开启LCD的液晶显示,这么做是为以后的数字和字符显示打下基础。
第三,根据设计的程序框图,将需要显示的字符传递到LCD,这样就可以正常显示[9]。
3.2 最小二乘回归校正算法
目前中国在实际的应用中多采用的是正常高,而频繁使用的北斗导航定位技术所测量的数据基本上是大地高,对此需要将北斗导航的大地高转换成正常高。比较传统的多项式拟合法在高程拟合中应用较为广泛,二次曲面拟合是经过大量实验验证并且静度较好、使用场合最多的一种多项式拟合方法,但是传统的二次曲面法是基于最小二乘LS(least square)原理的,并不能考虑到系数矩阵中的误差[10]。为解决这一个问题,需要引入整体最小二乘法(total least square,TLS)和加权整体最小二乘法(weighted total least square,WTLS)[15]。二次曲面拟合的最小二乘法的数学模型为:
(2)
文中采用的是一阶最小二乘回归,故所求的回归模型表达式为:
y(x)=jx+a
(3)
其中,y(x)为最小二乘回归校正后的距离,x为经度与纬度之间的误差经过加权计算后的距离,j、a为待确定系数。j、a的值满足方差Z取值最小[11]。
(4)
其中,yi为实际距离,xi为测量距离。将式(4)分别对j、a求解偏微分,并令其为0,则j、a的求解公式为[12]:
(5)
利用所测得的数据,求出j、a并带入式(3),可以解得最小二乘回归模型为:
y(x)=0.223 1x+0.090 2
(6)
4 北斗导航接收系统测试分析
对本地的经纬度测试完成后,对数据进行整理,当STM32单片机上电时,通过BD ATGM332D-5N 3X接收所在地的经度和纬度[13],调节相应的地理位置服务程序处理后,在LCD12864显示屏上得到输出的经纬度[14]。用LCD12864显示的经纬度作为测量数据,高德地图查询本地的最官方的经纬度数据为真实数据,最后用文中所提出的公式加以计算得出表3、表4的数据。现实验如下,以家为定点作为第一组,以学校为定点作为第二组,测量经纬度,对两者数据进行加权,校正后观察、记录、统计和分析。
根据表3、表4,再对6次测量结果进行加取平均值,第一组经度的平均误差为0.43%,纬度的平均误差为0.14%。第二组经度的平均误差为0.1%,纬度的平均误差为0.09%。
表3 第一组结果记录
表4 第二组结果记录
利用式(6)继续对两组加权后的经度和纬度进行最小二乘回归校正。校正后结果值如表3、4所示,对6次测量的误差分别取平均值,第一组经度的平均误差为0.30%,纬度的平均误差为0.08%。第二组的经度平均误差为0.08%,纬度平均误差为0.05%。
由上述计算可以知道,经校正后的第一组经度误差由0.43%降至0.30%,纬度误差由0.14%降至0.08%。第二组经度误差由0.1%降至0.08%,纬度误差由0.09%降至0.05%。实验结果表明,根据所处地理位置的不同而采用加权平均计算减小误差的方法与现有的工具进行比较,可以看出,在目前原有的传统工具的基础上,有效地减小了因地理位置的不同而带来的误差,而且也是可行且有效的,使得结果更加具有稳定性[15]。
5 结束语
通过实验得出结论,实现北斗导航系统的设计与应用。通过多次测试,最终在这个设计上实现以STM32F103C8T6单片机为核心,通过C语言编程的方法可以得到定位系统的功能,基本上实现了实时定位的功能,最后在经过加权平均计算和最小二乘法回归算法正确地处理数据,可以使得测量出来的误差更小、更精准。目前北斗卫星导航系统在船舶运输、公路交通、铁路运输、海上作业、渔业作业、森林火灾预防、环境管理监测等领域应用广泛,覆盖部队、公安、海关等其他有特殊指挥调度要求的单位,产生了显著的经济效应和社会效应。北斗的应用规模和范围也随着北斗卫星导航系统功能和性能的不断提高与完善,将逐渐扩大,前景可观。当今世界,数字电子系统越来越先进,集成度越来越高。价格低廉,更好地显示了图像和数字,大大地简化了制作的时间和成本。