Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

自動車用ピストンのアニメーションとモデル

この例では、MATLAB® と Symbolic Math Toolbox™ を使用して自動車用ピストンの動きをモデル化する方法を示します。

自動車用ピストンの動きを定義し、アニメーションを作成してピストン運動をモデル化します。

手順 1: ピストンのモデルの記述

次の図は自動車用ピストンのモデルを示したものです。ピストンの可動部は、連接棒 (赤の線)、ピストン クランク (緑の線)、ピストン シリンダー ヘッド (グレーの四角形) で構成されます。

パラメーターを定義してピストンのプロパティを記述します。

  • シリンダー ストローク長 S

  • ピストン ボア直径 B

  • 連接棒の長さ L

  • クランク半径 a

  • クランク角 θ

クランクシャフト位置を座標系の原点 O と定義します。ピストン ヘッドとクランクシャフト位置の間の最短距離に下死点 (BDC) のラベルを付けます。BDC の高さは L-a です。ピストン ヘッドとクランクシャフト位置の間の最長距離に上死点 (TDC) のラベルを付けます。TDC の高さは L+a です。

手順 2: ピストンの高さの計算とプロット

次の図はクランクと連接棒を示したものです。

原点からのピストンの高さは H=a cosθ+ L2-a2sin(θ)2 . です。関数symsを使用して、ピストンの高さをシンボリック関数として定義します。

syms pistHeight(L,a,theta)
pistHeight(L,a,theta) = a*cos(theta) + sqrt(L^2-a^2*sin(theta)^2);

連接棒の長さが L=150 mm で、クランク半径が a=50 mm であると仮定します。ピストンの高さを区間 [0 2*pi] で 1 回転するクランク角の関数としてプロットします。

fplot(pistHeight(150,50,theta),[0 2*pi])
xlabel('Crank angle (rad)')
ylabel('Height (mm)')

Figure contains an axes object. The axes object with xlabel Crank angle (rad), ylabel Height (mm) contains an object of type functionline.

ピストン ヘッドの高さが最大になるのは、ピストンが TDC の位置にあるときで、クランク角が 0 または 2*pi のときです。ピストン ヘッドの高さが最小になるのは、ピストンが BDC の位置にあるときで、クランク角が pi のときです。

さらに、a および θ のさまざまな値についてピストンの高さをプロットできます。関数fsurfを使用して、ピストンの高さの表面プロットを作成します。区間 30 mm<a<60 mm および 0<θ <2π のピストンの高さを表示します。

fsurf(pistHeight(150,a,theta),[30 60 0 2*pi])
xlabel('Crank radius (mm)')
ylabel('Crank angle (rad)')
zlabel('Height (mm)')

Figure contains an axes object. The axes object with xlabel Crank radius (mm), ylabel Crank angle (rad) contains an object of type functionsurface.

手順 3: ピストン シリンダーの容積の計算とプロット

燃焼室の高さは、TDC の位置とピストンの高さの差に等しくなります。ピストン シリンダーの容積は、V=π (B2)2(L+a-H) と表すことができます。

ピストンの容積をシンボリック関数として定義し、H の式を pistHeight に置き換えます。

syms pistVol(L,a,theta,B)
pistVol(L,a,theta,B) = pi*(B/2)^2*(L+a-pistHeight)
pistVol(L, a, theta, B) = 

πB2L+a-acos(θ)-L2-a2sin(θ)24

次に、以下のパラメーターの値を定義します。

  • 連接棒の長さ L=150 mm

  • クランク半径 a=50 mm

  • ボア直径 B=86 mm

ピストンの容積を区間 [0 2*pi] で 1 回転するクランク角の関数としてプロットします。

fplot(pistVol(150,50,theta,86),[0 2*pi])
xlabel('Crank angle (rad)')
ylabel('Volume (mm^3)')

Figure contains an axes object. The axes object with xlabel Crank angle (rad), ylabel Volume (mm toThePowerOf 3) baseline contains an object of type functionline.

ピストン容積が最小になるのは、ピストンが TDC の位置にあるときで、クランク角が 0 または 2*pi のときです。ピストン容積が最大になるのは、ピストンが BDC の位置にあるときで、クランク角が pi のときです。

手順 4: 角速度を変えたピストン運動の評価

クランクが最初の 3 秒は 30 rpm で回転し、その後の 4 秒で 30 rpm から 80 rpm まで定常的に加速した後、それ以降は 80 rpm で回転し続けると仮定します。

関数piecewiseを使用して、角速度を時間の関数として定義します。角速度に 2π/60 を乗算して、回転速度を rpm からラジアン/秒に変換します。

syms t0 t
rpmConv = 2*pi/60;
angVel(t0) = piecewise(t0<=3, 30, t0>3 & t0<=7, 30 + 50/4*(t0-3), t0>7, 80)*rpmConv
angVel(t0) = 

{π if  t03π25t02-15230 if  t0(3,7]8π3 if  7<t0

関数intを使用して角速度を積分することでクランク角を計算します。初期クランク角は θ=0 であると仮定します。0 から t までの角速度の積分を計算します。

angPos(t) = int(angVel,t0,0,t);

クランク角の式 angPos を代入して、ピストンの高さを時間の関数として求めます。

H(t) = pistHeight(150,50,angPos)
H(t) = 

{200 if  t=0100 if  t=320625+25 if  t=750cos(σ1)+22500-2500sin(σ1)2 if  7<t22500-2500sin(σ2)2-50cos(σ2) if  t(3,7]50cos(πt)+22500-2500sin(πt)2 if  t<0t(0,3]where  σ1=31π3+8πt-73  σ2=π5t+9t-324

ピストンの高さを時間の関数としてプロットします。ピストンの高さの振動が 3 秒から 7 秒までの間に加速していることに注目してください。

fplot(H(t),[0 10])
xlabel('Time (sec)')
ylabel('Height (mm)')

Figure contains an axes object. The axes object with xlabel Time (sec), ylabel Height (mm) contains an object of type functionline.

手順 5: ピストン運動のアニメーションの作成

角速度の変化に応じて動くピストンのアニメーションを作成します。

最初に、新しい Figure を作成します。位置が固定のシリンダー壁をプロットします。x 軸と y 軸が同じ長さになるように設定します。

figure;
plot([-43 -43],[50 210],'k','LineWidth',3)
hold on;
plot([43 43],[50 210],'k','LineWidth',3)
plot([-43 43],[210 210],'k','LineWidth',3)
axis equal;

次に、関数fanimatorを使用して、ピストン ヘッドのストップモーション アニメーション オブジェクトを作成します。既定では、fanimator は、t の 0 から 10 までの範囲で、単位時間あたり 10 フレームを生成してアニメーション オブジェクトを作成します。ピストン ヘッドは、厚さが 10 mm で高さが可変の H(t) である四角形としてモデル化します。関数rectangleを使用してピストン ヘッドをプロットします。

fanimator(@rectangle,'Position',[-43 H(t) 86 10],'FaceColor',[0.8 0.8 0.8])

連接棒とピストン クランクのアニメーション オブジェクトを追加します。経過時間をカウントするテキストを追加します。

fanimator(@(t) plot([0 50*sin(angPos(t))],[H(t) 50*cos(angPos(t))],'r-','LineWidth',3))
fanimator(@(t) plot([0 50*sin(angPos(t))],[0 50*cos(angPos(t))],'g-','LineWidth',3))
fanimator(@(t) text(-25,225,"Timer: "+num2str(t,2)));
hold off;

Figure contains an axes object. The axes object contains 7 objects of type rectangle, line, text.

コマンドplayAnimationを使用してピストン運動のアニメーションを再生します。