NXP i.MX8系列平台开发讲解 - 3.14 Linux 之Power Supply子系统(二)

专栏文章目录传送门返回专栏目录

Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】


目录

1. 前言

2. 芯片简介

2. 系统原理设计

2. 设备树相关


本文实操是基于Android11 系统下i.MX8MQ环境下:

  • cpu: i.mx8mq

  • Kernel version:kernel 5.4

  • 开发板:imx8mq-librem5-devkit

1. 前言

根据前一章节讲解相关Power Supply子系统,本章节将以一个实际例子进行说明,重点说明充电芯片与电量计这两个部分。

介绍之前先介绍一些相关的概念知识;

充电模式

充电模式 (Charging Mode)描述 (Description)适用情况 (Applicability)
恒流充电 (Constant Current)充电电流保持恒定,电池以恒定速率充电适用于电池的初期充电,能够更快地达到一定电荷状态
恒压充电 (Constant Voltage)充电电流逐渐减少,电压保持恒定以避免过充适用于电池的后期充电,避免过充和过热
脉冲充电 (Pulse Charging)在恒定电流和恒定电压充电模式之间切换,提高充电效率适用于快速充电,可以提高充电速度和效率
阶段充电 (Step Charging)初始充电电流较低,逐渐增加,减少充电过程中的热量产生适用于大容量电池,减少充电过程中的发热和压力
温度补偿充电 (Temperature-Compensated Charging)根据电池温度调整充电策略,以保持最佳充电效率和寿命适用于各种环境温度下,优化充电性能和电池寿命
快速充电 (Fast Charging)增加充电电流和电压以实现更快的充电速度适用于快速充电需求,可以在短时间内充满电池
自适应充电 (Adaptive Charging)根据电池状态和健康情况自动调整充电策略,以优化充电性能适用于不同电池类型和容量,实现最佳充电性能和寿命

为什么会有这么多种充电模式?

答:充电模式是充电管理芯片用来控制和管理电池充电过程的不同工作状态。不同的充电模式可以根据电池的状态和需求,采取不同的充电策略,以达到更高的充电效率、更长的电池寿命或其他特定的目标。

快充协议

快充协议,主要涉及到不同手机制造商采用的不同技术和协议。以下是一些主要的快充协议以及它们的一些特点,以便进行对比:

快充协议 (Fast Charging Protocol)版本 (Version)最大功率 (Maximum Power)描述 (Description)
Qualcomm Quick ChargeQuick Charge 1.0, 2.0, 3.0, 4, 4+, 518W (QC 1.0), 36W (QC 2.0), 18-20W (QC 3.0), 100W (QC 4+), 100W+ (QC 5)通过调整电压和电流以实现快充,版本逐渐提升功率和效率
MediaTek Pump ExpressPE1.0, PE2.0, PE3.0, PE4.010W (PE1.0), 20W (PE2.0), 30W (PE3.0), 45W (PE4.0)根据电池状态和温度动态调整充电速度
USB Power Delivery (USB PD)USB PD 2.0, USB PD 3.0, USB PD 3.1, USB PD 3.1 PPS最高100W (USB PD 2.0), 最高100W (USB PD 3.0), 最高240W (USB PD 3.1)通用标准,支持更高功率的充电
Oppo VOOCVOOC 1.0, VOOC 2.0, VOOC 3.0, VOOC 4.05V/4A (VOOC 1.0), 5V/5A (VOOC 2.0), 5V/6A (VOOC 3.0), 10V/6.5A (VOOC 4.0)通过增加电流实现快充
Huawei SuperChargeSCP 1.0, SCP 2.0, SCP 3.022.5W (SCP 1.0), 40W (SCP 2.0), 66W (SCP 3.0)高电压高电流充电技术
Samsung Adaptive Fast Charging无版本号15W (最大)根据设备状态调整充电策略

对于快充能够到达多少W,支持什么协议,对于选择充电芯片就比较重要了。

为什么会有那么多种充电协议?

不同厂家存在竞争,营销策略,技术保护等等

以下内容将重点介绍充电芯片,电量计两个方面:

开发板:imx8mq-librem5-devkit

充电芯片:bq25896

