张传奎,张 春
(1.高端装备先进感知与智能控制教育部重点实验室,安徽 芜湖 241000;2.安徽工程大学 电气工程学院,安徽 芜湖 241000)
北斗卫星导航系统是我国自主研发并独立运行的全球卫星导航系统,具有实时导航、短报文通信、授时、高精度定位和同时在线用户容量大等优势[1]。北斗卫星导航系统采用了正交相移键控,拥有较高的频谱利用率和较强的抗干扰性。它目前已经基本无缝覆盖我国本土及周边地区,在水利防汛、交通运输、森林防火、军事防卫领域都有应用,具有极高的全境范围导航定位可用性[2]。我国计划于2020年建成范围覆盖全球的新一代北斗导航系统。近年来,很多学者利用北斗卫星导航系统进行定位及导航终端设备的研发,越来越多的领域可见到北斗终端的应用[3-4]。
随着我国北斗卫星导航系统的不断完善和交通道路的日益复杂,人们对导航终端的精度、功耗、可操作性等要求越来越高。然而我国北斗卫星导航终端一般采用分立式元器件,其中的可编程逻辑器件和数字信号处理器件等核心处理器件往往依赖国外进口,可替代性较小,面临较大的风险,存在安全隐患,在未来卫星导航终端的发展中需提高其安全性。并且常见的北斗卫星导航终端的通用元器件以FPGA+DSP的方式进行搭建,这种模式下的通用元器件往往体积比较大而且能耗也比较高[5-7]。因此,相比较于GPS,目前北斗卫星导航系统在民用上应用还较少,主要是由于北斗芯片的成本高,北斗产品的核心零部件和制造水平还有待进一步提高[8]。随着北斗相关技术不断发展与进步,成本逐渐降低,依靠强大的国内市场需求及政府部门的支持,高性能、低成本的北斗导航终端将向市场普及。
为此,研究设计了一种基于STM32和emWin的北斗卫星定位终端系统,该系统采用的所有关键芯片都是基于精简指令的低功耗芯片,价格相对低廉。系统采用模块化设计,硬件上以STM32F429IGT6为核心,使用国产AT6558芯片实现对北斗卫星的数据接收,并在LCD上进行实时显示,同时可进行相应的触摸控制。软件上以μC/OSⅢ为核心,完成任务调度、内存管理、中断服务等工作,并配合emWin图形库,实现精准的授时、经纬度、空间高度的实时动态显示。
系统以STM32F429IGT6作为主控芯片,主控单元主要用于数据处理、输出控制、图形绘制等;使用AT6558作为北斗卫星接收机芯片,接收机用于接收“北斗二号”卫星发送的信号,通过UART与主控芯片进行通信,信号接收采用了有源天线设计方案;使用μC/OSⅢ作为实时操作系统,进行任务分配等工作;交互界面使用的是7寸1 024*600高分辨率的LCD投射式电容触摸屏,比传统TFTLCD拥有更好的视觉和触觉体验,并利用主控芯片的LTDC进行控制显示;为了增强图形显示的性能,降低CPU的负荷,此处还使用了DMA2D进行图像的填充和搬运;触控部分使用的是GT911驱动IC来检测电容触摸,并通过IIC接口输出触摸数据。电源电路使用AMS1117稳压器进行设计。系统结构图如图1所示。
图1 系统结构图
“北斗二号”系统的信号可以表示为测距码、数据和正交载波的乘积。系统使用的是“北斗二号”系统B1频段信号。其中,测距码使用的是开放服务的I支路的普通测距码,载波使用的是面向民用的I频段载波,其频率为1 561.098 MHz。
B1频段信号表达式如下[9]:
(1)
射频前端采用了超外差结构,超外差结构是通信接收机中使用最为广泛的一种结构,其利用本地产生的震荡波与输入信号混频,将输入信号频率变换为某个预先确定的频率。其最先是由阿姆斯特朗于1918年提出的。超外差结构示意图如图2所示。
图2 超外差结构示意图
超外差式射频前端通过一次或多次下变频,将天线接收到的信号经射频滤波器滤除带外噪声,再通过低噪声放大器,然后再与本振信号混频,经过中频滤波器和中频放大器产生所需要的中频信号。通过该射频前端可以接收中心频率为1 561.098 MHz,带宽为2.046 MHz的B1信号。
“北斗二号”系统采用了一种新型的数字调制技术QPSK,即正交相移键控。其输入基带信号为双极性不归零码元,用以串/并变换产生两路并行码元I通道信号和Q通道信号,这两路码元信号分别与两路正交载波相乘,最后相加得到QPSK信号。其原理框图如图3所示, 图3中ωc为载波频率。由此“北斗二号”系统可发出如式(1)所示的B1频段信号。
图3 QPSK信号调制框图
同样,在接收端需要对QPSK信号进行解调,QPSK信号解调时可以看作两个正交的2PSK信号的叠加,即
图4 QPSK信号解调框图
AT6558是一款高性能BDS/GNSS多模卫星导航接收机SOC单芯片,片上集成了射频前端、数字基带处理器与电源管理模组。通过该芯片可实现“北斗二号”系统B1频段信号的获取与解调,并通过RS232串口输出。
接收机与主控芯片以UART作为主要输出通道,按照NMEA0183的协议格式输出。数据以串行异步方式传送。第1位为起始位,其后是数据位。其数据传送方式如表1所示。传输数据所使用的参数如表2所示。
表1 数据传送方式
表2 传输数据所使用的参数
根据NMEA协议框架,设计如下的数据解析代码:
u8 Res;
if((__HAL_UART_GET_FLAG(&USART6_BDSHandler,UART_FLAG_RXNE) != RESET))
{
HAL_UART_Receive(&USART6_BDSHandler,&Res,1,1000);
if(Res == '$'){ point1 = 0};
BDS_RX_BUF[point1++] = Res;
if(USART_RX_BUF[0] == '$' && USART_RX_BUF[4] == 'M' && USART_RX_BUF[5] == 'C')
{
if(Res == ' ')
{
memset(BDS_Data.GPS_Buffer,0,GPS_Buffer_Length);
memcpy(BDS_Data.GPS_Buffer,USART_RX_BUF,point1);
BDS_Data.isGetData = true;
point1 = 0;
memset(USART_RX_BUF,0,USART_REC_LEN);
}
}
if(point1 >= USART_REC_LEN) {point1 = USART_REC_LEN};
}
上述代码主要利用if语句判别串口接收数据寄存器是否为空,若非空则将数据存放到数组BDS_RX_BUF[]中,然后再判断NMEA0183协议的起始符“$”是否存在,若存在,则继续判断第4位和第5位是否为“M”和“C”,用于筛选出最简定位信息。其流程图如图5所示。
图5 系统流程图
STM32F429IGT6主控芯片带有液晶控制器,即LTDC。主控芯片通过LTDC可以直接外接LCD屏,实现液晶驱动。STM32F429IGT6的LTDC共有28根信号线,包括24根数据线、一根像素时钟同步输出线、一根水平同步线、一根垂直同步线和一根数据使能线。该LTDC支持RGB888颜色格式和DMA2D,因此可以获得良好的显示效果。除信号线外,LTDC控制器还包括图像处理单元、AHB接口、配置和状态寄存器、时钟等,其框图如图6所示。
图6 LTDC系统框图
关于LTDC的配置,首先定义一个结构体,用于存放LCD的一些重要参数,具体如下:
typedef struct
{
uint32 pwidth;
uint 32 pheight;
uint 16 hsw;
uint 16 vsw;
uint 16 hbp;
uint 16 vbp;
uint 16 hfp;
uint 16 vfp;
uint 8 activelayer;
uint 8 dir;
uint 16 width;
uint 16 height;
uint 32 pixsize;
}_ltdc_dev;
该结构体用于定义LCD面板的宽度和高度、水平同步宽度、垂直同步宽度、水平后廊、垂直后廊、水平前廊、垂直前廊、当前层编号、横竖屏、LCD宽度、LCD高度、每个像素所占字节数。然后编写函数用于配置LTDC时钟、LTDC初始化等,并编写LCD的读点、写点和填充等函数,用作emWin移植的接口函数。
系统经初始化后创建1个主任务,并在主任务下创建4个子任务,包括BDS接收机任务、emWin任务、触摸屏任务和LED任务,分别用来获取BDS接收机数据、显示卫星数据、执行人机交互和指示系统正常运行。
BDS接收机任务的任务函数为:
OSTaskCreate((OS_TCB*)&BDSTaskTCB,(CPU_CHAR*) "bds task",(OS_TASK_PTR )bds_task,(void*)0,(OS_PRIO)BDS_TASK_PRIO,(CPU_STK* )&BDS_TASK_STK[0],(CPU_STK_SIZE)BDS_STK_SIZE/10,(CPU_STK_SIZE)BDS_STK_SIZE,(OS_MSG_QTY)0,(OS_TICK)0,(void* )0,(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR|OS_OPT_TASK_SAVE_FP,(OS_ERR*)&err);
该函数指定了任务的控制块、任务名、任务函数、传递参数、任务优先级、任务堆栈基地址、任务堆栈深度限位、任务堆栈大小、消息队列、时间片长度、补充存储区、返回值等任务信息。
系统开机显示初始欢迎界面后可通过触摸屏选择要显示的信息。系统的使用受到环境的影响,最好在空旷的室外环境进行系统测试。通过解析帧数据:
$GNRMC,063 944.000,A,3 133.604 8,N,11 841.084 8,E,4.152,292.44,141 216,A*75
可知当前UTC时间为063 944.000,地理位置为31.336 048,118.410 848,运动速度为4.152节。
对以上数据进行转换,得到当前UTC时间为8点21分15秒,即北京时间16点21分15秒,地理位置为北纬31度20分16秒,东经118度24分19秒,运动速度为7.689 5 Km/h。
初始界面如图7所示。点击“Display real-time information”按钮即可进入实时信息显示界面。实时信息显示界面如图8所示。
图7 初始界面 图8 实时信息显示界面
系统实现了一款成本低、功耗低、应用领域广、稳定性好、高性能且便携的嵌入式定位终端设备。系统硬件以STM32F429IGT6为主控芯片,并搭配LCD液晶显示模块和基于AT6558芯片的ATGM336H-5N北斗导航模块,共同组成了系统的硬件核心。软件上以底层驱动、μC/OSⅢ和emWin为核心,底层驱动实现了系统的基本运转,μC/OSⅢ实现了任务分配,emWin实现了系统的界面设计,包括地理位置显示、运动速度显示、时间显示等,并利用其图形显示功能,实现上述信息的图形动态显示。与其他同类设备相比,该设备具有体积小、低功耗、高实时性等优点。设备的成本主要来自主控芯片和显示屏,主控芯片成本约为十几元,显示屏成本约为三十元,这和市面上动辄上百元的卫星定位系统相比有着巨大的经济优势。