HOME >> 鉄道模型自動運転システム > 卓上レイアウトで楽しもう 自動運転の制御手段
卓上レイアウトを楽しもうと銘打って、自動運転システムを工作してきましたが、ここで立ち止まって今までの工作内容を振り返ることにしました。 今回は、まだ課題が残っている自動運転の制御手段について考えてみることにします。
■ 実験してきた制御手段の反省
鉄道模型の自動運転に必要な速度制御と加速・減速制御について、色々な手段を実験してきました。 一般走行中の速度を制御するのは当然ですが、停車中の列車を発進させて加速させていく制御と、減速させて停車させる制御も必要です。 このために、色々なトライを実施してきましたが、うまく行った場合もありますし、失敗や課題を残した例もありました。 その反省を振り返って整理しようとしましたが上手のまとめるkとができませんでしたので、ランダムな記述ではあるものの、ここにまとめておくことにしました。
これらの悩みに対して、検討してきた内容をまとめておきます。
■ コントローラを使った制御手段
簡単な制御手段として、鉄道模型用の市販のコントローラを使って自動運転の加速・減速制御をテストしました。 その考え方を下のイラストに示します。
一般走行中の速度は、供給電力の電圧をコントローラのつまみで制御し、ホームなどでの発進・停車時はPWM制御によって実施するものです。 この方法は比較的簡単に実施出来ましたが欠点として、
パルス制御式のコントローラ( TOMIX: N-1001-CL)でも実験しました。 コントローラの20KHz のパルス波と、発進・停車時の1Khz のパルス波では 20倍も違うのでうまくパルス波が混ぜ合わされて機能するのではないかと考えたのですが、最初は見事に失敗しました。 問題はモータドライバのコンデンサでした。 20KHz のパルスがコンデンサによって鈍ってしまい、12V電圧がもろに作用してしまい暴走してしまいました。
そこで、このコンデンサを取り去ると問題無く作動するようになり、12Vで20KHzのPWM制御運転が出来るようになりました。 このため、テープLED方式の室内灯を装着した客車も運転させることが出来るようになりました。
また、高い周波数のPWM制御に追いつかないモータドライバもありました。 この場合はパルス波形が供給電圧状態に鈍ってしまって電車が暴走してしまいました。 コンデンサ有りの場合と同じですが、コンデンサのように取り外すことが出来ませんので、採用を諦めるしかありません。
■ 12VのACアダプターを使った制御手段、そしてPWMキャリア周波数のアップの方法
一般走行中の速度と発進・停車時の制御をまとめてPWM制御するため、供給電源としてDC12voltのACアダプターを活用しました。 PWM制御はArduino やPICマイコンのPWM出力を使って制御します。 そしてこの12V電源は、Arduino 用の電源やポイント駆動用の電源ともなりますので、これらの電源と共通使用が可能です。
しかし、一般走行中でも制御の対象ですので、PWMのキャリア周波数を高く設定する必要があります。 Arduino Uno の場合は 約490Hzです。 ただし、5、6番ポートは約980Hzで出力します。 この周波数は、どちらも可聴域のど真ん中ですので、キーンと言うモータ音が発生します。 これをさせるためには市販のパルス式コントローラのように、可聴域外の高周波周波数に変更する必要があります。
では、その周波数をアップさせる方法は?
****************************************************************
Arduino Uno の場合は検討していませんが、Arduino Nano Every の場合は、スケッチの中の、void setup() に、
TCA0.SINGLE.CTRLA = 0b0101;
を記述します。 このたった一行を追加するだけで、PWM制御のキャリア周波数を、約16KHz に高める事が出来ました。
これは、マイコンチップのレジスタの設定を変更する処理であり、Arduino の種類ごとに異なるため、メインチップに応じた指示方法に従う必要があります。 その指示方法はそれぞれの説明書を紐解く必要があります。 初心者にはチンプンカンプンの領域なのです・・・・・・・・・・・・・・・( ^ω^)。
また、この指令は、タイマーの設定までも変えるため、時間に関する関数、例えば delay(1000) の場合は、周波数を16倍にあげているので、こちらも16倍した数値を指定する必要があります。
設定した状態が本当かどうかはオシロで確認しておく必要があります。 「Arduino Nano Every のPWM周波数をアップする」(2020/3/3)を参照ください。
***************************************************************
PICマイコンを使用した場合のPWMキャリア周波数の設定方法は、「きむ茶工房ガレージハウス」さんのサイトなどで、詳しく説明されているので参考にして設定いて下さい。 また、Arduino に関しては、「Arduinoで遊ぶページ」さんのサイトで説明されていますが、主にUno の場合の説明です。
■ 複数の列車を走らせる場合の注意点
レイアウトを楽しむ時、同じレイアウト、即、ち同一路線上に複数の列車を走らせたくなります。 この場合、単に同じ電圧でズーと走らせている場合は問題無いのですが、どこかで、減速・停止させたり、発進・加速させたりする場合には、ある区間を区切って速度制御させる必要があります。 この場合に、他の区間を走っている列車の面倒をどう処理するかで悩みます。 二つの列車を同じ様に、減速させたり加速させたりするの?
当然、別々の制御が必要となりますが、取り扱うマイコンの Arduino や PICマイコンは、この様なマルチタスクが苦手です。 苦手というより素人には手が出せませんので、何らかの工夫が必要となります。
などの工夫をしてきました。 この工夫はうまく機能していましたが、これ以上に複雑化した場合の対応は不明です。 また新たな工夫が必要になるでしょう。
■ 閉塞区間を跨ぐ場合の制御方法
気にはしていましたが、あまり配慮をしていなかった問題です。 PWM制御の状態が異なる二つの閉塞区間を通過する時、線路はギャップによって絶縁されているのですが、室内灯などの集電のために設けた通電台車と車体によって、二つの閉塞区間は通電していまします。
この場合、それぞれの閉塞区間のPWM波形は干渉しあって、相手側の区間に電流は流れてしまいます。 実際に発生している時の映像を紹介します。
.
電車が4両編成になってしまた停車時に発生しています。 1:13、1:38 などです。
車両編成が長くなってから発生していますので、最後の車両(動力車)が影響していることは明らかです。
この時のPWM波の干渉の様子を右のイラストに示してみました。 一般区間である区間Bから、減速制御を実施中の区間Aに電流が流れ、区間Aの車両がビックリして飛び出しています。
この現象を避けるには、二つの区間のPWM制御の(1)サイクルが合っている事、(2)パルスのタイミングが合っている事は当然必須です。 これが合っていないとクシャクシャノ状態となってしまいます。
そして(3)パルス幅、即ちデューティ比が合っているのが理想ですが、別々の制御しようとしているためにこの部分にズレが生じてしまうのです。
これを避けるための方法を考えてみましょう。
*****************************************************
● 対策 その1
この現象を避けるには、ギャップの位置と減速を検知するセンサの位置の関係、減速を始めるタイミングなどを調整すれば良いのですが、短い区間に長い編成の車両を走らせる場合にはどうしても無理があります。
● 対策 その2
ギャップを跨いで通過することは避けられませんので、通過する二つの区間を同時に制御する方法です。 通過後の区間は通電を停止し、新たに先方の区間とペアになるように制御していけばよいのです。 すると、何台もの列車を同時に運行制御できるのです。 ただし、区間毎に独立した制御ドライバーが必要となりますので、システムが複雑となってしまいます。
この制御方法は、TOMIX の新しい自動制御システム TNOS にも採用されていますね。 当初、このシステムの解説を読んでいて、何だか無駄な制御をしているなと思っていましたが、今読み直してみると、フムフム・・・!と納得し、さすが制御のTOMIX さんと感心しました。 参考サイト。 ステムの概要の基本的な動き参照。
● 対策 その3 (逃げの一手)
もっとも簡単な方法は、動力車を先頭に置いて、他は非通電台車の車両を牽引させることです。 非通電台車の場合、ギャップ通過時の通電は、その車輪だけですのでピクリとはするものの、影響ない程度と推定します。 あるいは、複数列車の同時運行は諦めて、全体の線路を同時に制御すれば何ら問題は発生しません。 当然、 閉塞区間を設ける必要もありませんね。
■ 制御マイコンとモータコントローラの選択
使い勝手や目的に応じて選択してきましたが、それぞれに長所・短所がありますので、それに合わせて使用して行けば良いと思います。
種類 | 名称 | I/O ポート |
PWM ポート |
Analog |
電源電圧 | 特徴など | |
---|---|---|---|---|---|---|---|
PICマイコン | PIC12F683 | 6 |
1 |
4 |
2.0〜5.5volt | ・プログラムはアッセンブラやC言語を使用する。 ・書込みには専用のアダプタが必要。 ・プログラムの修正時は、マイコンを取り外して実施する。 |
・小さくてコンパクトである。 ・信号機の制御などに使用できる |
PIC16F1827 | 13 |
6 |
12 |
・ポート数が多いので色々な制御に使用出来る。 |
|||
Arduino | Uno | 14 |
6 |
6 |
6〜20volt | ・プログラムはシンプルな文法のスケッチを使用する。 ・初心者にも取り組みやすい。(ハードとソフト共に) ・書込みはUSBケーブルを使って直接書き込む。 |
・最も一般的でArduinoの標準的な機種 ・使用例が多く、紹介サイトも多い。 |
Nano Every | 20 |
5 |
6 |
・新しい機種で、コンパクトである。 ・ブレッドボードを使って使用できるので便利であう。 ・応用紹介のサイトが少ない。 |
今まで、上記の様なマイコンを使ってきましたが、最近はPWMキャリア周波数をアップ出来た事もあり、コンパクトな Arduino Nano Every を主体に使用するようになってきました。 ただ、PWM信号を出力できるポート数が5個では少ないことが気がかりとなっています。
上記の閉塞区間の問題に対して、対策その2で対応するには、もっと多くのポートが必要になってきます。 進行方向が異なると右レールと左レール用の2個のPWMポートが必要となるので、さらに制約されるのです。 このため、速度制御を実施するPWMポートと回転方向を制御するポートの関係を、ドライバーの観点から整理してみる必要があります。
● モータドライバの制御方法
マイコンから出力された信号を、レールへ給電出来るように電力制御(大きな電圧と電流をコントロールする)する駆動要素について考えてみます。 スイッチサイエンスさんの「DCモータードライバの使い方」サイトを参考にして分類してみました。
ドライバーによって、これらの制御方法が決まっていますので、適したドライバを選択する必要があります。 さらに、その仕様にも制限がありますので、さらに選択肢が少なくなります。 上記の中で、2番目の分類に対応した DRV8835 は最も適しているように見えますが、モータ電源電圧が 11volt までですので、使えませんね。 残念!
● モータドライバはモータを駆動させるための専用ドライバである
なにを当然な事を言い出すのだろうかと思われるかも知れませんが、自分は改めてこのことに気が付きました。
モータを駆動させる場合には、モータ間のパルスのタイミングを気にする必要はありません。 上記に説明したPWM波形の重なりなど関係ないのです。 殆どの場合はモータはそれぞれ独立して回っており、回ればよい、トルクを出せばよいのであって、モータ間の駆動のためのパルスタイミングは関係ないのです。 ただし、パルスモータなどを駆動する場合には、知識がゼロですが、せいぜい二つの出力をペアにする程度だと思います。 このために、デュアルモータードライバがあるものと認識しているのですが・・・・・・・。
振り返って、鉄道模型の閉塞区間をコントロールしようとした場合は、上記に説明したように、この点が問題になる事に気が付きました。 制御側のArduino と制御される側のモータドライバにおいて、PWM波形の重なり問題に対応できるのかという点で、大いに困惑してしまうのです。
● ではどうするの?
PWM出力ポートが15本もある Arduino Mega が使えるのか調べてみましたが、Uno と同様に490Hzと980Hz の2種類の周波数があり、さらに、PWM出力用に使用しているタイマーが、0〜5の6個のタイマーを使用して模様です。 おおもとの発振器はひとつと思われるので、PWM波形の重なりで心配したサイクルとタイミングのズレは心配ないかも知れませんが、未確認なのです。 もし、合致していなかったら制御がクシャクシャになってしまうので、完全にNGです。
他の方法はと言われると・・・・・・・・・・・・暗中模索の状態です。
*********************************************************************************
この問題は、今後の課題として、当面は対策1か、対策3(逃げの一手)で対応していく事にします。
2020/3/28 作成