在现代电子项目中,GPS模块的应用越来越广泛。本文将介绍如何自制一个USBGPS模块,并将其与PIC24微控制器接口,以获取和处理GPS数据。
首先,需要一个GPS模块。市场上有许多类型的GPS模块,但为了节约成本,可以选择一个带有UART输出的模块。然后,将模块的串行输出引脚连接到一个便宜的USB转TTL转换器上,该转换器使用Prolific PL-2303HXA芯片组。这样,就可以将GPS模块转换成一个USB GPS模块。
通过使用Tera-Term Web 3.1软件,可以在9600bps的波特率、8个数据位、1个停止位和无奇偶校验的设置下,与GPS模块进行通信。很快,就能看到模块返回的NMEA数据。
为了更好地理解这些返回的数据,需要一个NMEA查看器。NMEA Monitor是一个不错的选择,Visual GPS也是一个不错的替代品。在有清晰天空视线的情况下,GPS模块能在不到一分钟内获得定位。
接下来,将尝试将GPS模块与PIC24微控制器接口。如果将GPS模块安装在遥控直升机上,可以编程微控制器读取当前的GPS位置,并通过RF远程传输,以便进行其他处理。
为了实现这一点,首先将基于Arduino的NMEA解析库从Adafruit移植到Microchip C30,准备在PIC24上进行测试。移植后的库包含以下导出函数:
// 内部函数
void GPS_common_init(void);
char *GPS_lastNMEA(void);
void GPS_pause(boolean b);
boolean is_GPS_paused();
boolean GPS_parse(char *nmea);
char GPS_read(void);
boolean GPS_newNMEAreceived(void);
// 获取GPS信息
GPS_DATE_INFO GPS_getDateInfo();
GPS_SIGNAL_INFO GPS_getSignalInfo();
GPS_LOCATION_INFO GPS_getLocationInfo();
在这些函数中,GPS_read()函数特别值得注意,因为它会在从GPS模块接收到一个字节时更新内部缓冲区。一旦内部缓冲区更新,其他GPS函数就能够解析NMEA数据并返回相关信息。为了确保位置的及时更新,GPS_read()最好从UART数据接收中断中调用。在PIC24上,可以使用以下代码实现这一点:
// 设置UART 2接收中断
IPC7bits.U2RXIP0 = 1;
IPC7bits.U2RXIP1 = 1;
IPC7bits.U2RXIP2 = 1;
IEC1bits.U2RXIE = 1;
IFS1bits.U2RXIF = 0;
// UART接收中断
void __attribute__((interrupt, no_auto_psv, shadow)) _U2RXInterrupt(void) {
if (U2STAbits.OERR == 1) {
U2STAbits.OERR = 0;
} else {
GPS_read();
}
IFS1bits.U2RXIF = 0;
}
使用以下代码片段,可以获取GPS信号信息、位置和UTC时间:
if (GPS_newNMEAreceived()) {
char *nmea = GPS_lastNMEA();
boolean isOK = GPS_parse(nmea);
if (isOK) {
GPS_SIGNAL_INFO info = GPS_getSignalInfo();
if (info.fix) {
if (currentMode == MODE_GPS_LOCATION_INFO) {
GPS_LOCATION_INFO loc = GPS_getLocationInfo();
GPS_DATE_INFO date = GPS_getDateInfo();
...
}
}
}
}
由于GPS模块只能在室外且有清晰天空视线的情况下工作,为了在室内开发期间进行测试,可以使用.NET Framework SerialPort控件编写一个简单的程序,将一组固定的NMEA数据输出到与微控制器连接的PC的串行端口。微控制器将解析接收到的NMEA数据,就像它来自GPS模块一样。测试应用程序可以在这里下载。
使用Nokia 5110 LCD模块,制作了一个便携式GPS接收器,能够显示当前的GPS坐标和UTC时间。
完成的电路,包括PIC24FJ64GA002、Nokia 5110 LCD和GPS模块,在运行期间消耗80mA-100mA,其中大约80%的功率被GPS模块消耗。因此,9V电池不会在这个电路中持续很长时间。要将其变成一个永久性的便携式解决方案,可能需要更大容量的电池,例如遥控直升机中使用的锂聚合物电池。