高通8X16电池BMS算法(一)
2016-06-06 22:07
211 查看
最近一直在搞电源管理相关内容,之前是8610的bms,现在8916的bms,发现两者还是有点区别的,8916把对last_ocv_uv的估值算法分装成执行文件,作为服务一直运行。
电源管理方面,应该是android驱动开发的一大难点,主要涉及的方面多,如充、放电、休眠唤醒等。这一部分主要讲BMS相关的一些基本概念。电池这一块刚开始入手时,感觉很难,很复杂,完全不知道如何入手,后来搞久了,才发现,是对电池一些基本的知识,在脑海中缺少相关的概念,所以才感觉难,这里主要是介绍一些相关的术语与知识。
1. 相关的名词
2. 相关的代码
kernel\drivers\power\Qpnp-vm-bms.c
//电池BMS算法
kernel\drivers\power\Qpnp-linear-charger.c
//电池充电相关的代码
batterydata-XX_3000mah.dtsi
//电池相关的参数
Msm-pm8X16.dtsi
//针对PMU芯片,进行的相关设置
其他一些的代码就不一一列出来,其实高通的代码还是比较好的,基本大部分的文件都会.txt的介绍文档,我个人建议在不管调什么模块,
看到有与之对应的.txt说明文档,都应该去看一下,起码对一些基本的概念有个了解。
3. 相关的原理
3.1 BMS 主要任务
1. 防止过充2. 避免深放
3. 温度控制4. 电池组件电压和温度的均衡
5. 预测电池的SOC 6. 电池诊断
7. 总电压及单体电压测量
8. 总电流及单体电流测量9. 报警1
0. 通信SOC
方法:能量积分 + 误差矫正 (大众化技术,准确性高。)
传统的电池电量测试方法有:密度法,开路电压法,内阻法和安时法等。
新型算法有:自适应神经模糊推断模型、模糊逻辑算法模型、线性模型法、阻抗光谱法和卡尔曼滤波估计模型算法 。
3.2开路电压法
通过实验方法描述在不同放电电流情况下的电池的端电压与电池的剩余能量的关系曲线,并存储特征关系曲线。
实时采样电池放电时的端电压,查表求出电池的剩余能量,同时考虑电池的使用寿命以及内阻对电池SOC的影响,对求得的电池剩余能量
进行校正。 优点:简单易行。 缺点:但是需要电池长时间静置,不能满足在线检测的要求。soc>40%,阻抗变化很小。
3.3 8916的BMS的相关思路:
3.3.1
PMU通过PMIC总线读取电池的AD值,通过一个数据运算转化为电压值。
3.3.2
在不同的电池参数文件中,都有相对应的表,
pc-temp-ocv-lut,为温度、SOC对应得电压表,PMU8916获取的电压值,通过查该表,在温度和电压下,可得到当前的SOC。
rbatt-sf-lut,为温度、soc对应的电池内阻表,这里主要考虑内阻的影响,对OCV的修正,new_ocv=ocv+rbatt(内阻)*current(当前电流)。
fcc-temp-lut,为温度对应的fcc表,ibat-acc-luit,为温度、电流对应的acc表,这两个是起到修正SOC的作用,相关计算为:
soc_uuc = ((fcc - acc) * 100) / fcc,fcc、acc均为查表所得,
soc_acc = DIV_ROUND_CLOSEST(100 * (soc_ocv - soc_uuc),(100 - soc_uuc)); //最终soc_acc,为上报的SOC.
3.3.3
PMU8916的bms算法和PMU8612的有区别,其中对last_ocv_uv的估值计算的源码已经不开放,在monitor_soc_work的工作线程,
会上报事件uevent,当HAL层,收到消息,然后调用getprop的方法,获取相关的参数,如,电阻、电流、fcc、acc等,来估算出
last_ocv_uv,然后调用setprop,把该值设下去,并启动工作线程,根据last_ocv_uv,查表得到soc,并经过修正SOC,并再次上
报事件,循环下去。这个估值算法,我猜可能是一套学习算法,具体的没有源码,不清楚,只知道它把算法变为.bin文件,用了
binder机制,作为服务一直运行。
下一部分,主要分析相关的代码以及一些调试经验。
电源管理方面,应该是android驱动开发的一大难点,主要涉及的方面多,如充、放电、休眠唤醒等。这一部分主要讲BMS相关的一些基本概念。电池这一块刚开始入手时,感觉很难,很复杂,完全不知道如何入手,后来搞久了,才发现,是对电池一些基本的知识,在脑海中缺少相关的概念,所以才感觉难,这里主要是介绍一些相关的术语与知识。
1. 相关的名词
术语 | 全称 | 注释 |
FCC | Full-Charge Capacity | 满电荷电量 |
UC | Remaining Capacity | RC 剩余电量 |
CC | Coulumb Counter | 电量计 |
UUC | Unusable Capacity | 不可用电量 |
RUC | Remaining Usable Capacity | RUC=RC-CC-UUC,剩余可用电量 |
OCV | Open Circuit Voltage | 开路电压,电池在开路状态下的端电压称为开路电压 |
SoC | State of Charge | 电量百分比 |
PC | Percentage Charge | 剩余电荷占FCC百分比 |
kernel\drivers\power\Qpnp-vm-bms.c
//电池BMS算法
kernel\drivers\power\Qpnp-linear-charger.c
//电池充电相关的代码
batterydata-XX_3000mah.dtsi
//电池相关的参数
Msm-pm8X16.dtsi
//针对PMU芯片,进行的相关设置
其他一些的代码就不一一列出来,其实高通的代码还是比较好的,基本大部分的文件都会.txt的介绍文档,我个人建议在不管调什么模块,
看到有与之对应的.txt说明文档,都应该去看一下,起码对一些基本的概念有个了解。
3. 相关的原理
3.1 BMS 主要任务
1. 防止过充2. 避免深放
3. 温度控制4. 电池组件电压和温度的均衡
5. 预测电池的SOC 6. 电池诊断
7. 总电压及单体电压测量
8. 总电流及单体电流测量9. 报警1
0. 通信SOC
方法:能量积分 + 误差矫正 (大众化技术,准确性高。)
传统的电池电量测试方法有:密度法,开路电压法,内阻法和安时法等。
新型算法有:自适应神经模糊推断模型、模糊逻辑算法模型、线性模型法、阻抗光谱法和卡尔曼滤波估计模型算法 。
3.2开路电压法
通过实验方法描述在不同放电电流情况下的电池的端电压与电池的剩余能量的关系曲线,并存储特征关系曲线。
实时采样电池放电时的端电压,查表求出电池的剩余能量,同时考虑电池的使用寿命以及内阻对电池SOC的影响,对求得的电池剩余能量
进行校正。 优点:简单易行。 缺点:但是需要电池长时间静置,不能满足在线检测的要求。soc>40%,阻抗变化很小。
3.3 8916的BMS的相关思路:
3.3.1
PMU通过PMIC总线读取电池的AD值,通过一个数据运算转化为电压值。
3.3.2
在不同的电池参数文件中,都有相对应的表,
pc-temp-ocv-lut,为温度、SOC对应得电压表,PMU8916获取的电压值,通过查该表,在温度和电压下,可得到当前的SOC。
rbatt-sf-lut,为温度、soc对应的电池内阻表,这里主要考虑内阻的影响,对OCV的修正,new_ocv=ocv+rbatt(内阻)*current(当前电流)。
fcc-temp-lut,为温度对应的fcc表,ibat-acc-luit,为温度、电流对应的acc表,这两个是起到修正SOC的作用,相关计算为:
soc_uuc = ((fcc - acc) * 100) / fcc,fcc、acc均为查表所得,
soc_acc = DIV_ROUND_CLOSEST(100 * (soc_ocv - soc_uuc),(100 - soc_uuc)); //最终soc_acc,为上报的SOC.
3.3.3
PMU8916的bms算法和PMU8612的有区别,其中对last_ocv_uv的估值计算的源码已经不开放,在monitor_soc_work的工作线程,
会上报事件uevent,当HAL层,收到消息,然后调用getprop的方法,获取相关的参数,如,电阻、电流、fcc、acc等,来估算出
last_ocv_uv,然后调用setprop,把该值设下去,并启动工作线程,根据last_ocv_uv,查表得到soc,并经过修正SOC,并再次上
报事件,循环下去。这个估值算法,我猜可能是一套学习算法,具体的没有源码,不清楚,只知道它把算法变为.bin文件,用了
binder机制,作为服务一直运行。
下一部分,主要分析相关的代码以及一些调试经验。
相关文章推荐
- 谷歌正式开始补偿Nexus 6P重启门和电池门用户:最高赔400美元
- PowerTOP:在 Linux 上监视电量使用和改善笔记本电池寿命
- 使用JavaScript获取电池状态的方法
- Andriod 获取电池的信息实例代码
- Android实现侦听电池状态显示、电量及充电动态显示的方法
- Android编程之电池电量信息更新的方法(基于BatteryService实现)
- Android监听电池状态实例代码
- 电脑无法启动故障的10种解决方法
- 笔记本电池妙用
- 后台应用不应做Android待机电池杀手
- 如何选择UPS电池的数量
- 1.3 在集群节点上使用Red Hat 开关脚本
- 如何清除bios密码?破解bios密码方法大全
- 用万用表如何量测电池的好坏
- EXADATA不停机的情况更换CELL节点电池
- 让你的电池多活两年,土豪请自动忽略
- android自定义电池View
- 有效的网络访问优化下载
- 电脑强制休眠后独显消失了?
- 为什么要刷机刷机后电池为什么消耗快,手机刷机注意事项