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等更复杂的充电芯片和电量计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/694372.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

博睿数据应邀出席双态IT用户大会,分享《构建云原生时代的一体化智能可观测性》

5月31日-6月2日&#xff0c;第十二届双态IT用户大会于成都成功举行&#xff0c;此次大会由DCMG和双态IT论坛联合主办&#xff0c;聚焦“信创时代的组织级云原生能力建设”和“组织级云原生运维能力建设”两大会议主题&#xff0c;旨在推动双态IT落地与创新&#xff0c;为企业数…

LabVIEW在高校中的应用

LabVIEW 作为一款功能强大的图形化编程工具&#xff0c;在高校中有广泛的应用。它不仅用于教学实验&#xff0c;还广泛应用于科研项目和工程训练。本文将从教学、科研、实验室管理和学生技能培养等多个角度&#xff0c;详细分析LabVIEW在高校中的应用。 教学应用 课程设计 自动…

快来速领限量免费亚马逊云科技助理级架构师(SAA)和云从业者50%半价考试券

前几天在上海5/29的亚马逊云科技Summit峰会里&#xff0c;小李哥在现场分享了AWS 13张认证大满贯的心得&#xff08;图1&#xff09;&#xff0c;并且现场招募了自己的云师兄必过班(图2)。 本次必过班也为成员发放AWS SAA(助理级架构师)和云从业者(Cloud Practitioner)50%考试券…

华为防火墙配置 SSL VPN

前言 哈喽&#xff0c;我是ICT大龙。本期给大家更新一次使用华为防火墙实现SSL VPN的技术文章。 本次实验只需要用到两个软件&#xff0c;分别是ENSP和VMware&#xff0c;本次实验中的所有文件都可以在文章的末尾获取。话不多说&#xff0c;教程开始。 什么是VPN 百度百科解…

未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。.net 读取excel的时候报错(实测有效)

1. 下载AccessDatabaseEngine.exe 下载链接 添加链接描述 2. office excel是64为的需要安装【AccessDatabaseEngine.exe】、32位的【AccessDatabaseEngine_X64.exe】 3. 我的是64为&#xff0c;跳过32位安装检测 1. 找到下载的安装包 2.输入安装包文件全称并在后面加上/pas…

C++之RTTI

1、RTTI&#xff08;runtime type information&#xff09;运行时类型信息 static_cast&#xff1a;用在编译器认可的转型 reinterpret_cast&#xff1a;用在编译器不认可的转型&#xff08;不做任何的对齐操作&#xff09; const_cast&#xff1a;去除常量属性 dynamic_ca…

Java 泛型类,泛型方法,泛型接口和通配符(用来限定类和方法的使用范围)

测试类 package Genericity;import java.util.ArrayList;public class test {public static void main(String[] args) {// 使用泛型方法添加元素ArrayList<String> list new ArrayList<>();MyToolClass.ListAdd(list,"fdsf","dsfa");System…

Triton学习笔记

b站链接&#xff1a;合集Triton 从入门到精通 文章目录 算法名词解释&#xff1a;scheduler 任务调度器model instance、inference和requestbatching 一、Triton Inference Server原理1. Overview of Trition2. Design Basics of Trition3. Auxiliary Features of Trition4. A…

C++笔试强训day42

目录 1.最大差值 2.兑换零钱 3.小红的子串 1.最大差值 链接https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId182&tqId34396&rp1&ru/exam/company&qru/exam/company&sourceUrl%2Fexam%2Fcompany&difficulty2&judgeSta…

6.9总结

Vue生命周期 生命周期&#xff1a;指一个对象从创建到销毁的整个过程生命周期的八个阶段&#xff1a;每触发一个生命周期事件&#xff0c;会自动执行一个生命周期的方法&#xff08;钩子&#xff09; mounted&#xff1a;挂载完成&#xff0c;Vue初始化成功&#xff0c;HTML渲…

JAVA小案例-递归:计算n!

JAVA小案例-递归&#xff1a;计算n! 首先抛出概念&#xff0c;什么是递归&#xff1f; 说白了就是自己调用自己。 递归的结构&#xff1a; &#xff08;1&#xff09;递归头&#xff1a;就是什么时候不调用自身的方法&#xff0c;也就是递归结束的条件 &#xff08;2&#xff…

轴承接触角和受力分析

提示&#xff1a;轴承接触角和受力分析 文章目录 1&#xff0c;接触角2&#xff0c;轴承受力分析 1&#xff0c;接触角 所谓公称接触角就是指轴承在正常状态下&#xff0c; 滚动体和内圈及外圈沟道接触点的法线与轴心线的垂直平面之间的夹角。 按滚动轴承工作时所能承受载荷的…

AI大模型学习(非常详细)零基础入门到精通,收藏这一篇就够了

前言 随着人工智能技术的快速发展&#xff0c;AI大模型学习正成为一项备受关注的研究领域。为了提高模型的准确性和效率&#xff0c;研究者们需要具备深厚的数学基础和编程能力&#xff0c;并对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xff0c;AI大模…

Nginx部署多web进程

1、nginx介绍 Nginx是一个高性能的、开源的、跨平台的Web服务器和反向代理服务器。它是由俄罗斯的程序员Igor Sysoev开发的&#xff0c;并于2004年首次公开发布。 Nginx的特点包括&#xff1a; 高性能&#xff1a;Nginx使用事件驱动的架构&#xff0c;能够处理大量的并发连接…

GAT1399协议分析(9)--图像上传

一、官方定义 二、wirechark实例 有前面查询的基础,这个接口相对简单很多。 请求: 文本化: POST /VIID/Images HTTP/1.1 Host: 10.0.201.56:31400 User-Agent: python-requests/2.32.3 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive content-type:…

基于睡眠声音评估睡眠质量

随着健康意识的增强&#xff0c;人们越来越关注睡眠质量。确保获得充足的高质量睡眠对于维持身体健康和心理平衡至关重要。专业的睡眠状态测量主要通过多导睡眠图&#xff08;PSG&#xff09;进行。然而&#xff0c;PSG会给受试者带来显著的身体负担&#xff0c;并且在没有专业…

Edge浏览器视频画中画可拉动进度条插件Separate Window

平时看一些视频的时候&#xff0c;一般需要编辑一些其他的东西&#xff0c;于是开启画中画&#xff0c;但是画中画没有进度条&#xff0c;需要大幅度的倒退前进得回到原视频&#xff0c;很麻烦。这里推荐插件Separate Window&#xff0c;可实现画中画进度条拉动和播放sudu的调节…

DS:堆的结构与实现

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、堆的概念与结构 1.1 堆的概念 堆&#xff08;Heap&#xff09;是完全二叉树中的一种&#xff0c;分为大根堆和小根堆。 特点&#…

回归模型的算法性能评价

一、概述 在一般形式的回归问题中&#xff0c;会得到系列的预测值&#xff0c;它们与真实值&#xff08;ground truth&#xff09;的比较表征了模型的预测能力&#xff0c;为有效量化这种能力&#xff0c;常见的性能评价指标有平均绝对误差&#xff08;MAE&#xff09;、均方误…

【RAG入门教程02】Langchian的Embedding介绍与使用

Embedding介绍 词向量是 NLP 中的一种表示形式&#xff0c;其中词汇表中的单词或短语被映射到实数向量。它们用于捕获高维空间中单词之间的语义和句法相似性。 在词嵌入的背景下&#xff0c;我们可以将单词表示为高维空间中的向量&#xff0c;其中每个维度对应一个特定的特征…