主要内容

模拟直流电机阶跃响应使用当地的解决者

这个例子展示了如何使用本地解算器可以提高模拟性能模型层次结构,其中包含组件的操作在不同的时间尺度。本例中的模型的阶跃响应模拟直流电机驱动的机械负荷。

一个直流电机作为机电图表示。电气图包括一个电压源驱动电阻和电感串联

子组件的动态系统可以运行在不同的时间尺度。例如,直流电机模型,阶跃响应的电物理操作接近一微秒的时间尺度,而机械动作发生的时间尺度则。

当你使用引用模型表示系统组件,您可以配置模型来解决使用本地引用。例如,引用的模型,代表了机械运动可以运行与解决一个更大的步长比其他直流电机模型。

分析系统动力学

确定您的系统可能受益于使用当地解决,分析系统的动态。解决当地可以提供性能改进通过增加步长与慢动力学组件与系统的其他部分或允许您使用不同的解算器更适合该组件。

打开模型DCMotorLocalSolver。引用的模型实现了系统使用两个模型:

  • 该模型DCMotorElectrical电动机的电气响应模型。

  • 该模型DCMotorMechanical电动机的机械响应模型。

机电系统耦合的电机电流和电机和负载的角速度。

topMdl =“DCMotorLocalSolver”;mechRef =“DCMotorMechanical”;elecRef =“DCMotorElectrical”;open_system (topMdl) load_system (mechRef) load_system (elecRef)

模型DCMotorLocalSolver包含两个模型块,电气和机械。一步块提供了输入电气模型块,这发出了一个信号命名当前块的力学模型。记录日志和块数据块的角位置和角速度信号。

分析电气组件,打开模型引用命名DCMotorElectrical在仿真软件™通过双击编辑模型块命名。电动机的电动力学建模为一系列RL电路。

框图模型汽车使用汽车电器的电动力学常数,电阻和电感。输入电压和角速率输入,输出是电机电流。

输入电压 v 可以表示为电动机电阻上的电压的总和 红外 ,电机电感上的电压 l dt ,由于电动机的电压电常数 K e 和角速度 d θ dt

v = 红外 + l d d t + K e d θ d t

电气组件的模型计算的值电流、机械系统的使用来计算电机的速度和负载。

d d t = v l - - - - - - R l - - - - - - K e l d θ d t

电机电感和电阻确定电气时间常数 t e 的系统。

t e = l R

汽车在这个模型中有一个电感 2 5 μ H 和一个电阻 3 Ω ,导致的电气时间常数 200年 ns

分析机械组件,导航回到顶部模型通过单击箭头。然后,打开模型引用命名DCMotorMechanical在模型编辑器中通过双击模型块命名机械

机械系统模型的旋转运动的结果所产生的转矩电动机电流。总转动惯量电动机和负载 J 倍角加速度 d θ d t 2 等于系统中力量的总和。电机电流 和电枢线圈的磁场创建一个按比例缩小的武力电动机转矩常数 K T 。对于这个示例,假定磁场是恒定的。角的速度 d Ɵ d t 创建一个力的粘滞摩擦运动 b

J d θ d t 2 = K T - - - - - - b d Ɵ d t

机械组件模型中集成的角速度角加速度计算电机和负载,计算当前电气系统使用。

d θ d t 2 = K T J - - - - - - b J d Ɵ d t

运动阻力,电机和负载的惯性,电常数,电动机的转矩常数确定机械时间常数 t [1]

t = R J K e K T

汽车在这个模型的阻力 3 Ω 电常数 0 025年 Vs rad 和转矩常数 0 25 纳米 一个 。系统的总惯性矩 3 2 μ 纳米 年代 2 ,导致的机械时间常数 15 4 女士

基线运行仿真

模拟模型使用一个模拟输出的解算器创建一个基线和时机。使用一个单一的解决者,整个系统必须使用相同的时间步运行。电气时间常数驱动的选择步长。步长必须足够小,以捕捉电子的动力学响应。

对于这个示例,使用模型ode3固定步与步长等于解决电气时间常数, 200年 ns 。模拟模型为仿真结果创建一个基线和执行时间。

set_param (mechRef“UseModelRefSolver”,“关闭”)baselineOut = sim (topMdl);

看到所需的时间执行仿真,检查ExecutionElaspedWallTime场的TimingInfo结构仿真元数据。的Simulink.SimulationOutput对象baselineOut包含一个Simulink.SimulationMetadata对象的信息模型和仿真,包括结构TimingInfo

使用一个配置ode3解算器的步长 200年 ns 执行阶段的模拟运行了好几秒。

baseExec = baselineOut.SimulationMetadata.TimingInfo.ExecutionElapsedWallTime
baseExec = 3.6396

日志记录块模型中的位置和速度数据仿真数据检查员。访问运行仿真中创建数据检查和改变名字基线:DCMotorLocalSolver

baseRun = Simulink.sdi.Run.getLatest;baseRun。Name =“基线:DCMotorLocalSolver”;

模拟使用本地解算器

