Pythonでジェフコットローターの2面アンバランス振動を計算する

  • このエントリーをはてなブックマークに追加

 回転機の振動問題はアンバランスの修正を目的に検討される場合が多いですが、振動を毎回実験で評価するのは時間がかかって大変です。ここでは実機がなくても簡単に回転機の振動検討ができるよう、Jeffcott Rotorの問題をPythonで解析してみます。アンバランスでよく検討される2面のモデルに対応しているので、是非参考にしてください。

こんにちは。wat(@watlablog)です。ここでは回転機のシミュレーションを発展させ、2面のアンバランス振動を計算することができるジェフコットローターを扱います!

この記事のモチベーション

2面のアンバランス振動を解析する

前回記事のおさらい

 WATLABブログでは過去に以下2つの記事で回転機の振動シミュレーションを行ってきました。

回転機のアンバランス振動をシミュレートするPythonコード
回転機の振動シミュレーションで回転パルスを設定してみた

 上の記事では基本的な運動方程式と、それをPythonで数値解析するコードを紹介しました。そして回転数をスイープアップさせていったときの挙動を観察し、教科書通りの挙動を得ることまで確認しました。
 下の記事では回転機の計測をするときによく使う回転パルスの表現をシミュレーションに組み込む方法を書いています(我流ですが)。こうすることで回転機の振動として重要なアンバランスの位相に着目した検討ができるようになります。
 実はこれらの記事で扱っている回転機(ローター)もジェフコットローターと呼ばれるローターを想定しています。前回までは1面の変位や速度しか見ていませんでしたが、今回はこのジェフコットローターを2面の振動計測ができるように運動方程式を拡張します。

なぜ2面で振動を確認したいか?

 回転機のアンバランス振動を分析するということは、そのアンバランス振動が実機動作中に問題にならないように修正することを目的とするのが一般的です。しかし1面だけしか振動を計測していないとほとんどのケースで満足にアンバランス修正はできません。
 例えば自動車のタイヤ交換時に行うホイールのアンバランス修正作業は回転軸方向で2箇所にカウンターウェイトをつけてバランシングをします。これは1箇所だけだと面振れの成分を除去できないからであり、このようなアンバランス修正の理解を得るために今回2面の振動を確認するというのが主なモチベーションです。

 回転機やバランスについて、わかりやすい記事があったのでこちらも参考にしてみてください。
【ターボ機械シリーズ③】 ローターダイナミクスとは

UnbalanceとImbalanceについて

 ローターダイナミクスの分野で英語の文献を読んでいると、アンバランスUnbalance)とインバランスImbalance)という表現が混在しています。どちらも「不均衡」を意味しますが、主にUnbalanceは質量の不均衡を意味し、ISO 1925:2017でも定義されています。Imbalanceの方はもっと広義の不均衡(質量分布の不均衡以外など)を意図している場合が多いとのことです。しかしImbalanceの方はISOで定義されているわけではなく、論文の著者が好みで使用することが多いそうです。この記事ではUnbalanceで統一していますが、参考までに。

2面を考慮したジェフコットローター

 ジェフコットローターJeffcott Rotor)とは、回転機の振動解析において最も単純化したモデルとしてよく使われています。先ほど紹介した記事もジェフコットローターモデルを扱っていますが、このモデルには以下の仮定があります。

  • ローターの質量はディスクに集中している
  • シャフトは線形ばねである
  • 軸受(ベアリング:BRG)はばねとダンパーで構成される
    単面のジェフコットローターは下図ですが、シャフトの質量は無視しています。そしてシャフトは線形のばね定数を持ちます。この剛性を連結剛性と呼び、本来はシャフトの長さや材料定数、断面形状で決まる剛性を簡易的に表現したものです。
単面Jeffcott Rotor

 今回扱う2面のローターモデルはこちらです。ディスクを繋ぐシャフトの長さは規定しなくても、連結剛性で表現されます。

2面Jeffcott Rotor

動作環境

Advertisements

本環境はPython3.12.11と以下の外部ライブラリで動作を確認しています。

Pythonで2面のアンバランス振動を解析するコード

想定モデル

 コードを実装する前に、今回扱う2面のアンバランス振動を解析する対象モデルを以下に示します。
 2面の名称を考えるために、モーターと回転機のシャフトがカップリングで接続されている部分も表現しています。
 ここで、2つあるディスクのうちカップリング側を\(C\)、反対側を\(E\)と呼びます。これはCoupling sideとEnd sideという位置関係から来る名称として一般的によく使われるものです。

モデル

 この図には以下の考慮すべきパラメータも記載しています。

  • \(\omega\):角速度 [rad/s]
  • \(m_{1}\):ディスクCの質量[kg]
  • \(m_{2}\):ディスクEの質量[kg]
  • \(k_{b}\):BRGの支持剛性[N/m]
  • \(c_{b}\):BRGの支持減衰[N·s/m]
  • \(k_{s}\):シャフトの連結剛性[N/m]
  • \(c_{s}\):シャフトの連結減衰[N·s/m]
  • \(U_{C}\):ディスクCのアンバランス[kg·m]
  • \(U_{E}\):ディスクEのアンバランス[kg·m]

 今回は2面の振動を分析することを主眼に置くので、ローターダイナミクスとして重要なジャイロ効果は無視します(別の記事で書く予定)。

運動方程式

 2面のアンバランス振動を解析するには、2枚分のディスク質量と面内振動を表現するためディスクそれぞれについて\(x, y\)方向の自由度を表現する必要があります。過去記事よりも運動方程式の数が増えてややこしくなるので、行列とベクトルを用いた式(1)を定義します。

