在直流电动机中使用局部求解器模型参考
这个例子展示了如何使用局部求解器来提高机械负载直流电机的仿真性能。
复杂动态系统的子组件通常具有不同的频率和时间尺度。对于这样的系统,通过将模型划分为不同的组件,并对组件应用不同的求解器,可以加快仿真速度。带有局部求解器的模型引用支持这种方法,它允许具有自己的局部求解器的模型引用在具有不同求解器的顶级模型中被引用。
模型的分析与物理
在这个直流电动机模型中,当电枢电流流过电枢线圈时产生转矩。转矩与电枢电流和电机磁场强度成正比。对于一个简单的直流电动机,你可以假设磁场是恒定的,并推导出这些方程[1].
转矩 生成的, 电机转矩是否恒定 是电枢电流:
电磁场 生成的, 电机电压是否恒定 是电枢/负载的角度:
直流电机由两个子部件组成:
电气部分,其中 是电感和 是电枢线圈的电阻:
机械部分,其中 为电机电枢的总转动惯量加上负载:
这两个子组件通过两个状态变量电流耦合 角速度 .
机械时间常数可以近似地假设b = 0。
电时间常数是
模型参数和时间常数
假设本例中使用的参数为以下值。
因此, 年代;而且 年代。
如果只使用一个求解器来模拟这个模型,所需的步长应该足够小,以捕捉电时间常数。假设步长为 .
模型的两个子分量的时间常数相差很大。因此,可以利用模型参考的局部求解器对模型进行加速。
使用模型参考的DC模型
基于时间常数分析,可以将直流模型划分为两个部分。将电气部分分组为一个虚拟子系统,以便可以用顶部求解器进行求解。将机械部分分组为模型参考,以便用顶部求解器或局部求解器求解。直流电机显示在这个Simulink模型中。
将整体模型划分为机械和电气部分,加载顶模型。
topModel =“DCMotor_localsolver”;bottomModel =“DCMotor_Mechanical”;open_system (topModel) load_system (bottomModel)
模拟
使用一个步长为2e-7的全局求解器来模拟模型,然后将这个结果作为基线。计算两个组件的时间常数,并使用它们来选择求解器步长。
计算电气和机械系统时间常数Tm
而且Te,
分别。计算可用于选择局部求解器步长的时间常数比率。根据时间常数计算全局解算步长。通常,你可以通过将时间常数除以5来计算步长。
Tm = R*J/Ke/Kt;Te = L/R;timeConstantRatio = Tm/Te;topStep = 2E-7;localStep = topStep*10000;
用顶部求解器模拟整个模型。
set_param (topModel,“规划求解”,“ode3”,“fixedStep”num2str (topStep));set_param (bottomModel“UseModelRefSolver”,“关闭”);sim (topModel);Y1 = youout .signals.values;
现在,启用对模型的机械部分建模的模型引用的局部求解器。由于机械部分的时间常数比电气部分大得多,局部求解器的步长可以比全局求解器大得多。设置为2e-3。
用两个求解器模拟模型。顶部,使用颂歌3.
步长为2e-7的求解器。对于本地,使用anode3
步长为2e-2的求解器。当使用局部求解器时,在模型引用的输入和输出处使用零阶保持器(ZOH)数据处理。本地求解器参数可以通过模型引用的Property Inspector的求解器选项卡访问。
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”,“使用求解插值器”);sim (topModel);sim (topModel);Y3 = youout .signals.values;
结果
该图比较了三个模拟结果。图中为直流电机在端子上加电压,电机开始旋转时的位置阶跃响应。平滑的蓝色曲线是基线。橙色步长曲线表示采用局部求解器和ZOH输入输出数据处理的结果。该策略以2e-3的采样率对机械部件的输入和输出进行采样,局部求解器将其状态与该步长进行集成。该策略在本例中效果很好,因为生成的结果非常接近基线性能。本地求解器使用“汽车”
和“使用求解插值器
就是黄色曲线。与ZOH策略相比,该模拟结果更好。橙色线更平滑,更接近基线。
图();情节(吹捧,y1,“线宽”2);在;情节(吹捧,y2,“线宽”, 1.5);在;情节(y3吹捧,“线宽”, 1.5);在;传奇('全局求解器ode3',+本地求解器ode3,“附加数据补偿”);标题(具有全局和局部求解器的模拟直流电机模型);包含(“时间(s)”);ylabel (“位置(rad)”);
参考
[1]乔治·W·扬金“电动伺服电机方程与时间常数”https://support.controltechnologycorp.com/customer/elearning/younkin/driveMotorEquations.pdf。