基于单片机的GPS经纬度数据接收系统
GPS(全球定位系统)是为海上、陆地和空中各种运输工具和移动设备的导航和定位而开发的,具有高精度、全天候、全球性和点间无需通视等优点,使测量技术发生了质的飞跃。GPS技术引入我国后,特别是美国取消SA政策后的这几年发展十分迅速。目前,GPS已被广泛应用在工程测量、地理测绘、交通运输和军事等诸多领域,取得了明显的社会和经济效益,发展前景十分广阔。在GPS的行业应用中,数据接收系统是最基本的设备。目前的数据接收系统具有智能化和可扩展性不断增强的发展趋势,表现为内嵌的MCU性能越来越强大,外围接口越来越丰富,但软硬件成本不断上升,减缓了GPS接收系统平民化的趋势。本文介绍一种基于AVR单片机ATmega16和Motorola M12 Oncore模块的GPS数据接收系统。
1 系统的硬件设计
系统由ATmega16、M12模块、LCD显示器和一些外围电路组成,系统的硬件结构如图1所示。ATmega16具有1个功能完整的异步串行通信接口(UART),在直流5V供电时,其I/O操作电压范围约为0~5V;M12模块提供一个用于输入控制信息和输出定位与状态信息串行通信接口,在直流3V供电时,其I/O电平符合TTL电平范围,为0~3V。因此,可以将ATmega16串行接口经电平转换电路转接后与M12模块的串行口相连,进行异步串行数据交换。系统采用一块16×2字符型LCD显示经纬度信息。系统中的ATmega16和LCD采用直流5V供电,5V电源经过由三端稳压芯片LM317组成的稳压电路将电压转换成3V后给M12模块供电。
1.1 ATmega16与M12模块的硬件接口
由于ATmega16和M12模块的I/O操作电压范围不相同,所以两者的串行口之间需经过电平转换才能确保稳定通信,其电平转换电路如图2所示。
这里采用光电耦合器件TLP521进行5V和3V之间的电平转换,以增强抗干扰能力。ATmega16的I/O驱动能力较强(最大输出40mA电流),可以直接驱动TLP521。M12模块的I/O驱动能力较弱,需加一级驱动缓冲器才能驱动TLP521,这里使用7406反相驱动缓冲器。
1.2 ATmega16与LCD的硬件接口
系统中采用基于HD44780液晶控制芯片的16×2字符型LCD,该器件内置了字符产生器,能显示192个常用字符(包括阿拉伯数字和大小写英文字母)和16个用户自定义字符,它与ATmega16的接口如图3所示。
HD44780的数据总线DB7~DB0与ATmega16的PA7~PA0相接,RS、R/W和EN分别与单片机的PD3、PD4和PD5相连。利用ATmega16的I/O口控制LCD进行指令和数据输入,正确地显示出经纬度数据。
2 ATmega16与M12模块的接口程序设计
系统使用ATmega16的串行口向M12模块发出控制指令和接收定位信息。M12模块支持。Motorola二进制格式和NMEA0183格式两种数据输出模式。在Motorola二进制模式下,M12以9600bps的速率输出数据和接收指令;在NMEA0183,M12以4800bps的速率输出数据和接收指令。默认状态下,M12模块工作在Motorola二进制模式下。为了获取更高的数据传输速度,这里使用M12模块默认的工作模式,即Motorola二进制模式。在该模式下,串行数据传输格式为:8位数据位,1位停止位,无奇偶校验和硬件流控制。
ATmega16以通过向M12发送AT指令的方式对其进行控制。Motorola的AT I/O指令一共有69条,其中M12模块所支持的指令有51条。利用这些指令可以很方便的对M12模块进行日期时间设定、自定义坐标设定和定位信息读取等操作。在本系统中,只需要读取M12模块的定位信息,因此程序中只用到51条指令中的1条指令:
@@EqmCCR>LF>
该指令用于控制M12模块输出定位信息。其中“@@”是I/O指令的前缀;“Eq”是指令的关键字;“m”是M12模块输出(响应)信息模式选择,其数值可以是0~255之间的整数,当“m”为0时,响应信息只输出一次,当“m”为1时,响应信息每秒钟输出一次,当“m”为2时,响应信息每2 s输出一次,如此类推,当“m”为255时,响应信息每255 s输出一次;“C”是指令的校验和(Checksum)数据;“CR>”是回车符;“LF>”是换行符。为了便于采集定位数据,将“m”的数值设置为0,使M12模块每接收一次指令就回复一次定位数据。
M12模块在默认状态下只能接受以Motorola二进制形式输入的指令。所谓的Motorola二进制形式是指将指令的前缀、关键字和后缀(回车和换行)变换成相应的ASCII码后,加上模式“m”与校验和“C”组合成的二进制指令代码。系统中所用到的
ATmega16首先请求M12模块输出定位数据(向M12模块发出指令“@@EqmC”),然后等待M12模块回送数据。当M12模块回送数据时,ATmega16首先做出判断,确认其收到的是预期的定位信息,然后将定位信息(经纬度数据)截取下来,整理成可供显示数据信息后在LCD上显示经纬度数据,最后将串口的接收缓冲区清空,以免下次接收信息时出错。由于M12模块在1 s之内只能响应一条指令,所以接收机的数据信息最快1 s更新一次。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)