引言
嵌入式系统从20世纪孤立的单片机时代过渡到单片机与多科学融合时代,再到如今的嵌入式物联网时代,使得嵌入式系统再次遇到了新的机遇。GPS(Global Position System,全球导航系统)时空参数是物联网时代国家公证的工程建设,它为航空航海、科学勘探、地理测量、运输行业、通信行业提供了精确的导航、指挥、监控、授时等服务[12]。本文充分结合STC单片机和Trimble公司的接收机设计出了导航授时系统。系统能实时给出运动载体的位置和速度等信息,并能同步接收卫星时间。
系统主要具有导航和授时两大功能。系统最大的优点是在户外可以通过液晶屏显示导航信息和时间信息,在室内通过上位机人机交互界面显示卫星时间和运动物体的经度、纬度、海拔等导航信息。系统克服了常用导航仪的繁琐设计、功能单一、成本利用高等缺点,在此基础上设计出了一款简易、性价比高、应用普遍、易于扩展的导航系统。这为常用的导航和授时服务提供了很大的帮助。
1 系统硬件设计
1.1 设计思路
首先,GPS模块定时发送GPS导航数据和卫星时间到STC单片机,然后STC单片机对GPS导航数据进行处理并把数据发送给LCD液晶显示屏或PC机,导航授时系统结构框图如图1所示。
图1 导航授时系统结构框图
系统的核心是GPS导航模块,处理器是宏晶科技公司推出的STC12C5A单片机。GPS导航模块采用Trimble公司的Sierra GPS芯片接收卫星导航信息和授时服务。Sierra芯片采用了Trimble公司独有的GPS算法来确保导航数据的准确性和卫星信号的快速锁定。它还能够有效地解决城市应用中经常出现的信号遮挡、多路径和射频干扰问题。STC12C5A是增强型8051内核具有超低功耗和超强抗干扰的特性,为GPS导航系统在户外勘测和野外监测提供了很大的方便。本系统控制器件并不复杂,也不需要很大的存储空间,STC12C5A可以控制整个系统,节省成本。另外,STC12C5A有2个串口刚好满足系统需求。LCD液晶显示选择的是LMB102DDC显示屏。该显示屏小巧、易控制、显示清楚、成本低,是该系统的最佳选择。
1.2 硬件原理
图2为GPS导航电路。GPS导航模块提供实时的三维位置和UTC时间信息,通过GPS的串行通信口B发送数据给STC单片机。GPS导航模块和STC单片机的输入/输出电平都是TTL电平,所以串口之间可直接通信。GPS发送数据的波特率有9 600 bps、4 800 bps、2 400 bps可任意选择。
图2 GPS导航电路
图3是STC12C5A与LMB102DDC的接口电路。LMB102DDC内核模块内部有一个指令寄存器和一个数据寄存器,其指令分为基本指令和扩展指令。指令主要用来初始化液晶显示屏,实现基本控制。其中,包括清屏设置、显示位置、光标状态、显示状态、功能设置等。LMB102DDC既可以写数据到RAM中,又可以从RAM中读数据,在此主要是写数据到RAM。
图3 STC12C5A与LMB102DDC的接口电路
当导航系统在户外工作时,STC单片机将接收到的导航数据和时间信息进行处理,然后将导航的经度、纬度、海拔、卫星时间通过P0口输出,并显示在LMB102DDC液晶屏上。当导航系统在室内工作时,STC单片机将接收到的导航信息通过串口完整地发送到PC机。PC机通过系统的上位机软件查看相关的GPS导航数据和时间信息。由于PC机的输入/输出电平和STC单片机的输入/输出电平不一样,两者相互通信时要加一个MAX232电平转换电路。室内工作不选择LCD显示导航信息主要是考虑到节约成本和保持系统的完整性这两方面。这也是该导航系统区别其他导航系统的特色。
导航授时系统的另外一个优点是能够通过上位机软件校准导航系统的相关信息。利用一组最新的时间数据(年、月、日、时、分、秒)和软件系统的工作模式按一定的格式通过串行通信接口发送给STC单片机,STC单片机利用这组数据对错误的信息进行校准并根据发送的设置更改工作模式,上位机发送设置如图4所示。
图4 上位机发送设置
2 系统软件设计
2.1 设计流程
软件设计是系统的控制中心。系统使用C语言在Keil uVision4编译器中编写STC单片机程序。程序主要包括接收GPS数据、处理GPS数据、显示控制等。主程序流程如图5所示。
图5 主程序流程
2.2 控制程序
STC12C5A通过串口接收一组完整的GPS数据后,通过控制程序对GPS信息作相应的处理。处理完后通过串口发送给上位机,在整个过程中必须同时打开2个串口。STC12C5A的2个串口刚好满足系统要求,而且可以对它们设置不同的波特率。STC12C5A系列的单片机扩展了1 KB的RAM空间,足够本系统作为暂时的缓冲器。系统不用保存大量的数据,虽然串口2一直在接收GPS导航数据和授时数据,同样串口1以更高的波特率在向上位机发送数据,最后所有的数据都会通过上位机软件以.txt格式保存在PC机上。控制程序在设置串口中断优先级时会把发送数据的串口中断设置成最高优先级,优先满足串口发送。接收GPS数据时每隔1 s接收一次导航信息,这样不会影响导航的精度。发送数据的串口波特率设置成115 200 bps,接收GPS数据的串口波特率设置成9 600 bps,2个串口的初始化程序代码如下:
SCON=0x50; //串行口1用于发送数据,在工作方式1下启用独立波特率发生器
BRT=0xFA; //串口的发送波特率为115 200 b/s
AUXR=0x15;
SM0=0;//设置SCON开启接收发送允许
SM1=1; //并设置为方式1
TI=0;
REN=1;
S2CON=0x50;//利用串口2接收GPS数据
AUXR=0x14;
BRT=0xb8;//串口的接收波特率为9 600 b/s
IE2=0x01;
数据处理部分主要是判断GPS发送给STC单片机的数据是否有效,在数据有效时提取经度、纬度、海拔、卫星日期、时间信息保存在字符数组中。数据保存完后确定数据是发送给LCD显示屏显示,还是通过串口发送给上位机软件显示。显示模式有LCD显示和上位机软件显示,默认方式是LCD显示。如果需要上位机界面为显示模式时,先通过上位机软件中的“发送设置”对话框设置“显示模式”为1,然后发送给STC单片机。
3 上位机软件设计
整个上位机采用结构化和模块化设计方法。上位机软件是基于对话框的MFC应用程序设计的,主要有串口通信模块、导航数据和时间显示模块、工作模式设置模块、授时模块。授时模块的作用是让PC机时间与卫星同步,确保PC机时间的精确度。与系统相连的PC机可以作为一个授时主机向其他单元发送时间。
串口通信模块的编写是用Microsoft公司提供的串口通信MSComm控件。添加了MSComm控件后,首先要对控件初始化,然后打开串口准备按位接收字符[34]。串口通信模块的主要程序代码如下:
//串口初始化
m_ctrlScom.SetCommPort(1);//默认选择COM1
m_ctrlScom.SetInputMode(1);//设置输入方式为二进制输入,0时为文本输入
m_ctrlScom.SetInBufferSize(1024);//设置输入缓冲区大小
m_ctrlScom.SetOutBufferSize(1024);//设置输出缓冲区大小
m_ctrlScom.SetSettings("9600,n,8,1");//默认串口的波特率、校验位、停止位
if(!m_ctrlScom.GetPortOpen())
m_ctrlScom.SetPortOpen(true);//打开串口
m_ctrlScom.SetRThreshold(1);
m_ctrlScom.SetInputLen(0);//设置当前缓冲区长度,为0时表示控件读取缓冲区的全部内容
m_ctrlScom.GetInput();//准备接收字符
if( m_ctrlScom.GetCommEvent()==2){//事件值为2表示接收缓冲区内有字符
variant_inp=m_ctrlScom.GetInput();//在串口打开时读取缓冲区的数据
safearry_inp=variant_inp;
len=safearry_inp.GetOneDimSize();//得到有效数据的长度
for(k=0;k<len;k++)
safearry_inp.GetElement(&k,rxdata+k);//将数据转换为BYTE型数组
}
显示模块是当串口接收到字符后,对接收的字符进行分离并对应显示在软件界面上。上位机软件显示效果如图6所示。
4 测试结果
系统经过调试,最后将导航信息发送给上位机软件,显示结果如图6所示。软件界面的时间是从卫星中获取的UTC时间加8得到的北京时间,GPS数据的经度、纬度、海拔是导航点的信息。卫星数是当前搜索到的卫星数,工作模式有GPS模式和北斗模式。软件的存储设置是存储设备端发送的完整数据;上位机发送设置界面如图4所示。主要是设置显示模式和校准设备当前的数据信息。通过测试,整个系统运行良好并到达了预期的效果。
图6 上位机软件显示效果
结语
本文设计了一种基于STC单片机设计的低功耗、低成本、多功能的导航授时系统。主要阐述了整个系统的硬件设计原理、主要模块电路以及软件设计流程,并对系统配套的上位机软件作了详细的介绍。系统通过测试可以在户外、室内运行,为需要导航服务的行业和授时系统提供了很大的帮助。