MTK65XX平台充电调试总结

MTK65XX平台充电调试总结

大家好,又见面了,我是全栈君。

MTK平台充电调试总结

 

 

摘要:调试电池的充放电管理,首先须要深入了解锂电池的电池原理和特点。充放电特性以及主要的电池安全问题。然后须要对MTK的电池管理驱动程序有深入的了解。理解电池充放电算法的基本原理。

在此基础上,对充放电导致的问题进行调试优化。

 

 

一、 锂电池工作原理和特性

1.工作原理:

MTK65XX平台充电调试总结

锂离子电池以碳素材料为负极,以含锂的化合物作正极。它主要依靠锂离子在正极和负极之间移动来工作。在充放电过程中。Li+ 在两个电极之间往返嵌入和脱嵌:充电时。Li+从正极脱嵌,经过电解质嵌入负极,负极处于富锂状态;放电时则相反。

一般锂电池充电电流设定在0.2C1C之间,电流越大。充电越快,同一时候电池发热也越大。并且,过大的电流充电,容量不够满。由于电池内部的电化学反应须要时间。

就跟倒啤酒一样。倒太快的话会产生泡沫。反而不满。

2.主要性能:

锂离子电池的额定电压为3.7V(少数的是3.8V)。充满电时的终止充电电压与电池阳极材料有关。眼下手机上主流的參数为4.35V

充电时要求终止充电电压的精度在±1%之内。

锂离子电池的终止放电电压为2.42.7V(电池厂家给出工作电压范围或终止放电电压的參数略有不同)。高于终止充电电压及低于终止放电时会对电池有损害。

其使用有一定要求:充电温度:0℃~45℃。保存温度:-20℃~+60℃。锂离子电池不适合大电流充放电。一般充电电流不大于1C,放电电流不大于2CC是电池的容量。如C=950mAh1C的充电率即充电电流为950mA)。

充电、放电在20℃左右效果较好,在负温下不能充电,而且放电效果差(在-20℃放电效果最差,不仅放电电压低,放电时间比20℃放电时的一半还少)。

 

3.充放电特性

 

A.锂电池的充电特性

1.在充电前半段,电压是逐渐上升的

2.在电压达到4.2V后。内阻变化,电压维持不变;    

3.整个过程中,电量不断添加

    4.在接近充满时。充电电流会达到非常小的值。 

    经过多年的研究,已经找到了较好的充电控制方法:   

1.涓流充电达到放电终止电压2. 7V 

2.使用恒流进行充电,使电压基本达到4.2V

安全电流为小于0.8C

3.恒流阶段基本能达到电量的80%

4.转为恒压充电,电流逐渐减小;

5.在电流达到较小的值(0.05C)时,电池达到充满状态。

 

这样的CC-CV的充电方式能非常好的到达电池的充满状态,而且不损害电池,已经成为锂离子电池的主要充电方式。 

可是在电池电压已经非常低的情况下,电池内部的锂离子活性减弱,假设此时用比較大的电流充电。也有可能对电池有损害。如同人在剧烈运动前要进行必要的热身活动一样。锂离子的活性也要逐步激活。能够在电池低压段採用涓流方式,有效激活电池电压到2.7V以上。然后採用CC-CV的充电方式,有效的保护电池。

 

B.锂电池的放电特性; 

实验发现,锂离子电池在放电终止电压2.7V的条件下。放电电流越大电池的极化越大。电池的放电容量越小,但电池的静态电压与电池的放电深度的关系是基本保持不变的状态。锂离子电池以大电流放电(大于2C)的情况下。电池的放电曲线出现了电压先减少后上升的现象     通常情况下。确定锂离子电池放电电流大小时,不能用电流的绝对值来衡量。而用额定容量C与放电时间的比来表示。称作放电速率或放电倍率。

对于1700mAh的电池,假设以0.1C的电流放电,则放电电流为170mA

因为锂离子电池的内阻。一般在30-100 mΩ之间,大电流放电或充电都会导致电池升温。因此在监測过程中,锂离子电池一般不同意快速率放电。一般放电速率应小于0.5C,最大连续放电速率不能超过1.5C,电压低于2.7V时应终止放电。 

 MTK65XX平台充电调试总结

