Desktop Stationのサイトで、DSshield2(DSシールド2)のスケッチが公開されていまして、以前の記事「XIAO RP2040で DCCコマンドステーションの製作」では、Seeed Studio XIAO RP2040 マイコンモジュールと TB6643KQ モータードライバーを組み合わせて製作した DCCコマンドステーションを紹介しました。

 

その後、M5Stack社製 ATOM H-DRIVER (SKU:K050) という、M5Atom Lite (ESP32) マイコンモジュールと DRV8876 モータードライバーを組み合わせたセットが販売されていることを知りまして、今回こちらで DCCコマンドステーションを製作しました。

 

まずは、ATOM H-DRIVER そのままの写真です。

 

 

ケースを外した状態です。

 

 

DRV8876 モータードライバーは IPROPIピン(6ピン)に電流モニタ出力(1V/1A アナログ出力)がありますので、DCCデコーダの CV値の読出しに対応するために、これを M5Atom Liteの G25ポート(ADC2)に接続します。

CV値の読出しに非対応でよければ改造は不要です。

 

基板の表側にある DRV8876の 6ピン端子から裏側の G25ピンヘッダ端子に配線するためにはケースとの隙間を通る極細線を使う必要があるため、今回は基板の裏側にあるパターンのレジストを削って裏側のみで配線しました。

 

 

 

マイコンのスケッチは、現在公開されている「rev.RP2040.002」をベースにして、以下の修正を行いました。

 

項目 変更前 (RP2040) 変更後 (M5Atom/ESP32)
DCC制御出力 GPIO21
GPIO20
G19 (IN1)
G23 (IN2)
アナログ電圧入力 GPIO27 (ADC1) G33 (VIN/10)、スレッショルドの変更
アナログ電流入力 GPIO28 (ADC2) G25 (IPROPI)
RUN LED GPIO02 RGB-LED (WS2812B)

 

以下、ソースコードの差分です。今回は修正箇所が少なくなるようにしました。

Arduino IDEの Board設定は「M5Stack-ATOM」を選択してビルドします。

なお、hardwareフォルダの下には adc.hファイル(サイズゼロのダミーファイル)を置いています。

(Amebloブログの画像は、画像リンク末尾の「?caw=800」を削除するとオリジナルサイズで表示できます)

 

* フォルダ比較

 

* DSshield2040.ino

#ifdef ARDUINO_M5Stack_ATOM
#include <M5Atom.h>
#define A1 33               // G33 (VIN/10)
#define A2 25               // G25 (IPROPI)
#define PIN_PWMA 19         // G19 (IN1)
#define PIN_PWMB 23         // G23 (IN2)
#define PIN_RUNLED 18       // G18 (dummy)
#define THRESHOLD_EDC 1117  //  9V/10/3.3V*4096
#define THRESHOLD_OV  2482  // 20V/10/3.3V*4096
void gpio_put(unsigned char gpio, bool value) { switch (gpio) {
  case 21: digitalWrite(PIN_PWMA, value); break;
  case 20: digitalWrite(PIN_PWMB, value); break;
  case PIN_RUNLED: M5.dis.drawpix(0, (value ? 0x00FF00 : 0)); break;
}}
void adc_init() { M5.begin(false, false, true); pinMode(A2, INPUT); }
void adc_gpio_init(unsigned char gpio) {}
void adc_select_input(unsigned char input) {}
unsigned short adc_read() { return analogRead(A2) >> 3; }
void analogWrite(uint8_t pin, int value) {}
#endif

 

* DSCoreM_Type.h

#ifdef ARDUINO_M5Stack_ATOM
extern void gpio_put(unsigned char gpio, bool value);
extern void adc_init();
extern void adc_gpio_init(unsigned char gpio);
extern void adc_select_input(unsigned char input);
extern unsigned short adc_read();
#endif

 

デスクトップステーションソフトウェアを使って、車両の速度制御やファンクション制御、CV値の読出しが問題なく行えました。

ただし、オプションのシリアルポートの設定では、「DTR有効(自動リセット)」のチェックを外す必要があります。(チェックすると ATOMがファーム更新モードに入ってしまいます)

 

 

以上です。