电量计芯片:MAX17055

2. 芯片简介

bq25896 是德州仪器(Texas Instruments)公司生产的一款高度集成的锂电池充电管理芯片。它是一款用于移动设备、嵌入式系统以及一些便携式应用的充电管理解决方案。bq25896 在一颗芯片内部集成了多个关键的功能模块,以实现高效的充电控制和管理,同时提供了一些配置选项,使其适应不同的应用场景。

以下是 bq25896 的一些主要特性和功能:

高度集成的设计:bq25896 集成了充电管理所需的多个功能模块,包括电流和电压调节、充电模式控制、温度监测、电池状态检测等。这种高度集成的设计减少了外部元件的数量,降低了电路板的复杂性和成本。

多种充电模式:bq25896 支持多种充电模式,如恒流充电、恒压充电、脉冲充电等。这使得充电过程可以根据不同的电池类型和状态进行优化,以提高充电效率和电池寿命。

可编程电流和电压限制:bq25896 允许用户通过配置来设定最大充电电流和电压,以适应不同类型和容量的电池。

温度监测和保护:内置的温度监测电路可以实时检测电池温度,当温度超过设定的阈值时,bq25896 可以触发保护措施,以确保充电过程的安全性。

电池状态检测:bq25896 可以监测电池的电压、电流和温度等状态信息,实时反馈电池的健康状态,有助于提供更准确的充电控制。、

USB 快充支持:bq25896 支持一些 USB 快充协议,如 USB Power Delivery(USB PD)和 Qualcomm Quick Charge 等,可以实现更快的充电速度。

硬件保护功能:bq25896 集成了多个硬件保护功能,如过温保护、过压保护、过流保护等,以确保充电过程的安全性和稳定性。

低功耗模式:bq25896 提供了低功耗模式,以降低待机状态下的功耗,延长系统的电池续航时间。

简化原理图

MAX17055

Maxim MAX17055单节电池电量计是一款工作电流低至7μA的电量计,实施了Maxim ModelGauge™ m5 EZ算法。ModelGauge m5 EZ通过消除电池特征化要求让电量计的应用更加轻松,并且简化了主机软件互动。ModelGauge m5 EZ 稳健算法可为大多数锂电池和应用提供针对电池多样性的容限。ModelGauge m5 EZ算法将库仑计数器的短期精度和线性度与基于电压的电量计的长期稳定性以及温度补偿相结合。

MAX17055可自动补偿电池老化、温度和放电速率。该器件还可提供精确的充电状态(SOC的百分比)以及以毫安时 (mAh) 计的剩余容量。随着电池接近电量耗尽临界区,ModelGauge m5算法会激活特殊补偿以消除任何错误。它还提供了三种报告电池寿命的方法:容量降低、电池电阻增加以及码表。

2. 系统原理设计

系统这里主要介绍三个部分,一个是充电芯片,电量计,还有一个是TYPE-C芯片

TPS65982 是 USB Type-C 和供电 (PD) 控制器;BQ25895作为充电芯片,MAX17055作为电量计芯片,它们的配置都通过I2C进行通信配置,有Soc进行对寄存器的设置。

电路图

2. 设备树相关

首先查看设备数相关设置:

vim ./arch/arm64/boot/dts/freescale/imx8mq-librem5-devkit.dts

        charger@6b { /* bq25896 */
                compatible = "ti,bq25890";
                reg = <0x6b>;
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_charger>;
                interrupt-parent = <&gpio3>;
                interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
                ti,battery-regulation-voltage = <4192000>; /* 4.192V */ //设置的电池充电过程中的调整电压,单位为微伏
                ti,charge-current = <1600000>; /* 1.6A */ //充电电流设置
                ti,termination-current = <66000>;  /* 66mA */ //终止电流设置
                ti,precharge-current = <130000>; /* 130mA */ //预重电流
                ti,minimum-sys-voltage = <3000000>; /* 3V */ //最小系统电压
                ti,boost-voltage = <5000000>; /* 5V */ // 提升电压
                ti,boost-max-current = <50000>; /* 50mA */ //提升最大电流
        };

