最近比较忙(其实主要是懒),很久没更新。看了一下最近一次的更新已经是一月份的事了。
原以为会大规模掉粉,没想到用户关注度继续平稳增长(嗯,一如既往地以极小幅度增长),谢天谢地。
根据文末留言和对话框留言来看,大部分都是因为去年的电池建模推文进来,期间问了不少关于电池建模的疑问,有的回答了,有的还没回答,所以一次性将问题和解答进行汇总,作为此篇推文。
本篇文章字数2000+,预计阅读需要20分钟。
不看纵坐标的话,增长曲线还是挺喜人的,哈哈哈哈嗝!
1 基础性问题
基础类问题与复杂问题一样,最难回答了,因为都难以用三两句话讲清楚。
另外获取模型是在公号对话框输入:
电池模型,而不是电池建模
电池模型,而不是电池建模
电池模型,而不是电池建模
重要的事情一定要说三遍才行。审题要认真啊,同志们。
电池模型建模入门需要学习哪些
不要给自己设限,理工科类的本科知识完全够了,不太明白的地方再针对性的补充查看资料学习一下即可。碰到实在看不懂的细节时,如果你不是做科研,只做工程上应用的话,先明白大概的原理,再根据个人精力和工作要求逐步深入即可。
线性插值与Lookup table
在建模时,OCV、内阻和极化参数都用到了Lookup Table,输入为SOC,输出为查表得到的参数值。只要表格足够精确,理论上我们可以无限接近真实情况。
Lookup table的原理为线性插值。所谓的线性插值,利用过A(x1, y1)点和B点(x2, y2)的直线来近似表示原函数。所以此处的前提假设为:
1. 在这AB两点间,插值函数与原函数差距很小
2. AB两点间的斜率是固定的,所以两点间的任意点可以基于斜率不变原则,在给定x时,计算出对应的y值,也可以用来计算得到查表过程中表中没有的数值,限于篇幅,公式我就不贴出来了。
使用lookup table的好处在于,我们可以将各类复杂的逻辑关系(抛物线,对数)简化为一次函数进行求解。
提前预告下,EKF的偏导也会用到这个理念,不要盲从于一些论文,使用3次甚至7次方程去等效,完全没有必要。我们的算法最终是要移植到嵌入式芯片的,如果计算高次方程根本胜任不了。
回到模型,我们table的输入都是SOC,输出则是对应各个输入点的参数。
其中[0:0.1:1]表示以0为起点,以步长为0.1(10%),等间隔扩展到1(100%)
电流与安时积分
容量的单位为AH,即A*H。而积分器对电流的积分用的秒,所以积分结果A*S/3600才能转换为A*H。此处还应该注意电流的正负性,放电导致容量降低,充电导致容量增加。变化的安时量与额定容量的比值即为SOC变化大小。模型中用的是20AH,所以你要根据实际模型的正向电流定义去调整你的安时积分与容量计算环节。
至于如何模拟不同工况的电流,其实有多种方式:
1. 脉冲电流的话,可以用单个Pulse模型或者多个Pulse模型进行加减组合进行。Pulse模型不仅可以设置占空比,周期,幅值,还可以设置相位延迟。详见模型的help。
2. 可以将电流数据输入到workspace,然后保存为mat文件,在simulink调取From File模块进行导入。Mat文件要与你的模型在同一目录下。
2 扩展性问题
有些问题涉及的领域我也没深入研究,所以只能给个大致的方向。
模型循环运行
我们的模型是在simulink中的,所以如果是想以周、月、甚至年为单位循环跑的话,实现起来比较难。我建议不要以simulink的模块建模,可以用数学模型将电池封装在m文件或者其他语言的class,扩展性好一些,而且可以用代码形式设计更加复杂的工况跑循环。可以参见往期内容。Python下的磷酸铁锂电池的数学模型我也做过,封装为py模块,结合pyqt5做过一些更复杂的应用,但是涉及公司机密,不便贴出。只想告诉大家,软件只是实现你的逻辑的工具而已,怎么方便怎么来,不用受限与某一软件平台。
电池寿命
电池模型始终绕不开SOC与SOH的纠缠,之前模型只是简单展示方法,离实用性还有很远的路要走。要想SOC全生命周期准确,需要考虑SOH对分母(即某一时期的满充容量)的影响。业内用得比较多的有两种:
1. 基于Arrhenius经验公式:因为公式的变量影响因子太多了,对于单一工况比较适用,例如拟合单一倍率的充放电循环寿命。
2. 根据最近一次满放或者满充容量作为满电容量,然后与额定容量的比值,得出SOH
电池均衡
多串数电芯组合的话就得考虑电池均衡了。受限于拓扑复杂度以及成本,绝大多数情况都是使用被动均衡。另外均衡开启与关闭,一般都是使用电压进行判断,因为对于多串电芯而言:
- 受限于算力,一般不会每个电芯都计算SOC,但是电芯电压采样是一定会有的。
- 受限于传感器精度以及SOC算法的可靠性,很难保证任意时刻SOC都准确。
问问题的艺术
- 能直接百度解决的问题,自己动手丰衣足食
- 模块使用方法的问题,能不能自己先双击simulink的模块,看看help再来问
- 跨度太大的问题,别问;自己评估下需要超过5行手机文字才能解答的问题,发了红包再问
(开玩笑的,不过确实有些问题,我真的懒得回答,因为三言两语解答不了)
- 加了微信想问问题的话,不要问在吗和有空吗,问了都回不在和没空,一次性将问题描述清楚,图文并茂最佳,不要让我猜
之前的问题解答一并贴在下方,请查阅。
1. 为什么模型打不开:模型是基于Matlab 2014版本做的,所以打不开的话,请用2012b及以上版本打开即可
2. S_PS,PS_S什么作用:用于Simulink常规库的模型与Simscape模型间的信号转换
3. Fixed Step是什么意思:固定步长运行模型仿真,可以根据自己实际需要更改Solver的设置
4. 模型的参数是针对什么类型电池的:模型中的参数只是为了展示如何搭建,不代表任何一种电池特性
5. 数学表达式看不懂:不用太纠结于这个问题,如果你的目的仅仅是搭建模型用于非学术性的仿真研究的话,不用深究,知道怎么将数据带入求解即可
6. 仿真结果没有体现RC特性:Scope波形放大看,可能是你的C偏小,所以总图无法直观显示,局部放大再看看;另外也同步去检查看看是否你的参数输入有问题