C.过充过放:

锂离子电池的额定电压,由于材料的变化。一般为3.7V。磷酸铁锂(下面称磷铁)正极的则为3.2V

充满电时的终止充电电压国际标准是4.2V。磷铁3.6V。锂离子电池的终止放电电压为2.75V3.0V(国内电池厂给出工作电压范围或给出终止放电电压,各參数略有不同,一般为3.02.75V,磷铁为2.5V

)。低于2.5V(磷铁2.0V)继续放电称为过放(国际标准为最低3.2v。磷铁2.8v),低电压的过放或自放电反应会导致锂离子活性物质分解破坏,并不一定能够还原。

而锂离子电池不论什么形式的过充都会导致电池性能受到严重破坏。甚至爆炸。

锂离子电池在充电过程必需避免对电池产生过充。

 

二、 电池温度检測与充放电算法原理

1.电池温度检測

 

MTK65XX平台充电调试总结

温度检測等效电路

 

l 将Vbat_on转化为NTC的电阻值;

l 利用线性插值法通过表格将NTC的电阻值转化为温度值。

 

 

2.充放电算法:

 

 MTK65XX平台充电调试总结

 

 

3.驱动工作流程:

A.电池管理框架

 MTK65XX平台充电调试总结

B.驱动工作流程

 

 MTK65XX平台充电调试总结

三、 MTK充放电调试要点

1. 配置电池温度检測相关參数

相关宏定义在cust_battery_meter_table.h文件里:

A.眼下热敏电阻有两种规格:10K47K。由电池project师提供參数。

#define BAT_NTC_10 1

#define BAT_NTC_47 0

 

B.在配置热敏电阻參数的同一时候,也要依据原理图,配置温度检測上拉电阻以及參考电压。

#define RBAT_PULL_UP_R             16000 //相应原理图中的R311

#define RBAT_PULL_UP_VOLT          2800   //相应原理图中的VBATREF

 

2. 更新电池充放电參数

电池充放电參数由电池project师向电池厂家索取。

依据提高的測试数据。我们能够获得各温度下最大放电容量。各温度下的内阻—电压表、放电深度—电压表。

A. 更新各温度下相应的最大放电容量(头文件:cust_battery_meter.h)

 MTK65XX平台充电调试总结

#define Q_MAX_POS_50 1750  //Cmax

#define Q_MAX_POS_25 1763

#define Q_MAX_POS_0 1756

#define Q_MAX_NEG_10 1726

 

#define Q_MAX_POS_50_H_CURRENT 1737 //Cmax_400mA

#define Q_MAX_POS_25_H_CURRENT 1717

#define Q_MAX_POS_0_H_CURRENT 1214

#define Q_MAX_NEG_10_H_CURRENT 966

 

B. 更新“内阻电压转换表”和“放电深度百分比电压”转换表

(头文件:cust_battery_meter_table.h)

上图是电池充放电測试參数中的一个截图

OCV:电池空载电压CV:电池负载电压

mAh:放电容量DOD:放电深度百分比

R:电池内阻:

 

从表格中提取 R—-OCV 相应温度的r_profile_t2数组

从表格中提取DOD—OCV到相应温度的battery_profile_t2数组中

注意数组的元素个数都要一致。

 

3. 配置充电电流:(cust_charging.h)

#define USB_CHARGER_CURRENT_SUSPEND 0 // def CONFIG_USB_IF

#define USB_CHARGER_CURRENT_UNCONFIGURED  CHARGE_CURRENT_70_00_MA // 70mA

#define USB_CHARGER_CURRENT_CONFIGURED   CHARGE_CURRENT_550_00_MA // 500mA

 

#define USB_CHARGER_CURRENT CHARGE_CURRENT_550_00_MA //500mA

#define AC_CHARGER_CURRENT CHARGE_CURRENT_800_00_MA

#define NON_STD_AC_CHARGER_CURRENT CHARGE_CURRENT_1050_00_MA

#define CHARGING_HOST_CHARGER_CURRENT       CHARGE_CURRENT_1050_00_MA