从设备树查看,很多都是设置相关的电流电压值,这些值的匹配都需要根据实际情况进行填入;

从代码从probe查看

bq25890_probe
    devm_regmap_init_i2c //创建一个适用于I2C总线的寄存器映射,用于与充电控制芯片的寄存器进行通信
    bq25890_get_chip_version //获取充电控制芯片的版本信息,用于后续的操作和识别
    bq25890_fw_probe //读取设备属性,可能包括固件版本
    bq25890_hw_init // 初始化芯片,设置寄存器相关
    devm_request_threaded_irq //中断配置
    bq25890_power_supply_init // power supply 设备的注册,将传输bq25890的信息

在bq25890设置了一个中断检测是否充电,`power_supply_desc 结构体的填充:

static const struct power_supply_desc bq25890_power_supply_desc = {
        .name = "bq25890-charger",
        .type = POWER_SUPPLY_TYPE_USB,
        .properties = bq25890_power_supply_props,
        .num_properties = ARRAY_SIZE(bq25890_power_supply_props),
        .get_property = bq25890_power_supply_get_property,
};

关于bq25890的重要信息都要提供给power supply

max17055设备树:

        bat: fuel-gauge@36 {
                compatible = "maxim,max17055";
                reg = <0x36>;
                interrupt-parent = <&gpio3>;
                interrupts = <20 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_gauge>;
                maxim,over-heat-temp = <700>; //过热温度的阈值
                maxim,over-volt = <4500>; //过压的阈值
                maxim,rsns-microohm = <5000>; //电池内阻的值
        };

对于这个max 17055设备树,主要设置了一个中断引脚,设置一些最大温度,最大电压,还有电池内阻值,这些一般都需要根据实际电池进行设置。

根据probe查看:

max17042_probe
    devm_regmap_init_i2c //用于与I2C总线上的寄存器进行通信
    devm_power_supply_register //将会注册power supply
    devm_request_threaded_irq

power_supply_desc结构体


static const struct power_supply_desc max17042_psy_desc = {
        .name           = "max170xx_battery",
        .type           = POWER_SUPPLY_TYPE_BATTERY,
        .get_property   = max17042_get_property,
        .set_property   = max17042_set_property,
        .property_is_writeable  = max17042_property_is_writeable,
        .external_power_changed = max17042_external_power_changed,
        .properties     = max17042_battery_props,
        .num_properties = ARRAY_SIZE(max17042_battery_props),
};

设备启动成功后,就可以通过/sys/class/power_supply看到类似的设备:

通过sysfs可以看到power supply 的寄存器相关信息

能查看这些基本上就可以成功了。

后续有机会介绍bq2570a等更复杂的充电芯片和电量计。

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NXP i.MX8开发板是一种基于ARM架构的嵌入式系统开发板,其主要特点是高性能、低功耗和灵活性。该开发板使用了NXP i.MX8处理器,支持多种操作系统,包括Android、Linux和QNX等。其中,Android9.0是一种最新的版本,具有更好的性能和功能。 在使用NXP i.MX8开发开发Android9.0应用程序时,需要根据应用程序的需求进行相应的配置和编程。以下是开发Android9.0应用程序的一些步骤: 1. 准备开发环境:安装Android Studio、NDK和SDK,并配置好环境变量。同时,还需要安装相应的驱动程序和工具链。 2. 下载源代码:从官方网站下载Android9.0的源代码,并解压到本地目录中。 3. 编译源代码:使用命令行工具进入源代码目录,并执行make命令来编译源代码。编译过程中会生成一些中间文件和可执行文件。 4. 刷写系统镜像:使用烧录工具将编译生成的系统镜像刷写到NXP i.MX8开发板的闪存中。该过程需要注意进行备份和恢复,确保数据的完整性。 5. 调试和测试:使用Android Studio和ADB工具进行调试和测试,查看应用程序的运行情况,同时还需要进行性能测试和稳定性测试。 总之,NXP i.MX8开发板是一种高性能的嵌入式系统开发平台,可以用于开发各种嵌入式应用程序,包括Android9.0应用程序。使用该开发板进行Android开发,需要进行相应的配置和编程,并进行测试和调试,以确保应用程序的稳定性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值