基于 Simscape 的电池物理建模与 Simulink 信号控制实战:从原理到实现

第一步:准备核心模块 (Block Library)
打开 Simulink,新建一个空白模型,从库浏览器(Library Browser)中找到并拖入以下模块:
- Battery (Table-Based):核心电池模型(路径:
Simscape > Battery)。 - Controlled Current Source:受控电流源,作为负载(路径:
Simscape > Foundation Library > Electrical > Electrical Sources)。 - Solver Configuration:物理网络求解器,必选(路径:
Simscape > Utilities)。 - Electrical Reference:电学参考地,必选(路径:
Simscape > Foundation Library > Electrical > Electrical Elements)。 - PS-Simulink Converter:物理信号转 Simulink 信号(路径:
Simscape > Utilities)。 - Simulink-PS Converter:Simulink 信号转物理信号(路径:
Simscape > Utilities)。 - Constant & Scope:常规数字源和示波器(路径:
Simulink > Sources/Sinks)。
第二步:关键参数设置 (Parameters)
双击模块进入设置界面,按照任务要求修改:
- 电池设置 (Battery):
- Nominal voltage, Vnom: 输入
800(单位 V)。 - Battery charge capacity: 从
Infinite改为Finite。 - Ampere-hour rating: 输入
100(单位 A*hr)。 - Expose charge measurement port: 改为
Yes(这会在图标上生成测量 SOC 的小三角端口)。
- 负载输入 (Constant):
- Constant value: 输入
50(表示放电电流为 50A,用于测试)。
第三步:物理电路连接 (Power Circuit)
这是电池和负载的“真实”接线,线缆通常在 Simulink 里显示为蓝色/黑色深色线:
- 正极连接:将 Battery 的
+端连接到 Controlled Current Source 的+端。 - 负极连接:将 Battery 的
-端连接到 Controlled Current Source 的-端。 - 接地:将 Electrical Reference 连接到负极这条回路上。
- 求解器配置:将 Solver Configuration 连接到电路中的任意位置(它只需要挂在电路网络上即可)。
第四步:控制与测量连接 (Signal Circuit)
这是信号流,负责控制放电大小和读出 SOC,这里是之前遇到困难的地方:
- 控制负载放电:
- 连接路径:
Constant→\rightarrow→Simulink-PS Converter→\rightarrow→Controlled Current Source的控制端口(通常在侧面)。
- 提取 SOC 数据(核心修正步):
- 任务书要求提取 SOC,但你选用的
Table-Based Battery导出的是物理信号,不是数字总线。 - 正确连线:将 Battery 上的测量端口(那个带小三角的输出口)直接连到
PS-Simulink Converter。 - 然后再将
PS-Simulink Converter的输出端连到Scope。 - 注:这种接法直接输出的就是 SOC 的百分比数值(0 到 1 之间),不需要用 Bus Selector。
第五步:仿真与验证 (Run & Verify)
- 设置仿真时间:在 Simulink 顶部的运行时间框中,将
10.0改为3600(模拟放电一小时)。 - 开始仿真:点击绿色的 Run 按钮。
- 观察波形:
- 双击打开 Scope。
- 预期结果:你应该能看到一条从 1(代表 100% 电量)开始往下降的斜线。
- 如果一小时(3600秒)放电 50A,对于 100Ah 的电池,电量应该刚好掉到 0.5(50%)。
学习要点总结(应付检查/考试):
- 物理域 vs 信号域:Battery 到电流源的线是物理线(Simscape),Constant 到转换器的线是信号线(Simulink)。
- 为什么不用 Bus Selector? 因为现代 Simscape 电池模块的测量端口直接输出 SOC 物理信号,而 Bus Selector 只能处理传统的打包总线信号。
- 求解器(Solver)的作用:它是所有物理建模的“心脏”,不接它模型就无法进行数学计算。

