arduinoで速度制御
2013年1月16日


 NATOCを使ってNゲージをコンピュータで速度制御する方法として擬似PWMを使う方法とサーボモータを使う方法を提供してきました。
 arduinoには直接PWMを出力する機能があります。
 この機能を使ってNゲージを走らせてみます。



 まず単純に3番PINとGNDをレイアウトに供給します。
 arduino-UNOにはPWM出力可能なPINが限られていて3,5,6,9,10,11が可能です。

 速度を変える方法として入力にボリュームをつないでその抵抗値を読み取ってそれに応じて出力を変える事が考えられます。
 しかしそれだと通常のコントローラーで操作するのと変わらないので今回はシリアル通信を使ってPCから速度制御をします。

 こちらのarduinoのスケッチで試しています。
 arduinoのソフトについてはこちらの記事やarduinoのサイトを参照してください。
 シリアル通信でPCSnnnと送信してやるとそのnnn(速度パーセント)に応じたPWMをPIN3に出力します。
 最初のPCSは任意に定義したコマンドでSはスピード制御を表します。
 NATOCで使っているインタフェイスのコマンド(PCXXXX)に合わせて定義しています。

 次期バージョンではSはセンサー入力にしたのでスピード制御はP(PWM)に変更しました。



 arduinoにスケッチを転送してツールのシリアルモニタを立ち上げます。
 キーボドからPCS100と打ち込んで送信ボタンまたはEnterキーを入力すると列車は走り出すはずです。
 出力される電源が最大5Vなので重い車両だと走らない可能性があります。
 PCS0を送信すると車両は停止します。
 0以上でも数字が少ないと車両は動きません。


 しかしこれだと最大5Vなので走らせる車両が限られます。
 また最大でも速度はあまり出ませんし片方向にしか走らせる事ができません。
 そこでNATOCで使っているモータドライバを使います。
 TA7291Pというモータドライバを使いました。
 このモータドライバは単に出力の電圧を増幅させるだけでなく逆方向に電流を流せます。
 この機能を使って車両の回る方向も制御します。



 逆方向に走らせる時のarduinoの出力は4番PINはPWM出力ができないので5番PINにしました。
 この5番PINをTA7291Pの6番PINに正方向のPWM出力の3番PINはTA7291Pの5番PINに接続します。
 TA7291Pの出力は2番PINと10番PINなのでこれをレイアウトに接続します。
 電源は+をTA7291Pの4番、8番PINに−側を出力はTA7291Pの1番に接続します。
 またarduinoのGNDもTA7291Pの1番に接続はします。
 TA7291Pの電源の7番PINをarduinoの5V電源PINに接続します。
 TA7291Pの電源は4.5V〜20Vなのでこの範囲であれば車両電源から接続しても構いません。

 なおTA7291Pの4番は制御電源端子(ref)でここにのPWM信号を入力する方法もあるようですがここを5V以下にすると車両電源に12V位かけても車両は早く走ってくれませんでした。

 車両電源としてNゲージのパワーパックが書いてありますが、+-を逆転させたり電圧を落とせたりできるのモータドライバが正常に動かなくなる事も考えられます。
 またパワーパック自身がPWM出力している場合もありますので注意してください。
 今回は安定化電源を12Vに設定して実験していますが9V〜12VのACアダプターが使えると思います。



 以前NATOCのPWM制御の試験で配線したモータドライバがそのまま使えました。

 モータドライバの実験はこちらのarduinoのスケッチで試しています。
 先程のスケッチを拡張して数字の前に-を付けると逆方向に走行します。
 またモータドライブのプレーキー機能をサポートしていて数字が0の場合ブレーキをかけるようにしています。
 モータドライブの両方の入力がHIGHの場合はもモータにブレーキがかかります。
 車両を止める時、PCS0(ブレーキあり)とPCS1(ブレーキなし)でブレーキの効果が確かめられると思います。


 実際に動かした時の動画です。

     

 操作はNATOCで行っています。NATOCの次のバージョンではarduinoをサポートする予定です。
 今回の実験でarduinoのPWM出力機能は十分使える事が分かりました。
 今回行った作業は配線を間違えるとarduino、モータトドライバおよびNゲージ車両の破損を伴いますのであくまでも自己責任という事でお願いします。

目次に戻る