第2回実験

exp2

はじめに

前回の講義で動的システムの性質や動特性を知ることの重要性を学びました. これらの講義を踏まえて,第二回目のコア実験ではモータの動特性を測定します. ただし,動特性の測定を行う前に,実験の前半では,モータ実験装置のしくみを確認します.説明動画と本資料を見ながら,各自で理解を進めてください.

後半で行う動特性の測定は,資料と説明動画を見ながら,ブラウザ上で動く実験機のシミュレータを用いて各自で進めてください. シミュレータは こちらに準備しています.

制御実験装置

構成部品

初回の講義でフィードバック制御は下記の構成で実現されることを説明しました. そこでまずは,実験装置が実際にこのような構成になっていること,また,下図の線が示しているものが何かを確認します.

exp setup

それぞれ,下図のような3つの部品が配布されているはずです. 右2つは初回の講義と前回のコア実験でも使用したモータ実験装置のマイコン部分とモータ・アーム部分を分離したものです.

potentio board motor

上の3つの部品はこのページ最初の図を以下のように分離したものにそれぞれ対応します. 以降では,これらを順に接続しながら,個々の部品の動作を観察します.

potentio2 board2 motor2

計測用プログラム

各部品の動作を観察するために,電圧や角度を測定するプログラムを使用します. この実験で用いているマイコンはアナログ端子に印加された電圧を計測することができます.そこで,その情報を読み取れば電圧を計測することができます.

デスクトップ上の“controlCoreExp/exp2”ディレクトリ以下にある“ex2.bat”のアイコンをダブルクリックしてください. PCの画面には以下のウィンドウが表示されるはずです.

ff display

前回のコア実験1とは少しGUIが変わっています. 今回はフィードバック制御はせず,そのかわりにモータへの入力(電圧)をいろいろ変えられるようになっています.

まず,”Input Signals”で,”analogIn”を選択し,”set”を押してください. アナログ入力にて読み取った値をモータへの印加電圧に使う設定になります.

このまま,画面の”start”をクリックして下さい.クリックするとボタンの表示が “start” から “stop” に変わり実験が始まります. ここに,(今のところ意味のある値は表示されていませんが,)マイコンが計測する電圧がグラフに表示されます. グラフの横軸は時間です.赤の実線は前回同様アームの角度[deg],青の点線はアナログ入力にて読み取った電圧[V], 緑のグラフはモータへの印加電圧を示しています.

ポテンショメータ

それでは,部品を一つ一つ接続しながら,それらの動作を確かめましょう. まず,マイコンボードとダイヤルを接続します.”POTENTIO” と書かれたコネクタを接続して下さい. コネクタは互いの向きをあわせないと接続できません.無理に接続しようとするとコネクタを破損するので注意して下さい.

connect potentio

今行った接続は,図では以下のように接続したことに対応します.

connect potentio2

ダイヤルを回すとグラフの青い線が動きます.このグラフからダイヤルの角度に応じた電圧がマイコンに印加されていることがわかります.

ダイヤルの角度に応じた電圧が得られるしくみを解説しましょう.下図のようにダイヤルの軸の周囲には電気抵抗線が円弧状に置かれています.ダイヤルの軸には導電性の金属棒が取り付けられており,ダイヤルが回転すると金属棒が抵抗線の上を滑って移動します.右側は配線用の端子です.上下の端子はそれぞれ抵抗線の端,中心の端子は金属棒に接続されています.

principle of potensio

“INPUT” のコネクタを接続すると,ダイヤルの各端子とマイコンが下図のように接続されます. 上の端子はマイコンが供給する3.3 V電源の端子,一番下は接地端子(グラウンド,電位の原点となる端子), すなわち0 Vの端子に接続されます.一方,中心の端子はマイコンのアナログ入力端子に接続されます. マイコンは0 Vとアナログ入力の間の電圧を計測することができます

potentio with 3.3V

ここで角度と電圧の関係を考えます.ダイヤル軸が回転するときの端からの角度を\(\theta\), 取り得る最大の角度を\(\theta_{max}\)とします. また,0 Vから金属棒までの電位を\(v_0\)とします.さらに,抵抗線の単位角度あたりの抵抗値を\(\rho\)とします.

potentio with 3.3V

電気的な関係を回路図にすると,以下のようになります. 単位角度あたりの抵抗値が\(\rho\)なので端から\(\theta\)だけ回転した場所までの抵抗値は\(\rho \theta\)になります. 同様に全抵抗は\(\rho\theta_{max}\)になります.

potentio with 3.3V

マイコンのアナログ端子にはほとんど電流が流れないので,3.3 と \(v_0\) の比は抵抗値の比に等しくなります.すなわち,

\[\Large{ \begin{align} \frac{3.3}{v_0} = \frac{\rho \theta}{\rho \theta_{max}} = \frac{\theta}{\theta_{max}} \end{align} }\]

つまり,

\[\Large{ \begin{align} v_0 = 3.3 \frac{\theta}{\theta_{max}} \end{align} }\]

