Arduinoでつくる鉄道模型PWMコントローラ【基板実装編】

Arduinoとモータドライバを使って,鉄道模型用PWMコントローラを作成した。

まずはDCモータのスピード・回転方向を制御するための回路を作成した。

続いてブレッドボード上での回路作成と,制御用のArduinoスケッチ作成を行った。

作った回路をユニトラックに接続して,実際に列車を動かすところまでを,前回の記事に書いた。

今回はいよいよ,作成した回路を基板へ実装した話。

ブレッドボード上の回路だと,ジャンパ線がごちゃごちゃしていて気軽に遊びづらい。

それを基板に載せてあげることで,より手軽に遊べるようにというのが目標。

大学の学生実験で基板実装をやることはあったけど,一から手作り・設計して基板実装したのはこれが初めて。おかげで時間はかかったけど,完成できたときはうれしかった。

今回の記事では,そんな基板実装のようすを紹介していく。

基板実装前の準備

ものをつくるときは,事前の準備が大切。

ということでまずは,制作前の

  1. 実装のために購入した部品・工具
  2. モータドライバについて
  3. Arduinoスケッチの制作
  4. 回路図の制作

これらについて書いていく。

本記事中で紹介する (i)Arduinoのスケッチ (ii)回路図・配線図 については,あくまでも個人が作成したものであって,間違いを含む可能性もあります。完全な動作の保証はできません。参考にされる際は,きちんと自分で動作確認をお願いします。

基板実装のために用意した部品・工具

まずは新規購入した部品と工具。

品名単価(円)購入場所備考
基板用小型3Pトグルスイッチ 1回路2接点80秋月逆転器用
基板取付用ボリューム 10kΩB60秋月スピード調整用(イマイチ…)
Dシャフト用ツマミ(ノブ) ABS-3350秋月使わなかった
タクトスイッチ 12mm TVGP01-G73BB(グレー)30秋月電源スイッチ用
Arduino用ユニバーサル基板 ガラスコンポジット180秋月
細ピンヘッダ 1×40 (黒)35秋月もうちょっと長いやつが良かったかも
XHコネクタ ハウジング 2P XHP-25秋月圧着端子自作
XHコネクタ ハウジング用コンタクト SXH-001T-P0.6 (10個入)30秋月圧着端子自作
XHコネクタ ベース付ポスト サイド型 2P S2B-XH-A(LF)(SN)10秋月圧着端子自作
耐熱電子ワイヤー 1m×10色 導体外径0.75mm(AWG22相当)300秋月配線用,チューブ単体はないのかな?
スズメッキ線(0.6mm 10m)210秋月はんだ付けに必須
KKHMF デュアルモータドライバモジュール TB6612FNG255amazonスナバ回路付き,2出力可
ベッセル ワイヤストリッパー No.3500E-21,418amazon被覆剥く用
エンジニア 精密圧着ペンチオープンバレル端子用PA-093,406amazon圧着端子自作用,XHに対応

ブレッドボード上で使ったスイッチは流用せず,新しいものを買った
(大きくして操作性を上げたかった)。

基板はArduino専用のもの,
ピンヘッダは基板をArduinoの上にのせて,Arduinoと基板を繋ぐためのもの(後述)。

モータドライバは,新たにスナバ回路付き・2出力可能なデュアルモータドライバモジュールを用意した(前に使っていたモータドライバは,故障してしまった。。。後述)

XHコネクタ」は,ユニトラックの給電線と基板をつなぐためのもの(規格など,後述)。

そのほか,制作に必要な工具などを新たに買いそろえた。

モータドライバの変更(ライト問題の解決)

さて,今回の基板実装においては,モータドライバモジュールを新しいものに変更した。

それが,KKHMFというメーカ?ショップ?(おそらく海外)が発売しているモジュール。「デュアル」という名前の通り,「2入力・2出力」が可能なモジュールとなっている。

