# 4. 连续系统

在本文档中,用户将对节气门电机的动力学进行建模。这发动机中的节气门控制着进入气缸的空气/燃油混合物的流量。节气门体中有一个蝶形阀,当驾驶员踩下油门踏板时,该阀会打开,从而让更多的空气/燃油混合物进入气缸,使发动机转速加快。 蝶阀的开启角度由直流电机控制。此外,阀门上还装有一个弹簧,当直流电机断电时,该弹簧会将阀门复位至关闭位置。通过使用硬止动装置,阀门的旋转角度被限制在约 90 度。

# 定义连续状态系统

节流阀的数学模型具有连续状态。在 Sysblock 模型的语境中,连续状态指的是通过对其导数随时间进行数值积分来确定其值的变量。 连续状态系统的行为取决于其输入和/或时间以及其轨迹的历史。存储系统历史的那些状态是在无穷小的时间间隔内计算得出的。连续状态系统是依赖于历史的动态系统,会在时间的每一瞬间进行评估。大多数自然过程和物理系统都是连续系统。连续状态系统的动态特性由其轨迹的变化率决定。连续状态系统动态的变化率可以用微分方程的形式来表达。 这连续状态系统的数学表示由两组方程组成:状态导数方程和输出方程。

状态导数方程:

输出方程:

# 使用 Sysblock 对连续状态系统进行建模

“连续”库中包含支持对连续状态系统进行建模的模块。用于对连续状态系统进行建模的通用基本模块是积分器模块。 连续状态系统的变化可以用普通微分方程,例如如下示例所示:

对这个普通微分方程进行建模,需要一种机制,该机制能够在时间 t 时将 积分为 并将 积分为 。 积分器模块通过对其输入信号进行积分并输出结果来提供这种机制。 以下方程描述了积分器块的动态特性:

包含连续状态的模块(如积分模块)能够精确地模拟由常微分方程描述的动态特性。这是因为 Sysblock 解算器能够控制连续状态的积分误差。

导数模块仅对输入信号的变化率进行近似计算,但不包含任何连续状态。因此,导数模块无法控制模拟的精度,则不应用它来模拟常微分方程。

# 微分方程建模

用户必须将微分方程整理为最高阶状态导数位于方程左侧,其余所有项写在方程右侧的形式。 在 Sysblock 中对一组微分方程进行建模:

  1. 确定所需的积分器模块数量(每个导数阶次一个)。

    例如,对于方程:

    这里需要两个:

  2. 从积分器模块开始,为其输入和输出信号提供适当的标签。

  3. 依次构建方程的右侧,每次构建一个常微分方程需要将方程右侧返回的信号作为源连接到其左侧,模型可参考

  4. 为积分器模块指定初始条件。

    提示

    此方法是一种通用程序,适用于线性和非线性系统。

# 示例:节气门体

电子节气门体通过开启和关闭节气门板阀来控制进入发动机的空气量。 节气门将转换后的扭矩作为输入,并计算出节气门板的位置作为输出。其动态特性取决于位置、角速度、粘性摩擦、惯性、静摩擦力和扭矩。

状态 :

—— 节气门角度(

—— 节气门角速度(

参数 :

—— 节气门板的惯性(²

—— 弹簧常数(

—— 粘性摩擦常数(

—— 弹簧平衡角(

—— 电机常数(

系统_输出 :

—— 节气门角度(

# 使用方程对系统进行建模

用户可以通过数学方式模拟节气门板的运动情况,将围绕节气门轴的 3 个力矩相加:

  • 回位弹簧产生的力矩
  • 滑动摩擦力矩
  • 电动机施加的力矩

整个系统通过以下方程进行建模:

硬止动装置的存在会使节气门的实际角度被限制在 0 到 π/2 弧度之间。 在构建代表这些方程的框图之前,首先解决微分方程中的最高阶项(角加速度)是很有帮助的:

# 构建框图

系统框图模型可参考

  1. 打开 Syslab 软件,双击启动 Sysplorer。

  2. 在 Sysplorer 界面找到文件 > 新建 Sysblock 模型 > Sysblock 模型,然后弹出新建控制器模型窗口后,用户需要自定义命名和存储位置,单击确定

  3. 在模型库搜索模型所需要的模块,如图所示摆放。

    模块 数量
    FromWorkspace 2
    Constant 1
    Product 1
    Sum 2
    Gain 4
    Integrator 2
    Outport 1
  4. 双击 Sum 模块,分别在符号列表中修改为“-+”和“-+-”。

  5. 如图所示给对应的模块自定义命名。

    ①Duty ②Direction ③UnenergizedAngle ④MotorConstant ⑤SpringConstant ⑥DampingCoefficient ⑦Inertia ⑧AngularVelocity ⑨Angle ⑩theta

  6. 单击选中 DampingCoefficient 模块,右击水平翻转

  7. 如图将信号线连接,双击信号线并自定义命名。

    ①UnenergizedAngle ②thetaDoubleDot ③thetaDot ④theta

# 定义参数

  1. 打开 Syslab 界面,单击导入数据,找到数据文档:throttle_input.mat(需要提前将数据保存至本地),将数据导入 Julia 工作区。

  2. 打开主页 > 新建 > 新建 Julia 脚本

  3. 脚本中输入代码后单击运行,数据就会保存到工作区内。

    Duty = hcat(t, duty)
    Direction = hcat(t, direction)
    J = 2.45e-4
    Ks = 0.2
    Kd = 0.03
    theta_eq = pi/6
    Km = 3.0
    
  4. 回到 Sysplorer 界面,分别双击 DutyDirection 模块,将数据修改为“Duty”和“Direction”,单击确定

  5. 在建模页面单击数据管理器,弹出模型数据管理器窗口,单击同步 Syslab 工作区按钮 ,更新基础工作区数据后关闭窗口。

  6. 双击 UnenergizedAngle 模块定义常数,输入“theta_eq”,单击下方已经定义好的参数。

  7. 定义四个增益模块:

  • 双击 MotorConstant 模块,将增益设置为“Km”,单击确定

  • 双击 SpringConstant 模块,将增益设置为“Ks”,单击确定

  • 双击 DampingCoefficient 模块,将增益设置为“Kd”,单击确定

  • 双击 Inertia 模块,将增益设置为“1/J”,单击确定

  1. 双击 Angle 模块,初始条件设置为“theta_eq”,勾选限制输出饱和上限设置为“pi/2”,单击确定

# 运行仿真

  1. 在主页单击仿真设置,将步长设置为 0.001,终止时间设置为 20,单击确定并保存到模型

  2. 在模型库搜索增加 3 个 Scope 模块,分别双击模块选择文件 > 输入端口个数 > 2,单击图中标 ② 模块,右击水平翻转,最后将三个模块接入到模型中。

  3. 单击仿真,仿真结束后关掉自动弹出结果查看器窗口,双击三个 Scope 模块,波形如图所示。

# 创建连续状态空间和传递函数模型

用户还可以通过使用 TransferFcn 模块、 StateSpace 模块来模拟仿真节气门板的动态特性。这些块能以更简洁的形式表示微分方程组,用户可以使用这些模块来构建仅包含线性系统的模型。

传递函数:

状态空间方程:

连续状态空间和传递函数模型可参考