M5Atomを使ったEX-CommandStation

Last Updated on 1か月 by strv

DCC-EXのプロジェクトはArduino環境に対応しておりしかもESP32にも対応しています。ということでケースなどが豊富に提供されているM5シリーズを使ってEX-CommandStationを作ってみることにしました。

DCC仲間から「Nゲージのブックケースに全部収まるDCCのセットができたら飲み屋でちょっと出して楽しむとかできていいのに」と言われ、「それいい!」となって一気に作ってしまいました。雑に持ち運んで適当な机に出して使えるということと、ブックケースに収めたい、ということからM5のなかでも小型でしかもユーザが自由に使えるケースが販売されているATOMシリーズを使うことにしました。

ATOM Lite + ATOMIC DIY Proto Kit + RM-CS03

M5のATOM LiteはESP32を使ったマイコンモジュールです。そこに専用のユニバーサル基板とケースがセットになった ATOMIC DIY Proto Kit を組み合わせることで超小型のいい感じのモジュールになります。そこで Proto Kit のケースに収まるEX-CS対応のモータドライバ基板を設計しました。それがRM-CS03です。これらすべてをひっくるめて ATOM EX-CSとでも言うことにします。

RM-CS03自体はM5のATOMIC H-Bridge Driver Baseとほぼ同じ機能ですが、EX-CSとして利用できるようにピン構成を変更し、また電流も取得できるようにしました。これによりCVの読み取りも可能です。

ATOM EX-CS仕様

  • 通信方法:無線LAN・USBシリアル
  • 表示機能:LED x3
  • 電気仕様
    • 入力電圧:9V~18V
    • 線路出力電流:連続0.8A程度、瞬間1.5A
    • 5V出力電流:ATOM Lite を除き300mA程度

保護機能

線路出力

二段階の保護があります。ショートなどの大電流による破壊を防ぐための瞬間電流保護は短時間で働きます。これは回路上の機能として実現されており変更はできません。復帰させるには一度線路出力をOFFにする必要があります。モータ電流や室内灯などが多すぎる場合には連続電流保護が働きます。これはソフトウェアとして実現されており、瞬間電流以内であれば変更はできますが発熱の面から0.8A以下にすることを推奨します。連続電流保護は自動的に復帰し、再起動を試みます。

5V出力

RM-CS03上で5Vを生成しています。500mA程度の連続電流で保護が働きます。この5V電源はATOM Liteへの供給を主とするものですが、ATOM LiteのGrove端子にデバイスを外付けすることも可能です。ただし発熱があるためトータルでは300mA程度の電流に収めることを推奨します。

LED表示の意味

RM-CS03上には3つのLEDが搭載されており、それぞれ次の意味を持ちます

  • 緑:電源
  • 赤:出力保護状態
  • 橙:線路出力状態

電源が入っているとき緑色のLEDが光ります。ファーム更新などでATOM LiteにUSB接続しているだけではRM-CS03側には電源が入らないためこのLEDもつきません。線路出力を有効にすると橙色のLEDが光ります。保護回路が作動し、赤色のLEDが点灯します。このとき電源LEDは消灯します。

使い方

配線方法

Proto Kit 付属の四端子ターミナルを利用して電源と線路を接続します。

端子側からみて右から電源入力+、電源入力-、線路、線路と接続します。

動作

EX-CSのプログラムが書き込まれているATOM Liteを搭載した状態で四端子ターミナルの電源入力に電源を与えるとすぐに動作を始めます。

組み立て方

基板のみ購入した場合は組み立てが必要です。

必要部品

組立順序

  1. ユーロブロックをはんだ付けする
  2. ピンヘッダをはんだ付けする
  3. ケースに固定する

ソフトウェア

config.h

EX-CSのconfigファイルのモータドライバ設定は次のように記述します。

C++
// ESP32 ADC
// Vref = 1.1 * 11dB = 3.9V
// Resolution = 4096
// I2V Gain = 2.2 V / A
// V2I Gain = 1/2.5 A/V
// ADC2V Gain = 3.9 / 4095
// ADC2I Gain = 3.9 / 4095 * 1 / 2.2
// senseFactor = ADC2I * 1000 = 0.43322758148178266178266178266178

#define RM_CS03 F("RM_CS03"), \
                  new MotorDriver(22, 19, UNUSED_PIN, -23, 33, 0.43322758148178266178266178266178, 800, UNUSED_PIN)
#define MOTOR_SHIELD_TYPE RM_CS03

その他の設定については必要に応じて config.example.h を参考に記述します。

myAutomation.h

オプションとして、ATOM Liteのボタンを押すことで非常停止できるようにする設定ができます。以下のコードをmyAutomation.hとして保存し、ビルドしてください。

C++
AUTOSTART
  START(0)
  DONE

SEQUENCE(0)
  AT(39)
  PRINT("EMO STOP")
  POWEROFF
  AT(-39)
  FOLLOW(0)

その他の自動化設定についてはmyAutomation.example.hなどを参考に記述します。