みなさん,こんにちは
おかしょです.
モーターのような単純な電子部品の伝達関数は,一次遅れ系で表現されることが多いです.そのため,一次遅れ系の伝達関数で表現されるシステムを制御器で制御をするということも多いと思います.
制御器で制御をする場合は,この一次遅れ系の伝達関数を離散化しなければなりません.そこで,この記事では一次遅れ系の伝達関数を離散化する方法を解説します.
この記事を読むと以下のようなことがわかる・できるようになります.
- 離散化する方法
- 伝達関数を離散化する方法
- 双一次変換とは
この記事を読む前に
1次遅れ系について詳しく知りたい方は,以下の記事で解説しているのでそちらを先に読んでおくことをおすすめします.
離散化につながるような話はしていませんが,一次遅れ系の基礎を知ることができます.
一次遅れ系とは
先程も述べましたが,モーターなどの伝達関数は一次遅れ系で表されることが非常に多いです.
一次遅れ系の伝達関数は以下のような形をしています.
$$ G(s) = \frac{K}{Ts+1} \tag{1} $$
式中の\(K\)は定常ゲイン,\(T\)は時定数と呼ばれます.
この伝達関数が最も単純な構造をしているため,制御器を試したいときはとりあえずこのシステムに適用して制御性能を見ることが多いです.
一次遅れ系を離散化
それでは(1)式の一次遅れ系の伝達関数を離散化していきます.
伝達関数はシステムの入出力関係を表しているので,以下のように書きなおすことができます.
$$ \frac{Y(s)}{U(s)} = \frac{K}{Ts+1} \tag{2} $$
ここで,\(Y(s)\)は出力,\(U(s)\)は入力のラプラス変換を表しています.
この式を逆ラプラス変換します.逆ラプラス変換する方法は以下の記事で詳しく解説しているので,こちらを参照してください.
ここでは逆ラプラス変換した結果の式のみ記します.
$$ \dot{y}(t) = -\frac{1}{T} y(t)+\frac{K}{T} u(t) \tag{3} $$
さて,ここでマイコンのサンプリング時間を\(T_s\)とします.ある時刻\(kT_s\) (\(k\)は任意の整数とします)の一次遅れ系で表されるシステムの出力を(3)式を積分することで求めます.
\[
y(kT_s) = \displaystyle \int_{0}^{kT_s} \{-\frac{1}{T} y(t)+\frac{K}{T} u(t)\} dt \tag{4}
\]
この時刻からさらに1ステップ進んだ時間\((k+1)T_s\)の出力も同じように求めると以下のようになります.
\begin{eqnarray}
y((k+1)T_s) &=& \displaystyle \int_{0}^{(k+1)T_s} \{-\frac{1}{T} y(t)+\frac{K}{T} u(t)\} dt\\
&=& \displaystyle \int_{0}^{kT_s} \{-\frac{1}{T} y(t)+\frac{K}{T} u(t)\} dt + \displaystyle \int_{kT_{s}}^{(k+1)T_{s}} \{-\frac{1}{T} y(t)+\frac{K}{T} u(t)\} dt \tag{5}
\end{eqnarray}
ここで,(3)式を右辺第1項に代入します.
\[
y((k+1)T_s) = y(kT_s)+ \displaystyle \int_{kT_{s}}^{(k+1)T_{s}} \{-\frac{1}{T} y(t)+\frac{K}{T} u(t)\} dt \tag{6}
\]
ここで,右辺の第2項の積分を台形則で近似します.
\[
y((k+1)T_s) = y(kT_s)+ \frac{T_s}{2}\left[ \{-\frac{1}{T} y((k+1)T_s)+\frac{K}{T} u((k+1)T_s)\}+\{-\frac{1}{T} y(kT_s)+\frac{K}{T} u(kT_s)\}\right] \tag{7}
\]
このままでは見にくいので,\(y(kT_s)\)と\(u(kT_s)\)を\(y[k]\),\(u[k]\)とし,\(y((k+1)T_s)\)と\(u((k+1)T_s)\)を\(y[k+1]\),\(u[k+1]\)とします.すると,先程の式は以下のようになります.
\[
y[k+1] = y[k]+ \frac{T_s}{2}\left[ \{-\frac{1}{T} y[k+1]+\frac{K}{T} u[k+1]\}+\{-\frac{1}{T} y[k]+\frac{K}{T} u[k]\}\right] \tag{8}
\]
ここで,Z変換をします.Z変換についてはこちらの記事で解説いています.Z変換をすると以下のようになります.
\[
zy(z) = y(z)+ \frac{T_s}{2}\left[ \{-\frac{1}{T} zy(z)+\frac{K}{T} zu(z)\}+\{-\frac{1}{T} y(z)+\frac{K}{T} u(z)\}\right] \tag{9}
\]
この式を整理していくと以下のようになります.
\begin{eqnarray}
(z-1)y(z) &=& \frac{T_s}{2}\left[-\frac{1}{T} (z+1)y(z)+\frac{K}{T} (z+1)u(z)\}\right]\\
&=&\frac{T_s(z+1)}{2}\left[-\frac{1}{T} y(z)+\frac{K}{T} u(z)\right]\\
\frac{2(z-1)}{T_s(z+1)}y(z)&=&-\frac{1}{T} y(z)+\frac{K}{T} u(z)\\
\left[ \frac{2(z-1)}{T_s(z+1)}+\frac{1}{T}\right]y(z)&=&\frac{K}{T} u(z)\\
y(z)&=&\frac{K}{T}\frac{1}{\frac{2(z-1)}{T_s(z+1)}+\frac{1}{T}} u(z)\\
&=&\frac{K}{T\frac{2(z-1)}{T_s(z+1)}+1} u(z) \tag{10}
\end{eqnarray}
この式と(1)式を見比べると,以下のような関係が成り立つことがわかります.
$$ s = \frac{2(z-1)}{T_s (z+1)} \tag{11} $$
このことから,双一次変換で離散化をする場合は伝達関数の”s”に(11)式を代入すれば良いことがわかりました.
数値シミュレーションで確認
以上が一次遅れ系の伝達関数の離散化の計算でした.
それでは,本当に離散化ができているのかを数値シミュレーションで確認してみます.
数値シミュレーションでは,システムの時定数\(T\)を1,定数ゲイン\(K\)を1としました.その結果,数値シミュレーションは以下のようになりました.
入力は1として数値シミュレーションを行った結果,連続時間システム(水色)と離散化したシステム(黄色)が目的の応答を示していることがわかります.
このとき,離散時間システムのサンプリング時間は0.5秒としています.そのため,0.5秒おきに離散時間システムが更新され,連続時間システムの応答と一致しています.
まとめ
この記事では一次遅れ系の伝達関数を双一次変換によって離散化をしました.
そして,離散化したシステムが正しいのか調べるために数値シミュレーションを実行しました.
その結果,この記事に書いてある離散化の計算方法は正しいことが確認できました.
マイコンを使ってロボットを制御する場合は離散化したモデルが必要になるので,今後のロボット開発に役立てていきたいと思います.
続けて読む
この記事では一次遅れ系の伝達関数を離散化しましたが,以下の記事では状態方程式を離散化しています.興味のある方は続けて参考にしてください.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
それでは最後まで読んでいただきありがとうございました.
コメント