直流モータ(DC motor)

永井 忠一 2023.8.20


DC Motorのモデリング

等価回路(以前のページの図を描き直し)

(図で、\( \tau_d \) は外乱トルク)

電気的性質と機械的性質

電気的性質機械的性質
  • \( v_a \) : 電圧
  • \( i_a \) : 電流
  • \( R_a \) : 電機子(armature)抵抗
  • \( L_a \) : 電機子インダクタンス
  • \( \tau \) : トルク [N]
  • \( \omega \) : 角速度(angular velocity) [rad/s]
  • \( J \) : 慣性モーメント [Nm2]
  • \( c \) : 粘性摩擦係数 [Nm/(rad/s)]
  • \( K_e \) : 誘導起電力定数
    • (\( K_e\omega \) : 誘導起電力)
  • \( K_t \) : トルク定数
    • (\( K_t i_a \) : トルク)

電流 \( i_a \) に比例したトルク \( K_t i_a \) が発生する。と同時に、回転角速度 \( \omega \) に比例した逆起電力 \( K_e\omega \) が発生する(同時に、発電機でもある)

\[ \left\{ \begin{align} &v_a = R_a i_a + L_a s i_a + K_e\omega \\ &\tau = K_t i_a \\ &\tau = Js\omega + c\omega + \tau_d \end{align} \right. \]

(\( s \) は、ラプラス変換の微分演算子)

連立方程式を式変形

\[ \begin{align} v_a &= R_a i_a + L_a s i_a + K_e\omega \\ v_a - K_e\omega &= (R_a + L_a s)i_a \\ i_a &= \frac{v_a - K_e\omega}{R_a + L_a s} \end{align} \] \[ \left\{ \begin{align} &i_a = \frac{v_a - K_e\omega}{R_a + L_a s} \\ &\omega = \frac{K_t i_a - \tau_d}{Js + c} \end{align} \right. \]
\[ \begin{align} \tau &= Js\omega + c\omega + \tau_d \\ \tau - \tau_d &= (Js + c)\omega \\ \omega &= \frac{\tau - \tau_d}{Js + c} \\ \omega &= \frac{K_t i_a - \tau_d}{Js + c} \end{align} \]

DC motor の連立方程式 \( \boxed{ \left\{ \begin{align} \text{電気系} \\ \text{機械系} \end{align} \right. } \) の意味の理解(モータの機能と、発電機としての機能とが同時に働いている)

ブロック線図

DC motor の伝達関数表現。Xcos を利用

(\( 1/s \) は積分。角速度を積分して角度 \( \theta \) 。図右端の『\( \omega\rightarrow\boxed{\frac{1}{s}}\rightarrow\theta \)』)

(Xcos のプログラム

状態空間表現

伝達関数から → 状態方程式を求める(実現(realization)、実現問題)

伝達関数のブロック線図を分解

(Xcos のプログラム

ブロック線図の伝達関数の変形の確認。フィードバック接続(feedback connection) \( \boxed{ \frac{1}{L_a s + R_a} } \) を検算

 ⇔ 

(\( R_a \)、\( L_a \) は適当に与えている)

ScilabOctave
$ scilab -nwni
Scilab branch-6.1 (Apr 14 2022, 22:30:04)

--> Ra = 10
 Ra  =

   10.

--> La = 1e-3
 La  =

   0.001

--> syslin('c', 1/(La*%s))
 ans  =

     1
   ------
   0.001s

--> syslin('c', Ra/(%s^0))
 ans  =

   10
   --
   1

--> syslin('c', 1/(La*%s))/.syslin('c', Ra/(%s^0))
 ans  =

       1
   ----------
   10 +0.001s

--> syslin('c', 1/(La*%s + Ra))
 ans  =

       1
   ----------
   10 +0.001s

$ octave --no-gui
GNU Octave, version 6.4.0
Copyright (C) 2021 The Octave Project Developers.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type 'warranty'.

Octave was configured for "x86_64-pc-linux-gnu".

Additional information about Octave is available at https://www.octave.org.

Please contribute if you find this software useful.
For more information, visit https://www.octave.org/get-involved.html

Read https://www.octave.org/bugs.html to learn how to submit bug reports.
For information about changes from previous versions, type 'news'.

octave:1> pkg load control
octave:2> Ra = 10
Ra = 10
octave:3> La = 1e-3
La = 1.0000e-03
octave:4> tf([1], [La, 0])

Transfer function 'ans' from input 'u1' to output ...

         1   
 y1:  -------
      0.001 s

Continuous-time model.
octave:5> tf([Ra], [1])

Transfer function 'ans' from input 'u1' to output ...

 y1:  10

Static gain.
octave:6> feedback(tf([1], [La, 0]), tf([Ra], [1]))

Transfer function 'ans' from input 'u1' to output ...

           1      
 y1:  ------------
      0.001 s + 10

Continuous-time model.
octave:7> tf([1], [La, Ra])

Transfer function 'ans' from input 'u1' to output ...

           1      
 y1:  ------------
      0.001 s + 10

Continuous-time model.

(Scilab では、フィードバック接続に「/.」演算子を使用する。Octave では、control パッケージにある feedback() 関数を使う)

ブロック線図と式の対応とを確認

式 再掲載\[ \left\{ \begin{align} &v_a = R_a i_a + L_a s i_a + K_e\omega \\ &\tau = K_t i_a \\ &\tau = Js\omega + c\omega + \tau_d \end{align} \right. \](第1式と第3式を式変形(移項)している。また、外乱項は無いものとしている)

(Xcos のプログラム

伝達関数のブロック線図から状態方程式と出力方程式を求める

ブロック線図に必要な情報をすべて記入(外乱の項は省略)

(Xcos のプログラム

ブロック線図から式を作成。\( \dot x_1 \) について方程式を立てる:\[ \begin{align} \dot x_1 &= \frac{1}{J}\left(\tau - c x_1\right) \\ &= \frac{1}{J}\left(K_t x_2 - c x_1\right) \\ &= -\frac{c}{J}x_1 + \frac{K_t}{J}x_2 \end{align} \]同様に、\( \dot x_2 \) についての方程式:\[ \begin{align} \dot x_2 &= \frac{1}{L_a}\left(u - K_e x_1 - R_a x_2\right) \\ &= -\frac{K_e}{L_a}x_1 - \frac{R_a}{L_a}x_2 + \frac{1}{L_a}u \end{align} \]

得られた連立方程式\[ \left\{ \begin{align} &\dot x_1 = -\frac{c}{J}x_1 + \frac{K_t}{J}x_2 \\ &\dot x_2 = -\frac{K_e}{L_a}x_1 - \frac{R_a}{L_a}x_2 + \frac{1}{L_a}u \end{align} \right. \]を行列の形で式を整理する

∴ DC motor の状態方程式\[ \begin{align} \dot{\vec x} &= \begin{bmatrix}\dot x_1 \\ \dot x_2\end{bmatrix} = \begin{bmatrix}-\frac{c}{J} & \frac{K_t}{J} \\ -\frac{K_e}{L_a} & -\frac{R_a}{L_a}\end{bmatrix}\begin{bmatrix}x_1 \\ x_2\end{bmatrix} + \begin{bmatrix}0 \\ \frac{1}{L_a}\end{bmatrix}u \\ &= \begin{bmatrix}\dot \omega \\ \dot{i_a}\end{bmatrix} = \begin{bmatrix}-\frac{c}{J} & \frac{K_t}{J} \\ -\frac{K_e}{L_a} & -\frac{R_a}{L_a}\end{bmatrix}\begin{bmatrix}\omega \\ i_a\end{bmatrix} + \begin{bmatrix}0 \\ \frac{1}{L_a}\end{bmatrix}v_a \end{align} \]出力方程式\[ \begin{align} y &= \omega = \begin{bmatrix}1 & 0\end{bmatrix}\begin{bmatrix}x_1 \\ x_2\end{bmatrix} \\ &= \omega = \begin{bmatrix}1 & 0\end{bmatrix}\begin{bmatrix}\omega \\ i_a\end{bmatrix} \end{align} \](電流 \( i_a \) は観測できない場合)

まとめて、状態空間表現\[ \left\{ \begin{align} &\dot{\vec x} = A\vec x + B\vec u \\ &y = C\vec x + D\vec u \end{align}\right. \]は(直達項は無い「\( D = 0 \)」として)\[ \left\{ \begin{align} &\dot{\vec x} = \begin{bmatrix}-\frac{c}{J} & \frac{K_t}{J} \\ -\frac{K_e}{L_a} & -\frac{R_a}{L_a}\end{bmatrix}\vec x + \begin{bmatrix}0 \\ \frac{1}{L_a}\end{bmatrix}u \\ &y = \begin{bmatrix}1 & 0\end{bmatrix}\vec x \end{align}\right. \]となる

入力と出力、それから状態変数ベクトルが時間の関数であることを強調して書けば\[ \left\{ \begin{align} &\dot{\vec x}(t) = \begin{bmatrix}-\frac{c}{J} & \frac{K_t}{J} \\ -\frac{K_e}{L_a} & -\frac{R_a}{L_a}\end{bmatrix}\vec x(t) + \begin{bmatrix}0 \\ \frac{1}{L_a}\end{bmatrix}u(t) \\ &y(t) = \begin{bmatrix}1 & 0\end{bmatrix}\vec x(t) \end{align}\right. \](また、\( A \) 行列、\( B \) 行列、\( C \) 行列(、\( D \) 行列)は、定数行列。時不変システム(time-invariant system)

状態変数線図(state variable diagram)

(Xcos の CLSS ブロックを利用)

(Xcos のプログラム

参考文献


永井 忠一 2025.7.21《加筆》

DC Motorの特性

例(マブチモーター RE-140RA-2270

(Webにあるものと、なぜか諸元が違っている)

«写し»
MODELVOLTAGENO LOADAT MAXIMUM EFFICIENCYSTALL
OPERATING RANGENOMINALSPEEDCURRENTSPEEDCURRENTTORQUEOUTPUTTORQUECURRENT
r/minAr/minAmN·mg·cmWmN·mg·cmA
RE-140RA-2270 1.5〜3.0 1.5V CONSTANT 8100 0.21 6150 0.66 0.66 6.7 0.42 2.74 28 2.10

基本特性。トルクと回転速度(角速度)

MaximaPython
$ maxima

Maxima 5.46.0 https://maxima.sourceforge.io
using Lisp GNU Common Lisp (GCL) GCL 2.6.14 git tag Version_2_6_15pre7
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1) solve(0.66/(8100 - 6150) = \\tau/8100, \\tau);

rat: replaced 3.384615384615385E-4 by 11/32500 = 3.384615384615385E-4
                                         891
(%o1)                            [\tau = ---]
                                         325
(%i2) %, numer;
(%o2)                     [\tau = 2.741538461538462]

(%i3) solve(subst(y = 0, y = -309.399276489904*x + 848.230016469244), x);

rat: replaced -848.230016469244 by -283786379/334563 = -848.2300164692449

rat: replaced 309.399276489904 by 505038627/1632320 = 309.399276489904
                                  463230182169280
(%o3)                        [x = ---------------]
                                  168967238165001
(%i4) %, numer;
(%o4)                       [x = 2.741538461538464]
$ ipython3
Python 3.12.3 (main, Jun 18 2025, 17:59:45) [GCC 13.3.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.20.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from math import pi as π

In [2]: no_load_speed = 8100/60*2*π # rad/s

In [3]: rated_torque = 0.66 # mN m

In [4]: rated_speed = 6150/60*2*π # rad/s

In [5]: from numpy import polyfit

In [6]: a, b = polyfit([0, rated_torque], [no_load_speed, rated_speed], 1)

In [7]: a
Out[7]: -309.399276489904

In [8]: b
Out[8]: 848.230016469244

(諸元の値が違っているので、数字を読みかえて計算)

(変数名の rated_ は、定格の意味)

∴ stall torque ≈ 2.74 [mN·m]

(stall torqueは、起動トルク(starting torque)とも呼ばれる)

トルクと電流

Python
In [1]: no_load_current = 210 # mA

In [2]: rated_current = 660 # mA

In [3]: rated_torque = 0.66 # mN m

In [4]: from numpy import polyfit

In [5]: a, b = polyfit([0, rated_torque], [no_load_current, rated_current], 1)

In [6]: a
Out[6]: 681.8181818181814

In [7]: b
Out[7]: 209.99999999999991

Maxima
(%i1) solve(subst(x = 2.741538461538464, y = 681.8181818181814*x + 209.99999999999991), y);

rat: replaced -2079.23076923077 by -27030/13 = -2079.230769230769
                                       27030
(%o1)                             [y = -----]
                                        13
(%i2) %, numer;
(%o2)                       [y = 2079.230769230769]

∴ stall current ≈ 2.1 [A]

定格トルク(rated torque, rated load)の点を、0.49 mN·m として換算(諸元がはっきりしないので)

Python
In [1]: rated_torque = 0.49 # mN m

In [2]: rated_speed = -309.399276489904*rated_torque + 848.230016469244

In [3]: rated_speed # rad/s
Out[3]: 696.624370989191

In [4]: rated_current = 681.8181818181814*rated_torque + 209.99999999999991

In [5]: rated_current # mA
Out[5]: 544.0909090909088

T-N線図

作図プログラム

Python
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

rated_torque = 0.49 # mN m
stall_torque = 2.741538461538464 # mN m

from math import pi as π

no_load_speed = 8100/60*2*π # rad/s
rated_speed = 696.624370989191 # rad/s

plt.clf(); plt.grid()
plt.xticks([0, rated_torque, stall_torque], [0, 'Rated', 'Stall Torque'])
plt.yticks([0, rated_speed, no_load_speed], [0, 'Rated', 'No load'], rotation=90)
line1, = plt.plot([0, stall_torque], [no_load_speed, 0], alpha=0.8, label='Torque vs Speed')
plt.xlabel('Torque ' + r'$ \tau $' + ' ' + r'$ [\mathrm{N}\cdot\mathrm{m}] $')
plt.ylabel('Speed ' + r'$ \omega $' + ' [rad/s]')

no_load_current = 210 # mA
rated_current = 544.0909090909088 # mA
stall_current = 2079.230769230769 # mA

ax2 = plt.gca().twinx()
ax2.grid()
ax2.set_yticks([no_load_current, rated_current, stall_current], ['No load', 'Rated', 'Stall'], rotation=90)
ax2.get_yticklabels()[0].set_va('center')
ax2.get_yticklabels()[1].set_va('center')
ax2.plot([0], [0]) # adhoc
line2, = ax2.plot([0, stall_torque], [no_load_current, stall_current], alpha=0.8, label='Torque vs Current')
ax2.legend(handles=[line1, line2], loc='upper center')
ax2.set_ylabel('Current ' + r'$ I $' + ' [A]')

plt.title('T-N Characteristic Curve')

plt.savefig('fig_T-N_curve.svg')

トルク定数 \( K_\mathrm T \)、逆起電力定数 \( K_\mathrm E \)

MaximaPython
(%i1) solve(current = 681.8181818181814*torque + 209.99999999999991, torque);

rat: replaced -209.9999999999999 by -210/1 = -210.0

rat: replaced -681.8181818181814 by -7500/11 = -681.8181818181819
                                   11 current - 2310
(%o1)                    [torque = -----------------]
                                         7500
(%i2) expand(%[1]);
                                    11 current   77
(%o2)                      torque = ---------- - ---
                                       7500      250
(%i3) K_T: coeff(rhs(%), current);
                                      11
(%o3)                                ----
                                     7500
(%i4) K_T, numer; /* Nm/A */
(%o4)                        0.001466666666666667
In [1]: voltage = 1.5 # V

In [2]: from math import pi as π

In [3]: no_load_speed = 8100/60*2*π # rad/s

In [4]: K_E = voltage/no_load_speed

In [5]: K_E # V/(rad/s)
Out[5]: 0.001768388256576615

(トルク ∝ 電流)

(理想DC motorでは、\( K_\mathrm T = K_\mathrm E \) となる)

(\( K_\mathrm E \) の単位 \( [\mathrm V/(\mathrm{rad}/\mathrm s)] = [\mathrm{Vs}/\mathrm{rad}] = [\mathrm{Wb}/\mathrm{rad}] \)。\( \mathrm{Wb} \) は磁束の単位で、\( \mathrm{Wb}/\mathrm{rad} \) は「1 rad あたりの磁束」という意味)

印加電圧 \( V \) の変化。DC motorの式を\[ \left\{ \begin{align} & \tau = K_\mathrm T I \\ & E = K_\mathrm E\omega\\ & V = RI + E \end{align} \right. \]\( \omega \) について解く

Maxima
(%i1) solve(E = K_E*\\omega, \\omega);
                                           E
(%o1)                           [\omega = ---]
                                          K_E
(%i2) solve(V = R*I + E, E);
(%o2)                            [E = V - I R]
(%i3) subst(%[1], %th(2)[1]);
                                        V - I R
(%o3)                          \omega = -------
                                          K_E
(%i4) solve(\\tau = K_T*I, I);
                                       \tau
(%o4)                             [I = ----]
                                       K_T
(%i5) subst(%[1], %th(2)[1]);
                                          R \tau
                                      V - ------
                                           K_T
(%o5)                       (\omega = ----------)
                                         K_E     1
(%i6) expand(%);
                                      V    R \tau
(%o6)                      (\omega = --- - -------)
                                     K_E   K_E K_T 1

得られた、1次式\[ \omega = -\frac{R}{K_\mathrm E K_\mathrm T}\tau + \frac{V}{K_\mathrm E} \]

1.5〜3.0 V の場合

作図プログラム

PythonMaxima
import numpy as np

V = np.linspace(0, 3, 2**8); V = V[V >= 1.5] # [V]

K_E = 0.001768388256576615 # V/(rad/s)

no_load_speed = V/K_E
assert len(V) == len(no_load_speed)

stall_torque = (1.63232E+6*V)/(5.05038627E+8*K_E)
assert len(V) == len(stall_torque)

assert len(no_load_speed) == len(stall_torque)

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

palette = ['#80FFFF', '#81FFFF', '#83FFFF', '#85FFFF', '#87FFFF', '#89FFFF', '#8BFFFF', '#8DFFFF',
           '#8FFFFF', '#91FFFF', '#93FFFF', '#95FFFF', '#97FFFF', '#99FFFF', '#9BFFFF', '#9DFFFF',
           '#9FFFFF', '#A1FFFF', '#A3FFFF', '#A5FFFF', '#A7FFFF', '#A9FFFF', '#ABFFFF', '#ADFFFF',
           '#AFFFFF', '#B1FFFF', '#B3FFFF', '#B5FFFF', '#B7FFFF', '#B9FFFF', '#BBFFFF', '#BDFFFF',
           '#BFFFFF', '#C1FFFF', '#C3FFFF', '#C5FFFF', '#C7FFFF', '#C9FFFF', '#CBFFFF', '#CDFFFF',
           '#CFFFFF', '#D1FFFF', '#D3FFFF', '#D5FFFF', '#D7FFFF', '#D9FFFF', '#DBFFFF', '#DDFFFF',
           '#DFFFFF', '#E1FFFF', '#E3FFFF', '#E5FFFF', '#E7FFFF', '#E9FFFF', '#EBFFFF', '#EDFFFF',
           '#EFFFFF', '#F1FFFF', '#F3FFFF', '#F5FFFF', '#F7FFFF', '#F9FFFF', '#FBFFFF', '#FDFFFF',
           '#FFFDFF', '#FFFBFF', '#FFF9FF', '#FFF7FF', '#FFF5FF', '#FFF3FF', '#FFF1FF', '#FFEFFF',
           '#FFEDFF', '#FFEBFF', '#FFE9FF', '#FFE7FF', '#FFE5FF', '#FFE3FF', '#FFE1FF', '#FFDFFF',
           '#FFDDFF', '#FFDBFF', '#FFD9FF', '#FFD7FF', '#FFD5FF', '#FFD3FF', '#FFD1FF', '#FFCFFF',
           '#FFCDFF', '#FFCBFF', '#FFC9FF', '#FFC7FF', '#FFC5FF', '#FFC3FF', '#FFC1FF', '#FFBFFF',
           '#FFBDFF', '#FFBBFF', '#FFB9FF', '#FFB7FF', '#FFB5FF', '#FFB3FF', '#FFB1FF', '#FFAFFF',
           '#FFADFF', '#FFABFF', '#FFA9FF', '#FFA7FF', '#FFA5FF', '#FFA3FF', '#FFA1FF', '#FF9FFF',
           '#FF9DFF', '#FF9BFF', '#FF99FF', '#FF97FF', '#FF95FF', '#FF93FF', '#FF91FF', '#FF8FFF',
           '#FF8DFF', '#FF8BFF', '#FF89FF', '#FF87FF', '#FF85FF', '#FF83FF', '#FF81FF', '#FF80FF']
assert len(V) == len(palette)

plt.clf(); plt.grid()
for i, (voltage, x, y) in enumerate(zip(V, stall_torque, no_load_speed)):
    plt.plot([0, x], [y, 0], color=palette[i],
             label=(str(round(voltage, 1)) + ' V' if i == 0 or i == len(V) - 1 else None))
plt.legend(loc='best')
plt.xticks([0, stall_torque[0], stall_torque[-1]], [0, None, None])
plt.yticks([0, no_load_speed[0], no_load_speed[-1]], [0, None, None])
plt.xlabel('Torque ' + r'$ \tau $' + ' ' + r'$ [\mathrm{N}\cdot\mathrm{m}] $')
plt.ylabel('Speed ' + r'$ \omega $' + ' [rad/s]')
plt.title('Torque-Speed Curve')
plt.savefig('fig_voltage_char.svg')
(%i1) subst(\\tau = 0, \\omega = -309.399276489904*\\tau + V/K_E);
                                           V
(%o1)                            \omega = ---
                                          K_E
(%i2) string(rhs(%));
(%o2)                                V/K_E
(%i3) solve(\\omega = -309.399276489904*\\tau + V/K_E, \\tau);

rat: replaced 309.399276489904 by 505038627/1632320 = 309.399276489904
                             1632320 K_E \omega - 1632320 V
(%o3)              [\tau = - ------------------------------]
                                     505038627 K_E
(%i4) subst(\\omega = 0, %[1]);
                                      1632320 V
(%o4)                        \tau = -------------
                                    505038627 K_E
(%i5) fortran(rhs(%));
      (1.63232E+6*V)/(5.05038627E+8*K_E)
(%o5)                                done
R
$ R

R version 4.3.3 (2024-02-29) -- "Angel Food Cake"
Copyright (C) 2024 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。 
一定の条件に従えば、自由にこれを再配布することができます。 
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。 

R は多くの貢献者による共同プロジェクトです。 
詳しくは 'contributors()' と入力してください。 
また、R や R のパッケージを出版物で引用する際の形式については 
'citation()' と入力してください。 

'demo()' と入力すればデモをみることができます。 
'help()' とすればオンラインヘルプが出ます。 
'help.start()' で HTML ブラウザによるヘルプがみられます。 
'q()' と入力すれば R を終了します。 

> cm.colors(128)
  [1] "#80FFFF" "#81FFFF" "#83FFFF" "#85FFFF" "#87FFFF" "#89FFFF" "#8BFFFF"
  [8] "#8DFFFF" "#8FFFFF" "#91FFFF" "#93FFFF" "#95FFFF" "#97FFFF" "#99FFFF"
 [15] "#9BFFFF" "#9DFFFF" "#9FFFFF" "#A1FFFF" "#A3FFFF" "#A5FFFF" "#A7FFFF"
 [22] "#A9FFFF" "#ABFFFF" "#ADFFFF" "#AFFFFF" "#B1FFFF" "#B3FFFF" "#B5FFFF"
 [29] "#B7FFFF" "#B9FFFF" "#BBFFFF" "#BDFFFF" "#BFFFFF" "#C1FFFF" "#C3FFFF"
 [36] "#C5FFFF" "#C7FFFF" "#C9FFFF" "#CBFFFF" "#CDFFFF" "#CFFFFF" "#D1FFFF"
 [43] "#D3FFFF" "#D5FFFF" "#D7FFFF" "#D9FFFF" "#DBFFFF" "#DDFFFF" "#DFFFFF"
 [50] "#E1FFFF" "#E3FFFF" "#E5FFFF" "#E7FFFF" "#E9FFFF" "#EBFFFF" "#EDFFFF"
 [57] "#EFFFFF" "#F1FFFF" "#F3FFFF" "#F5FFFF" "#F7FFFF" "#F9FFFF" "#FBFFFF"
 [64] "#FDFFFF" "#FFFDFF" "#FFFBFF" "#FFF9FF" "#FFF7FF" "#FFF5FF" "#FFF3FF"
 [71] "#FFF1FF" "#FFEFFF" "#FFEDFF" "#FFEBFF" "#FFE9FF" "#FFE7FF" "#FFE5FF"
 [78] "#FFE3FF" "#FFE1FF" "#FFDFFF" "#FFDDFF" "#FFDBFF" "#FFD9FF" "#FFD7FF"
 [85] "#FFD5FF" "#FFD3FF" "#FFD1FF" "#FFCFFF" "#FFCDFF" "#FFCBFF" "#FFC9FF"
 [92] "#FFC7FF" "#FFC5FF" "#FFC3FF" "#FFC1FF" "#FFBFFF" "#FFBDFF" "#FFBBFF"
 [99] "#FFB9FF" "#FFB7FF" "#FFB5FF" "#FFB3FF" "#FFB1FF" "#FFAFFF" "#FFADFF"
[106] "#FFABFF" "#FFA9FF" "#FFA7FF" "#FFA5FF" "#FFA3FF" "#FFA1FF" "#FF9FFF"
[113] "#FF9DFF" "#FF9BFF" "#FF99FF" "#FF97FF" "#FF95FF" "#FF93FF" "#FF91FF"
[120] "#FF8FFF" "#FF8DFF" "#FF8BFF" "#FF89FF" "#FF87FF" "#FF85FF" "#FF83FF"
[127] "#FF81FF" "#FF80FF"

Powerと損失(loss)

(Lossは、ほとんどが発熱となる)

作図プログラム

Python
rated_torque = 0.49 # mN m
stall_torque = 2.741538461538464 # mN m

from math import pi as π

no_load_speed = 8100/60*2*π # rad/s
rated_speed = 696.624370989191 # rad/s

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

plt.clf(); plt.grid()
plt.xticks([0, rated_torque, stall_torque], [0, 'Rated Torque', 'Stall'])
plt.yticks([0, rated_speed, no_load_speed], [0, 'Rated', 'No load'], rotation=90)
plt.plot([0, stall_torque], [no_load_speed, 0], alpha=0.8, label='Torque vs Speed')
plt.xlabel('Torque ' + r'$ \tau $' + ' ' + r'$ [\mathrm{N}\cdot\mathrm{m}] $')
plt.ylabel('Speed ' + r'$ \omega $' + ' [rad/s]')

V = 1.5 # [V]
no_load_current = 210 # mA
rated_current = 544.0909090909088 # mA
stall_current = 2079.230769230769 # mA

rated_input_power = V*rated_current
P_in = [V*no_load_current, rated_input_power, V*stall_current]

from numpy import linspace

τ = linspace(0, stall_torque, 2*1024) # mN m
ω = -309.399276489904*τ + 848.230016469244 # rad/s

P_out = τ*ω # mW
rated_output_power = rated_torque*rated_speed # mW

ax2 = plt.gca().twinx()
ax2.grid()
ax2.set_yticks([rated_output_power, rated_input_power], ['Rated Out.', 'Rated In.'], rotation=90)
ax2.get_yticklabels()[0].set_va('center')
ax2.get_yticklabels()[1].set_va('bottom')
ax2.plot([0], [0]) # adhoc
line2, = ax2.plot([0, stall_torque], [P_in[0], P_in[-1]], alpha=0.8, label='Input Power: ' + r'$ P_\mathrm{in} = V\cdot I  $' + ' [W]')
line3, = ax2.plot(τ, P_out, alpha=0.8, label='Output Power: ' + r'$ P_\mathrm{out} = \tau\cdot\omega $' + ' [W]')
line4, = ax2.plot([rated_torque, rated_torque], [rated_input_power, rated_output_power], ls='--', color='k', label='Loss')
ax2.legend(handles=[line2, line3, line4], loc='upper center')
ax2.set_ylabel('Power ' + r'$ P $' + ' [W]')

plt.title('T-N Characteristic Curve') 

plt.savefig('fig_power.svg')

教科書


© 2023 Tadakazu Nagai