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_probedevm_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_probedevm_regmap_init_i2c //用于與I2C總線上的寄存器進行通信devm_power_supply_register //將會注冊power supplydevm_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等更復雜的充電芯片和電量計。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/22737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/22737.shtml
英文地址,請注明出處:http://en.pswp.cn/web/22737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基礎復習---二進制補碼

1.二進制補碼表示法基于以下原理&#xff1a; 正數的補碼&#xff1a;正數的補碼與其原碼&#xff08;即直接表示的二進制形式&#xff09;相同。 負數的補碼&#xff1a;負數的補碼是其絕對值的二進制表示&#xff08;即正數的補碼&#xff09;&#xff0c;然后取反&#xff…

代碼隨想錄算法訓練營第十三天| 102. 二叉樹的層序遍歷、226.翻轉二叉樹、101. 對稱二叉樹

102. 二叉樹的層序遍歷 題目鏈接&#xff1a;102. 二叉樹的層序遍歷 文檔講解&#xff1a;代碼隨想錄 狀態&#xff1a;dfs沒寫出來&#xff0c;bfs不知道如何分層 import java.util.*;public class BinaryTreeLevelOrderTraversal {// 用于存儲每一層的節點值List<List<…

rocketmq No route info of this topic 問題排查

Broker配置項 autoCreateTopicEnable true 如果是單節點(master),注釋掉這里的配置 #有三個值&#xff1a;SYNC_MASTER&#xff0c;ASYNC_MASTER&#xff0c;SLAVE&#xff1b;同步和異步表示Master和Slave之間同步數據的機制&#xff1b; #brokerRole SYNC_MASTER Pytho…

【2024最新華為OD-C/D卷試題匯總】[支持在線評測] 土地分配 (100分) - 三語言AC題解(Python/Java/Cpp)

?? 大家好這里是清隆學長 ,一枚熱愛算法的程序員 ? 本系列打算持續跟新華為OD-C/D卷的三語言AC題解 ?? ACM銀牌??| 多次AK大廠筆試 | 編程一對一輔導 ?? 感謝大家的訂閱? 和 喜歡?? ??在線評測鏈接 土地分配(100分) ?? 評測功能需要訂閱專欄后私信聯系清隆解…

阿里云盤手機批量修改文件名

背景 目前刷劇都會使用阿里云盤配合infuse,但是從網上找到的資源經常命名不符合Infuse的刮削規范,導致無法正確建立元數據,雖然PC端可以使用油猴腳本批量修改電視劇名稱, 但是經常出現身邊并沒有電腦(或者電腦上沒有油猴腳本)的情況,這時候用手機就很難批量修改文件名,雖然iph…

Etcd Raft架構設計和源碼剖析2:數據流

Etcd Raft架構設計和源碼剖析2&#xff1a;數據流 | Go語言充電站 前言 之前看到一幅描述etcd raft的流程圖&#xff0c;感覺非常直觀&#xff0c;但和自己看源碼的又有些不同&#xff0c;所以自己模仿著畫了一下&#xff0c;再介紹一下。 下圖從左到右依次分為4個部分&…

游戲心理學Day05

第三章 游戲即學習 《超級馬里奧》是游戲史上的經典之作&#xff0c;我們都記得第一次踩到敵人&#xff0c;第一次頂碎磚塊時的快樂&#xff0c;也記得為了通過某個關卡而付出的努力和艱辛。當我們掌握了規律和技巧之后&#xff0c;這些難題就不再是難題&#xff0c;因為我們習…

Windows 宿主機訪問 VirtualBox 虛擬機中創建的 docker 容器中的 mysql8.0 的數據

一、場景需求 在開發環境中&#xff0c;一般使用 windows 系統進行開發&#xff0c;但需要在 linux 系統中創建運行 mysql8.0 的 docker 容器中進行測試&#xff08;win10特定版本或win11才能安裝 docker&#xff09;&#xff0c;為了方便還需要在 windows 系統中通過 SQLyog …

植物大戰僵尸雜交版2.0.88最新版+防閃退工具V2+修改工具+高清工具

