今日も夜な夜な... 鉄道模型PWMパワーパック自作モータードライバIC
2024/05/24
昔はサイリスタ、今はマイコン制御のPWM
Nゲージのレイアウトで自動運転をするために、パワーパックをArduinoで制御することを考えています。私が中学生の頃は、「サイリスタ」という、電流制御ができるダイオードみたいな素子があり、鉄道模型の低速運転をスムーズに行うには、この方法しかありませんでした。
あれから40年以上が経ち、今はPWM制御が主流となり、さらにDCモータドライバ専用のICもたくさんあります。パワーパックの自作は、めちゃめちゃ簡単になっています。
DCモータードライバIC
今回、たくさんのWEBページに載っている「TB6643KQ」を使ってみました。秋月で、350円で買えます。
ArdionoのPWM機能で発生させた20kHzの2線のPWM信号をこのICに与えるだけで、DCモーターをドライブしてくれます。PWMパルスの組み合わせを制御すれば、モーターへの電圧極性(+ー)を変えることができ、電車の進行方向もこのICだけで制御できます。簡単すぎるぐらい簡単です。

上図が接続例です。「TB6643KQ」は、マイコンからの3.3VのPWMパルスを入力すると、模型のモーターを駆動できる電力の信号(DC 12V)を作ってくれます。メチャメチャ簡単です。
M1/M2のパルスの与え方で、出力のOUT1/OUT2のプラスマイナスの極性が切り替わります。M1にパルスを入れると正転方向、M2にパルスを入れると逆転方向にモーターが回ります。下がこのICの入出力の論理表です。

Arduinoでのプログラミング
PWM(Pulse Width Modulation)のセットアップやデューティー比の変更は、ライブラリ関数を使えば意外と簡単に扱えます。とはいえ、PWMはマイコンのペリフェラル(ハードウェア機能)に依存しているため、使うマイコンによってAPIが異なるのがポイントです。
今回のターゲットである ESP32 では、「ledc***()」 系の関数群がPWM制御用に用意されています。基本的な流れは「チャネルのセットアップ → デューティー比の指定」とシンプルで、以下のようなコードになります
例えば、このコード中の trainSpeed に 40 をセットすると、デューティー比は 40 : 256 ≒ 1 : 6 となり、次のような波形が得られます。
青い波形が OUT1 です。ここで与えている条件は、12V・20kHz のPWM波形です。時間軸のスケールは 1目盛=20µsec なので、パルス1周期は 50µsec となります。
Arduinoで生成したPWM波形の様子
上記のプログラムで生成したPWM波形の様子をビデオにしました。
PWM動作のおさらい
蛇足かもしれませんが、PWMの動作をもう少し整理すると:
- パルスの高さ(電圧)は常に 12V
- パルスの幅(デューティー比)を広げるほど、平均的に流れる電力が増える
- その結果、レールに伝わる駆動力が大きくなり、電車モーターの回転数が上がる
つまり、「12Vをオンオフして平均電圧を作る」仕組みがPWMの本質で、これを自在に操ることで電車のスピードを滑らかにコントロールできるわけです。
(2024/8/24 追記)
今回制作した自動運転レイアウトの、最初の計画(このページ)から完成までの制作過程が載っています。下から古い順に並んでいます。
マイコンによる自動運転の詳細は↓のWEBページに掲載しています。