Engee 文档
Notebook

带直流电机的驱动器的操作模型

在本文中,我们将考虑一个基于直流电机的驱动模型。 该示例的一个特殊特征是使用物理建模的基本块和块。


模型组成

模型 ee_dc_motor_ctl 它由多个子系统组成。

*速度控制子系统控制器使用基本块制作。 这使得控制算法的设置变得容易。;
*控制对象为直流电机直流电机。 它以"电"库的物理建模块的形式呈现;
驱动程序子系统用于设置发动机转速。;
*要确定电机轴的速度,需要一个传感器,该传感器在
传感器*子系统中实现。

速度控制器的子系统

控制器子系统实现了带有低通滤波器的PI控制器。 稳压电路如下所示。

ee_dc_motor_ctl_1--1719570364109.png

控制器的工作原理简单。 控制器的输入接收期望的速度值和电机轴的当前旋转速度的值。 但是,电机是通过电压控制的,因此应该转换所有速度。 在图中,这被实现为乘以因子0.00125。 在下一步中,在Add块中计算未对准。 之后,生成一个调整后的值,该值将应用于驱动器输入。 由于驱动器被实现为物理块,电压源受控电压源被用于产生输出电压。

发动机驱动子系统

驱动子系统是物理块形式的驱动电路的模型。 受控PWM电压单元根据其ref+和ref-端口的电压生成PWM信号。 H桥块是一个H桥电路,可以反转施加电压的极性。

ee_dc_motor_ctl2-27.06.24.png

在驱动器的输出处产生的电压转到电机的输入。 有关块参数的更多信息,请参阅[DC Motor](https://engee.com/helpcenter/stable/electrical-brushed-motors/dc-motor.html)。

传感器子系统

传感器子系统包含基本单元和理想旋转运动传感器物理单元。 这个单位允许您确定引擎轴速度。

ee_dc_motor_ctl_1--1719569515454.png

读取速度后,有必要将其值转换为伏特,以便在控制器单元中进一步调节。

获取系统数据

让我们运行模型,看看控制器如何在这个模型中满足设定的速度。

In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model, path_to_folder )
    
    Path = path_to_folder * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end

    return model_output
end
Out[0]:
run_model (generic function with 1 method)
In [ ]:
run_model("ee_dc_motor_ctl",@__DIR__) # Запуск модели.
Building...
Progress 8%
Progress 33%
Progress 58%
Progress 83%
Progress 100%
Progress 100%
Out[0]:
Dict{String, DataFrames.DataFrame} with 2 entries:
  "Wref"      => 7×2 DataFrame…
  "SensedRPM" => 60001×2 DataFrame
In [ ]:
# Считывание из simout залогированных сигналов
Wref = simout["ee_dc_motor_ctl/Wref"];
Wref = collect(Wref);

SensedRPM = simout["ee_dc_motor_ctl/Sensor/SensedRPM"];
SensedRPM = collect(SensedRPM);

让我们绘制给定的速度和从传感器获得的速度。

In [ ]:
using Plots

plot(Wref.time, Wref.value, label = "Wref")
plot!(SensedRPM.time, SensedRPM.value, label = "SensedRPM")
Out[0]:

结论

根据图表可以得出结论,电机轴的转速在3秒内达到了设定的转速。 通过更改PI控制器的组件,可以减少实现所需结果的时间。