植物大戰僵尸雜交版&#xff0c;不僅繼承原作的經典玩法&#xff0c;而且引入了全新的植物融合玩法&#xff0c;將各式各樣的植物進行巧妙的雜交&#xff0c;孕育出前所未有、功能各異的全新植物。 創新的雜交合成系統 游戲引入了創新的雜交合成系統&#xff0c;讓玩家可以將不…

Unity DOTS技術(五)Archetype,Chunk,NativeArray

文章目錄 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype創建1.創建實體2.創建并添加組件3.批量創建 三.多線程數組NativeArray 本次介紹的內容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一個空間,ECS系統會將相同類型的實體放在Chunk中.當一個Chunk…

JS包裝類:循環中為什么建議用變量存儲str.length進行循環判斷?

前言 在Javascript通常我們在遍歷一個字符串的時候通常使用的方式是 var str "abcdefg"; for(let i0;i<str.length;i){}但在最近的學習中&#xff0c;有人建議我最好應該是下面這樣執行。 var str "abcdefg"; for(let i0,len str.length;i<len;i)…

DP讀書:《ModelArts人工智能應用開發指南》(一)人工智能技術、應用平臺

怎么用ModelArts人工智能應用 訓練底座訓練案例 盤古礦山模型Main config.py 訓練底座 訓練案例 盤古礦山模型 Main 下面是快速助手 https://support.huaweicloud.com/qs-modelarts/modelarts_06_0006.html 準備開發環境 在ModelArts控制臺的“ 開發環境 > Notebook”頁面…

【C#學習筆記】屬性和字段

文章目錄 前言屬性和字段的區別字段訪問修飾符和關鍵字定義變量類型的定義變量命名變量的賦值 屬性 不同的使用情況 前言 最近在工作的過程中常常會覺得自己在程序設計方面的能力還是有欠缺。例如一直對于變量的聲明感到不足&#xff0c;在工作中為了圖方便總是直接public定義…

聲音突破:so 索

小孩兒看完武俠劇&#xff0c;就決定從二樓往地面上跳&#xff0c;年輕的老媽看到了&#xff0c;就在那里罵&#xff0c;喝斥不準逞能&#xff0c;不許亂來&#xff0c;不許跳。但小孩子不聽話&#xff0c;心里全是影視劇的畫面&#xff0c;那叫一個俠之能也&#xff0c;于是飛…

llvm 常用命令備忘

執行 IR 上的指令合并優化 pass $ opt –S –instcombine testfile.ll –o output1.ll 執行無效參數優化 pass $ opt –S –deadargelim testfile.ll –o output2.ll C 語言生成 IR 文件 $ clang -emit-llvm -S multiply.c -o multiply.ll C 語言生成 IR 文件 $ clang -cc1 -…

面向長文本處理的鍵值緩存壓縮技術:智能壓縮,無損性能,免微調

隨著輸入長度的增加&#xff0c;大型語言模型&#xff08;LLMs&#xff09;中的鍵值&#xff08;KV&#xff09;緩存需要存儲更多的上下文信息以維持性能&#xff0c;這導致內存消耗和計算時間急劇上升。KV緩存的增長對內存和時間效率的挑戰主要表現在兩個方面&#xff1a;一是…

使用JavaScript實現網頁通知功能

如何使用js來實現網頁通知功能。即使在用戶瀏覽其他頁面時&#xff0c;也能向他們推送通知信息。 廢話不多說直接上代碼 function showAutoNotification() {if ("Notification" in window) {Notification.requestPermission().then(function(permission) {if (permis…

元宇宙數字藏品交易所,未來發展的大趨勢

隨著科技的飛速進步&#xff0c;元宇宙以其獨特的魅力為數字世界繪制了一幅前所未有的宏偉藍圖。在這一宏大的背景下&#xff0c;數字藏品交易所作為連接虛擬與現實的橋梁&#xff0c;正以其卓越的優勢&#xff0c;引領著數字藏品市場邁向新的高度。 首先&#xff0c;元宇宙為…

Vue 的服務端渲染(SSR)有哪些鉤子可以用

在 Vue 的服務端渲染&#xff08;SSR&#xff09;過程中&#xff0c;并不會執行完整的生命周期鉤子&#xff0c;只有一部分鉤子會在服務器端執行。以下是 Vue SSR 中支持的生命周期鉤子&#xff1a; beforeCreate&#xff1a;在實例初始化之后&#xff0c;數據觀測 (data obser…