【Arduino】DCモータドライバIC L9110Hを使う

it

1個50円程度で買えるDCモータドライバ L9110Hを試してみました。
小型で簡単な配線とスケッチでDCモータの制御ができました。

記事の内容

主な記事の内容は
・D9110H DCモータドライバのモジュール基板の使い方
・D9110HでDCモータのブレーキ実験
・D9110H DIP ICでモータ制御
について紹介します。

こんな方にお勧め
・マイコンからDCモータの正転、逆転、速度制御をしたい
・できるだけ安価で小型のDCモータドライバを使いたい

関連記事

L9110H

Ali ExpressでDCモータとプロペラがセットになった状態で販売していましたが、ICケース売りもしていたので別途購入して試してみました。

主な製品情報

モータタイプブラシ付きDC
電源2.5 ~ 12V
制御回転方向、回転数
購入時価格(参考)Ali Express 38円/個 送料 142円

ピン配置

モジュールのピン配置

DIPのピン配置

外観

L9110H モジュール基板

L9110H DIP

使ってみた

プロペラと小型のDCモータのセットは、基板にDCモータと8ピンのDIP-ICソケット、アングルピンヘッダーが実装され、L9110HはDIP-ICに挿入された状態です。
プロペラはDCモータのシャフトに圧入することで取り付けできます。

回転制御用のマイコンと電池ボックスに少ない配線で動作できます。
ピンヘッダは4ピンで電源とGND以外では、2線だけで回転方向と回転速度を制御します。


充電式電池2本(充電式電池なので1.2Vを2本で2.4V)で動作させたときの風量は、ハンディ扇風機よりも弱い程度でした。
9V電池を使用すると強めの風が発生します。

過去に作った回転測定器を使って1秒間の回転数を比較しました。
2.4Vでは122回(1秒間に61回転)
9Vでは354回(1秒間に177回転)

L9110H DIP ICのピンピッチは2.54mmなのでブレッドボードやユニバーサル基板に挿抜できます。
ユニバーサル基板を使って小さい面積に実装することができます。

まとめ

Good

・安価で入手性が良い。
・少ない配線と簡単なスケッチで、正転、逆転、速度制御ができる。
・実装面積を小さい。

Bad

・高価なモータドライバに比べるとMAX回転数が少ない。
・IC1個で制御できるDCモータは1個。

準備

材料と工具

材料用途細かい情報
L9110H モジュール基板DCモータの回転制御L9110H、DCモータが
セットになったモジュール
マイコン基板L9110Hへの信号作成今回RP2040-ZEROを使います。
RaspberryPi Picoでも構いません。
ブレッドボードマイコンとLED類を配置します400穴以上
ジャンパワイヤ配線しますオスーオス
10本程度
電池ボックス電池の収納と配線電子部品屋、近所のホームセンターなどでも
入手できます。
単三電池2本L9110Hの電源
DCモータの電源
今回充電式電池を使用しているので合計2.4Vです。
アルカリ電池を使うともう少し強力に回転します。

DIPでモータ制御する場合は別途以下の材料を用意します。

材料用途細かい情報
L9110HDCモータの回転制御モジュール基板から外して使うことができます
DCモータ回ってもらいますモジュール基板から外して使うことができます

Arduino環境の準備

Arduino環境でRaspberryPi Picoを使用します。
Arduino環境の準備はこちらの記事で紹介しています。

使い方

モジュール基板でモーターの回転制御

説明

WaveshareのRP2040-ZEROを使って、DCモータの回転制御をします。

配線では単三電池(1.5Vを2本)直列で接続しています。
モータには3Vを供給しています。

スケッチでは正転(どちらが正転になるかわからないのでVIN側 GPIO1の出力を正転とします)の回転速度を約5秒かけて最大回転速度にします。
加速と減速はアシンメトリーの台形制御です。

最大回転速度を3秒キープした後に、約250m秒ほどで出力を停止させます。
1秒後に逆転方向に同じ制御を行います。