このモジュールを購入した動機というのは,以前使っていたモジュール(TB67H450)が原因不明の故障を引き起こしてしまったから。入力のPWM信号は正しそうなのだけど,出力が不連続になってしまっていた。

このモジュールには,スナバ回路が搭載されている。下の写真左側の方に,チップコンデンサと抵抗が載っているのがわかるだろうか。ブレッドボード上で回路動作を確認しているとき,この回路の存在に気づいた。新しいモジュールに変更したことで,前回からの課題(↓)をいとも簡単に解決できた。

普通のパワーパックで鉄道模型を運転すると,前照灯は進行方向側のみ点灯する.(YouTubeに上がっているいろいろな走行動画を観ていただくとわかると思う)しかし,今回ブレッドボード上に実装した回路では,進行方向逆側の前照灯も点灯してしまうのだ.

Arduinoとモータドライバで動く!鉄道模型のPWMコントローラ

ちなみに前回まで使用していたTB67H450は,1キット230円(秋月)。一方,今回のデュアルモータドライバモジュールTB6612FNGは,1キット255円(amazon)。2入力2出力できて,しかもスナバ回路搭載。それでいて価格差はわずか20円。明らかにこちらのモジュールの方が,お買い得であるといえる。ただ,海外製品ということで,到着まで時間がかかることには注意。

KKHMF デュアルモータドライバモジュール TB6612FNG

Arduinoスケッチの変更

モータドライバモジュールを変更したことで,Arduinoからモータドライバへ出力する信号線にも変更が必要となった。

そこで,デュアルモータドライバモジュールに乗っているICのデータシートを見ながら,スケッチを変更した。

以前まで使用していたモジュールとの相違点は以下の通り。

  1. 入力信号(IN1,IN2)は,H/Lのいずれか
  2. PWM信号を独立の信号線で入力
  3. STBY信号の入力が必要

PWM端子(Duty比可変信号の入力)が独立しているので,入力端子はH/L2値でよい。つまり,Duty比を気にするのはPWM端子だけでよいということだ。

また,制御ファンクションは以下の表に示す通りとなっている。入力端子IN1,IN2に応じてモードが決まり,PWM信号のDuty比に応じて可変電圧を出力する。

引用元:https://akizukidenshi.com/download/ds/Toshiba/TB6612FNG_datasheet_ja_20141001.pdf

上記の制御ファンクションに応じて,テスト用のスケッチを書いた。回路側の方は,モータドライバモジュールに関連する箇所を除いて,変更を加えていない。


/* デュアルモータドライバ用の動作確認用プログラム */
const int IN1PIN = 5;
const int IN2PIN = 6;
const int BUTTON = 7;
const int TOGGLE_L = 12;
const int TOGGLE_R = 13;
const int VR = 3;     /* analogPin(=A3)*/

const int PWM = 10;   /* モータドライバ PWMピン */
const int STBY = 4;

const int LED = 3;   /* 電源ON・OFF確認用LED接続PIN */

int old_button = 0;  /* buttonの前の値を保存しておく変数 */
int state = 0;       /* LED状態変数 (0:OFF, 1:ON) NORMALLY OFF */
  
void setup() {
  Serial.begin(9600);
  pinMode(IN1PIN, OUTPUT);
  pinMode(IN2PIN, OUTPUT);
  pinMode(BUTTON, INPUT);
  pinMode(TOGGLE_L, INPUT);
  pinMode(TOGGLE_R, INPUT);
  pinMode(VR, INPUT);
  pinMode(LED, OUTPUT);

  pinMode(PWM, OUTPUT);
  pinMode(STBY, OUTPUT);

  /* 分周比設定:分周比1 */
  /* 9, 10ピンの出力を31.4kHzとする */
  TCCR1B &= B11111000;
  TCCR1B |= B00000001;
  /* 分周比設定ここまで */
  int rpm = 0;
  float val_VR = 0.0;
  int front = LOW;
  int back = LOW;
  int button = 0;         // ボタン状態用変数
}

