使用事件接口模拟温控器

Author Image

作者Walter Frei

2015年 2月 19日

温控器装置的作用是感测系统温度,并基于温度信息控制系统中的加热器和冷却器,使系统温度始终接近期设定值。温控器种类众多,我们今天只重点介绍一种利用两个设定点自动打开或停止加热器的温控器。这种温控器被称为开关式控制器或继电式控制器,我们可以使用 COMSOL Multiphysics 的事件接口对其进行模拟。

温控器的工作原理

现在让我们来讨论一种在生活中使用的温控器装置。尽管温控器种类繁多,但大多数采用了同一种控制方案:可监测温度的传感器固定在系统内某处,通常与加热器相距一定距离。当检测到的温度低于较低的温度设定点时,温控器就会启动加热器。当温度逐渐升高,超过上限设定值时,温控器将关闭加热器。这就是所谓的继电式控制器。在实际应用中,人们通常只设定一个期望温度值,然后设定一个偏移值或滞后值,借此定义所谓的上限和下限设定点。

设定不一样的上限和下限值是为了减少加热器状态切换次数。如果二者相同的话,温控器将不断反复开关加热器,导致元件过早失效。如果是模拟这种控制,只需要了解当前的传感器温度。这在 COMSOL Multiphysics 中很容易实现,之前一篇博客文章对此进行了详细介绍。

另一方面,由于继电式控制器状态在一定程度上依赖于系统工作先后次序,所以操作略为复杂;当温度高于或低于设定值之后,加热器才改变其状态。换句话说,控制器产生了滞后。在 COMSOL Multiphysics 中,滞后现象可以使用事件接口来模拟。

使用事件接口来控制加热器

当使用 COMSOL Multiphysics 求解瞬态模型时,事件接口能够在特定点上停止时间步进算法,并且支持修改变量值。用户可以显式或隐式指定事件发生的时间点。如果我们清楚系统变化的时间点,就应该使用显式事件。在关于周期性热负荷建模背景的博客文章中,我们曾讨论过这一话题。另一方面,隐式事件则发生于未知的时间点上,因此需要更详细的设置。让我们看一看下图中的热模型应该如何模拟。

热系统示意图。
研究中的的热系统草图。

想象一下片上实验室(lab-on-a-chip)器件在二维平面中的简单热模型。一毫米厚的载玻片一侧放置了一个加热器,另一侧是温度传感器。我们将加热器看作分布在载玻片底部表面的一小块 1W 热负荷,并假定顶部表面有一个极小的、不影响系统热量的温度传感器。自由对流从载片顶部吹向四周,起到冷却作用,我们使用热流边界条件对其进行模拟。系统初始温度为 20°C,我们希望传感器保持在 45°C~55°C 之间。

在 COMSOL Multiphysics 中使用‘组件耦合’定义传感器温度。
“组件耦合”用于定义描述传感器温度的变量 T_s。

在使用事件接口之前,我们要做的第一件事是借助“积分组件耦合”和“变量”来定义传感器节点的温度,如上图所示。这是为了使该点的温度 T_s 在事件接口中可用。

事件接口的添加方式与 COMSOL Multiphysics 的其他物理场接口一致,可在数学 > 常微分和微分代数方程接口分支中打开。

‘离散状态’接口的截图。
离散状态接口可用于定义加热器的状态。初始时,加热器为开启状态。

首先,我们使用事件接口来定义一组在时间上不连续的离散变量。它们适用于模拟开/关条件,类似于本文的情况。上图中的离散状态接口定义了一个变量HeaterState,并用该变量乘以固体传热问题中所施加的热负荷。变量可以等于一或零,这取决于系统的温度历史。初始条件为一,说明仿真开始时加热器处于开启状态。设置正确的初始条件是一个非常重要的步骤。在仿真进行过程中,变量HeaterState将随传感器的温度而变化。

‘事件’接口中的两个‘指示器状态’。
事件接口中的两个指示器状态取决于传感器的温度。

要触发HeaterState变量的变化,我们需要预先引入两个指示器状态。创建指示器状态是为了定义指示事件发生时间的变量。此例中定义了两个指示器变量。Up指示器变量如下:

T_s - 55[degC]

当传感器温度升高至 55°C 以上时,它会从负值变为正值。同样地,温度达到 45°C 时,Down指示器变量从负值平滑地过渡为正值。我们计划使指示器变量的正负符号变化触发HeaterState变量的变化。

重新初始化 HeaterState 变量。
HeaterState变量在事件接口中被重新初始化。

我们不能预知这些事件将何时发生,但很清楚需要在何种情况下改变加热器的状态,所以应该使用隐式事件接口。如上图所示,两个隐式事件特征可以将加热器的状态重新初始化为一或零,这取决于UpDown指示器变量各自超过和低于零的时刻。逻辑条件成立后,系统触发事件。一旦触发事件,瞬态求解器将立即停止,并重新启动刚刚被初始化HeaterState变量,此变量可以对施加的热量进行控制,如下图所示。

截图显示了如何使用 HeaterState 变量来控制施加的热量。
HeaterState变量控制施加的热量。

在求解模型时,我们可以对求解器设置做一些更改,以保证结果的准确性,且只保留最重要的结果。我们决定将模型的总求解时间限制为 30 分钟,而且只存储求解器采用的时间步的结果。相关设置如下。

‘瞬态求解器的研究设置。
“瞬态求解器”的研究设置将总求解时间设置为 0-30 分钟,相对容差为 0.001。

我们需要对“瞬态求解器”的设置进行部分更改。我们能在求解之前完成修改,方法是先右键单击研究分支,选择“显示默认求解器”,然后进行如下图所示的两处更改。

图片显示了修改默认的求解器设置。
修改默认求解器设置。事件公差被更改为 0.001,并将要存储的输出时间设为求解器采用的时间步。

当然,与任何有限元仿真一样,随着网格细化、求解器容差变得更小,我们希望去研究此时解的收敛性。下图突出显示了具有代表性的仿真结果,表明了传感器温度是如何在上限和下限设定值之间浮动的。另外可以观察到,每个事件发生后,求解器立即采用了较小的时间步,但当求解结果逐渐变化时,求解器的时间步也随之逐渐增大。

绘图显示了加热器反复开关,使传感器温度保持在设定值之内。
加热器反复打开和关闭,使传感器温度保持在设定值之间。

结语

在上文中,我们演示了如何使用隐式事件来关闭和重新启动求解器,以及如何修改用于控制模型的变量。利用这些操作,我们可以模拟和温控器一样具有滞后性的系统,并将仿真的计算成本降到最低。


评论 (4)

正在加载...
汉 江
汉 江
2020-07-06

Thanks for the sharing!

zhen fu
zhen fu
2021-03-10

谢谢 谢谢

川骅 黄
川骅 黄
2023-03-14

Haohao

九 阿
九 阿
2024-01-16

为什么用积分来定义温度T_S呢,直接定义变量T_S事件接口就不能调用了吗? 能否定义一个域点探针,代替T_S在indicator state中调用呢?谢谢回答

浏览 COMSOL 博客
Baidu
map