ブラシ付モータ FA-130RA-2270 (*1) を回します。モータのドライブは Hブリッジ回路を使用し、PWMで速度を制御します。
このモータは、以前、回してみています。が、電源容量が足りないとか、ハイサイドがトランジスタでコレクタ電流が小さいとか、ローサイドの FETが発熱するとか、ゲートドライバが (;´Д`) だとか、PWMの周波数が?なんだよなぁとか、いろいろ不満が満載でした。
そこで今回は、いろいろ改善しながら回してみましょう。といっても、なにが良いのか悪いのか、やっぱりよくわからんです。これまでの経験を活かして、感覚で、いいんじゃね?ってところでやってみます。
具体的に何かを動かす、とかいまはまだ考えてません。とにかく、ブラシ付モータを Arduino から制御できるようにすることが目標です。
電気特性
動作電圧 | 1.5V | 3.0V |
無負荷電流 | 0.20A | 0.26A |
無負荷回転数 | 9100rpm | 17400rpm |
負荷電流 | 0.66A | 0.96A |
負荷回転数 | 6990rpm | 13770rpm |
トルク | 6.0g⋅cm | 10.1g⋅cm |
出力 | 0.43W | 1.42W |
停動電流 | 2.2A | 3.6A |
停動トルク | 26g⋅cm | 48g⋅cm |
ブラシ付モータ FA-130RA-2270 の電気特性を、図1にまとめました。
じっさいに動かしてみた感じでは、電流値はもっと小さい気がします。が、ちゃんと試験しているわけではないので、定かでないです。
マブチモータの同品番のモータでは、定格電圧は 1.5V (動作電圧 1.5~3.0V) です。そこで、電源電圧を 3.0Vとし、PWM制御でデューティ比 50%とすることで、平均値 1.5Vを印加するようにしようと思います。
電流は、最大容量を停動電流の 3.6Aにしたい。と思ったのですが、いつも使っている ACアダプタが 3Aなので、そこまでいければいいかな、と。1.5V時の停動電流 2.2Aをしっかり供給できれば、問題ないでしょう。
回路図
回路をつくりましょう。
何をどう動かすかは、決めていません。
とりあえず、ボリュームで回転数を調整できるようにしましょう。ボリュームの中点で停止、右へ回すと正転、左へ回すと逆転する。Arduino から、正転、逆転の切り換え信号と、速度制御用信号を出力します。
モータの駆動は Hブリッジ回路を使います。Hブリッジ回路はロジックICでドライブします。回転数制御は PWM方式で、Hブリッジのローサイドを制御します。
電源部
電源は、Arduino 用に 12V、制御回路用に 5V、モータ駆動用に 3Vを供給します。
手持ちの ACアダプタ (3A) が 12Vなのでそれを使っていますが、9V 3A以上のものがあれば、そのほうがよさそうです。
5Vは、いつものように三端子レギュレータ NJM7805 です。
3Vは、三端子可変電圧レギュレータ NJM317 を使いました。NJM317 の最大出力電流は 1.5Aなので、PNPトランジスタ 2SA1725 (80V 6A) でブーストします。
Hブリッジで電圧降下するので、モータにかかる電圧は 2.8Vほどです。R3、R4の比率を変更することで出力電圧を調整できますが、きっちり 3Vにする必要もないでしょう。
出力電圧 Voは、
Vo = 1.25 x ( 1 + 220 / 150 ) = 3.1 [V]
となります。正確には、ADJからの電流分が加算されますが、気にする必要、ないです。
三端子レギュレータ、トランジスタにはヒートシンクを取り付けています。あらためて熱抵抗の計算はしていませんが、いつもの小型ヒートシンク (15x15x25mm) で充分です。
モータ駆動部
MOSFETを使った Hブリッジ回路です。ハイサイドに P-ch 2SJ681 (60V 5A)、ローサイドに N-ch 2SK4017 (60V 5A) を使っています。
電源電圧が 3Vなので、ゲート駆動電圧がギリギリ (Vth(max) = 2.5V) です。が、なんとか動いてくれているようです。ハイサイドも N-chにして、ゲートをブートストラップ回路とかにするのがよいのでしょうけど、コンデンサの充放電のために、ローサイドの PWM制御に制約ができてしまう (*2) ので、採用しませんでした。
ゲートドライブ回路は、簡素化したくなったりしますけど、順当にやっておきましょう。これが一番よいです。
モータ駆動部ドライバ
F | R | G1 | G2 | G3 | G4 | 状態 |
0 | 0 | 0 | 0 | 0 | 0 | 停止 |
1 | 0 | 1 | 0 | 0 | 1 | 正転 |
0 | 1 | 0 | 1 | 1 | 0 | 逆転 |
1 | 1 | 0 | 1 | 0 | 1 | ブレーキ |
x | x | 1 | 1 | x | x | 禁止 |
x | x | x | x | 1 | 1 | 禁止 |
Hブリッジ回路を制御するためのロジック回路です。
F (Forward)、R (Reversal) は入力信号で、それぞれ正転、逆転です。両方が 0 のときは、Hブリッジはハイインピーダンスとなりモータ停止します。両方が 1 のときは、ローサイド G2、G4をオンにして回生ブレーキをかけます。ハイサイド G1、G3は LOWでオンすることに注意してください。
G1と G2、または G3と G4が同時にオンする状態は禁止しています。一見必要なさそうですが、回路の動作タイミングのズレを補正してくれます。
真理値表より求めた論理式は、
と、なりました。
図5が、論理式より作ったロジック回路です。
ローサイドは PWMで制御するので、そのための ANDゲートを追加しています。NOTも NANDを利用して、IC 2個にまとめています。
デッドタイムは設けていません。電圧も電流も小さいし、じっさい FETの発熱もないので、ま、いいんじゃないでしょーか?
PWM信号発生部
回転数を制御するための PWM信号を出力します。
ファンモータのコントロールにも使った回路を、そのまま使っています。
PWM信号の周波数は 25KHz、PWM Reference に 0~3.5Vを与えると、0~100%のデューティ比にできます。
PWMの周波数は、どうするのが良いのか、よくわからん部分です。
そこでまず、Arduino の出力 980Hzで PWM制御し、ローサイドの MOSFETのソース電流をみてみました 。図7の黄色は PWM信号、青がソースに挿入した抵抗 0.1Ωの両端電圧です。
電圧オンで電流が流れはじめ、指数関数的に増加して 400μsで最大 0.7Aほどになります。電圧オフで電流は 0になり、次の電圧オンからふたたび電流が流れはじめます。
電流の立ち上がりが遅いので、デューティ比が小さい時に制御が難しくなってしまいます。これは、490Hzでも同様でした。
一方、25KHzでは電圧のオンオフにともなって、0.3Aほどのソース電流がパルス状にオンオフします。LR回路の指数関数的な増加ではなく、まるで抵抗負荷のように。(図8)
これは、電圧オフ時に回生電流が流れ続けているためのようです。回生電流は実測で 160μs間ほど流れ続けるので、それが終わらないうちに電圧オンになる。結果的に、モータには、ずっと電流が流れていることになります。
PWM周波数が 980Hzでは、平均的に大きな電流が流れるので、トルクは大きくなるようです。が、充分な電流が流れるまでの時間、電圧オンになっていなければなりません。そのために、低速時の制御が難しくなります。
25KHzでは、電圧オフ時にも回生電流が流れ続けるので、平均電流が小さくなり、トルクもすこし小さくなるようです。が、低速時の制御が安定します。
ということで、25KHzの PWM信号のほうが低速域がうまく制御できましたので、この周波数を採用することにしました。
ちなみに、冷却ファンの制御もそうでしたが、なぜ 25KHzなのか。20Hz~20KHzが可聴域だからです。じっさい 980Hzでモータを回していると、チーという音が聞こえます。25KHzでは、何も聞こえません。歳のせい、ってのは、しらん (;´Д`)
Arduino 制御部
Arduino まわりです。
入力のボリュームで、回転方向と速度を定めます。中点で停止。右へ回すと正転、左へ回すと逆転。それぞれ回すほどに速度が大きくなっていくようにしようと思います。
3、4番ピンはそれぞれ、正転信号、逆転信号を出力します。5番ピンは PWM出力ですが、リプルフィルタをとおして 0~3.5Vのアナログ電圧になります。
Vinのダイオード D1は、電源の逆流防止用。アナログ入力のコンデンサ C1は、インピーダンス整合用です。これらは、まいどまいどの回路です。
後記
今回は、ブラシ付モータ FA-130RA を Hブリッジ回路で PWM制御するための回路をつくりました。
Hブリッジ回路と制御ロジック回路で、外見的にはモータドライバのようになっていますので、適当な規格のモータドライバがあれば置き換えができると思います。まぁ簡単な回路ですから、好きなようにちゃちゃっと作っちゃえばよろしいかと。
モータ電源は、電池を使うばあいでも 2A以上は確保しないといけません。充分な電流容量がないと、起動が不安定になります。Arduino の 3.3V出力とか、絶対使っちゃダメですよ。
回転数を制御するための PWM信号の周波数について
ブラシ付モータは、直流電圧で動かすときは抵抗負荷と考えることができます。でも、PWM信号で回すときは LR回路として考える必要があります。つまり、電圧オンで、電流は指数関数的に増加することになります。その時定数を τ としたとき、電圧オンの時間は 5τ 以上必要だと、解説されているサイトもあります。つまり、PWMの周期は充分に大きくなければならない、と。
しかし、じっさいにモータを回してみてわかったことは、電圧オンの時間を長くとるために、PWMのデューティ比を小さくできない。そのために、低速域での制御が難しい、ということでした。
これは、モータで何を動かしどう制御するかによるので、一概にはいえません。が、今回は低速でもスムーズに回転してほしいと考えているので、よい方法ではなさそうです。
そこで、PWMの周波数を 25KHzとしました。周期にして 40μs。このモータの時定数はわかりませんが、100μs以上はあるようですし、回生電流が 160μsほどの間流れています。それらに比べても小さい周期です。
この場合、電圧オフになっても回生電流が流れ続け、モータ電流が 0になることがありません。そのために、デューティ比が小さい領域でも安定して制御することができます。
160μsの間電流が流れ続けるとすれば、10KHz (100μs) もあればよさそうですが、可聴周波数域を避けて 25KHzとしています。電流の減衰を考慮して、もっと高い周波数にするという考え方もありそうです。しかし、オンオフ切替時の突入電流があるようなので、高くしすぎると効率が悪くなりそうです。25KHz あたりというのは、意外とちょうど良いところなのかもしれません。
余談:回生電流が流れるからモータが制御できるという話
ブラシ付モータに電圧をかけると、電流が流れてモータが回転します。このとき電圧を切っても、モータのインダクタンスのために電流が流れ続けます。これが回生電流です。回生電流は、回路が切断されて流れることができなくなると電圧に変化します。コイルに流れている電流を切ると高電圧が発生するのはそのため。リレーなどに並列にダイオードをいれるのは、その高電圧を逃してやる回路を作るためですね。
Hブリッジ回路では、モータの回生電流を MOSFET内部にあるボディーダイオードを通して流しています。そうすることで高電圧の発生を抑え、MOSFETを保護しています。
PWM信号の電圧オン時、ハイサイド G1からモータを通してローサイド G4へ電流が流れます。電圧オフ時はどうなるでしょうか? 電圧オフ時、モータは回生電流を発生しています。回生電流はローサイド G4へは流れることができませんので、オフしているハイサイド G3のボディーダイオードを通して、電源へ還流します。回生電流が流れると、モータには回生ブレーキがかかり減速します。電圧オンになると、ふたたびモータ電流が流れ、モータは加速します。こうして、速度が制御されます。
電圧オフ時に回生ブレーキがかかる、ってところが、モータの速度制御のミソなんですね。
では、次回はこの回路を動かすための Arduino のスケッチを書きましょう。