通过 USB Type-C 输入,为单节锂离子和锂聚合物电池提供快速、安全且智能的充电方案
A
A
硬件概览
它是如何工作的?
Charger 28 Click 基于德州仪器(Texas Instruments)推出的 BQ25638,这是一款 5A 开关模式电池充电器,采用 NVDC(窄电压直流)电源路径管理架构,旨在为单节锂离子与锂聚合物电池提供快速、可靠的充电方案。该架构允许系统在电池深度放电或暂时移除的情况下继续运行,非常适合对电源稳定性要求极高的游戏设备和电脑配件等应用。Charger 28 Click 通过 USB Type-C 接口供电,为充电器提供所需输入电压。其内置的输入电流优化器(ICO)可智能检测并利用输入源的最大可用功率,避免过载风险。同时,BQ25638 完全支持 USB OTG(On-the-Go)规范,提供最高 3.2A 的恒定电流输出,适配各种现代便携设备。其电源路径管理系统始终将系统电压保持在略高于电池电压的水平,同时避免低于可编程的最低系统电压。当输入达到电压或电流限制时,系统会自动降低电池充电电流以保护电源。如果系统负载进一步增加,电池将自动补充电
源,防止过载并保持连续供电。除了充电输入,Charger 28 Click 还提供电池连接器,支持最高 4.8V 的兼容电池,连接器中间引脚预留用于外部热敏电阻的温度监测。BQ25638 可独立运行并根据电池电压自动调整充电流程,分为涓流、预充电、恒流(CC)和恒压(CV)四个阶段。在完成充电周期后,当电池电压超过再充电阈值且电流低于设定值时,自动终止充电。其充电终止功能支持多个温度区间(如 COOL、PRECOOL、NORMAL、WARM、PREWARM),确保在不同环境下实现安全且高效的电池管理。电池电压一旦低于重启阈值,系统会自动再次启动充电过程,以维持电池健康状态。为了供电给外部设备,板上靠近电池接口的位置设有 LOAD 接口,可便捷连接至目标系统。此外,板载的 VPMID 接口提供正电压轨输出,特别适用于需要反向升压(如充电宝)和 OTG 功能的应用。Charger 28 Click 通过 I2C 接口与主控 MCU 通信,支持高达 1MHz 的时钟频率,确保
通信快速稳定。除了 I2C 引脚外,还包括 CE 引脚(用于启用/禁用充电)、INT 中断引脚(用于向主控报告状态与故障),以及用于重置充电器的 RESET 按钮。该板还集成可视化指示器,包括 STATUS LED(指示充电状态和故障)和 PGOOD LED(指示输入电源是否正常并高于设定阈值)。这两个状态信息也可通过 STS 和 PG 数字引脚读取。电流与电压检测信号也通过引脚引出至一个 12 位 ADC,以便监控充电电流及输入、电池与系统电压。在安全性方面,BQ25638 提供多项保护机制,包括 NTC 热敏电阻监测、充电安全计时器、过压/过流保护,以及当结温超过可编程阈值时的热调节限流。该 Click 板™ 支持 3.3V 或 5V 逻辑电平操作,可通过 VCC SEL 跳线选择,兼容不同电压等级的 MCU。另附带易用的软件库及示例代码,为用户后续开发提供有力支持。
功能概述
开发板
Arduino UNO 是围绕 ATmega328P 芯片构建的多功能微控制器板。它为各种项目提供了广泛的连接选项,具有 14 个数字输入/输出引脚,其中六个支持 PWM 输出,以及六个模拟输入。其核心组件包括一个 16MHz 的陶瓷谐振器、一个 USB 连接器、一个电
源插孔、一个 ICSP 头和一个复位按钮,提供了为板 子供电和编程所需的一切。UNO 可以通过 USB 连接到计算机,也可以通过 AC-to-DC 适配器或电池供电。作为第一个 USB Arduino 板,它成为 Arduino 平台的基准,"Uno" 符号化其作为系列首款产品的地
位。这个名称选择,意为意大利语中的 "一",是为了 纪念 Arduino Software(IDE)1.0 的推出。最初与 Arduino Software(IDE)版本1.0 同时推出,Uno 自此成为后续 Arduino 发布的基础模型,体现了该平台的演进。
微控制器概述
MCU卡片 / MCU