void loop() {
    /* CCW */
    digitalWrite(STBY,HIGH);
    digitalWrite(IN1PIN,HIGH);
    digitalWrite(IN2PIN,LOW);
    analogWrite(PWM,100); // 変数に応じて速度可変(Max255)
    delay(5000);
    /* STBY */
    digitalWrite(STBY,LOW);
    delay(100);
    /* CW */
    digitalWrite(IN1PIN,LOW);
    digitalWrite(IN2PIN,HIGH);
    analogWrite(PWM,100);
    digitalWrite(STBY,HIGH);
    delay(5000);
    /* STOP */
    digitalWrite(IN1PIN,HIGH);
    digitalWrite(IN2PIN,HIGH);
    delay(5000);
}

テストスケッチをArduinoに書き込んで,ブレッドボード上で動作を確認。可変抵抗器をグルグル回すと,それに応じてDC電圧の出力も滑らかに変化した。周波数も31.4kHzで正常。入力に電池,出力にDCモータをつなぐと,無事動作した。

ブレッドボード上で新しいモータドライバモジュールの動作を確認

このモジュールは,モータへの入力電圧の最大値(絶対定格)が15Vであることに注意が必要。前回まで使ってきたモジュールより低い。今回は12Vを供給するけれど,もし16Vを供給したい場合は別のモジュールを使わなければならない。

配線図(ざっくり)の作成

部品もそろって,モータドライバモジュールの動作も確認できた。

次は回路図・配線図の作成。モータドライバモジュールに関連するピンを除いて,基本となる回路は以前と同様。

唯一の変更点は,電源供給の方法だ。前回までは,DCジャックを別に用意して,そこからArduinoとモータドライバへ電力を供給していた。

今回はArduino備え付けのDCジャックへ12Vを入力して,ArduinoのVin端子から基板側へ電力を供給することにした。

今回は下のパターンで回路を作成する

これらの変更点を加味して,配線図を書いた(はんだ付けしたときの青線がそのまま残っている…見づらいのはご容赦ください)

本当は,基板配線用の回路図ソフトなどもあるらしいけれど,これくらいの回路なら手書きでいいや!と思って,全部手で書いた。どれくらいの配線が必要で,どこら辺の配線が混んできそうかがわかればOK。あとは,実際に配線していきながら,臨機応変に….

超ざっくり配線図

実装のようす(写真付き)

ここまでで,配線のための準備が整った。

準備した部品・工具・配線図・スケッチを基に,いよいよ配線に入っていく。

配線(実装)の流れは以下の通り。

  1. 給電用圧着端子の制作
  2. Arduinoと基板を連結するゲタ(ピンヘッダ)の制作・はんだ付け
  3. 背の低い素子からはんだ付け・適宜配線

給電用圧着端子の自作:規格とか

まずは,ユニトラック(線路)の給電線を,基板へ接続するための端子の作成。

今回は,「XH」という規格のコネクタを使うことにした。

圧着端子(コネクタ)の使い方・作り方,フィーダの規格については,以下を参照(こちらの記事は情報量が多いのにわかりやすくて,とても参考になりました。ありがとうございます)

参考記事:コネクタの自作!電子工作の圧着工具と圧着方法

端子制作の流れは以下の通り。

  1. コンタクト(圧着型)をフィーダ側に圧着
  2. 圧着したフィーダの先をハウジングに差し込み
  3. 基板側にポストを設置

フィーダにコネクタを圧着するためには,圧着端子専用のペンチが必要。

ペンチを選ぶためには,フィーダ線の規格(AWG)を知っておく必要がある。

AWGとは、米国で使用されている導体の直径の尺度です。銅線の製造工程では穴から銅線を引き出して細くしていきます。
AWGはこの工程のステップ数を表します。
AWG番号が大きいほど、このステップを繰り返しますので、銅線は細くなります。

