我们的数字罗盘解决方案提供了精准的导航功能,使其成为各种方向敏感应用的宝贵工具。
A
A
硬件概览
它是如何工作的?
Compass 3 Click基于MEMSIC的MMC5883MA,这是一款完整的3轴磁传感器,具有片上信号处理和集成的I2C总线,适用于各种应用。该器件通过直接连接到微处理器,消除了对A/D转换器或定时资源的需求。它可以在±8高斯(G)的全量程范围内测量磁场,在16位操作模式下每LSB分辨率为0.25mG,总RMS噪声水平为0.4mG。在电子罗盘应用中,它实
现了±1°的航向精度。集成的SET/RESET功能消除了由于温度变化导致零场输出变化而产生的误差。集成温度传感器的温度信息可通过I2C接口获得。SET/RESET功能可以根据特定应用的要求,周期性地进行每次测量,或者在温度变化超过预定量时进行。此外,SET/RESET功能可以清除由于暴露于强外部磁铁而导致的任何残留磁极化。MMC5883MA
采用低轮廓的LGA封装(3.0 x 3.0 x 1.0毫米),具有广泛的工作温度范围。MMC5883MA提供400 kHz的I2C数字输出,支持快速模式操作。该Click板只能在3.3V逻辑电压级别下运行。在使用具有不同逻辑电平的MCU之前,板必须执行适当的逻辑电压级别转换。此外,它配备有包含函数和示例代码的库,可用作进一步开发的参考。
功能概述
开发板
Curiosity PIC32 MZ EF 开发板是一个完全集成的 32 位开发平台,特点是高性能的 PIC32MZ EF 系列(PIC32MZ2048EFM),该系列具有 2MB Flash、512KB RAM、集成的浮点单元(FPU)、加密加速器和出色的连接选项。它包括一个集成的程序员和调试器,无需额外硬件。用户可以通过 MIKROE
mikroBUS™ Click™ 适配器板扩展功能,通过 Microchip PHY 女儿板添加以太网连接功能,使用 Microchip 扩展板添加 WiFi 连接能力,并通过 Microchip 音频女儿板添加音频输入和输出功能。这些板完全集成到 PIC32 强大的软件框架 MPLAB Harmony 中,该框架提供了一个灵活且模块化的接口
来应用开发、一套丰富的互操作软件堆栈(TCP-IP、USB)和易于使用的功能。Curiosity PIC32 MZ EF 开发板提供了扩展能力,使其成为连接性、物联网和通用应用中快速原型设计的绝佳选择。
微控制器概述
MCU卡片 / MCU

建筑
PIC32
MCU 内存 (KB)
2048
硅供应商
Microchip
引脚数
100
RAM (字节)
524288
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图

一步一步来
项目组装
实时跟踪您的结果
应用程序输出
1. 应用程序输出 - 在调试模式下,“应用程序输出”窗口支持实时数据监控,直接提供执行结果的可视化。请按照提供的教程正确配置环境,以确保数据正确显示。

2. UART 终端 - 使用UART Terminal通过USB to UART converter监视数据传输,实现Click board™与开发系统之间的直接通信。请根据项目需求配置波特率和其他串行设置,以确保正常运行。有关分步设置说明,请参考提供的教程。

3. Plot 输出 - Plot功能提供了一种强大的方式来可视化实时传感器数据,使趋势分析、调试和多个数据点的对比变得更加直观。要正确设置,请按照提供的教程,其中包含使用Plot功能显示Click board™读数的分步示例。在代码中使用Plot功能时,请使用以下函数:plot(insert_graph_name, variable_name);。这是一个通用格式,用户需要将“insert_graph_name”替换为实际图表名称,并将“variable_name”替换为要显示的参数。

软件支持
库描述
该库包含 Compass 3 Click 驱动程序的 API。
关键功能:
compass3_full_measurement
- 测量设备周围的磁场compass3_read_temp
- 用于测量温度的函数compass3_check_int
- 函数检查中断发生
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* \file
* \brief Compass3 Click example
*
* # Description
* This demoapp measures the magnetic field surrounding the device.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initalizes I2C driver and click driver, performs check, applies default
* setup and writes an initial log.
*
* ## Application Task
* This example demonstrates the use of
* Compass 3 Click board by measuring the magnetic field surrounding the device.
*
* \author Jovan Stajkovic
*
*/
// ------------------------------------------------------------------- INCLUDES
#include "board.h"
#include "log.h"
#include "compass3.h"
// ------------------------------------------------------------------ VARIABLES
static compass3_t compass3;
static log_t logger;
static float x_val;
static float y_val;
static float z_val;
static uint8_t test_val;
// ------------------------------------------------------ APPLICATION FUNCTIONS
void application_init ( void )
{
log_cfg_t log_cfg;
compass3_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.
compass3_cfg_setup( &cfg );
COMPASS3_MAP_MIKROBUS( cfg, MIKROBUS_1 );
compass3_init( &compass3, &cfg );
Delay_ms( 100 );
compass3_generic_read( &compass3, COMPASS3_DEVICE_ID, &test_val, 1 );
if ( test_val == COMPASS3_DEVICE_ID_NUM )
{
log_printf( &logger, "--------------------\r\n" );
log_printf( &logger, " Compass 3 click \r\n" );
log_printf( &logger, "--------------------\r\n" );
}
else
{
log_printf( &logger, " Fatal error!!! \r\n" );
for ( ; ; );
}
compass3_default_cfg ( &compass3 );
Delay_ms( 100 );
}
void application_task ( void )
{
if ( compass3_check_int( &compass3 ) == COMPASS3_INTERRUPT )
{
compass3_full_measurement ( &compass3, &x_val, &y_val, &z_val );
log_printf( &logger," X-axis : %.2f mG\r\n", x_val );
log_printf( &logger," Y-axis : %.2f mG\r\n", y_val );
log_printf( &logger," Z-axis : %.2f mG\r\n", z_val );
Delay_ms( 1000 );
log_printf( &logger, "--------------------\r\n" );
}
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END