我们先进的GNSS解决方案通过提供实时定位数据,支持导航、地图绘制和地理分析,增强了决策制定和生产力。
A
A
硬件概览
它是如何工作的?
GNSS 3 Click基于SIMCom的SIM33ELA模块,这是一个独立或A-GPS接收器,带有内置的芯片天线。SIM33ELA仅支持L1频段,具有33个跟踪和99个获取通道。该模块提供从天线输入到主机端口的完整信号处理,可以通过NMEA消息传输,最大更新速率为10Hz。该模块是一款超低功耗跟踪设备,跟踪时灵敏度高达-165dBm,获取模式下为-147dBm,并具有快速重新获取时间。可见卫星数量的增加提高了定位精度(<2.5m CEP),减少了获取时间(<1.5s TTFF,热启动)。GNSS 3 Click支持抗干扰,在信号弱的条件下通过板载LNA和12个多音调主动干扰抵消器实现更好的定位。SIM33ELA支持EPO(扩展预测轨道)数据服务,可以向客户提供7/14/31天的轨道预
测,定期从EPO服务器下载。诸如星历、 星历、粗略的上次位置和时间、卫星状态以及可选的时间同步等信息将减少TTFF。它可以通过主机端上传到SIM33ELA模块。EASY(嵌入式助手系统)模式从接收到的星历预测卫星导航消息。该模块还支持DGPS SBAS(卫星增强系统)和RTCM,一次只能使用一种模式。SBAS取决于用户所在的大陆。SIM33ELA使用UART接口,常用的UART RX和TX引脚作为主机微控制器的默认通信协议。默认配置下,它以115200bps的速率进行操作以传输和交换数据。此外,这款Click board™还具有通过mikroBUS™信号可访问的其他功能,例如用于重置设备的复位(RST)和INT引脚,可以控制模块进入或从睡眠模式唤醒。除了
可以使用内置的芯片天线之外,这款Click board™还可以使用Mikroe提供的外部有源天线,这要归功于板载的n.FL连接器和将ANT SEL焊接跳线设置为INT或EXT位置。除了精确定位外,GNSS 3 Click还通过红色LED指示器(标记为PPS)指示准确的定时信号,黄色LED指示器(标记为FIX)指示成功的定位,以及绿色PWR LED,用作唤醒指示器。此Click board™只能使用3.3V逻辑电压级别进行操作。在使用具有不同逻辑电压级别的MCU之前,必须对板执行适当的逻辑电压级别转换。此外,它配备了一个包含函数和示例代码的库,可供进一步开发参考。
功能概述
开发板
PIC32MZ Clicker 是一款紧凑型入门开发板,它将 Click 板™的灵活性带给您喜爱的微控制器,使其成为实现您想法的完美入门套件。它配备了一款板载 32 位带有浮点单元的 Microchip PIC32MZ 微控制器,一个 USB 连接器,LED 指示灯,按钮,一个 mikroProg 连接器,以及一个用于与外部电子设备接口的头部。得益于其紧凑的设计和清晰易识别的丝网标记,它提供了流畅且沉浸式的工作体验,允许在任
何情况下、任何地方都能访问。PIC32MZ Clicker 开 发套件的每个部分都包含了使同一板块运行最高效的必要组件。除了可以选择 PIC32MZ Clicker 的编程方式,使用 USB HID mikroBootloader 或通过外部 mikroProg 连接器为 PIC,dsPIC 或 PIC32 编程外,Clicker 板还包括一个干净且调节过的开发套件电源供应模块。USB Micro-B 连接可以提供多达 500mA 的电流,这足以操作所有板载和附加模块。所有
mikroBUS™ 本身支持的通信方法都在这块板上,包 括已经建立良好的 mikroBUS™ 插槽、重置按钮以及若干按钮和 LED 指示灯。PIC32MZ Clicker 是 Mikroe 生态系统的一个组成部分,允许您在几分钟内创建新的应用程序。它由 Mikroe 软件工具原生支持,得益于大量不同的 Click 板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作的许多方面。
微控制器概述
MCU卡片 / MCU
建筑
PIC32
MCU 内存 (KB)
1024
硅供应商
Microchip
引脚数
64
RAM (字节)
524288
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
原理图
一步一步来
项目组装
实时跟踪您的结果
通过调试模式的应用程序输出
1. 一旦代码示例加载完成,按下 "DEBUG" 按钮将启动构建过程,并将其编程到创建的设置上,然后进入调试模式。
2. 编程完成后,IDE 中将出现一个带有各种操作按钮的标题。点击绿色的 "PLAY" 按钮开始读取通过 Click board™ 获得的结果。获得的结果将在 "Application Output" 标签中显示。
软件支持
库描述
这个库包含了GNSS 3 Click驱动程序的API。
关键功能:
gnss3_parse_gngga
- GNSS 3解析GNGGA函数gnss3_generic_read
- 通用读取函数gnss3_module_wakeup
- 唤醒模块函数
开源
代码示例
这个示例可以在 NECTO Studio 中找到。欢迎下载代码,或者您也可以复制下面的代码。
/*!
* \file
* \brief Gnss3 Click example
*
* # Description
* This example demonstrates the use of GNSS 3 click by reading and displaying
* the GPS coordinates.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes the driver and resets the click board.
*
* ## Application Task
* Reads the received data, parses the GNGGA info from it, and once it receives the position fix
* it will start displaying the coordinates on the USB UART.
*
* ## Additional Function
* - static void gnss3_clear_app_buf ( void )
* - static err_t gnss3_process ( gnss3_t *ctx )
* - static void gnss3_parser_application ( char *rsp )
*
* \author MikroE Team
*
*/
// ------------------------------------------------------------------- INCLUDES
#include "board.h"
#include "log.h"
#include "gnss3.h"
#define PROCESS_BUFFER_SIZE 200
static gnss3_t gnss3;
static log_t logger;
static char app_buf[ PROCESS_BUFFER_SIZE ] = { 0 };
static int32_t app_buf_len = 0;
static int32_t app_buf_cnt = 0;
/**
* @brief GNSS 3 clearing application buffer.
* @details This function clears memory of application buffer and reset its length and counter.
* @return None.
* @note None.
*/
static void gnss3_clear_app_buf ( void );
/**
* @brief GNSS 3 data reading function.
* @details This function reads data from device and concatenates data to application buffer.
* @param[in] ctx : Click context object.
* See #gnss3_t object definition for detailed explanation.
* @return @li @c 0 - Read some data.
* @li @c -1 - Nothing is read or Application buffer overflow.
* See #err_t definition for detailed explanation.
* @note None.
*/
static err_t gnss3_process ( gnss3_t *ctx );
/**
* @brief GNSS 3 parser application.
* @param[in] rsp Response buffer.
* @details This function logs GNSS data on the USB UART.
* @return None.
* @note None.
*/
static void gnss3_parser_application ( char *rsp );
void application_init ( void )
{
log_cfg_t log_cfg;
gnss3_cfg_t cfg;
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, "---- Application Init ----" );
// Click initialization.
gnss3_cfg_setup( &cfg );
GNSS3_MAP_MIKROBUS( cfg, MIKROBUS_1 );
gnss3_init( &gnss3, &cfg );
gnss3_module_wakeup( &gnss3 );
Delay_ms( 1000 );
}
void application_task ( void )
{
gnss3_process( &gnss3 );
if ( app_buf_len > ( sizeof ( ( char * ) GNSS3_RSP_GNGGA ) + GNSS3_GNGGA_ELEMENT_SIZE ) )
{
gnss3_parser_application( app_buf );
}
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
static void gnss3_clear_app_buf ( void )
{
memset( app_buf, 0, app_buf_len );
app_buf_len = 0;
app_buf_cnt = 0;
}
static err_t gnss3_process ( gnss3_t *ctx )
{
int32_t rx_size = 0;
char rx_buf[ PROCESS_BUFFER_SIZE ] = { 0 };
rx_size = gnss3_generic_read( ctx, rx_buf, PROCESS_BUFFER_SIZE );
if ( rx_size > 0 )
{
int32_t buf_cnt = 0;
if ( ( app_buf_len + rx_size ) > PROCESS_BUFFER_SIZE )
{
gnss3_clear_app_buf( );
return GNSS3_ERROR;
}
else
{
buf_cnt = app_buf_len;
app_buf_len += rx_size;
}
for ( int32_t rx_cnt = 0; rx_cnt < rx_size; rx_cnt++ )
{
if ( rx_buf[ rx_cnt ] )
{
app_buf[ ( buf_cnt + rx_cnt ) ] = rx_buf[ rx_cnt ];
}
else
{
app_buf_len--;
buf_cnt--;
}
}
return GNSS3_OK;
}
return GNSS3_ERROR;
}
static void gnss3_parser_application ( char *rsp )
{
char element_buf[ 100 ] = { 0 };
if ( GNSS3_OK == gnss3_parse_gngga( rsp, GNSS3_GNGGA_LATITUDE, element_buf ) )
{
static uint8_t wait_for_fix_cnt = 0;
if ( strlen( element_buf ) > 0 )
{
log_printf( &logger, "\r\n Latitude: %.2s degrees, %s minutes \r\n", element_buf, &element_buf[ 2 ] );
gnss3_parse_gngga( rsp, GNSS3_GNGGA_LONGITUDE, element_buf );
log_printf( &logger, " Longitude: %.3s degrees, %s minutes \r\n", element_buf, &element_buf[ 3 ] );
memset( element_buf, 0, sizeof( element_buf ) );
gnss3_parse_gngga( rsp, GNSS3_GNGGA_ALTITUDE, element_buf );
log_printf( &logger, " Altitude: %s m \r\n", element_buf );
wait_for_fix_cnt = 0;
}
else
{
if ( wait_for_fix_cnt % 5 == 0 )
{
log_printf( &logger, " Waiting for the position fix...\r\n\n" );
wait_for_fix_cnt = 0;
}
wait_for_fix_cnt++;
}
gnss3_clear_app_buf( );
}
}
// ------------------------------------------------------------------------ END