主要内容

在直流电机的局部求解中使用模型参考

这个例子展示了如何使用局部求解器来提高机械负载直流电机的仿真性能。

复杂动态系统的子组件往往具有不同的频率和时间尺度。对于这样的系统,可以通过将模型划分为不同的组件,并对组件应用不同的求解器来加快仿真速度。带有局部求解器的模型引用通过允许在带有不同求解器的顶级模型中引用带有自己局部求解器的模型引用来支持这种方法。

模型的分析与物理

在这种直流电动机模型中,当电枢电流流过电枢线圈时产生转矩。转矩与电枢电流和电机磁场强度成正比。对于一个简单的直流电动机,你可以假设磁场是恒定的,并推导出这些方程[1]

转矩 T 生成的, K T 电机转矩是否恒定和 为电枢电流:

T K T

电磁场 e 生成的, K e 电机电压是否恒定 Ɵ 为电枢的角度/负载:

e K e d Ɵ d t

直流电机由两个子部件组成:

  • 电气部分,在那里 l 是电感和 R 为电枢线圈的电阻:

v R + l d d t + e R + l d d t + K d Ɵ d t

  • 机械部分,在那里 J 为电机电枢总转动惯量加负载:

J d Ɵ ¨ d t T - b d Ɵ d t K - b d Ɵ d t

这两个子组件通过两个状态变量电流耦合 而角速度 d Ɵ d t

机械时间常数可以通过假设b = 0来近似。

t R J K e K T

电时间常数是

t e l R

模型参数和时间常数

假设本例中使用的参数为这些值。

参数 价值 单位 K t 0 0 2 5 Nm / K e 0 0 2 5 V / rad / s R 3. 欧姆 l 2 5 e - 6 H J 3. 2 e - 6 纳米 年代 2 b 3. 5 e - 6 Nm / rad

因此, t R J K e K t 0 0154 年代;而且 t e l R 8 33 e - 07 年代。

如果你只使用一个求解器来模拟这个模型,所需的步长应该足够小,以捕捉电时间常数。假设步长为 t 年代 2 e - 7

该模型的两个子组件的时间常数相差很大。因此,可以使用模型参考局部求解器来加速模型的求解。

使用模型参考的直流模型

根据时间常数分析,可以将直流模型划分为两个分量。将电气部分分组到一个虚拟子系统中,以便用顶部求解器求解。将机械零件分组成一个模型参考,这样就可以用顶部求解器或局部求解器求解。在这个Simulink模型中显示了直流电机。

将整体模型划分为机电部分,加载顶层模型。

topModel =“DCMotor_localsolver”;bottomModel =“DCMotor_Mechanical”;open_system (topModel) load_system (bottomModel)

模拟

使用步长为2e-7的全局求解器对模型进行模拟,然后将该结果作为基线。计算两个分量的时间常数,并用它们来选择求解步长。

计算电气和机械系统的时间常数Tm而且Te,分别。计算可用于选择局部求解步长的时间常数比。同时计算基于时间常数的全局求解步长。一般来说,你可以用时间常数除以5来计算步长。

Tm = R * J /克/ Kt;Te = L / R;timeConstantRatio = Tm和Te;topStep = 2 e;localStep = topStep * 10000;

用顶层求解器模拟整个模型。

set_param (topModel,“规划求解”“ode3”“fixedStep”num2str (topStep));set_param (bottomModel“UseModelRefSolver”“关闭”);sim (topModel);日元= yout.signals.values;

现在,启用对模型的机械部分建模的模型引用的局部求解器。由于机械部分的时间常数比电气部分大得多,因此局部求解器的步长可以比全局求解器大得多。设置为2e-3。

用两个求解器模拟模型。顶部用颂歌3.步长为2e-7的求解器。对于本地,使用ode3步长为2e-2的求解器。当使用局部求解器时,在模型引用的输入和输出处使用零阶保持(ZOH)数据处理。可以通过模型引用的属性检查器的求解器选项卡访问本地求解器参数。

set_param (topModel,“规划求解”“ode3”“fixedStep”num2str (topStep));set_param (bottomModel“UseModelRefSolver”“上”) set_param (bottomModel“规划求解”“ode3”“fixedstep”num2str (localStep));

设置基于实例的参数。

机械= [topModel/机械的];set_param(机械,“InputSignalHandling”“零持有”);set_param(机械,“OutputSignalHandling”“零持有”);sim (topModel);y2 = yout.signals.values;

输入信号处理,选择“自动”选项。为输出信号处理,选择“use solver interpolant”。最后,利用局部定步求解和数据交换对模型进行了仿真。

set_param (topModel,“规划求解”“ode3”“fixedStep”num2str (topStep));set_param (bottomModel“UseModelRefSolver”“上”);set_param (bottomModel“规划求解”“ode3”“fixedstep”num2str (localStep));机械= [topModel/机械的];set_param(机械,“InputSignalHandling”“汽车”);set_param(机械,“OutputSignalHandling”使用解算器interpolant”);sim (topModel);sim (topModel);y3 = yout.signals.values;

结果

该图比较了三个模拟结果。图示直流电机在端子上加电压,电机开始转动时,直流电机的位置阶跃响应。平滑的蓝色曲线是基线。橙色阶跃曲线表示使用局部求解器和ZOH输入输出数据处理的结果。该策略以2e-3的采样率对机械部件的输入和输出进行采样,局部求解器将其状态与该步长进行集成。此策略在本例中工作良好,因为生成的结果非常接近基线性能。使用的本地求解器“汽车”和“使用解算器interpolant”是黄色曲线。与ZOH策略相比,仿真结果更好。橙色的线更平滑,更接近基线。

图();情节(吹捧,y1,“线宽”2);;情节(吹捧,y2,“线宽”, 1.5);;情节(y3吹捧,“线宽”, 1.5);;传奇(“全球解决者ode3”' +本地求解器ode3'“加上数据补偿”);标题(“具有全局和局部求解器的模拟直流电机模型”);包含(“时间(s)”);ylabel (“位置(rad)”);

图中包含一个axes对象。带有全局和局部求解器标题的simulte DC Motor model坐标轴对象包含3个类型为line的对象。这些对象表示全局求解器ode3,加上本地求解器ode3,加上数据补偿。

参考

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

另请参阅

|

相关的话题

Baidu
map