2401_84146461 2024-04-08 13:57 采纳率: 70%
浏览 10
已结题

谁能用simulink搭建一下这个系统框图

用MATLAB的simulink搭建一下这个系统,谢谢各位大家

img

  • 写回答

13条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-08 13:57
    关注

    引自免费微信小程序:皆我百晓生

    针对您提供的系统描述,这是一个基于MATLAB Simulink搭建的单轴位置控制模式下的电机-负载双惯量模型。根据您的要求,我将为您详细阐述搭建步骤及所需参数设定,同时提供相应的Simulink模型代码。由于文本形式无法直接展示图形,我将尽可能清晰地描述模型构建过程,以便您自行在Simulink环境中实现。

    一、系统组件及参数

    根据描述,系统包含以下主要组件:

    1. 位置环控制器:由一个位置控制器(P控制器,增益为Kpp)和一个速度控制器(PI控制器,比例增益为Kp,积分增益为Ki)组成。其中,位置控制器的输出作为速度控制器的设定值。

    2. 双惯量系统:包括两个转动惯量J1J2,负载力矩常数Kg,以及电机扭矩常数KT。电机扭矩与电压成正比,比例系数为KT

    3. 系统参数

      • J1 = 0.000044 kg.m^2
      • J2 = 0.00044 kg.m^2
      • Kg = 10 N.m/rad
      • KT = 0.2717

    二、Simulink模型搭建步骤

    1. 新建Simulink模型:打开MATLAB,创建一个新的Simulink模型。

    2. 添加模块

      • :从库中添加“Step”模块,作为位置设定值(Position Command)。
      • 控制器
        • 从“Sources”库中添加“Constant”模块,分别设置KppKpKi的值。
        • 从“Math Operations”库中添加“Product”模块,用于位置控制器的乘法运算。
        • 从“Continuous”库中添加“PID Controller”模块,并设置其类型为PI控制器,对应KpKi
      • 双惯量系统
        • 从“Sources”库中添加“Constant”模块,设置电机扭矩常数KT
        • 从“ Simscape Multibody”或“User-Defined Functions”库(如果已定义双惯量函数)中添加对应的双惯量系统模块。
      • 传感器
        • 从“Sinks”库中添加“Scope”模块,用于观察位置、速度和电流等信号。
    3. 连接模块

      • 将“Step”模块的输出连接到位置控制器(P控制器)的输入端。
      • 将位置控制器的输出连接到速度控制器(PI控制器)的设定值端。
      • 将速度控制器的输出通过乘以电机扭矩常数KT后,作为双惯量系统的输入扭矩。
      • 双惯量系统的输出(位置和速度)分别连接到对应的“Scope”模块。
    4. 设置模块参数

      • 对应上述各“Constant”模块,设置其值为相应的系统参数。
    5. 配置仿真参数

      • 在模型的“Simulation”菜单中,设置合适的仿真时间、采样时间等参数。

    三、Simulink模型代码(伪代码)

    % 创建新模型
    model = 'PositionControlledDualInertiaSystem';
    open_system(model);
    
    % 添加模块
    add_block('simulink/Sources/Step', [model '/Position_Command']);
    add_block('simulink/Sources/Constant', [model '/Kpp']);
    add_block('simulink/Sources/Constant', [model '/Kp']);
    add_block('simulink/Sources/Constant', [model '/Ki']);
    add_block('simulink/Math Operations/Product', [model '/Position_Controller']);
    add_block('simulink/Continuous/PID Controller', [model '/Velocity_Controller']);
    add_block('simulink/Sources/Constant', [model '/KT']);
    % 添加双惯量系统模块(具体路径取决于所使用的库或自定义函数)
    % add_block('<library_path>/Dual_Inertia_System', [model '/Dual_Inertia']);
    add_block('simulink/Sinks/Scope', [model '/Position_Scope']);
    add_block('simulink/Sinks/Scope', [model '/Velocity_Scope']);
    
    % 连接模块
    connect([model '/Position_Command/1'], [model '/Position_Controller/In1']);
    connect([model '/Kpp/1'], [model '/Position_Controller/In2']);
    connect([model '/Position_Controller/Out1'], [model '/Velocity_Controller/In1']);
    connect([model '/Kp/1'], [model '/Velocity_Controller/ProportionalGain']);
    connect([model '/Ki/1'], [model '/Velocity_Controller/IntegralGain']);
    connect([model '/Velocity_Controller/Out1'], [model '/Product/In1']);
    connect([model '/KT/1'], [model '/Product/In2']);
    connect([model '/Product/Out1'], [model '/Dual_Inertia/In1']); % 双惯量系统输入扭矩
    connect([model '/Dual_Inertia/position'], [model '/Position_Scope/In1']); % 位置输出
    connect([model '/Dual_Inertia/angular_velocity'], [model '/Velocity_Scope/In1']); % 速度输出
    
    % 设置模块参数
    set_param([model '/Kpp'], 'Value', num2str(Kpp));
    set_param([model '/Kp'], 'Value', num2str(Kp));
    set_param([model '/Ki'], 'Value', num2str(Ki));
    set_param([model '/KT'], 'Value', num2str(KT));
    
    % 配置仿真参数
    set_param(model, 'StopTime', '10'); % 设置仿真时间为10秒
    set_param(model, 'Solver', 'ode45'); % 设置求解器为ode45
    

    以上代码为搭建模型的伪代码,需根据实际库路径和双惯量系统模块进行相应调整。请按照上述步骤在Simulink环境中手动搭建模型,或根据实际环境修改并运行上述代码。

    注意:由于您提供的参数列表中缺少KpKi的值,您需要根据实际需求设定这两个参数。此外,您提到的“1-s/"y”参数未在描述中明确其含义和用途,因此未在模型中体现。如有必要,请补充相关信息并将其纳入模型中。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日