单摆运动过程的数学模型
单摆运动的示意图所下图所示:
依据欧拉第二定律,绕固定点所有力矩的和为零,在上图中,有两个力矩施加在点x处
一个是重力力矩,一个是惯性力矩。
重力力矩表示为:
M g = m g L s i n ( θ ) M~g~=mgLsin(θ) M g =mgLsin(θ)
惯性力矩表示为:
M i = m L 2 d ( d ( θ ) ) M~i~=mL^2d(d(θ)) M i =mL2d(d(θ))
其中d(d(θ))表示θ的二阶导数,在这里表示角加速度
根据欧拉第二定律,在x处的力矩之和为零,也就是:
M g + M i = m g L s i n ( θ ) + m L 2 d ( d ( θ ) ) = 0 M~g+M~i=mgLsin(θ)+mL^2d(d(θ))=0 M g+M i=mgLsin(θ)+mL2d(d(θ))=0
上式进一步简化为:
d ( d ( θ ) ) = − g s i n ( θ ) / L d(d(θ))=-gsin(θ)/L d(d(θ))=−gsin(θ)/L
为了进一步简化问题,假设随着时间的推移,摆角θ将变的足够小,那么sin(θ)约等于θ
上式可简化为:
d ( d ( θ ) ) = − g θ / / L d(d(θ))=-gθ//L d(d(θ))=−gθ//L
角速度ω可以表示为:
ω = d θ / d t ω=dθ/dt ω=dθ/dt
因此上式可以进一步表示为:
d ω / d t = − g θ / L dω/dt=-gθ/L dω/dt=−gθ/L
单摆运动过程的Modelica模型
单摆运动过程的Modelica模型的代码如下:
model SimplePendulm1
//设置单位
type Length = Real(final quantity = "Length", final unit = "m");
type Acceleration = Real(final quantity = "Acceleration", final unit = "m/s2");
type Angle = Real(final quantity = "Angle", final unit = "rad");
type AngularVelocity = Real(final quantity = "AngularVelocity", final unit = "rad/s");
//设置常量和参数
parameter Length L = 2;
constant Acceleration g = Modelica.Constants.g_n;
//设置变量
Angle theta;
AngularVelocity omega;
//初始方程
initial equation
theta = 0.1;
omega = 0;
//方程
equation
der(theta) = omega;
der(omega) = -(g / L) * theta;
end SimplePendulm1;
查看仿真结果:
没有进行简化的Modelica模型代码如下所示:
model SimplePendulm13
//设置单位
type Length = Real(final quantity = "Length", final unit = "m");
type Acceleration = Real(final quantity = "Acceleration", final unit = "m/s2");
type Angle = Real(final quantity = "Angle", final unit = "rad");
type AngularVelocity = Real(final quantity = "AngularVelocity", final unit = "rad/s");
//设置常量和参数
parameter Length L = 2;
constant Acceleration g = Modelica.Constants.g_n;
//设置变量
Angle theta;
AngularVelocity omega;
//初始方程
initial equation
theta = 1.57;
omega = 0;
//方程
equation
der(theta) = omega;
der(omega) = -(g / L) * sin(theta);
end SimplePendulm13;
方程der(omega) = -(g / L) * sin(theta)不一样,将theta变成了sin(theta),以及将初始摆角设置为90度对应于弧度也就是1.57
查看仿真结果,如下图所示:
现在将初始弧度都设置为0.1,比较两个模型的区别,结果如下图所示:
发现曲线几乎重合,但实际上还是会有一点点区别,但是进行如此简化是合理的
现在将初始弧度都设置为1.57,比较两个模型的区别,结果如下图所示:
发现结果差别比较大,因此但摆角比较大时,是不能进行sin(θ)约等于θ的假设的
用角度代替弧度
我们平常几乎都是关心角度的变化,而不是弧度的变化,因此有必要做如此的代替
在Modelica标准库中对于角度单位的定义如下:
type Angle = Real(final quantity = "Angle", final unit = "rad", displayUnit = "deg");
这样子设置角度的单位就可以,仿真结果如下所示:
角速度随着角度的变化趋势,如下图所示:
参考书籍:
《Modelica多领域物理系统建模入门与提高》