#define APPLE_0_5A_CHARGER_CURRENT          CHARGE_CURRENT_550_00_MA

#define APPLE_1_0A_CHARGER_CURRENT          CHARGE_CURRENT_650_00_MA

#define APPLE_2_1A_CHARGER_CURRENT          CHARGE_CURRENT_800_00_MA

 

4. 配置电流检測电阻:(cust_battery_meter.h)

#define CUST_R_SENSE         56  //56 mOhm

充电电流检測电阻

 MTK65XX平台充电调试总结

5. 开机初始化电量的调试:

调试开机初始化电量的意义在于。尽量获取准确的电量。为兴许积分算法进行电量积分提供一个准确的參考。

 

源码:battery_common.c  battery_meter.c  (充电算法採用SOC_BY_SW_FG)

工作流程:BAT_thread()  ->  battery_meter_initial() -> oam_init()

1. oam_init()函数中先获取HW_OCVV_BAT_SENSE两路电压,当中HW_OCV是通过PMIC_AUXADC_ADC_OUT_WAKEUP_PCHR寄存器获取的。这是PMIC上电时检測到的电池开路电压值,这个有时候是有一定误差的。所以必须同一时候获取V_BAT_SENSE的电压,也就是当前的电池电压值。

2. 依据系统是否接入充电器,与V_BAT_SENSE对照。推断HW_OCV的合理性。假设不合理,须要採取措施纠正。

这就是这部分调试的要点。要依据按power键、接USB、接AC等情景,搜集数据。进行调试。保证初始电压以及电量尽量接近真实的电池开路电压。

3. 确定好系统启动时电池电量以后,还要跟上次系统关机时系统保留到RTC中的电量做对照。假如当前启动測得的电量和RTC中保留的电量误差在20%(这个值能够依据详细情况调整)。那么选择RTC中保留电量为合法。这么做有两个目的,一个是推断是否为同一块电池,还有就是保证同一块电池在开机前后电量不会出现大的波动。电池管理驱动程序在执行的时候,会随时更新电量值。刷新到RTC的寄存器RTC_AL_HOU中。每次开机启动时,oam_init()会调用dod_initdod_init函数会读取RTC_AL_HOU寄存器的值。这个假设是0,表明是第一次刷机后开机。假设不为0,则为上次关机时候的电池电量。

 

6. 充放电算法的调试

充放电算法的原理就是库仑积分法,调试的主要问题放电曲线和充电曲线。

源码:battery_meter.c       oam_run();

A. 放电曲线的调试

放电曲线主要调试d5_count_time在gFG_Is_Charging == KAL_FALSE时候的值,主要依据电池容量。

B.  充电曲线的调试

充电曲线首先要依据电池容量和标称充电电流的大小,估算一下电量从0%100%须要多少的充电时间。

还有就是从90%100%这一阶段的充电时间的调试。会影响到电池能否全然充满。在这一阶段一方面是通过charging_full_check()这个函数获取充电IC中充电状态寄存器的值和充电电流来推断电池是否充满;另外一方面就是通过调整这个阶段的时间来推断。

 

7. 考虑接触点电阻

电池接触点处通常会有20~40mho的电阻,这个阻值在大电流(1.5-2A)充电的时候。会对充电算法有一定的影响。

所以在调试的时候要考虑这个电阻的存在,尤其是大电流充电的时候。在函数mtk_imp_tracking中计算开路电压的时候,能够通过宏定义FG_METER_RESISTANCE的调整去补充上这个接触点电阻。

 

8.  充电ICDPM功能影响

使用的BQ24158,BQ24296芯片中都会有一个DPM功能,这个DPM功能是在充电过程中,当输入源输入功率无法提供支持设置的或者默认的充电电流时,会减少VBUS的电压。以保证在功率不变的情况下提供足够的充电电流。当VBUS减少到Vin_dpm下面时,又及时调整充电电流保证VBUS电压不至于太低导致无法识别。

因为这个DPM设置不合理导致的问题就是插入USB的时候,“正在充电”的过程持续一会立刻消失了。这就是因为因为电脑提供的USB最大充电电流为450mA,而Vin_dpmUSB充电电流设置过大。导致电脑的USB接口提供的功率不足。于是充电ICDPM功能发挥作用。把VBUS拉低到4.5V下面,USB掉线了。

 