\[ \mathbf{M}\ddot{\mathbf{q}}+\mathbf{C}\dot{\mathbf{q}}+\mathbf{K}\mathbf{q} = \mathbf{F}(t) \tag{1} \]

 ここで\(\mathbf{q}=[x_{C}, y_{C}, x_{E}, y_{E}]^\top\)と変位の状態変数を定義し、\(\dot{\mathbf{q}}\)と\(\ddot{\mathbf{q}}\)は\(\mathbf{q}\)の速度と加速度です。

 2枚のディスクと2方向の振動自由度に対応するため、質量行列は式(2)となります。

\[ \mathbf{M} = \begin{bmatrix} m_1 & 0 & 0 & 0 \\ 0 & m_1 & 0 & 0 \\ 0 & 0 & m_2 & 0 \\ 0 & 0 & 0 & m_2 \end{bmatrix} \tag{2} \]

 剛性行列と減衰行列は式(3)(4)で示されます。運動方程式は全部で4つあり、\(x_{C}, y_{C}, x_{E}, y_{E}\)それぞれに影響する力関係から接続する先を考えて行列を構築します。今回はシャフトを介して2つのディスクが互いに結合されているため、非対角項にクロス成分が入っています。仮に\(k_{s}\)と\(c_{s}\)がゼロの場合、2枚のディスクは完全に独立します。

\[ \mathbf{K} = \begin{bmatrix} k_b + k_s & 0 & -k_s & 0 \\ 0 & k_b + k_s & 0 & -k_s \\ -k_s & 0 & k_b + k_s & 0 \\ 0 & -k_s & 0 & k_b + k_s \end{bmatrix} \tag{3} \] \[ \mathbf{C} = \begin{bmatrix} c_b + c_s & 0 & -c_s & 0 \\ 0 & c_b + c_s & 0 & -c_s \\ -c_s & 0 & c_b + c_s & 0 \\ 0 & -c_s & 0 & c_b + c_s \end{bmatrix} \tag{4} \]

 外力ベクトルは式(5)です。アンバランス\(U_{C}, U_{E}\)は質量と距離の積の次元で与えられており、外力項は遠心力(\(F=mr\omega^{2}\))を意味しています。

\[ \mathbf{F}(t) = \begin{bmatrix} \omega^2 U_C \cos(\omega t + \phi_C) \\ \omega^2 U_C \sin(\omega t + \phi_C) \\ \omega^2 U_E \cos(\omega t + \phi_E) \\ \omega^2 U_E \sin(\omega t + \phi_E) \end{bmatrix} \tag{5} \]

 これらの運動方程式は「Pythonで計算するために多自由度振動系を行列形式にする方法」で紹介した方法と同様の考え方で立てることができます。まだ慣れていない人は是非こちらの記事もみてみてください。

Pythonによる数値計算コード

 運動方程式が立てられたら、後はコードを実装して解析するだけです。次のコードをコピペして実行してみましょう。

実行結果

 上記コードは次の部分でC面側のみにアンバランスを設定しています。

 コードを実行すると次のmatplotlibによるグラフが表示されます(振動が安定する最後の2周期分だけを表示しているため横軸は100[s]近くになっています)。このグラフはC面とE面の\(xy\)変位をプロットしていますが、C面にしかアンバランスを設定していないのにE面にも変位が発生しています。これはまさしく連結剛性と連結減衰による力の伝達が発生していることの証拠です。ちなみにC面には0°にアンバランスを設定しているため、回転パルスの位相と完全に同期しています。
 回転パルスについては「回転機の振動シミュレーションで回転パルスを設定してみた」の記事を参照してください。

解析結果1

実行結果:連結剛性と連結減衰をゼロにする

 コードの次の部分を変更(\(k_{s}=c_{s}=0\))し、再度実行してみましょう。

 C面の振動は確認できますが、E面の振動がゼロになる結果を得ます。これは連結がなくなったことを意味します。

式を自分で立てているのでこの結果は自明ですが、こういう基礎検証はコードのバグ出しや理解を深めるために非常に重要です!

実行結果:連結剛性を連続的に上げていく

 \(k_{s}\)の値を少しずつ上げていって挙動を見てみましょう。次の結果は先ほどのコードのksをforループで0から1000まで上げていったものです。剛性を高くしていくとあるところでサチレートすることもわかりました。

実行結果:回転数スイープ

 以下のコードで回転数をスイープさせて変位応答を確認します。

 こちらが実行結果です。結構面白い結果となったと思います。「回転機の振動シミュレーションで回転パルスを設定してみた」の記事で共振を過ぎると位相が反転することはわかっていましたが、ディスクが2つになると反転時にアンバランスを設定していない面の振幅が一瞬高くなる様子が確認されました。共振後はC面側の位相はずれたままですが、E面側の位相は元の位置に戻るようです。

なぜこのような挙動になるんだ!?今はわかりませんが(コードのバグ?)、モードが関係していそうだという予想します。わかる方、ご教示いただけると助かります。

まとめ

 本記事はジェフコットローター(Jeffcott Rotor)の2面アンバランス振動をシミュレーションする運動方程式とコードを紹介しました。ジャイロ効果は考慮していませんが、連結剛性や回転数を変化させた時の挙動は特徴的であることがわかりました。
 このブログでは単純に技術的興味から本コードを書いてみましたが、面白いのでジャイロ効果やバランシング計算の調査も行ってみようと思います。今の時代(生成AI時代)、単純なジェフコットローターであれば追加の要素もそんなに苦もなく入れられるのではと思います。

単面だけでなく、2面の回転機シミュレーションもできるようになりました!
Xでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

SNSでもご購読できます。

コメントを残す

*