HOME >> 鉄道模型実験室 > Arduino MEGA を使ってみる
先回報告した「卓上レイアウトで楽しもう その30」(2021/1/23)で、I/Oポートの不足を問題にした。 その解決策として、Arduino MEGA を使用する方法があるので、今回はその調査を実施した。
■ 問題点の整理
自動運転の場合、リバース線の走行や複数の列車の運行を考える時、閉塞区間を設けて独立した走行制御が必要となってきます。 それぞれの閉塞区間毎にPWM制御によって進行方向や速度を制御すれば良いのですが、このとき、閉塞区間を分けるギャップ部分に注目しなければなりません。 二つの閉塞区間を全く独立して制御した場合には、このギャップ部を跨いで走行する列車によって、二つの閉塞区間の給電が接続してしまい、場合によってはショートが発生するのです。 実際の鉄道のように惰行で走行するデッドセクションを設ければ良いのですが、鉄道模型の場合には採用不可能ですね。 この点については、「卓上レイアウトで楽しもう 自動運転の制御手段」(2020/3/28)で解説しています。
その解決策とし、ギャップ部走行時にはPWM制御のパルス・タイミングとデューティ比を合せておくことです。 勿論、PWM制御のキャリヤ周波数が一致している事は必須です。 デューティ比は制御プログラムで設定出来るのですが、キャリヤ周波数とパルス・タイミングはマイコンの特性に依存しています。
また、PWMパルスを出力するI/Oポートを多数備えたArduino はいろいろありますが、その殆どは独立したタイマーによって制御されています。 モータなどのアクチュエータを駆動させる場合には、このパルスのタイミングを気にする必要はありません。 それは、上記に説明したPWM波形の重なりなど関係ないのです。 殆どの場合はモータはそれぞれ独立して回っており、回ればよい、トルクを出せばよいのであって、モータ間のパルスタイミングは関係ないのです。 ロボットの様に個別のアクチュエータを作動させる目的ではこれで充分ですが、レール上を走らせる鉄道模型には適応できないのです。
■ ArduinoによるPWM制御
ArduinoによるPWM制御のためのポートは多数のI/Oポートが設定されており、それぞれのデューティ比を制御することが出来ます。 しかし、これらのポートは個別のタイマーで制御されており、そのパルスタイミングが一致している保証はありません。 同じタイマーを使用していることがタイミングを一致させるために必要なのです。
Arduinoの多くの種類の場合、一つのタイマーによって2個か3個のI/Oポートを制御しているに過ぎません。 Arduino UNO の場合、6個のPWM出力ポートは、3個のタイマーで、各2個ずつのポートを制御しています。 自分が卓上レイアウトで使用してきた Arduino Nano Every では、5個のPWMポートをひとつのタイマーで制御していましたので、パルス・タイミングの問題をクリアーしていました。 さらに、タイマーは他の用途にも使用していますので、その機能との干渉も考慮する必要があります。 例えば、タイマー0とdelay()関数の関係、tone() 関数を使用すると機能しなくなるPWMポートがありますので注意する必要があります。
今回使用しようとしている Arduino MEGA には多数のI/Oポートがあり、PWMを出力できるポートも15ポートありますが、これらのポートは6個のタイマーで制御されており、パルスタイミングが一致するとは限りません。 一つのタイマーから3個のポートを制御しているのは、タイマー3、4,5のみで、他は2個のポートしか制御していません。
このためには、出力を制御するDCモータドライバを上手く利用することが必要となります。
■ DCモータドライバの選択
DCモータドライバには色々な種類がありますが、大きく分けて3種類に分類されるそうです。
回転方向と速度を2本で制御 |
回転方向を1本、速度を1本で制御 |
回転方向を2本、速度を1本で制御 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
FIN | RIN | OUT1 | OUT2 | PHASE | ENABLE | OUT1 | OUT2 | IN1 | IN2 | PWM | OUT1 | OUT2 |
PWM | L | H | PWM | L | PWM | PWM | L | L | H | PWM | L | PWM |
L | PWM | PWM | H | H | PWM | L | PWM | H | L | PWM | PWM | L |
L | L | OFF | OFF | L/H | 0 | L | L | L | L | PWM | OFF | OFF |
Hブリッジドライバ BD6231 、TB6568KQなど | デュアルモータードライバ DRV8835 など | デュアルモータードライバ TB6612FNG など |
(注記) 自分はこの分野に精通しているわけではありませんので、詳しくはそれぞれの仕様書で確認して下さい。
PWM制御ピンと方向制御ピンが一緒のものと別個になっている物であったり、使い方によって使い分け可能なタイプもあるようです。 ここで注目する点は、1本のPWM 信号線を使用し、正転と逆転を2本の信号線で実施するタイプのドライバーです。 PWM信号を共通使用すれば多くの出力が制御可能となるのですが、回転方向制御用の信号線が増加するのはやむを得ません。 そうです、Arduino MEGA が使えるのです。
さらに、PWMのキャリア周波数を可聴域を外すために高くすると、パワートランジスタの応答性に注意する必要があります。 バイポーラ形では応答出来ない(?)との事らしいのですが、MOS素子を使用したパワートランジスタであれば、100 KHz にも対応しているので問題ないはずです。
■ Arduino MEGA 2560 によるPWM制御
そこで、 一つのタイマーから出力された3個のPWM信号を使用して制御ポートを増やす手段を考えてました。 それは、下のイラスト示すように、上記のデュアルDCモータドライバ TB6612FNG を使って、給電用の制御を実施する方法です。 このモータドライバを使用すると、回転速度(PWM)制御)と、回転方向切替(進行方向切替)を別々の端子で実施しているので、この様な芸当が可能なのです。
.
しかし、このために3本のポートが必要となるのですが、多数のポートを持ったArduino MEGA では対応可能となったのです。
「TB6612使用 Dual DC モータドライバキット」として、ピンヘッドなどの端子を自分でハンダ付けすればよいキットが秋月より発売されています。 給電電圧は 2.5〜13.5ボルト、出力電流は 1.2A などで、鉄道模型用にはピッタリです。
この構成では、タイマー4のプリスケーラの設定を変更してPWMのキャリア周波数を31KHzにしています。 そしてデューティ比を個別に設定したPWM信号として3個のポートから出力できます。
この出力信号を使用してモータドライバを駆動すれば多くの給電フィーダーを制御できますが、パルス・タイミングが一致したPWM信号のデューティ比はあくまで3種類しか設定できません。
3種類のデューティ比が設定できることは、一般路を走行している列車と駅構内の列車の加速発車と減速停止が制御可能となり、さらに1番ホームと2番ホームが別々に制御出来る事でもあります。 するとアイディア次第ではいろいろな運行モードを変化させることが可能となるでしょう。
■ まずはテストで確認
本当に可能なのかを実際に確認するのが我が実験室のモットーです。 今回は下のような状態でテスト走行を実施しました。
.
先日購入した Arduino MEGA 2560 と、 「卓上レイアウトで楽しもう 部品を揃える」(019/11/4)などで使用していたTB6612使用 Dual DC モータドライバキットを使用して、右のような回路を組んで実験しました。
卓上レイアウトその30 の改良を目的にしていますので、リバース線の運行用に同じデューティ比の給電フィーダーを2個接続し、1番ホームと2番ホーム制御用として、独立したデューティ比の給電フィーダーをそれぞれ1個接続しています。
また、速度制御のための可変抵抗は、A0 ポートに接続しています。 また、Arduimoの電源は、モータドライバの電源であるACアダプラからのDC12volt を使用し、制御用の5volt はArduino から取り出しています。
テスト走行用のスケッチ ⇒ MEGA-1.html
キャリヤ周波数の設定は、たった一行だけの記述でOKです。 配線状態を下の写真に示します。
この給電制御のために、11本のポートを使用していますが、MEGA ならでの芸当ですね。
テスト用の線路を用意しました。 R140のミニレールを使った楕円型のレイアウトで、中央にギャップレールを挟んで二つの閉塞区間を設定しました。 そしてこれらに給電して電車を走らせました。
その様子を動画で紹介します。
通常のモータでも、コアレスモータでも異常無く走行させることが出来ています。 また、高速でも極低速でも問題ないようですし、中央部のギャップをはさんで走行しても良好で、室内灯の点灯具合もOKですね。
■ オシロスコープによる制御波形の観察
そして、オシロスコープを持ち出し、二つの給電状態を確認しました。 オシロスコープの入力は2チャネルしかありませので、4個の給電ポートを二つずつセットにして観察しました。
Bトレ電車を走らせながらオシロ画面をハードコピーし、USBに保存しました。
◆ 給電端子1と2の波形
D8ポートから出力されたPWM信号を使用した二つの給電端子の波形を下に示す。
.
同じPWM信号を使用しているために、二つの端子は同じタイミングであることが一目で確認できます。
キャリア周波数は、31.35KHzで、デューティ比を変化させても綺麗に揃っています。
また、デューティ比を小さくしてもパルス波形が崩れていないので、パワトラは高周波にも確実に反応していることが分かります。 このため、極低速方向でも制御されていることが納得できます。
◆ 給電端子1と他の端子との波形比較
.
パルスタイミングの確認のために、PWM制御の異なる端子を比較してみました。 ヂューティ比はそれぞれ同じ値に設定しています。
左側の画面は、端子1(CH1)と端子3(CH2)の比較です。 これもピタリと一致しています。
右側の画面は、端子1(CH1)と端子4(CH2)の比較です。 これもピタリと一致しています。
即ち、端子1〜4は全てタイミングはピタリと一致していることが確認できました。
■ まとめ
I/Oポート数の多い Arduino MEGA でも、鉄道模型の自動運転システムに使用出来ることが確認できました。 そこで、卓上レイアウトその30 の更なる改良を進めることにしましょう。
2021/1/30 作成