理系的な戯れ

理工学系とくにロボットやドローンに関する計算・プログラミング等の話題を扱って、そのようなことに興味がある人たちのお役に立てればと思っております。

Pythonで考えるDCモータの制御(4)台形入力

はじめに

こんにちは、こうへいです。

モータ制御する時に、台形状に加減速する事がよくあると思います。前回、ランプ入力を考えましたが、 台形状の目標値を作り出すのに、ランプ信号が役に立ちます。

kouhei-no-homepage.hatenablog.com

そこで、今回は 台形状の入力をどんな風にして取り扱ったら良いのか考えていきます。

台形入力はランプ入力の組み合わせ

f:id:kouhei_ito:20200203141438p:plain
台形入力を合成

台形入力は上の図のようにランプ入力を組み合わせることにより、作る事ができます。 (最初の投稿から、u_4(t)を加筆しました。以下も加筆訂正しています。)

u_1を時間T_1づらして傾きをマイナスにして合成すると、ランプ状に上昇し一定値になる波形を作る事ができます。 さらにT_2ずれた、下向きの傾きのランプ信号を合成し、最後には大きさを0にするために、打ち消しようの上向きのランプ信号を合成することにより、台形状の波形が完成します。

いずれの信号も時間を右にずらす前は、時刻0以前は大きさ0の関数です。

ランプ関数のラプラス変換

制御入力としてこれを扱うためには信号のラプラス変換を得なければならないのですが

時刻0から立ち上がるランプ関数は原点を通り傾きがaの直線の方程式で次のような感じです

\displaystyle{
u(t)=
\left\{
    \begin{array}{ll}
      0 &(t\lt0) \\
      a t&(t \ge 0)
    \end{array}
  \right.\\
}

これをラプラス変換します。ラプラス変換というのは最初から時間が0より大きいところで定義されているので 上の時間の条件を自動的に満たします。式は以下のようになります。

\displaystyle{
U(s)=\frac{a}{s^2}\\
}

ラプラス変換の性質:推移定理

先に示した図ではランプ関数が、ある時間分右にずれたようになって描かれていました。

関数u(t)を右にTずらしたようにするには数式では以下のようにあつかいます。

\displaystyle{
u(t-T)\\
}

関数u(t)ラプラス変換U(S)とするとu(t-T)ラプラス変換は次のようになります。

\displaystyle{
\mathcal{L} [u(t-T)]=U(s) e^{-Ts}\\
}

これをラプラス変換の推移定理と呼びます。

台形関数

u_1の傾きをau_2の傾きは-au_3の傾きは-b (b \gt 0)とします。 すると、それぞれは、次のような式になります。

\displaystyle{
u_1(t)= 
\left\{
    \begin{array}{ll}
      0 &(t\lt0) \\
      a t&(t \ge 0)
    \end{array}
  \right.\\
}
\displaystyle{
u_2(t)= 
\left\{
    \begin{array}{ll}
      0 &(t\lt T_1) \\
      - a (t-T_1)&(t \ge T_1)
    \end{array}
  \right.\\
}
\displaystyle{
u_3(t)= 
\left\{
    \begin{array}{ll}
      0 &(t\lt T_2) \\
      - b (t-T_2)&(t \ge T_2)
    \end{array}
  \right.\\
}
\displaystyle{
u_4(t)= 
\left\{
    \begin{array}{ll}
      0 &(t\lt T_2) \\
      b (t-T_3)&(t \ge T_3)
    \end{array}
  \right.\\
}

それぞれのラプラス変換は推移定理を適用して、以下のようになります。

\displaystyle{
U_1(s)= \frac{a}{s^2}\\
}
\displaystyle{
U_2(s)= -\frac{a}{s^2} e^{-T_1 s}\\
}
\displaystyle{
U_3(s)= -\frac{b}{s^2} e^{-T_2 s}\\
}
\displaystyle{
U_4(s)= \frac{b}{s^2} e^{-T_3 s}\\
}

これで、台形状の入力信号を作る準備ができたので、以下でまとめてみます。

台形状の信号u(t)は、これまでの話から3つの信号の足し合わせなので

\displaystyle{
u(s)= u_1(t) + u_2(t) + u_3(t) + u_4(t)\\
}

となります。

これをラプラス変換すると、ラプラス変換は線形性が保持されるので、足し算はそのまま維持されて、各項を独立にラプラス変換して 足し合わせたものになります。

\displaystyle{
U(s)= U_1(s) + U_2(s) + U_3(t) + U_4(t)\\
}

上式に上で述べた式を代入していくとこんな感じになります。

\displaystyle{
U(s)= \frac{a}{s^2} -\frac{a}{s^2} e^{-T_1 s}-\frac{b}{s^2} e^{-T_2 s} +\frac{b}{s^2} e^{-T_3 s}\\
}

上式のe^{-T_1 s}e^{-T_2 s} がかけられているためヘビサイドの展開定理を用いて、 有利関数の和の形の部分分数展開ができず、逆ラプラス変換ができなくなる問題があります。 これについてはPade近似という手法で指数関数を有利関数に近似するという技があります。

また、本記事ではただ単に、時間をずらすオペレータとしてみて、時間0から計算した結果を それぞれのずれ時間分ずらして足し合わせる試みをしてみます。

応答の計算について

システムの応答について若干抽象的な説明をしますと、ラプラス変換された出力をY(s)とし、入力をU(s)として、 応答を計算したいシステムの伝達関数G(s)とした場合に、以下のように記述されます。

\displaystyle{
Y(s)=G(s)U(s)\\
}

この式を逆ラプラス変換して時間の関数を求めることで、システムの時間応答がわかります。

余談

本「Pythonで考えるDCモータの制御」シリーズの中で繰り返し書かれていたことのベースはこれなのですが あまり説明してきませんでした。申し訳ないのですが、この事が判らないと話がわからないので 先に話しておけばよかったのですが、これから話したらつまんないですよね。

話を元に戻し

ここで、U(s)は先ほどの台形の式を適用して展開すると。

\displaystyle{
Y(s)= G(s)\frac{a}{s^2} -G(s)\frac{a}{s^2} e^{-T_1 s}-G(s)\frac{b}{s^2} e^{-T_2 s}+G(s)\frac{b}{s^2} e^{-T_3 s}\\
}

以上より、僕は各項のe^{-T_x s}部分を無視した時間応答を計算し、あとでそれぞれの e^{-T_x s}が示しているずれ時間T_xをずらして足し合わせて、 応答の結果をだすことをしたいと思います。

おわりに

速度の台形制御を検討するために必要となる台形状の信号について考察しました。

結論としては、前回考えたランプ状の入力に対する応答の計算ができれば、それらを適切に時間をずらして 足し合わせる事ができれば良いという事がわかりました。

次回はいよいよ、今回の結論を生かして台形加減速制御を施したらどうなるかの検討に入ります。

以後の予定は

  • 台形加減速制御
  • 実際のマイコン制御を考慮した計算
  • PWM制御
  • モータドライバに関する妄想

等々を細々と続けていきたいと思います。