線路の風景



自動運転 その1




自動運転検出方法

Ntrain/AtoSection.jpg - 7KB
進行方向にあるセクションは電源を供給しないで検出回路にしておきます、
PWMコントローラーで車両を動かし、検出する区間に車両が進入するとPWM電源なので+12が検出されます。
そこで検出した区間をPWMコントローラーからの回路に切換えていくことで制御しようというものです。



自動運転制御基板

Ntrain/AtoBlock.jpg - 35KB
全体のブロック図です。
ホストパソコンとの通信はRS232Cにしました。
制御基板は現在3枚あり、上からポイント制御基板、セクション制御基板2枚です。
これらの基板は重ねてあり、さらに増設することもできるようになっています。
ポイント制御基板のグレーに色分けしたCPUが、I2C唯一のスレーブとなっており、
他のCPU(I2Cマルチマスタ)からセクション検出を受取り、RS232Cでホストに送信します。
ホストパソコンからのコマンドはRS232Cで、ポイント制御基板にあるレベルコンバータ(ADM3202AN)
で5Vにして、他のCPU(16F887)すべてに送ります。
各CPUはあらかじめ設定してある自分のIDと一致するコマンドだけを受取り、動作します。
左側のCTRLとあるのは、PWM式コントローラーでA,Bの2系統あります。
コントローラーもコマンドはRS232Cで受取り、コマンドコードにより自分へのコマンドかどうかを判断します。
(コントローラーへのRS232Cはフォトカプラでアイソレートしています)

セクション制御用基板は一個のCPUで6セクション、二個のCPUを載せて12セクション分を制御します。
現在は2枚で計24セクション分の制御ができるようになっています。

ポイント制御用基板も一個ののCPUで6系統制御して1基板に二個CPUを載せ、
計12系統のポイントを制御できるようになっています。

CPUはピン数の多い(40pin)16F887を使ったのですが6系統までしか制御できません
たしかにIO数の多い他のCPUを使ったほうがすっきりするのですが、
コスト面やさらに増設することを考えてこのような構成にしました。

Ntrain/SectionUnit.jpg - 65KB
1セクションの回路図です。
Section Detet(セクション検出)はCPU内部でプルアップ設定しています。
A-1とA-2にPWM式コントローラーのA系統、B-1とB-2にPWM式コントローラーのB系統を接続します。
SW MANU-SELは ON-センターOFF-ON のタイプで手動運転用にマニュアルでA、B系統を切換えられるようになっています。
パワーMOS-FETのフルブリッジを使う方法もありますが、PWM(パタン)制御をどこで管理するかで大変そうなのと、
手動運転時にPWM以外のパワーパックを接続したりすることも考慮し、
秋月電子でリレーをまとめて安く購入できたのもあり、今回はこのようにしました。
(本当は12Vリレーにするつもりでしたが、安かったので5Vリレー)


ポイントのドライブは東芝のTA7291SG(フルブリッジドライバ)を使い、CPUポートから直接制御して
出力をポイントの2線につなぎます。
そして切換え方向に一定時間ON(現在は300msec)することで転換します。
KATOユニトラックもTOMIXファイントラックも同じ制御です。
ポイント制御用基板も、基板上で1系統毎にマニュアルで切換えられるようにSWを設けています。


Ntrain/Unit1.jpg - 75KB
基板を3枚重ねた様子です。
マニュアル用のスイッチと状態表示LEDがずらりと。


Ntrain/Unit2.jpg - 56KB
反対側です、PWMコントローラーへのRS232Cが2つ、HostからのRS232C、そして電源ジャック+12と+5です。
配線は一部TCW(すずメッキ軟銅線)を共通ラインなどパタン風に使いましたが、主にUEW(ポリウレタン銅線)で配線しています。
このサイズにこれだけの部品があり、また、後からLEDなど追加や、
回路変更(2枚目、3枚目のセクション制御基板はリレー配置を大幅に変更)もあり、
基板の裏側はごちゃごちゃでたいへんなことになってます。



フィーダーについて

