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

传感器子系统

传感器子系统包含基本模块和物理模块理想旋转运动传感器**。通过该模块可以检测电机轴的转速。

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 控制器的元件,可以缩短达到预期结果的时间。