初学者
10 分钟

使用RT9471和PIC32MZ2048EFM100让您的设备随时充满电并准备行动

我们的充电器是您的锂离子电池的最佳伴侣。

Charger 17 Click with Curiosity PIC32 MZ EF

已发布 6月 27, 2024

点击板

Charger 17 Click

开发板

Curiosity PIC32 MZ EF

编译器

NECTO Studio

微控制器单元

PIC32MZ2048EFM100

充电从未如此简单且强大,我们为便携式能源领域带来了全新的效率水平。

A

A

硬件概览

它是如何工作的?

Charger 17 Click 基于 Richtek 的 RT9471,这是一款 3A 单电池开关电池充电器。RT9471 支持 USB OTG 电流和电压限制调节。此外,该充电器还支持多种保护功能,如过温保护、VBUS 过压保护、电池过压保护、系统过压保护、系统欠压保护等。Charger 17 Click 的电源输入使用 USB C 接口和 5V,此外还可以使用 VBUS/GND 连接头从其他外部电源供电,因为 VBUS RT4971 输入的工作范围为 3.9V 到 13.5V。Charger 17 Click 使用标记正确的 JST 接口连接电池,需注意电池极性,因为 JST 电池连接器没有标准化。除了电池连接器之外,还有一个 SYS/GND 连接头作为转换器输出连接点。该设备提供自动电源路径选择,可通过 VSYS/GND 连接头从 USB C 接口、连接的电池或两者为系统供电。在运输模式下,可以在运输或存

储时关闭电池,从而延长电池寿命。在充电状态下,充电器监控电池电压并选择适当的模式(电池供电模式到充电模式)。在 USB OtG 应用中,RT9471 在 3.8V 电池和 5.15V 输出电压下可实现高达 92% 的升压效率。RT9471 充电器通过电源良好 PG LED 指示器指示电源源的质量,包括在非睡眠模式下应用的 VBUS、在非 HZ 模式下低于阈值设置的充电器热值等。充电状态可以通过 STAT LED 指示器进行可视化监控。RT9471 在充电模式下支持 JEITA 保护。充电器可以通过 TEMP/GND 连接头和额外的 NTC 热敏电阻测量电池温度。此功能可以通过 TEMP REF 焊接跳线选择,默认设置为内部位置。无论哪种方式,温度窗口都通过分压器编程。如果电池温度低于 T1 或高于 T4 值,设备将停止充电。有关更多信息,请查阅随附的 

datasheet。Charger 17 Click 使用标准 2 线 I2C 接口与主 MCU 通信,速度高达 3.4Mbit/s。此 Click board™ 还有一些其他功能,例如充电启用 CE 引脚,可以在将此引脚驱动为低电平时关闭电池充电。您还可以通过 QON 引脚控制 BATFET,包括退出运输模式和系统复位。可以通过 PSL 引脚在 0.5A 和 2.4A 之间选择电源电流限制。充电器可以通过 INT 中断引脚提醒不良电源检测、VBUS 电源类型检测和其他事件。此 Click board™ 只能在 3.3V 逻辑电压水平下运行。使用具有不同逻辑电平的 MCU 之前,板必须执行适当的逻辑电压电平转换。此外,此 Click board™ 配备了包含易于使用的函数和示例代码的库,可用于进一步开发。

Charger 17 Click hardware overview image

功能概述

开发板

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 开发板提供了扩展能力,使其成为连接性、物联网和通用应用中快速原型设计的绝佳选择。

Curiosity PIC32MZ EF double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

PIC32

MCU 内存 (KB)

2048

硅供应商

Microchip

引脚数

100

RAM (字节)

524288

你完善了我!

配件

Li-Polymer 电池是对依赖于移动性的设备来说最理想的解决方案,它提供可靠且持久的电源供应。其与 mikromedia 板的兼容性确保了无需额外修改即可轻松集成。电池的输出电压为 3.7V,满足许多电子设备的标准要求。此外,2000mAh 的容量能够存储大量能量,为设备提供长时间的持续电力。这一特性减少了频繁充电或更换的需求。总体而言,Li-Polymer 电池是一种可靠且自主的电源,非常适合需要稳定且持久能源解决方案的设备。您可以在我们的产品中找到更多选择的 Li-Polymer 电池。

Charger 17 Click accessories image

使用的MCU引脚

mikroBUS™映射器

NC
NC
AN
BATFET Enable Control
RA9
RST
Charge Enable
RPD4
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
Power Source Selection
RPE8
PWM
Interrupt
RF13
INT
NC
NC
TX
NC
NC
RX
I2C Clock
RPA14
SCL
I2C Data
RPA15
SDA
NC
NC
5V
Ground
GND
GND
1