建筑
AVR
MCU 内存 (KB)
32
硅供应商
Microchip
引脚数
32
RAM (字节)
2048
你完善了我!
配件
Click Shield for Arduino UNO 具有两个专有的 mikroBUS™ 插座,使所有 Click board™ 设备能够轻松与 Arduino UNO 板进行接口连接。Arduino UNO 是一款基于 ATmega328P 的微控制器开发板,为用户提供了一种经济实惠且灵活的方式来测试新概念并构建基于 ATmega328P 微控制器的原型系统,结合了性能、功耗和功能的多种配置选择。Arduino UNO 具有 14 个数字输入/输出引脚(其中 6 个可用作 PWM 输出)、6 个模拟输入、16 MHz 陶瓷谐振器(CSTCE16M0V53-R0)、USB 接口、电源插座、ICSP 头和复位按钮。大多数 ATmega328P 微控制器的引脚都连接到开发板左右两侧的 IO 引脚,然后再连接到两个 mikroBUS™ 插座。这款 Click Shield 还配备了多个开关,可执行各种功能,例如选择 mikroBUS™ 插座上模拟信号的逻辑电平,以及选择 mikroBUS™ 插座本身的逻辑电压电平。此外,用户还可以通过现有的双向电平转换电压转换器使用任何 Click board™,无论 Click board™ 运行在 3.3V 还是 5V 逻辑电压电平。一旦将 Arduino UNO 板与 Click Shield for Arduino UNO 连接,用户即可访问数百种 Click board™,并兼容 3.3V 或 5V 逻辑电压电平的设备。
Li-Polymer电池是需要可靠且持久电源供应的设备的理想解决方案,同时强调了便携性。其与mikromedia板的兼容性确保了易于集成,无需额外修改。电池的电压输出为3.7V,符合许多电子设备的标准要求。此外,凭借2000mAh的容量,该电池可以储存大量能量,提供长时间的持续电力,减少了频繁充电或更换的需求。总体而言,Li-Polymer电池是一种可靠且自主的电源,非常适合需要稳定且持久能源解决方案的设备。

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

