モータやエンジンといった回転機は構造の共振に当たらないように加振力を設計する必要があります。ここではPythonで回転数変化を模擬した周波数応答解析を行い、実験の次数トラッキング解析と比較できるシミュレーション結果を得る事を目標とします。
こんにちは。wat(@watlablog)です。ここでは覚えたての周波数応答解析で回転数変化を模擬した加振力の計算してみます!
※本記事は過去に学んだ内容の応用、小Tipsです!
本記事の対象者
加振力の変化を考慮した周波数応答解析をしたい人
前回の記事「振動モデルを直接法の周波数応答解析で解くPythonコード」ではPythonを使って振動モデルの周波数応答解析を行い、各周波数における振動応答のレベルを計算できるようになりました。
下図はホワイトノイズ加振時の2自由度振動モデルにおける振動応答を計算した結果例です。共振のピークが2つ確認できます。

一般的には、周波数応答解析では下図の関係を計算する手法です。
伝達関数
伝達関数
下図は実際に前回記事のコードで計算した結果ですが、入力のピークが伝達関数のラインに乗って振幅が決まっている様子がよくわかると思います。

今回の記事は周波数応答解析の高速性を利用し、加振力が変化した時の振動応答を計算したい人を対象にしています。
イメージとしては、下図のようにモータ駆動時の加速度振動や変位振動をセンサーで計測している状況を考えます。

モータの回転数は一定ではなく、使用状況によって様々に変化します。回転機の振動を計測すると、1回転に1回振動が発生する基本次数(回転1次)の他に、基本次数の等倍で発生する高調波次数(回転N次)も発生します。
横軸に回転数[rpm]、縦軸に周波数[Hz]、色レベルを応答振動で表現すると、回転機の振動は下図のスペクトログラムのようなプロットになります。

次数の線は回転数が増加すると周波数も増加するため、斜めに線が引かれる形になりますが、構造物の共振(固有振動数)は回転数に拠らず一定です。
周波数変化する回転次数が周波数で一定の共振帯と一致すると急激に応答振動のレベルが増大するため、故障や音振動のクレーム原因になり得ます。
共振はスペクトログラムの横一線でぼやっと明るくなるので、見た目で判断する事もできます。いちいち実験モーダル解析や固有値解析をしなくても、ざっくり知る事ができて便利ですね。
共振は構造物に必ず存在しますが、できるだけ製品の使用範囲外になるように設計したり、どうしても避けられない場合は材料や構造、制御方式を工夫したりといった事を検討します。
周波数応答解析はこのような設計検討で大変重宝される解析手法です。今回はPythonを使って上記モータのような加振力が変化する場合の周波数応答解析をコーディングしてみます。
加振力の変化を考慮した周波数応答解析のPythonコード
動作環境
このページに記載のコードは以下のPC環境で検証しました。参考までに。
PC
Windows | OS | Windows10 64bit |
---|---|---|
CPU | 2.4[GHz] | |
メモリ | 4[GB] |
Mac | OS | macOS Catalina 10.15.7 |
---|---|---|
CPU | 1.4[GHz] | |
メモリ | 8[GB] |
Python環境
Python環境は以下です。外部ライブラリはNumpyと結果可視化用にmatplotlibを使っています。
Python | Python 3.7.7 |
---|---|
PyCharm (IDE) | PyCharm CE 2020.1 |
Numpy | 1.19.0 |
matplotlib | 3.2.2 |
モデル定義
今回も理解する事を優先させて、2自由度振動系を定義します。
変化する加振力を作成
変化する加振力セットは以下の関数で作成します。dataとして時間波形を作成した後にフーリエ変換して周波数波形にするという作り方をしています。周波数応答解析時にそのまま使えるように周波数分解能やサンプリングレートをサンプリングの定理に則って設定しています。
補足:実用的な加振力データを作るには
今回はサンプルとしてPython上で理想的な波形を生成していますが、実際の設計では製品にどのような外力が加わるのかをよく分析して設定する事が重要です。
例えばモータであれば、モータ内部のステータやロータに働く電磁力を別途磁界解析を行なって得るといった事が実用的には考えられます。
他にも機構部品がぶつかったり摩擦によって力が発生したり…解析の目的に応じて外力の詳細度や種類を検討する必要があります。
周波数応答解析の関数を修正
「振動モデルを直接法の周波数応答解析で解くPythonコード」は関数の内部で加振波形を作っていましたが、今回は関数の引数excitationとして波形を渡す形で書いてみました。
メイン関数の部分で先ほど作成した加振力セットを1行ずつ抽出し、周波数応答解析を実行する事で加振力が変化する分析を行います。
全コード(コピペ用)
以下にコピペ用全コードを示します。減衰の考え方等は一緒ですが、フーリエ変換関数を追加したり、前回記事とはちょこちょこ変更していますので、コード内コメントもご確認下さい。
単一次数の結果
上記コードの実行結果は下図です。共振である400[Hz]付近に次数が当たった部分で振幅大となっています。

高調波次数も追加してみる
続いて、先ほどの加振力セットの関数内のdata部分コメント蘭を切り替えて、のこぎり波バージョンにしてみます。のこぎり波は基本周波数の高調波が出るので、今回のように高調波を出したい時によく使います。
結果は以下です。複数次数が発生していますが、共振に当たる400[Hz]付近で振幅レベルが増大している結果を得る事ができました。
ちなみに800[Hz]ちょいにも共振があり、薄ら明るくなっている事に気づきましたでしょうか(2自由度なので)?
全コード内には固有値解析コードも付いていますので、是非パラメータを色々変えて遊んでみて下さい。

まとめ
本記事では「振動モデルを直接法の周波数応答解析で解くPythonコード」で学んだ周波数応答解析の応用として、小修正で加振力を変化させてみました。
特に新しい式やアルゴリズムは登場していませんが、学んだ技術でこんな事ができるのは非常に面白いと思いました。
ちょっと考えた事がすぐ実現できるのはPythonのメリットだと思いますので、是非皆さんも始めてみて下さい!
周波数応答解析は便利なので、加振力を色々変えてみてシミュレーションしてみるのも面白いですね!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!