检测垂直磁场的变化,并实现对特定磁体方向的无与伦比的灵敏度。
A
A
硬件概览
它是如何工作的?
Hall Switch 3 Click基于NXP Semiconductor的NMH1000,这是一款霍尔效应磁开关。该开关通过包含可配置状态机、输入的模拟转换和与预定义阈值进行比较的功能块来处理其输入,以生成双态输出。输出按线性顺序排列。NMH1000具有一个传感器,它生成与
近距磁通密度成比例的小电荷。霍尔效应电荷被转换为电压,并与预定义的阈值电压进行比较。这确定了开关输出的状态。Hall Switch 3 Click使用标准的两线I2C接口与主机MCU通信,支持高达1MHz的时钟频率。根据预定义的阈值,开关的输出可通过输出
OUT引脚获得。此Click板™只能在3.3V逻辑电压级别下操作。在使用具有不同逻辑电平的MCU之前,必须对电路板进行适当的逻辑电压级别转换。此外,它配备了一个包含功能和示例代码的库,可用作进一步开发的参考。
功能概述
开发板
Flip&Click PIC32MZ 是一款紧凑型开发板,设计为一套完整的解决方案,它将 Click 板™的灵活性带给您喜爱的微控制器,使其成为实现您想法的完美入门套件。它配备了一款板载 32 位 PIC32MZ 微控制器,Microchip 的 PIC32MZ2048EFH100,四个 mikroBUS™ 插槽用于 Click 板™连接,两个 USB 连接器,LED 指示灯,按钮,调试器/程序员连接器,以及两个与 Arduino-UNO 引脚兼容的头部。得益于创
新的制造技术,它允许您快速构建具有独特功能和特性的小工具。Flip&Click PIC32MZ 开发套件的每个部分都包含了使同一板块运行最高效的必要组件。此外,还可以选择 Flip&Click PIC32MZ 的编程方式,使用 chipKIT 引导程序(Arduino 风格的开发环境)或我们的 USB HID 引导程序,使用 mikroC、mikroBasic 和 mikroPascal for PIC32。该套件包括一个通过 USB 类型-C(USB-C)连接器的干净且调
节过的电源供应模块。所有 mikroBUS™ 本身支持的 通信方法都在这块板上,包括已经建立良好的 mikroBUS™ 插槽、用户可配置的按钮和 LED 指示灯。Flip&Click PIC32MZ 开发套件允许您在几分钟内创建新的应用程序。它由 Mikroe 软件工具原生支持,得益于大量不同的 Click 板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作的许多方面。
微控制器概述
MCU卡片 / MCU

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

一步一步来
项目组装
软件支持
库描述
该库包含 Hall Switch 3 Click 驱动程序的 API。
关键功能:
- hallswitch3_get_mag_data- 此函数用于指示相对磁场强度。
- hallswitch3_set_out_data_rate- 此函数提供了用户覆盖固定采样率以控制睡眠-比较-Vout周期时间的能力。
- hallswitch3_get_status- 此函数读取模式和选择的状态报告。
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
 * @file main.c
 * @brief Hall Switch 3 Click example
 *
 * # Description
 * This example demonstrates the use of Hall Switch 3 Click board 
 * by reading and displaying the magnetic field strength value.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initialization of I2C module and log UART.
 * After driver initialization, the app executes a default configuration.
 *
 * ## Application Task
 * This example demonstrates the use of the Hall Switch 3 Click board.
 * The demo application reads and displays the relative magnetic field strength value [Gaussian units] 
 * and detects when the magnetic field strength is not in the configured range. 
 * The results are sent to the UART terminal, where you can monitor their changes.
 *
 * @author Nenad Filipovic
 *
 */
#include "board.h"
#include "log.h"
#include "hallswitch3.h"
static hallswitch3_t hallswitch3;
static log_t logger;
void application_init ( void ) 
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    hallswitch3_cfg_t hallswitch3_cfg;  /**< Click config object. */
    /** 
     * 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.
    hallswitch3_cfg_setup( &hallswitch3_cfg );
    HALLSWITCH3_MAP_MIKROBUS( hallswitch3_cfg, MIKROBUS_1 );
    if ( I2C_MASTER_ERROR == hallswitch3_init( &hallswitch3, &hallswitch3_cfg ) ) 
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    if ( HALLSWITCH3_ERROR == hallswitch3_default_cfg ( &hallswitch3 ) )
    {
        log_error( &logger, " Default configuration." );
        for ( ; ; );
    }
    
    log_info( &logger, " Application Task " );
}
void application_task ( void ) 
{
    int8_t mag_data = 0;
    if ( HALLSWITCH3_OK == hallswitch3_get_mag_data( &hallswitch3, &mag_data ) )
    {
        log_printf( &logger, " Magnetic Field: %d [Gs]\r\n", ( int16_t ) mag_data );
        if ( HALLSWITCH3_OUT_STATE_LOW == hallswitch3_check_mag_field( &hallswitch3 ) )
        {
            log_printf( &logger, " The switch is open.\r\n" );
        }
    }
    Delay_ms ( 1000 );
}
int main ( void ) 
{
    /* Do not remove this line or clock might not be set correctly. */
    #ifdef PREINIT_SUPPORTED
    preinit();
    #endif
    
    application_init( );
    
    for ( ; ; ) 
    {
        application_task( );
    }
    return 0;
}
// ------------------------------------------------------------------------ END
