回転方向は2本の信号線のうち、どちらに出力するか。
速度はPWMのDutyで制御します。

配線

スケッチ

#define PIN_VIN1  (1)        //正転側
#define PIN_VIN2  (2)        //逆転側

void setup() 
{
  pinMode(PIN_VIN1, OUTPUT);
  pinMode(PIN_VIN2, OUTPUT);
}

void loop()
{
  //正転側(加速)
  digitalWrite(PIN_VIN2, LOW);
  for(int16_t i = 0; i < 256; i ++){
    analogWrite(PIN_VIN1, i);
    delay(20);
  }
  delay(3000);

  //正転側(減速)
  for(int16_t i = 0; i < 256; i ++){
    analogWrite(PIN_VIN1, 255 - i);
    delay(1);
  }
  delay(1000);

  //逆転側(加速)
  digitalWrite(PIN_VIN1, LOW);
  for(int16_t i = 0; i < 256; i ++){
    analogWrite(PIN_VIN2, i);
    delay(20);
  }
  delay(3000);

  //逆転側(減速)
  for(int16_t i = 0; i < 256; i ++){
    analogWrite(PIN_VIN2, 255 - i);
    delay(1);
  }
  delay(1000);
}

結果

この実験で使用した電源は充電式電池で1.2V/(本)です。
アルカリ電池1.5V/(本)を使うともう少し強力に回転します。

モジュール基板でブレーキテスト

説明

L9110Hモジュール基板を使用したDCモータのブレーキ実験をします。
「モジュール基板でモーターの回転制御」の回転制御では減速を緩やかに行いました。
制御上は250m秒ほどで停止しますが、プロペラの回転惰性により止まってくれません。

停止時には逆回転パルスを入力することでプロペラを強制的に止めてみます。

配線

「モジュール基板でモータの回転制御」と同じ配線を使用します。

スケッチ

#define PIN_VIN1  (1)        //正転側
#define PIN_VIN2  (2)        //逆転側

void setup() 
{
  pinMode(PIN_VIN1, OUTPUT);
  pinMode(PIN_VIN2, OUTPUT);
}

void loop()
{
  //停止確認パターン1
  //VIN1回転
  digitalWrite(PIN_VIN2, LOW);
  digitalWrite(PIN_VIN1, HIGH);
  delay(3000);

  //VIN1, VIN2ともにOFF
  digitalWrite(PIN_VIN1, LOW);
  delay(5000);

  //停止確認パターン2
  //VIN1回転
  digitalWrite(PIN_VIN2, LOW);
  digitalWrite(PIN_VIN1, HIGH);
  delay(3000);

  //VIN1はOFF, VIN2は1パルス(200ms幅)ON
  digitalWrite(PIN_VIN1, LOW);
  digitalWrite(PIN_VIN2, HIGH);
  delay(200);                   //<-ブレーキ調整パルス幅
  digitalWrite(PIN_VIN2, LOW);
  delay(5000);

}

結果

1回目の回転は回転信号をOFFにするだけです。
プロペラは惰性でしばらく回っています。

2回目の回転では逆転方向の信号を入力することで「ピタリ」と停止しました。
ブレーキに使用した逆転信号は200m秒の信号ですが、回転物の重量や使用する電源により時間調整が必要です。

今回の実験では
・100m秒ではピタリと止まらず。
・200m秒ではピタリと止まった。
・300m秒では若干逆転動作が見られた。
以上の調整結果より200m秒の信号にしています。

DIP IC L9110Hでモータの回転制御

説明

DIP状態でL9110Hを使用します。
作業する内容は「モジュール基板でモーターの回転制御」と同じです。

モータはおもちゃなどに使用される

配線

スケッチ

「モジュール基板でモーターの回転制御」と同じスケッチを使用します。

結果

「モジュール基板でモーターの回転制御」と同じ結果が得られました。
この実験では9V電源を使用しています。

コメント

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