ケーブルの導体断面積とAWGとの関係を教えてください。 – 製品に関するFAQ | オムロン制御機器

今回使用したKATOのユニトラックにおける給電線は,
MIYAMA DENSEN CSA AWM LL34529」という種類だった。

LL34529:CSA認定番号のこと
AWM:Appliance Wiring Material(機器配線用電線)の略

おそらくこのページのケーブルと同一と思われる。

これによると,AWG:#28とのこと。

AWG28の給電線は,精密圧着ペンチPA09/PA21/PA20の3種類で圧着可能とのこと。

参考(端子対応表)https://akizukidenshi.com/download/ds/engineer/PA-09_20_120321.pdf

購入を考えていたXHコンタクトSXH-001T-P0.6の場合は,上の対応表より1.4(芯線部)mm, 1.6(被覆部)mmがそれぞれ適合している。PA-21の圧着ペンチでは,1.4mmが対応してないので,PA09の方が良さそうだ。

そういうわけで,部品・工具表に示したこちらの圧着用ペンチを購入した。

給電用圧着端子の自作:実際につくってみる

購入した圧着端子用ペンチ外箱には,圧着のやり方が書いてあったので,

それを見ながら実際に制作してみた。

XHコネクタは,思っていた以上に小さくて,なかなか大変。

フィーダとコンタクトの圧着は難易度が高かった。差し込み長さを調整しつつ,まっすぐに圧着するのが難しかった。

3つくらいコンタクトをダメにして,ようやく完成。ハウジングへ差し込み,引っ張っても抜けないことを確認した。コンタクトにはカエシが付いているので,一度ハウジングへ差し込めば,容易に抜けないようになっている。

自作圧着端子(コネクタ)の完成!

あと,コネクタ・フィーダに,こんなに細かい規格があるとは知らなかった。

工作をやっていると,知らない間にこういう知識が増えていくのがうれしい。

ゲタ(ピンヘッダ)を履かせる

つづいて,Arduinoに合わせてピンヘッダを切断し,基板へはんだ付けする。

ピンヘッダにも一応長さの規格がある。

Arduinoの各ピンの深さ(下)+基板ホールの深さ(上)
Arduino各ピンの間隔=基板ホールの間隔(横)
の長さをもつピンヘッダであればOK。

ちなみに今回のピンヘッダは,下側ピンも上側ピンもギリギリいっぱいだったので・・・裏側が配線でゴテゴテになった基板を載せると,ピンヘッダが少し浮いてしまった。。ここは次回作へ向けての改善点のひとつ。Arduinoの上にピンヘッダを通じて基板を載せる場合,上下方向には多少余裕を持ったピンヘッダを選んだ方がいい。

ピンヘッダは,手で簡単に折れるようになっている。

これを,Arduino各ピンの間隔に合わせて,折って,差し込んでみる。するとこんな感じ。

Arduinoにピンヘッダを履かせた図

これでちゃんと刺さることを確認したら,これらのピンヘッダを,基板側へはんだ付け。基板はArduino用となっていて,ピンに対応するように方向があるので注意。

はんだ付け:背の低い素子から

ここまで来たら,ようやくはんだ付け。

いちばん面白くて,骨の折れる作業。

まずは,配線図に沿って部品を載せてみる。今後,追加の部品・スイッチ・素子を載せる可能性もあるので,それも考えつつ載せた。

部品を載せてみる

左から,逆転器・スピード調整用VR・ノイズ除去用コンデンサ・モータドライバ・電源スイッチ。

VRの奥に白く見えているのが,給電用端子。ここに,フィーダを差し込んだハウジングをつなぐことで,線路へ給電ができる。

部品の配置を確認したら,一度外す。そしたら,背の低い素子から順番にはんだ付け。

素子を付けつつ,配線も進めていく。

