簡単なモーターのモデリングをしてみた


今回は簡単にモーターのモデリングをしてみたのでメモがわりに手順を残しておきたいと思います

モーターの力学的モデル

モーターのトルクは電流値に比例し、かつ粘性抵抗によって減衰するので以下のような式になる

J\frac{d^2\theta}{dt^2} = - D\frac{d\theta}{dt} + K_\tau i

ここで、
$J$:慣性モーメント
$D$:粘性抵抗率
$K_\tau$:トルク定数

モーターの電気的モデル

モータの逆起電力は角速度に比例するので以下のようになる

v = L\frac{di}{dt} + Ri + K_e\frac{d\theta}{dt}

ここで、
$v$:入力電圧
$L$:インダクタンス
$R$:抵抗値
$K_e$:逆起電力定数

モーターのブロック線図

simulinkでモーターのモデルを作成してみました

各種伝達関数

電圧から角速度

G_{v2\omega} = \frac{K_\tau}{(J\cdot L)s^2 + (J\cdot R+L\cdot D)s + K_\tau\cdot K_e+R\cdot D}

電圧からトルク

G_{v2\tau} = \frac{(J\cdot s+D)K_\tau}{(J\cdot L)s^2 + (J\cdot R+L\cdot D)s + K_\tau\cdot K_e+R\cdot D}

電圧から電流

G_{v2\omega} = \frac{J\cdot s+D}{(J\cdot L)s^2 + (J\cdot R+L\cdot D)s + K_\tau\cdot K_e+R\cdot D}

状態方程式

状態変数を$x = \left[i, \dot\theta \right]^T$とすると、モーターの状態方程式は以下のように書ける

\frac{dx}{dt} = \begin{bmatrix}
-\frac{R}{L} & -\frac{K_e}{L} \\
\frac{K_e}{J} & -\frac{D}{J} \\
\end{bmatrix}x
+ \begin{bmatrix}
\frac{1}{L} \\ 0\\
\end{bmatrix}v

MATLABによるシミュレーションのサンプルコード

上記のモデルをもとに現実に近いパラメータをモーターのデータシートも参考にしながら求めていきました
サンプルコード

%%%
パラメーターの宣言
%%%
v2omega_tf = tf(K_tau,[J*L,J*R+L*D, K_tau*K_e+R*D]);
v2tau_tf = tf([K_tau*J, K_tau*D], [J*L,J*R+L*D, K_tau*K_e+R*D]);
v2i_tf = tf([J, D], [J*L,J*R+L*D, K_tau*K_e+R*D]);
subplot(1,3,1);
step(v2omega_tf);
title('電圧に対する角速度のステップ応答');
subplot(1,3,2);
step(v2tau_tf);
title('電圧に対するトルクのステップ応答');
subplot(1,3,3);
step(v2i_tf);
title('電圧に対する電流のステップ応答');

よりリアルな応答を再現するために...

熱による抵抗値の変化やインダクタンスのヒステリシス損失も考えた方がいいかもしれないです