- 转换器使用精准:
- 你成功在
Constant (50)后面加了Simulink-PS Converter(黑线转棕线),把数字信号变成了控制电流源的物理信号。 - 你成功在电池
m端口后面加了PS-Simulink Converter(棕线转黑线),把物理测量的 SOC 信号成功翻译并接入了Scope(示波器)。
- 物理网络闭环:蓝色的物理线连接正确,且
f(x)=0(Solver 求解器)和接地模块(Electrical Reference)都已经正确挂载到了回路上。
💡 唯一需要调整的物理小细节:充放电方向
如果你现在直接点击运行,你会发现 Scope 里的 SOC 可能不会下降,反而会上升(或者报错),原因是电流方向反了,目前是在充电。
原因分析:
你看一下中间那个 Controlled Current Source(受控电流源)模块,它里面的箭头是向上的。在当前的接线图下(上方是正极),给它输入正数 50,意味着电流会顺着箭头从下往上流——也就是把电流强行灌入电池的正极。
如何调整为“放电”状态(二选一即可):
- 方法一(最简单): 双击最左边的
Constant模块,把里面的50改成-50。输入负电流代表反向流动,也就是从电池往外抽电。 - 方法二(改模型): 选中
Controlled Current Source模块,按下快捷键Ctrl + I(或者在顶部菜单 Format 中选择 Flip 上下翻转),让它里面的箭头朝下指,这样正数50就是放电了。
调整完这个小细节后,记得把顶部菜单栏里的仿真时间(目前没截全,通常默认是 10.0)改成 3600,然后点击绿色的运行按钮(Run)。双击打开右侧的 Scope,你就能看到一条完美的 SOC 下降曲线了!恭喜你完成了这项任务!
在 Simulink/Simscape 中搭建物理模型,本质上是在跨越两个截然不同的“世界”。理解了这两个世界,以后无论搭电机、液压还是热力学模型,你都不会再连错线。
1. 核心大前提:Simulink 的“两个世界”
在你的模型中,存在两种完全不同的运行机制:
-
物理世界 (Simscape 物理域)
-
特征:代表真实的物理组件(如电池、导线、电阻)。连线通常是蓝色或深色的双向线。
-
原理:它遵循能量守恒和基尔霍夫定律(KCL/KVL)。在物理连线中,没有绝对的“输入”或“输出”方向,电流和电压是相互影响的。你把电池和电流源连在一起,软件会在底层自动列出这个闭合电路的微分代数方程组 (DAE)。
-
数学世界 (Simulink 信号域)
-
特征:代表纯粹的数学计算、逻辑控制和数据监测。连线带有明显的箭头,通常是黑色或红色的单向线。
-
原理:它传递的是纯粹的数值数组(例如数字
50)。信号具有明确的方向性,从源头(如 Constant)单向流向目标(如 Scope),不存在反向影响。
2. 电池模块 (Table-Based) 的内部数学原理
你选用的 Battery (Table-Based) 并不是一个简单的电源,而是一个基于实验数据查表的动态模型。它的核心输出——SOC(State of Charge,荷电状态)——是如何算出来的呢?
原理是安时积分法 (Coulomb Counting)。模型内部会实时监测流经电池的电流大小和方向,并通过对时间进行积分来更新当前的电量:
SOC(t)=SOC(t0)−13600⋅Cnom∫t0ti(τ)dτSOC(t) = SOC(t_0) - \frac{1}{3600 \cdot C_{nom}} \int_{t_0}^{t} i(\tau) d\tauSOC(t)=SOC(t0)−3600⋅Cnom1∫t0ti(τ)dτ
- SOC(t0)SOC(t_0)SOC(t0) 是电池的初始电量(默认通常为 1,即 100%)。
- CnomC_{nom}Cnom 就是你设置的
100 Ah额定容量。 - i(τ)i(\tau)i(τ) 是实时电流(放电为正,充电为负)。
- 分母乘以 360036003600 是因为电流单位是安培 (A=C/s),而容量单位是安时 (Ah),需要进行秒到小时的时间单位换算。
当你勾选了 Expose charge measurement port,模型就会把这个实时计算出的 SOC(t)SOC(t)SOC(t) 作为一种物理状态量(就像真实世界里的温度、压力一样)通过那个小三角端口输出。
3. 为什么必须用 Converter(翻译官)?
这是很多初学者最困惑的地方。为什么不能把代表数字 50 的 Constant 直接连到电流源?为什么电池的 SOC 不能直接连到 Scope?
- Simulink-PS Converter (数字 →\rightarrow→ 物理):
你的 Constant 输出了一个纯数学概念50。但是,物理世界里的“受控电流源”听不懂什么是纯数学的50。它需要一个物理控制指令(比如某种模拟控制电压)。这个转换器的作用,就是把数学维度的数字50,强制赋给一个物理信号,告诉电流源:“请在物理网络中强行抽取 50A 的电流”。 - PS-Simulink Converter (物理 →\rightarrow→ 数字):
同样,电池的m端口输出的 SOC,是一个附带着物理属性的“状态量”。而 Scope(示波器)是一个纯数字软件,只能绘制数学数组。这个转换器的作用相当于一个传感器(A/D 转换),它读取物理域的真实状态,剥离掉它的物理属性,变成一个纯数字(如0.85),然后丢给示波器去画图。
4. 求解器 (Solver Configuration) 与接地的作用
- Solver Configuration:因为蓝色的物理网络需要联合求解基尔霍夫方程组,而普通的 Simulink 步长求解器无法处理这种复杂的代数环。这个模块就是为这段物理电路专门配备的“数学引擎”,没有它,电路就无法进行运算。
- Electrical Reference (接地):任何电压都是相对的。接地模块为整个物理电路定义了 0V 的参考电位,使得网络中的所有节点电压都可以被唯一计算出来。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)