“仔细看看!”

原理图

Charger 17 Click Schematic schematic

一步一步来

项目组装

Curiosity PIC32MZ EF front image hardware assembly

从选择您的开发板和Click板™开始。以Curiosity PIC32 MZ EF作为您的开发板开始。

Curiosity PIC32MZ EF front image hardware assembly
GNSS2 Click front image hardware assembly
Prog-cut hardware assembly
GNSS2 Click complete accessories setup image hardware assembly
Curiosity PIC32 MZ EF MB 1 Access - upright/background hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
Curiosity PIC32 MZ EF MCU Step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

实时跟踪您的结果

通过调试模式的应用程序输出

1. 一旦代码示例加载完成,按下 "DEBUG" 按钮将启动构建过程,并将其编程到创建的设置上,然后进入调试模式。

2. 编程完成后,IDE 中将出现一个带有各种操作按钮的标题。点击绿色的 "PLAY" 按钮开始读取通过 Click board™ 获得的结果。获得的结果将在 "Application Output" 标签中显示。

DEBUG_Application_Output

软件支持

库描述

该库包含 Charger 17 Click 驱动程序的 API。

关键功能:

  • charger17_enable_charging - 此功能通过将 CE 引脚设置为低电平状态来启用充电。

  • charger17_set_psel_2400mA - 此功能通过将 PSEL 引脚设置为低电平状态来将充电电流设置为 2400mA。

  • charger17_read_register - 此功能使用 I2C 串行接口从选定寄存器读取数据。

开源

代码示例

这个示例可以在 NECTO Studio 中找到。欢迎下载代码,或者您也可以复制下面的代码。

/*!
 * @file main.c
 * @brief Charger 17 Click example
 *
 * # Description
 * This example demonstrates the use of Charger 17 click board by enabling battery charging and
 * displaying the charging status.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initializes the driver and performs the click default configuration which enables charging.
 *
 * ## Application Task
 * Reads and displays the battery charging status (IC_STATUS and STAT0 regs) on the USB UART
 * approximately once per second.
 *
 * @author Stefan Filipovic
 *
 */

#include "board.h"
#include "log.h"
#include "charger17.h"

static charger17_t charger17;
static log_t logger;

/**
 * @brief Charger 17 parse ic status function.
 * @details This function parses and displays on the USB UART the IC_STATUS register value from input.
 * @param[in] ic_status : IC status register data.
 * @return None.
 * @note None.
 */
static void charger17_parse_ic_status ( uint8_t ic_status );

/**
 * @brief Charger 17 parse status 0 function.
 * @details This function parses and displays on the USB UART the STAT0 register value from input.
 * @param[in] status_0 : STAT0 register data.
 * @return None.
 * @note None.
 */
static void charger17_parse_status_0 ( uint8_t status_0 );

void application_init ( void ) 
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    charger17_cfg_t charger17_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.
    charger17_cfg_setup( &charger17_cfg );
    CHARGER17_MAP_MIKROBUS( charger17_cfg, MIKROBUS_1 );
    if ( I2C_MASTER_ERROR == charger17_init( &charger17, &charger17_cfg ) ) 
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    if ( CHARGER17_ERROR == charger17_default_cfg ( &charger17 ) )
    {
        log_error( &logger, " Default configuration." );
        for ( ; ; );
    }
    
    log_info( &logger, " Application Task " );
}

void application_task ( void ) 
{
    uint8_t ic_status, status_0;
    if ( CHARGER17_OK == charger17_read_register ( &charger17, CHARGER17_REG_IC_STATUS, &ic_status ) )
    {
        charger17_parse_ic_status ( ic_status );
    }
    if ( CHARGER17_OK == charger17_read_register ( &charger17, CHARGER17_REG_STAT0, &status_0 ) )
    {
        charger17_parse_status_0 ( status_0 );
    }
    Delay_ms ( 1000 );
}

void main ( void ) 
{
    application_init( );

    for ( ; ; ) 
    {
        application_task( );
    }
}