的性能优势和对模型输出的影响,配置力学模型使用当地的解决者。机械系统的动态操作更长的时间尺度。配置模型时使用当地的解算器,您可以指定一个更大的时间步长,因此机械系统计算不发生更频繁地捕捉所需的系统响应。

在上面的模型中,继续使用 200年 ns 步长。配置DCMotorMechanical模型使用ode3解算器作为本地解算器的步长2 ms。您可以配置的设置模型参考的模型,使用属性检查器或块参数对话框。

  1. 在上面的模型中,选择模型块引用DCMotorMechanical模型。

  2. 打开属性检查器。在建模选项卡中,扩大设计部分并选择属性检查器,或者按Ctrl + Shift + I

  3. 在属性检查器,扩大解算器部分。

  4. 点击旁边的超链接使用本地解算器参数。参考模型的配置参数对话框打开。

  5. 的配置参数对话框中DCMotorMechanical模型,模型参考窗格中,选择使用当地的解算器引用模型

  6. 配置引用模型的解算器设置,选择解算器窗格。

  7. 设置解算器ode3 (Bogacki-Shampine)

  8. 设置固定步长(基本样本时间)0.002

  9. 点击好吧

模型中,模型块显示当地的解算器选定的参考模型。

模型块有一个标签,说ode3表明引用模型配置为使用ode3解决当地解决。

或者,您可以配置模型设置以编程方式使用set_param函数。

set_param (mechRef“UseModelRefSolver”,“上”,“SolverType”,“固定的”,“规划求解”,“ode3”,“FixedStep”,“0.002”);

块模型参数输入信号处理输出信号处理指定本地解决如何处理输入从顶部模型并提供输出模型。对于这个模拟,使用默认值。

mdlBlkPath = append (topMdl,“/机械”);set_param (mdlBlkPath“InputSignalHandling”,“汽车”,“OutputSignalHandling”,“使用规划求解interpolant”)

使用当地解决模拟模型。

localOut = sim (topMdl);

检查模拟元数据看到仿真的时间花在执行阶段。当你使用本地解决执行机械系统以较慢的速度,仿真运行得更快。

localExec = localOut.SimulationMetadata.TimingInfo.ExecutionElapsedWallTime
localExec = 2.4772

访问运行仿真数据中创建的检查员。改名为当地解决:DCMotorLocalSolver

localRun = Simulink.sdi.Run.getLatest;localRun。Name =“LocalSolver: DCMotorLocalSolver”;

分析仿真结果

是否使用本地解决仿真结果的影响,情节的位置和速度数据模拟仿真数据的检查员。

模拟选项卡,在审查结果,点击数据检查。另外,使用Simulink.sdi.view函数。

Simulink.sdi.view

在模拟数据检查员、情节从两个运行速度和位置信号。另外,使用Simulink.sdi.loadView函数加载保存视图对于这个示例,命名DCMotorLocalSolver1

Simulink.sdi.loadView (“DCMotorLocalSolver1”);

当地的解算器仿真的结果几乎是一样的结果从基线模拟,使用单一的解决者和步长。实线显示了基线的结果。虚线显示当地的解决结果。

two-by-one阴谋在仿真数据检查显示了角速度信号的基线和地方解决模拟顶部情节和角位置信号从底部的两个模拟图。

发生在最大的区别角速率信号的模拟。当地的解算器决定所需的状态和信号值从顶部模型使用外推法。第一次当地的解决步骤,解决当地的推断没有足够的历史。第二步,当地从顶部模型解算器可以推断值和输出值的补偿。

使用零输入和输出处理

因为当地解决的执行与解算器顶部,当地的解决者推断值它使用的模型和提供插值数据解算器使用。您可以使用输入信号处理输出信号处理配置本地解决推断如何输入和inteprolates输出值。

默认情况下,输入信号处理参数值是汽车。软件决定如何推断当地的数据解算器使用的模型。默认值为输出信号处理参数是使用解算器interpolant,这意味着当地的解决提供了输出值,使用规划求解interpolant补偿。

您可以指定每个参数零级举行代替。配置模型块引用DCMotorMechanical模型使用零级举行输入和输出信号处理。

set_param (mdlBlkPath“InputSignalHandling”,“零”,“OutputSignalHandling”,“零”)

看到输入和输出信号处理的影响仿真结果,模拟模型。

zohOut = sim (topMdl);

检查模拟的执行时间。使用简单的外推方法进一步减少了执行时间。

zohExec = zohOut.SimulationMetadata.TimingInfo.ExecutionElapsedWallTime
zohExec = 3.3558

访问运行仿真数据中创建的检查员。改名为当地解决ZOH: DCMotorMechanical

zohRun = Simulink.sdi.Run.getLatest;zohRun。Name =“当地解决ZOH: DCMotorMechanical”;

仿真数据检查员取代了信号从第一个本地解决从零运行与信号保持运行。之间的信号值相似的基线和零级跑。零级的信号保持运行步骤,反映零级和步长为当地解决。

参考

[1]Younkin,乔治•布什(George W。“电动伺服电机方程和时间常数。”https://support.controltechnologycorp.com/customer/elearning/younkin/driveMotorEquations.pdf。

另请参阅

模型设置

相关的话题

Baidu
map