自制USB GPS模块与PIC24微控制器的接口

在现代电子项目中,GPS模块的应用越来越广泛。本文将介绍如何自制一个USBGPS模块,并将其与PIC24微控制器接口,以获取和处理GPS数据。

自制USB GPS模块

首先,需要一个GPS模块。市场上有许多类型的GPS模块,但为了节约成本,可以选择一个带有UART输出的模块。然后,将模块的串行输出引脚连接到一个便宜的USB转TTL转换器上,该转换器使用Prolific PL-2303HXA芯片组。这样,就可以将GPS模块转换成一个USB GPS模块。

NMEA数据解析

通过使用Tera-Term Web 3.1软件,可以在9600bps的波特率、8个数据位、1个停止位和无奇偶校验的设置下,与GPS模块进行通信。很快,就能看到模块返回的NMEA数据。

为了更好地理解这些返回的数据,需要一个NMEA查看器。NMEA Monitor是一个不错的选择,Visual GPS也是一个不错的替代品。在有清晰天空视线的情况下,GPS模块能在不到一分钟内获得定位。

与PIC24微控制器的接口

接下来,将尝试将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电池不会在这个电路中持续很长时间。要将其变成一个永久性的便携式解决方案,可能需要更大容量的电池,例如遥控直升机中使用的锂聚合物电池。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485