static void charger17_parse_ic_status ( uint8_t ic_status )
{
    log_printf ( &logger, "\r\n IC status\r\n" );
    log_printf ( &logger, "   PORT: " );
    switch ( ic_status & CHARGER17_PORT_STAT_BIT_MASK )
    {
        case CHARGER17_PORT_STAT_VBUS_DEV_1:
        {
            log_printf ( &logger, "VBUS = device 1 (2100mA-APPLE-10w)\r\n" );
            break;
        }
        case CHARGER17_PORT_STAT_VBUS_DEV_2:
        {
            log_printf ( &logger, "VBUS = device 2 (2000mA-SAMSUNG-10w)\r\n" );
            break;
        }
        case CHARGER17_PORT_STAT_VBUS_DEV_3:
        {
            log_printf ( &logger, "VBUS = device 3 (1000mA-APPLE-5w)\r\n" );
            break;
        }
        case CHARGER17_PORT_STAT_VBUS_DEV_4:
        {
            log_printf ( &logger, "VBUS = device 4 (2400mA-APPLE-12w)\r\n" );
            break;
        }
        case CHARGER17_PORT_STAT_VBUS_UNKNOWN:
        {
            log_printf ( &logger, "VBUS = unknown / NSDP (500mA)\r\n" );
            break;
        }
        case CHARGER17_PORT_STAT_VBUS_SDP:
        {
            log_printf ( &logger, "VBUS = SDP (500mA) / PSEL = High\r\n" );
            break;
        }
        case CHARGER17_PORT_STAT_VBUS_CDP:
        {
            log_printf ( &logger, "VBUS = CDP (1500mA)\r\n" );
            break;
        }
        case CHARGER17_PORT_STAT_VBUS_DCP:
        {
            log_printf ( &logger, "VBUS = DCP (2400mA) / PSEL = Low\r\n" );
            break;
        }
        default:
        {
            log_printf ( &logger, "No information\r\n" );
            break;
        }
    }
    log_printf ( &logger, "   IC: " );
    switch ( ic_status & CHARGER17_IC_STAT_BIT_MASK )
    {
        case CHARGER17_IC_STAT_HZ_SLEEP:
        {
            log_printf ( &logger, "HZ/SLEEP\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_VBUS_READY:
        {
            log_printf ( &logger, "VBUS ready for charge\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_TRICKLE_CHG:
        {
            log_printf ( &logger, "Trickle-charge\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_PRE_CHG:
        {
            log_printf ( &logger, "Pre-charge\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_FAST_CHG:
        {
            log_printf ( &logger, "Fast-charge\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_IEOC_CHG:
        {
            log_printf ( &logger, "IEOC-charge (EOC and TE = 0)\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_BACK_GROUND_CHG:
        {
            log_printf ( &logger, "Back-Ground charge (EOC and TE = 1 and before turn off power path)\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_CHG_DONE:
        {
            log_printf ( &logger, "Charge done (EOC and TE = 1 and power path off)\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_CHG_FAULT:
        {
            log_printf ( &logger, "Charge fault (VAC_OV/CHG_BUSUV/CHG_TOUT/CHG_SYSOV/CHG_BATOV/JEITA_HOT/JEITA_COLD/OTP)\r\n" );
            break;
        }
        case CHARGER17_IC_STAT_OTG:
        {
            log_printf ( &logger, "OTG\r\n" );
            break;
        }
        default:
        {
            log_printf ( &logger, "No information\r\n" );
            break;
        }
    }
}

static void charger17_parse_status_0 ( uint8_t status_0 )
{
    log_printf ( &logger, "\r\n Status 0\r\n" );
    log_printf ( &logger, "   VBUS_GD: VBUS %s good\r\n", 
                 ( char * ) ( ( status_0 & CHARGER17_STAT0_VBUS_GD ) ? "is" : "is not" ) );
    log_printf ( &logger, "   CHG_RDY: VBUS %s ready for charging\r\n", 
                 ( char * ) ( ( status_0 & CHARGER17_STAT0_CHG_RDY ) ? "is" : "is not" ) );
    log_printf ( &logger, "   IEOC: %s in EOC\r\n", 
                 ( char * ) ( ( status_0 & CHARGER17_STAT0_IEOC ) ? "While" : "Not in" ) );
    log_printf ( &logger, "   BG_CHG: %s\r\n", 
                 ( char * ) ( ( status_0 & CHARGER17_STAT0_BG_CHG ) ? "While in EOC state and TE = 1 and BG_CHG_TMR != 00" : 
                                                                      "Not in EOC state or TE = 0 or BG_CHG_TMR = 00" ) );
    log_printf ( &logger, "   CHG_DONE: %s\r\n", 
                 ( char * ) ( ( status_0 & CHARGER17_STAT0_CHG_DONE ) ? "While in EOC state and BATFET off" : 
                                                                        "Not in EOC state or BATFET on" ) );
    log_printf ( &logger, "   BC12_DONE: BC1.2 process %s\r\n", 
                 ( char * ) ( ( status_0 & CHARGER17_STAT0_BC12_DONE ) ? "done" : "not ready" ) );
}

// ------------------------------------------------------------------------ END

额外支持

资源

喜欢这个项目吗?

'购买此套件' 按钮会直接带您进入购物车,您可以在购物车中轻松添加或移除产品。