が成り立ちます.これより電圧 \(v_0\) が角度\(\theta\)に比例することがわかります. とくに,\(\theta = 0\)のときには \(v_0 = 0\),\(\theta = \theta_{max}\)のときには \(v_0 = 3.3\) となります.

ダイヤルはこのようにして角度を電圧に変換します. このダイヤルのように電気抵抗の変化を利用して変位や角度を電圧に変換する機器を,一般にポテンショメータといいます.

potentio with 3.3V

このポテンショメータは角度に比例した電圧を生じます(指数関数的あるいは対数的に変換するポテンショメータもあります). ポテンショメータを角速度が一定になるように回してみましょう.青色のグラフがほぼ直線的に描かれることが確認できるはずです.

モータ

つぎにモータを接続します.青色のグラフが画面中央の中心線上にくるようにポテンショメータを操作して下さい. 次に “MOTOR” と書かれたコネクタを接続して下さい.下の写真ではポテンショメータが接続されていませんが,ポテンショメータは接続したままにしておいて下さい.

connect motor

上の接続を図に示すと,以下のように接続したことに対応します.

connect motor

モータを接続した後にポテンショメータを回すと,回した角度に応じた角速度でモータが回転します. また,青のグラフの1.7 vのあたりを境にしてモータの回転方向が逆になります.

ポテンショメータを回すとモータが回転するのは,そのようにプログラムが書かれているからです. 以下が,マイコン(Arduino)に書かれているプログラムで,モータの動作を実現しているところを抜き出したものです.より詳しい説明は付録参照.

int ain = analogRead(PIN_AINPUT);
u = (ain - AD_MID) / 2;
pwm_output(u);

角度計測用エンコーダ

再び黒いグラフが中心線上にくるようにポテンショメータを操作して下さい.次に “ENCODER” と書かれたコネクタを接続します.

connect encorder

これにより図では以下の接続ができたことになります.

connect encorder

ここで,アームを指で回転させると,赤のグラフが変化します.

この実験装置で使用している角度センサは下図のものです.これは,(磁気式)ロータリーエンコーダと呼ばれるセンサーです.

encorder

入力に用いたポテンショメータではその構造上,360度すべてを計測することができません. もし,抵抗線を完全に360度に設置してしまうと,電源とグラウンドがショートしてしまうためです. 入力用ポテンショメータの計測範囲は軸の可動範囲と同じで約270度です.

本実験機では,アームは360度以上回転するため,同じポテンショメータでは回転角度を計測することができません. そこで,360度以上の回転角を計測可能なロータリーエンコーダを用いています.

このエンコーダは,モーターシャフトの1回転につき12カウントを与える磁気ディスクをホール・エフェクト・センサーで計測することで, 1回転につき12パルス出力します.そのパルス数をカウントすることで,回転量が計算できます. また,パルス出力は,位相差がつけられた二相(A相,B相)存在するため,その両者を同時に計測することで,回転方向も検出できます.

なお,モータには1:120の減速機が付いていますので,アームが1回転したときに, モータシャフトは120回転します.そのため,アームが1回転すると,エンコーダが120×12=1440 countします. これより,360 deg / 1440 count = 0.25 deg/count となり,アームの角度変化を0.25 deg単位で計測することができます.

動特性の測定

制御対象は動的なシステムです.一般にシステムの入力と出力の関係のことを入出力関係といいます.例えば,y=3u という式は入力 u と出力 y の入出力関係を記述してます.動的システムの入出力関係のことを動特性といいます.良好な制御系を設計するためには制御対象の動特性を把握する必要があります.どうすれば動特性を把握することができるでしょうか?

動的システムは急には動きませんし,急には止まれません.動特性が異なれば,動かない程度,止まれない程度が異なります.とすれば,逆に,動かない程度,止まれない程度がわかれば動特性がわかるはずです.

ここからはモータ実験装置の動特性の測定を行います.モータの場合,動かなさの程度と止まれなさの程度は対称的なので,どちらか一方を見れば十分です.ここでは動かなさの程度に着目します.動かなさ具合は無理矢理動かしてみれば見えるでしょう.そこで,ある時刻に突然一定の電圧を印加し,その後はその電圧を加え続けてみます.これはある時刻に電池のスイッチを入れることに相当します.

実験は,シミュレータを用いて行います. こちらを開いてください.別タブで開きます.

”mode”にて”Feedforward”を選択し,”inputs”にて”step”を選択してください. これにより,モータにステップ入力(ある時刻に突然一定の電圧を印加し,その後はその電圧)を与える設定にになります.

simulator step input

ステップ応答

それではモータを動かしてみましょう. “start/stop” をクリックしてみましょう.モータが回転を始めると同時に下図のようなグラフが表示されるはずです.赤のグラフはアームの角度をあらわしています.

simulator step input

ちょっとわかりにくいですが,モータへの印加電圧は時刻0を基準に,以下のように変化しています.このような関数をステップ関数といいます.この関数を入力として用いるときには,その入力をステップ入力といい,そのときの応答をステップ応答といいます.

step input

