初学者
10 分钟

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

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

Charger 17 Click with Nucleo 64 with STM32G071RB MCU

已发布 10月 08, 2024

点击板

Charger 17 Click

开发板

Nucleo 64 with STM32G071RB MCU

编译器

NECTO Studio

微控制器单元

STM32G071RB

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

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

功能概述

开发板

Nucleo-64 搭载 STM32G071RB MCU 提供了一种经济高效且灵活的平台,供开发者探索新想法并原型设计他们的项目。该板利用 STM32 微控制器的多功能性,使用户能够为他们的项目选择最佳的性能与功耗平衡。它配备了 LQFP64 封装的 STM32 微控制器,并包含了如用户 LED(同时作为 ARDUINO® 信号)、用户和复位按钮,以及 32.768kHz 晶体振荡器用于精确的计时操作等基本组件。Nucleo-64 板设计考虑到扩展性和灵活性,它特有的 ARDUINO® Uno

V3 扩展连接器和 ST morpho 扩展引脚头,提供了对 STM32 I/O 的完全访问,以实现全面的项目整合。电源供应选项灵活,支持 ST-LINK USB VBUS 或外部电源,确保在各种开发环境中的适应性。该板还配备了一个具有 USB 重枚举功能的板载 ST-LINK 调试器/编程器,简化了编程和调试过程。此外,该板设计旨在简化高级开发,它的外部 SMPS 为 Vcore 逻辑供电提供高效支持,支持 USB 设备全速或 USB SNK/UFP 全速,并内置加密功能,提升了项目的功效

和安全性。通过外部 SMPS 实验的专用连接器、 用于 ST-LINK 的 USB 连接器以及 MIPI® 调试连接器,提供了更多的硬件接口和实验可能性。开发者将通过 STM32Cube MCU Package 提供的全面免费软件库和示例得到广泛支持。这些,加上与多种集成开发环境(IDE)的兼容性,包括 IAR Embedded Workbench®、MDK-ARM 和 STM32CubeIDE,确保了流畅且高效的开发体验,使用户能够充分利用 Nucleo-64 板在他们的项目中的能力。

Nucleo 64 with STM32G071RB MCU double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

ARM Cortex-M0

MCU 内存 (KB)

128

硅供应商

STMicroelectronics

引脚数

64

RAM (字节)

36864

你完善了我!

配件

Click Shield for Nucleo-64 配备了两个专有的 mikroBUS™ 插座,使得所有的 Click board™ 设备都可以轻松地与 STM32 Nucleo-64 开发板连接。这样,Mikroe 允许其用户从不断增长的 Click boards™ 范围中添加任何功能,如 WiFi、GSM、GPS、蓝牙、ZigBee、环境传感器、LED、语音识别、电机控制、运动传感器等。您可以使用超过 1537 个 Click boards™,这些 Click boards™ 可以堆叠和集成。STM32 Nucleo-64 开发板基于 64 引脚封装的微控制器,采用 32 位 MCU,配备 ARM Cortex M4 处理器,运行速度为 84MHz,具有 512Kb Flash 和 96KB SRAM,分为两个区域,顶部区域代表 ST-Link/V2 调试器和编程器,而底部区域是一个实际的开发板。通过 USB 连接方便地控制和供电这些板子,以便直接对 Nucleo-64 开发板进行编程和高效调试,其中还需要额外的 USB 线连接到板子上的 USB 迷你接口。大多数 STM32 微控制器引脚都连接到了板子左右边缘的 IO 引脚上,然后连接到两个现有的 mikroBUS™ 插座上。该 Click Shield 还有几个开关,用于选择 mikroBUS™ 插座上模拟信号的逻辑电平和 mikroBUS™ 插座本身的逻辑电压电平。此外,用户还可以通过现有的双向电平转换器,使用任何 Click board™,无论 Click board™ 是否在 3.3V 或 5V 逻辑电压电平下运行。一旦将 STM32 Nucleo-64 开发板与我们的 Click Shield for Nucleo-64 连接,您就可以访问数百个工作于 3.3V 或 5V 逻辑电压电平的 Click boards™。

Click Shield for Nucleo-64 accessories 1 image

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

Charger 17 Click accessories image

使用的MCU引脚

mikroBUS™映射器

NC
NC
AN
BATFET Enable Control
PC12
RST
Charge Enable
PB12
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
Power Source Selection
PC8
PWM
Interrupt
PC14
INT
NC
NC
TX
NC
NC
RX
I2C Clock
PB8
SCL
I2C Data
PB9
SDA
NC
NC
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

Charger 17 Click Schematic schematic

一步一步来

项目组装

Click Shield for Nucleo-64 accessories 1 image hardware assembly

从选择您的开发板和Click板™开始。以Nucleo 64 with STM32G071RB MCU作为您的开发板开始。

Click Shield for Nucleo-64 accessories 1 image hardware assembly
Nucleo 64 with STM32F401RE MCU front image hardware assembly
LTE IoT 5 Click front image hardware assembly
Prog-cut hardware assembly
LTE IoT 5 Click complete accessories setup image hardware assembly
Nucleo-64 with STM32XXX MCU Access MB 1 Mini B Conn - 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
Clicker 4 for STM32F4 HA 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. 应用程序输出 - 在调试模式下,“应用程序输出”窗口支持实时数据监控,直接提供执行结果的可视化。请按照提供的教程正确配置环境,以确保数据正确显示。

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”替换为要显示的参数。

软件支持

库描述

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

关键功能:

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

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

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

开源

代码示例

完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio 应用程序代码也可以在MIKROE的GitHub账户中找到。

/*!
 * @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

额外支持

资源

喜欢这个项目吗?

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