9. MT6732平台重开机前后HW_OCV不变的问题

现象是这种:第一次开机的时候HW_OCV3.67V,直接重新启动系统后,HW_OCV还是3.67V。没有变化。这个现象直接导致在关机充电下按电源键启动系统的时候,开机开路电压检測偏差极大的问题。

解决问题须要重置AUXADC寄存器。在mtk_wdt.c中改动例如以下:

 

void wdt_arch_reset(char mode)

{

……

mt6325_upmu_set_rg_auxadc_rst(0x01);

mt6325_upmu_set_rg_auxadc_reg_rst(0x01);

……

}

 

 

四、 參考文档

 

《Battery_Charging_Introduction_for_Customer_V1.0.pdf》

《Battery_Customer Document_MT65xx.pdf》

《Fuel_Gauge_introduce.pdf》

《Fuel_Gauge_Application_Notes_V1.0.pdf》

《Fuel_Gauge_Battery_ZCV_Table_Test_SOP_V1.0_20120716.pdf》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115259.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • virsh重启虚拟机命令_vmware创建的虚拟机不见了

    virsh重启虚拟机命令_vmware创建的虚拟机不见了使用QEMU/KVM虚拟化平台启动虚拟机,通常需要手动输入一行很长的命令,里面可能有几十个参数,要想启动多个虚拟机,以及监视多个虚拟机运行状态会非常困难,这时候就需要virsh这样一个虚拟机的管理工具。由于前面的文章已经介绍了如何安装QEMU以及如何启动虚拟机,这里就直接从QEMU/KVM安装好以后的地方开始。1.安装libvirt在ubuntu系统中,使用apt-get安装的libvirt还是1…

  • leetcode 最长有效括号_leetcode 三数之和

    leetcode 最长有效括号_leetcode 三数之和给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2:输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”示例 3:输入:s = “”输出:0题解括号匹配:(看作+1,)看作-1,所有满足条件的括号应该是前缀和>=0,并且总和==0class Solution {public: const int INF =

  • centos7 安装图形界面

    centos7 安装图形界面本人用VMware版本15.0.2build-10952284(关系不大)开启前要在虚拟机–>设置–>3D图形如下如果是云服务器跳过此步yum下载图形界面软件yumgroupinstall”GNOMEDesktop””GraphicalAdministrationTools”修改配置ln-sf/lib/systemd/system…

  • ubuntu安装qt5.7无响应_ubuntu虚拟机安装教程

    ubuntu安装qt5.7无响应_ubuntu虚拟机安装教程一.下载和安装wgethttp://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run下载后给执行权限chmod+xqtxxxx.run安装./qtxxxx.run二.配置环境1.安装g++sudoapt-getinstallb

    2022年10月15日
  • 情人节来了,教你个用 Python 表白的技巧「建议收藏」

    情人节来了,教你个用 Python 表白的技巧「建议收藏」作者:@明哥公众号:Python编程时光2020年,这个看起来如此浪漫的年份,你还是一个人吗?难不成我还能是一条狗?18年的时候,写过一篇介绍如何使用Python来表白的文章。虽然创意和使用效果都不错,但有一缺点,这是那个exe文件,女神需要打开电脑,才有可能参与进来,进而被你成功”调戏”。由于是很早期的文章了,应该有很多人没有看过。没有看过的,你可以点击这里查看:用Python写一个表白神器让你脱离单身提醒你一下,后天就是2月14日了。什么?还是一条狗呢?行吧,那你赶上了,今

  • MYsql 锁表解决办法

    MYsql 锁表解决办法MySQL锁表解决方法一、我的处理过程1、查进程,主要是查找被锁表的那个进程的IDSHOWPROCESSLIST;2、kill掉锁表的进程IDKILL 10866;//后面的数字即时进程的ID网上找了些资料,了解了一下,先分享一下:二、mysql的锁表问题SHOWPROCESSLIST查看数据库中表的状态,是否被锁;killid //杀掉被锁的表===================…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号