MATLAB / Simulink:模拟电机控制阀

时间:2016-10-26 20:00:12

标签: matlab simulink

问题描述:

我想用Matlab / Simulink模拟电机控制阀(MCV)。控制信号(红色)控制MCV,它可以取0%(完全关闭)和100%(完全打开)之间的每个值:

enter image description here

我用输入信号的三个不同脉冲指示1,2和3.一旦输入信号从0变为1(上升沿),MCV就会开始打开。在时间t_Op之后,MCV完全打开。一旦输入信号从1变为0(下降沿),阀门就会开始关闭。此过程在t_Cl之后完成。请注意,t_Op和t_Cl不一定必须相同。

如图所示,脉冲号后阀门完全关闭。 1(下降沿)。但是,脉冲之间的宽度没有。 2和脉冲号。 3不足以完全关闭阀门。在脉冲的上升沿没有。 3,阀门再次打开,直至完全打开。

问题:

我想用Matlab(首选)或Simulink模拟上述过程。我不是100%确定如何开始解决这个问题。我想过从原始系统中提取上升/边缘并使用这个"触发器"启动一些依赖于时间的"倾斜的" -step-功能。也许你对我有一些提示?

1 个答案:

答案 0 :(得分:0)

要模拟这一点,您需要定义:
1)时间分辨率(0.1 s?0.01s?)
2)阀门分辨率(可能为1%)
3)如何量化你的控制信号(如果它只是0或1,这已经完成;如果它是0V - > 5V,你需要选择哪些值变为off,变为neutral,哪个成为on

如果您将数据量化为0.1秒,并将阀门分辨率量化为1%,您可以使用类似于以下内容的东西(您应该能够自己填写%%%部分

pos_initial = 0; % percent, position
t_res = 0.1; % seconds
pos_res = 1; % percent

%%% Declare t_op, t_cl. Solve for open_speed and close_speed If you have t_op and t_res, how can you solve for the open_speed (the amount of opening in a single step? Do the same for close_speed %%%

position(1) = pos_initial; 
for ii = 2:length(input)
    if(input == 1)
        position(ii) = min(position(ii-1) + open_speed, 100); %this makes potition get bigger, but doesn't let it get bigger than 100%
    else
        %%% Looking at the position(ii) line above, how could you do the same for closing to make sure it doesn't go below zero?
    end
end