前回は、マブチモータなどでお馴染みの DC ブラシモータを、Arduino で回してみました。
でも、これはモータを正転させるのみでした。用途によって逆転させる必要もあるでしょうから、今回は、モータ制御によく使われる H ブリッジ回路を作ってみようと思います。
H ブリッジ回路とは…… ググって下さい m(_ _;)m
H ブリッジ回路
DC ブラシモータは、秋月電子通商で購入した DCモータ FA-130RA-2270 です。これを 1.5V で駆動するための H ブリッジ回路を作ります。
モータの停動時電流が 2.2A なので、当初 Pch MOSFET 2SJ681 (60V 5A) をハイサイド (電源側部分) に使いたいと考えていました。
でも、2V 程度の電圧では FET を駆動できません。負電源を作るのもウーンです。
そこで、ハイサイドはバイポーラトランジスタにすることにしました。ベース駆動回路が必要ですが、これなら電圧が低くても問題ありません。
ちなみにローサイド (接地側部分) の MOSFET は Arduino の出力 5V で直接駆動できますので、問題ありません。
手持ちのトランジスタは 2SA950 (30V 0.8A) です。ちょっと電流値が足りませんが、無負荷時電流は 0.36A ですから、なんとかなるんじゃないでしょうか。実験だし。
停動時電流 2.2A は起動時の突入電流と考えられます。最大コレクタ電流の 3 倍ですが、これも無負荷での実験ですからなんとかなるでしょう。電流では意外と壊れないもんです (^_^;)
あ〜、良い子は決して真似しないように。 容量の足りるトランジスタを用意して下さいね。
全体回路
電源入力は 12V の AC アダプタを使っているのですが、9V のがあればその方が良いと思います。
上の部分が電源回路。左は制御用の 5V 、右はモーター駆動用の 2V です。モータにかかる電圧は 1.6V ほどになります。ちなみに NJM317 の出力は 1.5A なので、もっと大きい容量の電源にしないといけないですね。
Arduino は UNO です。もちろん NANO でも同様です。
押しボタンは正転用と逆転用です。押している間、モータが回転することにします。
ボリュームは回転数の調整用です。回転数制御は、PWM を使ってローサイドの FET を制御していますが、ちょっと発熱するようです。このあたり、もう少しちゃんと設計しないといけないかもです。
スケッチ
ボタンを押している間、正転または逆転します。ボリュームで出力電圧を調整し、回転数を変化させます。
- const byte IN_A = 7;
- const byte IN_B = 8;
- const byte IN_C = 9;
- const byte IN_D = 10;
- const byte norSwPin = A0;
- const byte revSwPin = A1;
- const byte potPin = A2;
- void setup() {
- pinMode(IN_A, OUTPUT);
- pinMode(IN_B, OUTPUT);
- pinMode(norSwPin, INPUT);
- pinMode(revSwPin, INPUT);
- }
- void loop() {
- static bool nor = false;
- static bool rev = false;
- static int speed = 0;
- speed = analogRead(potPin);
- speed = map(speed, 0, 1023, 125, 255);
- if((LOW == digitalRead(norSwPin)) && !rev) {
- nor = true;
- } else if((LOW == digitalRead(revSwPin)) && !nor) {
- rev = true;
- } else {
- nor = false;
- rev = false;
- }
- if(!nor && !rev) {
- digitalWrite(IN_A, LOW);
- digitalWrite(IN_B, LOW);
- analogWrite(IN_C, 0);
- analogWrite(IN_D, 0);
- }
- if(nor && !rev) {
- digitalWrite(IN_A, HIGH);
- digitalWrite(IN_B, LOW);
- analogWrite(IN_C, speed);
- analogWrite(IN_D, 0);
- }
- if(!nor && rev) {
- digitalWrite(IN_A, LOW);
- digitalWrite(IN_B, HIGH);
- analogWrite(IN_C, 0);
- analogWrite(IN_D, speed);
- }
- }
21~22 行で、ボリュームの出力を検知しています。
24~30 行はスイッチの状態を検知します。片方のボタンが押されている間は、反対のボタンを押しても反応しないようにインターロックしています。
33~50 行が H ブリッジ回路の制御部分です。ここを間違えて、たとえば Q12 と Q41 とを同時にオンさせてしまうと、電源〜接地間がショートします。
ブレッドボード
上のブレッドボードは電源です。左のヒートシンクが 5V のレギュレータ、右が 2V です。
モータを回すと、2V 側のヒートシンクはかなり熱くなります。
中央は、言わずと知れた Arduino UNO 。12V で駆動しています。
下の左側が H ブリッジ回路、右が回転数設定用のボリュームと正転、逆転用押しボタンスイッチです。
改善点は多々あります
そんなこんなで、とりあえず DC ブラシモータを正転、逆転できるようになりました。
でも、これで何かを駆動して実用にするには、改善したほうがよい点がいろいろありそうです。そこいらは、実際に利用するときに、用途に応じて検討することにしましょう。