モータのステップ応答は下図のようになります.角度はおおよそ直線状に変化しますが, エクセル等で実験結果をプロットしてみると,直線は原点付近では若干ズレていることが確認できます.

simulator step input

今はモータに 0.5 vの電圧を印加しています. ウィンドウ上の “amp[V]”の値を 0.5 から 1.0 に変更すると印加電圧を 1.0[v] に変更することができます. ampの値を変更して再度実験してみましょう.上記のズレはどうなりますか?

上記のズレがモータの動かなさの程度をあらわしています. このようにステップ応答から動特性をおおよそ把握することができます.ステップ応答は対象の動特性を知るためによく用いられます.

第一回のコア実験で PID 制御系の設計を行いました.その際,ステップ状に変化する目標に対して良好に追従するような制御則を模索しました.一方,制御対象と制御則(あるいはコントローラ)からなる制御系も動的システムであり,ステップ状の目標に対する応答は制御系のステップ応答に他なりません(下図).つまり,第一回目のコア実験では制御系の良し悪しを制御系のステップ応答から判断していたことになります.このようにステップ応答は制御対象の動特性を把握するためだけでなく,制御系の性能を評価する際にも用いられます.

Block Diagram

ファイルへの保存

実験の結果をファイルに保存しておきましょう.ファイルへの保存は次の手順でできます.

  1. “start/stop” をクリックして実験を停止させます.
  2. “save” をクリックします.
  3. “data_ff_0.500_1.000.csv”のようなファイルがダウンロードされるはずです. データは下記に示すようなカンマ区切りのテキスト形式にて記録されますので,ファイル名は印加電圧(amp[V])から自動で生成されたものになっています.
simulation data

ファイルの中身はデータが4列,カンマで区切られて並んでいます. 一番左から時間(秒),アーム角度(deg),アナログ入力電圧(V),モータへの印加電圧(V) です. (ただし, ”Input Signals”にて”step”を選択した場合は,アナログ入力は使っておらず, 電圧(V)は常に0になるようにしています)おおよそ 1 msごとにデータが記録されています.

保存されたファイルは Excel を用いて開くことができます.実験結果をグラフとして表示してみてください.

レポート課題

以下の内容をまとめてレポートを提出しなさい.レポートは一週間後の13:00までにCLEにて提出するように.

1. エンコーダの動作原理について調べ説明せよ.ポテンショメータとロータリーエンコーダを比較し,それぞれのメリットデメリットをまとめなさい. 2. (s講義,演習での内容も参考にして),モータにステップ入力\(u(t)\) (単位ステップ入力ではないことに注意)

\[\Large{ \begin{align} u(t) &= v_s e(t) \\ e(t) &= \left\{ \begin{array}{ll} 0 & (t < 0) \\ 1 & (t \geq 0) \end{array} \right. \end{align} }\]

を入れたときのアーム角度\(\theta\)を表す式が,

\[\Large{ \begin{align} \theta(t) = \frac{K v_s}{B} \left(t -\frac{J}{B}+ \frac{J}{B}e^{-\frac{B}{J}t}\right) \end{align} }\]

となることを導出せよ.ただし,\(D\)は粘性摩擦係数,\(K_E\)は逆起電力定数.\(K_T\)はトルク定数, \(J\)はモータの慣性モーメント,\(R\)は電機子抵抗,\(B = D+ \frac{K_T K_E}{R}\),\(K= K_T/R\)である.

3. 電圧(ステップ入力の大きさ)を変えながら実験し,ステップ応答を求めよ.

4. 実験で得られたステップ応答の結果を用いて,\(\frac{K}{B}\)および\(\frac{JK}{B^2}\) を求めよ.

付録

モータを動かすプログラム

以下が,アナログ入力のデータをもとに,モータの動作を実現しているプログラムです.

int ain = analogRead(PIN_AINPUT);
u = (ain - AD_MID) / 2;
pwm_output(u);

analogRead はアナログ端子の電圧を測定し,その電圧に対応する整数を返す関数です. 使用しているマイコンはアナログ端子を複数持っているので, 測定するアナログ端子を analogRead の引数で指定しています. 関数が返す整数は 0 ~ 1023 の値で,0は 0V,1023 は 3.3V に対応します. 1023 は中途半端な数字に見えるかもしれませんが,これは2進数で 1 が 10 個並んだ数値です. つまり,この関数は 0V ~ 3.3V の電圧を以下のように2進数で10桁の数値に対応させています.

appendix1

2行目の右辺は,モータに印加する入力を計算する式です.AD_MID は 1023 の約半分の 511 を示す定数です. ain が 0 ~ 1023 の値をとるとき (ain – AD_MID)/2は-255 ~ 256 の値をとります. 3行目の 関数pwm_outputの中でuの値を電圧(-3.3〜3.3)にスケーリングし, それをモータに印加しています(厳密には PWM(パルス幅変調) で近似した電圧を印加していますが,やや高度な内容になるので詳細は省略します.). 以上の一連の変換を総合すると下図の変換を行っていることがわかります.

appendix2