こうやって,すずメッキ線・絶縁用のビニールを縦横無尽に這わせていく。できるだけ入り組まないように,重ならないようにやっていくけれど,配線の都合上どうしても入り組むところが出てくる。そういうところは,他所と導通しないように,導通チェックをしながら慎重に進める。

配線中…

ラジオを聴きながら,はんだの煙を顔に浴びながらの作業。

心を無にして,ただひたすら,すずメッキ線を這わせていく。

これが,基板実装で一番楽しい時間だ・・・退屈で面倒な準備をのりこえた者だけがたどり着ける,至福の体験。少しずつ,オリジナルの作品が出来上がっていく感じ。これがたまらない。

==

設計・配線図から始まって気づけば夕方になってしまっていた。

作業をいったん中断して,翌日午前中から再開。

残っていた,ややこしい箇所の配線を進めた。

そしてそして,ようやくすべての配線が終わった。

すべての配線が完了!

配線が終わってほっと一息,基板裏側を見てみると・・・

想像以上にゴテゴテ!

でも,テキトーな配線図だけ見て作った割には,よくできた。

完成!!!

ここまでで,すべての素子が基板上に載り,配線が完了した。

あとは,ゲタをArduinoの上に履かせれば・・・完成!

いろいろと歪んでたり,はんだが覗いていたりするのはご愛敬。
思った以上に配線に厚みが出て,基板が浮いてしまっているのもご愛敬。

プリント基板を使えばもっと簡単につくれるのだろうけど,
こうやって一から配線すると,達成感が大きい。

完成した基板を眺めているだけでも楽しい。

==

完成した基板に,KATOのHOゲージ給電フィーダを差し込んでみる。

このコネクタも手作り,小さいけどしっかりハマった。

給電フィーダをコネクタに接続

これでようやく,基板実装が完了した。

長くなってしまったので,Arduinoのスケッチと試運転のようすは,次回記事へ回そうと思う。

まとめ:次回,”ソフト更新”と試運転

以上,ArduinoとモータドライバICを用いた鉄道模型PWMコントローラの基板実装について。

今回は,主に回路の基板への実装について書いた。ブレッドボード上にあった回路をユニバーサル基盤の上に載せると,表面はすっきりした見た目になった。これによって,より気軽に扱えるようになった。主目的はやっぱり,鉄道模型で遊ぶことなのだから,基板実装できてよかった。

手作りして完成した回路を眺めると(設計がガバガバでも)なんだかうれしかった。これが手作りの面白さなんだな~と実感した。

関連記事:結局いちばん面白いのは「つくって」「考える」こと

次回予告

完成した回路で鉄道模型を運転するにあたって,制御用アルゴリズムに改善の余地があった。これは,回路(ハードウェア)に対して,Arduino(ソフト)がどういう応答をするかという部分。

なので,回路の完成後は,Arduino側にも改善を施した。

具体的には,以下の2点についてArduinoのスケッチを書き換えた。

  1. VR(可変抵抗)が0以上で電源を入れても発車しないようにする(飛び出し防止)
  2. 運転中に逆転器を切り替えると非常ブレーキがかかる(急制動防止)

実際の鉄道車両でいうところの「ソフト更新」だ。

アルゴリズムを考えて,Arduinoのスケッチに起こす作業は,「プログラミングってこうやってやるんだな~」という実感を与えてくれた。難しかったけど面白かった。

これについて,次回記事で紹介していこうと思う。

関連記事(これまでの制作のようす)

以下,過去の制作記事へのリンクです。

まずは,モータドライバICとArduinoを用いて,DCモータの速度制御回路を作成しました。鉄道模型を駆動するのは,結局のところDCモータを駆動することなので,DCモータが動かせるようになればあとは電圧スケールを変えればいいわけです。

上記記事で作成したDCモータ制御回路を応用して,鉄道模型を駆動してみました。PWM制御で,低速でもスムーズに走りました!が,一方で,PWM制御特有の問題点が浮き彫りになりました。