線路をいくつものセクションに分割して制御するため、
レールの絶縁とフィーダーが数多く必要になります。
レールシステムはKATOのユニトラック、TOMIXのファイントラックを(なんと無理やり)混用していますが、
ユニトラック区間が多く、フィーダー線路(#20-041)や、曲線区間用のターミナルユニジョイナー(#24-818)
にしてもコスト的に大変なので、ターミナルユニジョイナー(もどき)を自分で作ることにしました。
以下自己責任での工作となります。

Ntrain/UniJoiner1a.jpg - 16KB
ユニジョイナーの金属ジョイントは、上からはめてあり、赤の矢印部分のツメで留まっています。
ここをマイナスドライバーなどで突っついてはずします。(強く押すとツメが曲がってしまうので注意が必要です)
右側のように分解できます。

Ntrain/UniJoiner2a.jpg - 14KB
コードをユニジョイナープラ部品の下から通して、金属ジョイントの下に半田付けします。


Ntrain/UniJoiner3a.jpg - 21KB

金属ジョイントを上からはめてコードを収めれば完成です。
制御基板につながる反対側は(コスト面から)単純にピンコネクタにしています。(基板側はピンヘッダ)




ホスト側ソフトについて

当初はExcelで線路図を作成し、VBAを使って制御しようとしていました。
Excel上なら、線路配線を変えてもその場で変更することができるからです。
(Formの場合、Visual Basic Editor画面での編集となってしまいます)
ただExcel(Office)がインストールされている環境でないと実行できないので、
(フリーのビューアーはありますが、マクロ実行できないと意味がない)
フリーソフトである、OpenOffice(のCalc)を使うように変更しました。
ベースはExcel版でかなり作成していたものを、OpenOffice Calcに移植しました、
実はこれでちょっとはまってしまったのでした...

VBAとOpenOffice.org BASICでは、そのままでは一部互換がないので、
特にセルの操作する部分は書き換えてやる必要があります。
で、はじめは単純に書き換えたのですが、これを実行すると、遅いのなんのって!
まったく使い物になりませんでした。
ネットで調べてみると、OpenOfficeではセルのアクセスが遅いそうで、いろいろ試行錯誤した末、
セルの操作は一度読込んでから最後に書込むなど処理を工夫することで大幅に改善できました。
(とはいえ現時点でもExcelに速度の点でかないません、まあ実用レベルにはなったかと)


そしてもうひとつ、最大の課題が、RS232Cの通信でした。
Excel(VBA)ではAPIのCreateFile等を呼び出して処理することができるので
OpenOfficeでも...と思ったのですが、これが動かない。
それどころか呼出す関数によっては、なんの予告も無くOpenOfficeプロセスごと落ちるのです。
どうしたものかと悩んでいるうち、CreateFile等を呼出す関数(DLL)を独自に作成し、
それをOpenOfficeから呼出してみようと、いろいろいじっていると...
OpenOfficeから引数で渡される値が、通常の整数型や文字型などはよいのですが、
配列型や構造体だと正しく渡されないということが分かったのです。
ネットでもこのあたりの情報が見つからず、いや〜ここまで長かった、長かった。

それが分かればなんとかなると、
RS232C通信に必要なAPIを呼出すDLLを作成し、OpenOfficeからはそのDLLの関数を呼出すことで
通信を行うことができるようになりました。


パネル
画面はこんなかんじです。
最も内側のエンドレスを走行する場合のイメージです。
画面では下に見切れていますが、運転パタンをセルに記述しておきます。
どのセクションで列車を検出したら、セクションをONにするとか、
コントローラーへ(指示したステップまで)加速しろとか、(指示したステップまで)減速しろという指示、
または、ポイントを切り替えろ等です。
実際の画面では、処理を行っているセルの行の色を変えて、どこまで処理しているかを表わしています。

線路図はセクションONを緑色、列車検出待ちセクションをグレーで表示しており、エンドレスの場合、ぐるぐると繰り返すわけです。
画面の(グレーの)セクションをマウスでクリックすると、
列車検出したと見なして処理を行い、運転パタンをシミュレーションすることで確認できるようになっています。

セクションの進入側には、内部ソフト的に信号を設けています。
線路を組み替えたときに、信号の制御は関連付けが大変なので、
運転パタンのセルに、どこのセクション(のどちらからの進入)の信号を青にしろ、黄にしろ、
と直接記述するようにしています。セクションONした場合の進入信号は、(当然の条件なので)自動で赤にします。





1/150 家の中の横軽


BACK TO MENU PAGE メニューに戻る