アフィリエイト広告
アフィリエイト広告

Hブリッジ回路でDCブラシモータを回す

前回は、マブチモータなどでお馴染みの DC ブラシモータを、Arduino で回してみました。

DCブラシモータを回してみる
モータシリーズ第 2 弾 (^_^;) マブチモータでお馴染みの DC ブラシモータを、Arduino で回してみました。 DC ブラシモータの仕様 子供の頃、マブチモータでよく遊んだものです。でも、まともな工作なんてしたことなかった。乾電...

でも、これはモータを正転させるのみでした。用途によって逆転させる必要もあるでしょうから、今回は、モータ制御によく使われる H ブリッジ回路を作ってみようと思います。
H ブリッジ回路とは…… ググって下さい m(_ _;)m

H ブリッジ回路

DC ブラシモータは、秋月電子通商で購入した DCモータ FA-130RA-2270 です。これを 1.5V で駆動するための H ブリッジ回路を作ります。

H ブリッジ回路

モータの停動時電流が 2.2A なので、当初 Pch MOSFET 2SJ681 (60V 5A) をハイサイド (電源側部分) に使いたいと考えていました。
でも、2V 程度の電圧では FET を駆動できません。負電源を作るのもウーンです。

そこで、ハイサイドはバイポーラトランジスタにすることにしました。ベース駆動回路が必要ですが、これなら電圧が低くても問題ありません。

ちなみにローサイド (接地側部分) の MOSFET は Arduino の出力 5V で直接駆動できますので、問題ありません。

手持ちのトランジスタは 2SA950 (30V 0.8A) です。ちょっと電流値が足りませんが、無負荷時電流は 0.36A ですから、なんとかなるんじゃないでしょうか。実験だし。
停動時電流 2.2A は起動時の突入電流と考えられます。最大コレクタ電流の 3 倍ですが、これも無負荷での実験ですからなんとかなるでしょう。電流では意外と壊れないもんです (^_^;)

あ〜、良い子は決して真似しないように。 容量の足りるトランジスタを用意して下さいね。

全体回路

H ブリッジ モータ駆動回路

電源入力は 12V の AC アダプタを使っているのですが、9V のがあればその方が良いと思います。
上の部分が電源回路。左は制御用の 5V 、右はモーター駆動用の 2V です。モータにかかる電圧は 1.6V ほどになります。ちなみに NJM317 の出力は 1.5A なので、もっと大きい容量の電源にしないといけないですね。

Arduino は UNO です。もちろん NANO でも同様です。
押しボタンは正転用と逆転用です。押している間、モータが回転することにします。
ボリュームは回転数の調整用です。回転数制御は、PWM を使ってローサイドの FET を制御していますが、ちょっと発熱するようです。このあたり、もう少しちゃんと設計しないといけないかもです。

スケッチ

ボタンを押している間、正転または逆転します。ボリュームで出力電圧を調整し、回転数を変化させます。

  1. const byte IN_A = 7;
  2. const byte IN_B = 8;
  3. const byte IN_C = 9;
  4. const byte IN_D = 10;
  5. const byte norSwPin = A0;
  6. const byte revSwPin = A1;
  7. const byte potPin = A2;
  8. void setup() {
  9.   pinMode(IN_A, OUTPUT);
  10.   pinMode(IN_B, OUTPUT);
  11.   pinMode(norSwPin, INPUT);
  12.   pinMode(revSwPin, INPUT);
  13. }
  14. void loop() {
  15.   static bool nor = false;
  16.   static bool rev = false;
  17.   static int speed = 0;
  18.   speed = analogRead(potPin);
  19.   speed = map(speed, 0, 1023, 125, 255);
  20.   if((LOW == digitalRead(norSwPin)) && !rev) {
  21.     nor = true;
  22.   } else if((LOW == digitalRead(revSwPin)) && !nor) {
  23.     rev = true;
  24.   } else {
  25.     nor = false;
  26.     rev = false;
  27.   }
  28.   if(!nor && !rev) {
  29.     digitalWrite(IN_A, LOW);
  30.     digitalWrite(IN_B, LOW);
  31.     analogWrite(IN_C, 0);
  32.     analogWrite(IN_D, 0);
  33.   }
  34.   if(nor && !rev) {
  35.     digitalWrite(IN_A, HIGH);
  36.     digitalWrite(IN_B, LOW);
  37.     analogWrite(IN_C, speed);
  38.     analogWrite(IN_D, 0);
  39.   }
  40.   if(!nor && rev) {
  41.     digitalWrite(IN_A, LOW);
  42.     digitalWrite(IN_B, HIGH);
  43.     analogWrite(IN_C, 0);
  44.     analogWrite(IN_D, speed);
  45.   }
  46. }

21~22 行で、ボリュームの出力を検知しています。

24~30 行はスイッチの状態を検知します。片方のボタンが押されている間は、反対のボタンを押しても反応しないようにインターロックしています。

33~50 行が H ブリッジ回路の制御部分です。ここを間違えて、たとえば Q12 と Q41 とを同時にオンさせてしまうと、電源〜接地間がショートします。

ブレッドボード

H ブリッジ回路 ブレッドボード

上のブレッドボードは電源です。左のヒートシンクが 5V のレギュレータ、右が 2V です。
モータを回すと、2V 側のヒートシンクはかなり熱くなります。

中央は、言わずと知れた Arduino UNO 。12V で駆動しています。

下の左側が H ブリッジ回路、右が回転数設定用のボリュームと正転、逆転用押しボタンスイッチです。

改善点は多々あります

そんなこんなで、とりあえず DC ブラシモータを正転、逆転できるようになりました。
でも、これで何かを駆動して実用にするには、改善したほうがよい点がいろいろありそうです。そこいらは、実際に利用するときに、用途に応じて検討することにしましょう。

タイトルとURLをコピーしました