基于单片机的GPS/电子罗盘测姿定位系统
2.2 串行通信接口电路
在信息传输模块中,由丁C8051F021引脚的信号电平为TTL类型,而上位机串口的异步串行通信是基于RS232标准的,两者通信信号的逻辑电平不一致,必须进行信号电平转换。而MAX3232芯片能直接将单片机输出的TTL电平转换成上位机能接收的RS232电平,或将PC机输出的RS232电平转换成单片机能接收的TTL电平,故采用MAX3232来实现其中的电平转换,从而实现系统的串行通信。本系统的串行通信硬件结构框图如图3所示。
3 系统软件设计
系统的软件实现采用C语言,C语言具有功能丰富的标准函数库,具有运算速度快和可移植性强等特点。用C语言来编写软件会大大缩短开发周期,增强软件的可读性,便于改进和扩充。
对于串口的数据处理有两种方法:一种是查询的方法,另一种是中断的方法。查询的方法是不断地检测接收和发送标志位,当查询到有数据进入到SBUF时对SBUF数据进行判断,是否为所需的数据,如果是则存储到数据寄存器中。由于查询方法在编写程序时比较复杂,需要反复地查询标志位,但是相较于其他算法对于实现循环比较简单。本系统对串口接收和发送的数据采用的是查询的方法。
单片机信息处理流程如图4所示。首先,待单片机初始化后,开启中断0,关闭中断1,开始通过串口0接收电子罗盘信息。电子罗盘HMR33 00更新频率为8 Hz,即每秒最多可更新8次。为了保证其稳定输出,每秒钟提取4次电子罗盘信息。然后,以判断回车来表示接收完一次罗盘信息,即hmr[i]=10。待接收完毕后,开启中断1,关闭中断0,通过串口1接收GPS定位信息。iTrax03-02更新速率为1fix/s。提取定位信息时,每秒钟提取一次GPS信息。接收到一条完整的语句后将其放入GPS数据存储区。同样地,我们以判断回车来表示接收完一次GPS信息,即gps[i]=10。
GPS信息接收完毕后,再开启中断0,关闭中断1,接收电子罗盘信息。同时,将采集到的姿态和定位信息通过串口0传送给MAX3232后,不断发送给上位机。在中断0中接收电子罗盘的数据时,需要提取的是其航向、俯仰和滚动信息,应判定接收到的数据是否为起始标志位,若是则开始采集数据,读取第二位数,进行采集的同时保存数据;如不是,则继续判定。
由于采用的是非定长通信,因此,在采集数据的同时还要判定当前位是否为结束标志位,若是则进行CRC校验。若正确则对得到的数据进行HPR分离;若否则开始新的采集。同样,在中断1中应在接收有效后,判断是否接收到GGA语句,若是再进行分析处理。也可直接发送指令给GPS接收机,使GPS接收机只输出所需要的语句信息。同样的操作也适用于电子罗盘HMR3300。
4 实验验证
为了验证所设计系统的正确性和有效性,笔者进行了地面跑车实验。将该系统固定于汽车内,实验过程中可见卫星数为11颗,可用卫星为7颗。实验后,将采集到的数据运用MATLAB软件进行数据处理并对结果进行了分析。跑车实验数据分析如图5所示。结论如下:
评论