ラズパイから鉄道模型の電動ポイントを切替える方法についてのメモです。
1. コンデンサ方式
2. モータドライバIC方式
IoT鉄道模型ではリレーを使いコンデンサの充放電により電動ポイントを切替えているのですが、
モータドライバICでパルスを送信することでもポイントを切替えることができることが解りました。
ラズパイを使って鉄道模型の速度制御を行うのと同じ回路構成でポイントも制御できる上に、ハードウェアはシンプルになるので、今更ですがモータドライバICを採用すれば良かったと思っています。
2018/12/3の記事の補足です。
Nゲージ鉄道模型の電動ポイント
使用したのはTOMIXの電動ポイントです。DC12Vの2線で制御されます。
パワーパックに接続した専用のコントローラに接続して使用します。レバーの切換えに応じてでポイントが切り替わります。これが正しい使い方です。
TOMIX ミニ電動ポイントPL140-30(F)
電動ポイントの動作原理
分解したことが無いので詳細は知らないのですが、Webで検索するとDC12Vをコンデンサに充放電することでパルス状の信号を与えてソレノイドのコイルを駆動しているようです。逆方向のパルスを与えることでソレノイドに逆方法に動かし、ポイントを双方向に切替えます。
ソレノイドなのでコイルには動作時のみの短時間電圧をかける必要があります。電圧をかけ続けるとコイルが過熱し危険です。
こちらはIoT鉄道模型のポイント切換え時のソレノイド電圧波形です。
約12Vのピークから、20msecで約6V、50msec経過で約2Vに減衰したパルスであることが解ります。コンデンサによる充放電の波形です。
電動ポイントのソレノイドのコイルの直流抵抗を実測すると約10Ωでした。
単純計算で 12V/10Ω = 1.2A 1A強の電流が瞬間的に流れていることになります。以外に高い値ですね。
ラズパイで操作するには
やりたことはOn/Offですが、物理的にモノ(ポイント)を動かすには相応のエネルギーが必要です。
ラズパイのGPIOではパワーが不足するので、何らかの手段でDC12Vのスイッチングを行うことになります。
1. コンデンサ方式
現在採用している方法です。
人間が切り替えるレバーの代わりにリレーを使います。ラズパイのGPIOは3.3V 15mA程度のようなのでリレーを駆動するには電流が不足しています。リレーの機種によりますが使用したOMRON 5V G5V では コイル抵抗50Ωなので5V/50Ω=100mA必要です。GPIOからまずトランジスタでスイッチングします。
GPIOからOn/Off信号 -> トランジスタをOn/Off -> リレーをOn/Off -> コンデンサの充放電切換え -> ソレノイドへパルス印加
部品
リレー: OMRON 5VG5V-2
電解コンデンサ: 16V 3300μF
トランジスタ: 2SC1815
抵抗: 1K
ダイオード: リレーコイル保護用 コイルの逆起電力からのトランジスタ保護 (2019-06-02 訂正)
ポイントを切替え、1.5秒後に戻した際の波形です。
プログラム
GPIO11をポイント切換え用に使用しています。
import time
import RPi.GPIO as GPIO
GPIO11 = 11 # pin 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO11, GPIO.OUT)
GPIO.output(GPIO11, False)
time.sleep(1.5)
GPIO.output(GPIO11, True)
GPIO.cleanup()
2. モータドライバIC方式
ソレノイドを駆動するにはパルス状の短時間の電圧印加が必要なだけであり、必ずしもコンデンサの充放電波形が必要なのではありません。
つまりパルスをワンショット出力すれば良いのではと思い、列車の速度制御に使用したモータドライバIC TA7291P で試してみました。
これは線路に接続して鉄道模型を速度制御する回路そのままです。線路への代わりに電動ポイントへ接続します。
自作回路でコネクタの代わりにピンヘッダなので、線路用のコネクタもポイント用のコネクタも接続できます。
モータドライバICからパルスを1個出力
・デューティ100%で出力
・50msecスリープする
・デューティ0%で出力ON
単純な方法ですが、思い通りに動作してくれました。
電圧は12Vに届いていませんが、想定通り50msecのパルスが出力されています。
おお、ポイントも切り替わりました。
0.5秒後に反対方向に切り替えた波形
30msecのパルスでもポイントは切り替わりましたが、20msecでは動作しませんでした。
これはOK
プログラム
import time
import RPi.GPIO as GPIO
GPIO17 = 17 # pin11
GPIO27 = 27 # pin13
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO17, GPIO.OUT)
GPIO.setup(GPIO27, GPIO.OUT)
pwm1 = GPIO.PWM(GPIO17, 60)
pwm2 = GPIO.PWM(GPIO27, 60)
pwm1.start(0)
pwm2.start(0)
# ポイント切換え50msecパルス
pwm1.ChangeDutyCycle(100)
time.sleep(0.05)
pwm1.ChangeDutyCycle(0)
time.sleep(0.5)
# ポイント切換え逆方向
pwm2.ChangeDutyCycle(100)
time.sleep(0.05)
pwm2.ChangeDutyCycle(0)
pwm1.stop()
pwm2.stop()
GPIO.cleanup()
制御回路の共通化
これで速度制御も電動ポイントの切替も全く同じモータドライバICの回路で実現できることが確認できました。
ポイント用のリレー+電解コンデンサ+トランジスタがモータドライバ1個になるので、コストダウンの上サイズもぐっと小さくなります。
それぞれ同時に使用するので、回路は別にして複数用意する必要はありますが、
せっかくなのでモータドライバICによる制御回路にバージョンアップしようかと思います。
関連記事
2018-12-03 ラズパイでIoT鉄道模型をつくってみる
2019-05-07 ラズパイでIoT鉄道模型をつくってみる(3) 車載カメラ
ポイントの切り替えにモータドライバーのパルスをワンショットで出力することで対応するという方法はまさに画期的なアイデアだと思います。これまではリレーを使って切り替えるという方法を採用するのが普通でしたが、タイミングによってはポイント切り替え用コイルを焼損するおそれもあり、鉄道模型マニアが一番困っていた部分であると思います。できれば自動運転の途中で、タクトSWを押すことで割り込みでポンント切り替えができると大変使い勝手がよくなるなあと思いました。
返信が遅くなってすいません。ありがとうございます。モータドライバICでポイントを駆動されている方々もいらっしゃるようですね。電気回路だけで構成するとリレーとコンデンサになりますが、ラズパイなどでプログラミング可能であればモータドライバICの方が、電気回路部分は小さく簡単になりますね。自動運転とも相性は良いと思いますので、制御シーケンスを適切に設計すればタクトSWも実装できそうですね。
通りすがりにお邪魔します
以前のレイアウトはエンドレスでないとまともに運転できなかったのが
マイコンが手軽になったおかげで、ポイントtoポイントでも成り立つようになったのがとてもいいことですね
ダイオードの役割は、コイルの保護ではなくてコイルの逆起電力からの
トランジスタ保護ですね
コンデンサでのポイント切り替えは、短時間での電圧印加を行うのにコンデンサの充放電動作が適してるので採用されてきてた方法ですね
でも、コンデンサがショートモードで故障するとコイルが焼けるリスクがあるのがこの方法の難点でした
マイコンが暴走しない限り、プログラムでのワンショット指令でのポイント切り替えが一番好ましい方法だと思います
あと、tomixとkatoでポイントの作動に違いがあるのでそのあたりも、いろいろ楽しい余白がありますね
お邪魔しました
もんさん、コメントありがとうございます。
ダイオードのご指摘ありがとうございます。訂正しました。
電子部品だけで構成するとコンデンサを使用するのは避けられないかと思いますが、
元々ラズパイで速度制御をしていたジオラマだったので、モータドライバICも含めて手軽に試すことができました。
ポイントの切替も含めて全てマイコン制御するのであればワンショットでポイントのコイルに優しいシステムが構成できるかと思います。
katoは持っていなのでtomixだけのテストになったのですが、いずれはkatoでも試してみたいですね。