软件支持
库描述
Charger 28 Click 演示应用程序使用 NECTO Studio开发,确保与 mikroSDK 的开源库和工具兼容。该演示设计为即插即用,可与所有具有 mikroBUS™ 插座的 开发板、入门板和 mikromedia 板完全兼容,用于快速实现和测试。
示例描述
本示例演示如何使用 Charger 28 Click 板来监控充电系统的多项参数,例如输入电压(VBUS)、电池电压(VBAT)、系统电压(VSYS)、充电电流(IBAT)以及芯片温度(TDIE)。此外,还会读取并解析充电状态和故障寄存器,以在运行过程中提供详细的状态与错误反馈信息。
关键功能:
charger28_cfg_setup
- 配置对象初始化函数。charger28_init
- 初始化函数。charger28_default_cfg
- Click 板默认配置函数。charger28_get_vbus
- 读取并计算总线电压(单位:毫伏)。charger28_get_ibus
- 读取并计算输入电流(单位:毫安)。charger28_get_vbat
- 读取并计算电池电压(单位:毫伏)。
应用初始化
初始化驱动程序,执行 Charger 28 Click 的默认配置,包括禁用充电、重置寄存器、禁用 TS 引脚、配置 ADC,并重新启用充电功能。
应用任务
定期获取并记录充电参数,如输入电压、电池电压、系统电压、充电电流和温度。同时读取状态与故障寄存器,判断当前的充电状态,并记录相关信息以供调试或监测使用。
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* @file main.c
* @brief Charger 28 Click example
*
* # Description
* This example demonstrates the use of the Charger 28 Click board by monitoring various parameters
* of the charging system, such as input voltage (VBUS), battery voltage (VBAT), system voltage (VSYS),
* charging current (IBAT), and chip temperature (TDIE). Additionally, it reads and interprets the
* charger status and fault registers to provide detailed status and error feedback during operation.
*
* The demo application is composed of two sections:
*
* ## Application Init
* Initializes the driver and performs the default configuration of the Charger 28 Click by disabling
* charging, resetting registers, disabling the TS pin, configuring the ADC, and re-enabling charging.
*
* ## Application Task
* Periodically retrieves and logs charging parameters such as input voltage, battery voltage,
* system voltage, charging current, and temperature. The application also reads the status and
* fault registers to determine the current charging state and logs the information for debugging
* or monitoring purposes.
*
* @note
* The application is designed to continuously monitor the charging system, providing real-time
* feedback on its operation. The detailed charge status parsing includes states such as "Not Charging",
* "Trickle Charge", "Fast Charge", and "Charge Done", among others, to help track the charging process.
*
* @author Stefan Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "charger28.h"
static charger28_t charger28;
static log_t logger;
/**
* @brief Charger 28 parse charge status function.
* @details This function parses the given charge status value and logs the corresponding charge state.
* @param[in] status : Charge status byte.
* The status byte contains the charge status information as per the device Charger status 1 register.
* @return None.
* @note This function logs the charge status details using the logger object.
*/
static void charger28_parse_charge_status ( uint8_t status );
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
charger28_cfg_t charger28_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.
charger28_cfg_setup( &charger28_cfg );
CHARGER28_MAP_MIKROBUS( charger28_cfg, MIKROBUS_1 );
if ( I2C_MASTER_ERROR == charger28_init( &charger28, &charger28_cfg ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
if ( CHARGER28_ERROR == charger28_default_cfg ( &charger28 ) )
{
log_error( &logger, " Default configuration." );
for ( ; ; );
}
log_info( &logger, " Application Task " );
}
void application_task ( void )
{
float ibus = 0, vbat = 0, vsys = 0, adcin = 0, tdie = 0;
uint8_t status_0 = 0, status_1 = 0, fault = 0;
uint16_t vbus = 0, vpmid = 0;
int16_t ibat = 0;
if ( CHARGER28_OK == charger28_get_vbus ( &charger28, &vbus ) )
{
log_printf ( &logger, "\r\n VBUS: %u mV\r\n", vbus );
}
if ( CHARGER28_OK == charger28_get_ibus ( &charger28, &ibus ) )
{
log_printf ( &logger, " IBUS: %.1f mA\r\n", ibus );
}
if ( CHARGER28_OK == charger28_get_vbat ( &charger28, &vbat ) )
{
log_printf ( &logger, " VBAT: %.2f mV\r\n", vbat );
}
if ( CHARGER28_OK == charger28_get_ibat ( &charger28, &ibat ) )
{
log_printf ( &logger, " IBAT: %d mA\r\n", ibat );
}
if ( CHARGER28_OK == charger28_get_vsys ( &charger28, &vsys ) )
{
log_printf ( &logger, " VSYS: %.2f mV\r\n", vsys );
}
if ( CHARGER28_OK == charger28_get_vpmid ( &charger28, &vpmid ) )
{
log_printf ( &logger, " VPMID: %u mV\r\n", vpmid );
}
if ( CHARGER28_OK == charger28_get_adcin ( &charger28, &adcin ) )
{
log_printf ( &logger, " ADCIN: %.2f mV\r\n", adcin );
}
if ( CHARGER28_OK == charger28_get_tdie ( &charger28, &tdie ) )
{
log_printf ( &logger, " TDIE: %.1f degC\r\n", tdie );
}
if ( CHARGER28_OK == charger28_read_reg_byte ( &charger28, CHARGER28_REG_CHARGER_STATUS_0, &status_0 ) )
{
log_printf ( &logger, " Status 0: 0x%.2X\r\n", ( uint16_t ) status_0 );
}
if ( CHARGER28_OK == charger28_read_reg_byte ( &charger28, CHARGER28_REG_CHARGER_STATUS_1, &status_1 ) )
{
log_printf ( &logger, " Status 1: 0x%.2X\r\n", ( uint16_t ) status_1 );
charger28_parse_charge_status ( status_1 );
}
if ( CHARGER28_OK == charger28_read_reg_byte ( &charger28, CHARGER28_REG_FAULT_STATUS, &fault ) )
{
log_printf ( &logger, " Fault: 0x%.2X\r\n", ( uint16_t ) fault );
}
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;
}
static void charger28_parse_charge_status ( uint8_t status )
{
log_printf ( &logger, " Charge Status: " );
switch ( CHARGER28_CHARGER_STATUS_1_CHG_STAT_MASK & status )
{
case CHARGER28_CHARGER_STATUS_1_CHG_STAT_NOT_CHARGING:
{
log_printf ( &logger, "Not Charging\r\n" );
break;
}
case CHARGER28_CHARGER_STATUS_1_CHG_STAT_TRICKLE_CHARGE:
{
log_printf ( &logger, "Trickle Charge (VBAT < VBAT_SHORTZ)\r\n" );
break;
}
case CHARGER28_CHARGER_STATUS_1_CHG_STAT_PRE_CHARGE:
{
log_printf ( &logger, "Pre-charge (VBAT_SHORTZ < VBAT < VBAT_LOWV)\r\n" );
break;
}
case CHARGER28_CHARGER_STATUS_1_CHG_STAT_FAST_CHARGE:
{
log_printf ( &logger, "Fast Charge (CC mode)\r\n" );
break;
}
case CHARGER28_CHARGER_STATUS_1_CHG_STAT_TAPER_CHARGE:
{
log_printf ( &logger, "Taper Charge (CV mode)\r\n" );
break;
}
case CHARGER28_CHARGER_STATUS_1_CHG_STAT_TO_TIMER_ACT_CH:
{
log_printf ( &logger, "Top-off Timer Active Charging\r\n" );
break;
}
case CHARGER28_CHARGER_STATUS_1_CHG_STAT_CHARGE_DONE:
{
log_printf ( &logger, "Charge Termination Done\r\n" );
break;
}
default:
{
log_printf ( &logger, "Unknown\r\n" );
break;
}
}
}
// ------------------------------------------------------------------------ END
额外支持
资源
类别:电池充电器