検索コード

プロジェクト: RJMD-R2101 HブリッジMOSFETモータードライバー

プロジェクト: RJMD-R2101 HブリッジMOSFETモータードライバー

このチュートリアルでは、RJMD-R2101 HブリッジMOSFETモータードライバーを使用してDCモーターを制御する方法を探ります。このプロジェクトでは、IRFZ44N MOSFETをIR2101ゲートドライバーと組み合わせて、モーターの速度と方向を制御する方法を効果的に活用する方法を示します。このガイドの終わりまでには、モーターをスムーズに加速、ブレーキ、停止させることができる機能的なモーター制御セットアップが完成します。

RJMD-R2101 H-Bridge MOSFET Motor Driver 0

進めるにつれて、必要なハードウェアコンポーネント、配線手順、およびすべてがどのように連携しているかを明確にするためのコードスニペットの例を紹介します。より視覚的な表現のために、関連するビデオ(ビデオの02:15)を視聴することをお勧めします。

RJMD-R2101 H-Bridge MOSFET Motor Driver 3

ハードウェアの解説

このプロジェクトの主なコンポーネントは、IR2101ゲートドライバーとIRFZ44N MOSFETです。IR2101は、ハーフブリッジ構成でNチャネルMOSFETを駆動するために設計された高速ドライバーです。これにより、MOSFETの効率的なスイッチングと制御が可能になり、モーターがスムーズに動作します。

IRFZ44N MOSFETは、モーターに供給される電力を制御するスイッチング素子として機能します。IR2101によって活性化されると、これらのMOSFETは高電流を処理でき、モーターを駆動するために必要な電力を提供します。これらのコンポーネントは一緒に、モーターの方向と速度を正確に制御することを可能にします。

データシートの詳細

製造業者インターナショナル・レクティファイア
部品番号IRFZ44N
ロジック/IO電圧10 V (VGS)
供給電圧55 V (VDS)
出力電流(チャネルごと)49 A (最大)
ピーク電流(チャネルごと)120 A (最大)
PWM周波数ガイダンス最大100 kHzまで
入力ロジック閾値2.0 V (VGS(th))
電圧降下 / RDS(on)/ 飽和度0.025 Ω (最大)
熱的限界175 °C (最大)
パッケージTO-220
ノート / バリアントHブリッジ構成で一般的に使用される

  • MOSFETの適切なヒートシンクを確保して、過熱を防ぎます。
  • スムーズなモーター動作を実現するために、速度制御にはPWMを使用してください。
  • 電源電圧がMOSFETの定格を超えないことを確認してください。
  • モーターを配線する際は、損傷を避けるために極性を正しく確認してください。
  • 電源の近くにデカップリングコンデンサを使用して電圧を安定させてください。

配線指示

Arduino wiring for H-bridge IR2101 with IRFZ44N
Arduino wiring for H-bridge IR2101 with IRFZ44N

RJMD-R2101モータードライバーを配線するには、まず電源を接続します。ドライバーのVCCピンを5V電源に接続します。GNDピンは電源のグラウンドに接続する必要があります。次に、制御ピンを接続します:最初のMOSFET用のPWM信号はピンに接続する必要があります。PWM1_HIN1_PIN(ピン9)、および最初のMOSFETのイネーブルピンは接続する必要があります。EN1_LIN1_PIN(pin 8)。2つ目のMOSFETには、PWM信号を接続します。PWM2_HIN2_PIN(ピン3)とイネーブルピンにEN2_LIN2_PIN(pin 2).

RJMD-R2101 H-Bridge MOSFET Motor Driver 5

モーター端子をHブリッジの適切な出力に接続してください。Arduinoを使用している場合は、PWMピンをArduinoボードの指定されたピンに接続してください。例えば、接続してください。PWM1_HIN1_PINピン9に、EN1_LIN1_PINピン8に接続し、その後も同様です。この設定により、モーターを効果的に制御できるようになります。

コード例とウォークスルー

コードセクションには、定義されたピンを使用してモーターの速度と方向を制御するための関数が含まれています。以下はモーター制御スケッチの抜粋です:

const int PWM1_HIN1_PIN= 9; // PWM pin for first MOSFET
const int EN1_LIN1_PIN= 8; // Enable pin for first MOSFET

この部分では、最初のMOSFETを制御するために使用されるピンを定義します。PWM1_HIN1_PIN速度制御に使用されますが、EN1_LIN1_PINモータードライバーを有効にします。

void Motor(boolean direction, int speed=0) {
    int speedPWM = map(speed, 0, 100, 0, 255);
    // Control motor direction and speed here
}

この関数はを受け取ります。directionモーターが時計回りに回転するか反時計回りに回転するかを決定するためのパラメーター。speedパラメータはPWM値にマッピングされており、モーターの速度をスムーズに制御できます。

void stop() {
    digitalWrite(EN1_LIN1_PIN, LOW); // Disable first MOSFET
}

そのstopモーターを無効にする関数は、イネーブルピンを低く設定することで、実質的にモーターを通る電流の流れを停止します。これにより、コンポーネントを損傷することなく迅速に停止することが保証されます。

記事の下に読み込まれた完全なプログラムを参照してください。

デモンストレーション / 期待すること

セットアップが完了すると、Arduinoから送信されたコマンドに対してモーターが反応するのを観察できるはずです。モーターは指定された方向に回転し、PWM信号を使用して速度を調整できます。注意すべき一般的な問題には、モーターが逆方向に回転する原因となる極性の逆接続や、不安定な動作を引き起こす可能性のあるフローティング入力が含まれます。

テスト中、PWM値に基づいてモーターの速度が変化するのに気付くかもしれません。パフォーマンスに影響を与える可能性があるため、電力の流れに中断がないようにすべての接続が確実であることを確認してください(ビデオの05:45)。

ビデオのタイムスタンプ

  • 00:00- プロジェクトの紹介
  • 02:15- ハードウェアコンポーネントの概要
  • 05:45- モーター制御のデモンストレーション
  • 08:30- コードのウォークスルーと説明

画像

RJMD-R2101 HブリッジMOSFETモータードライバ 0
RJMD-R2101 HブリッジMOSFETモータードライバ 0
RJMD-R2101 HブリッジMOSFETモータードライバー1
RJMD-R2101 HブリッジMOSFETモータードライバー1
RJMD-R2101 HブリッジMOSFETモータードライバー2
RJMD-R2101 HブリッジMOSFETモータードライバー2
RJMD-R2101 HブリッジMOSFETモータードライバー 3
RJMD-R2101 HブリッジMOSFETモータードライバー 3
RJMD-R2101 HブリッジMOSFETモータードライバ 4
RJMD-R2101 HブリッジMOSFETモータードライバ 4
RJMD-R2101 HブリッジMOSFETモータードライバ 5
RJMD-R2101 HブリッジMOSFETモータードライバ 5
Arduino wiring for H-bridge IR2101 with IRFZ44N
Arduino wiring for H-bridge IR2101 with IRFZ44N
796-Arduino H-Bridge code to control IRFZ44N Mosfets using IR2101 gate drivers
言語: C++
/*
 * IR2101モーター制御スケッチ  
 * 速度、ブレーキ、停止でDCモーターを制御  
 * IRF44ZN MOSFETはハイサイドとローサイドに使用  
 * IR2101ゲートドライバーはMOSFETを駆動するために使用  
 * コード、PCBを製造するためのガーバーファイル、配線図は  
 * http://robojax.com/RJT390 から入手できます  
 * 
 * 2024年11月19日にアフマド・シャムシリによって執筆  
 * www.Robojax.com https://youTube.com/@robojax
 */
const int PWM1_HIN1_PIN= 9; // パイントでなければならない ~
const int EN1_LIN1_PIN= 8;

const int PWM2_HIN2_PIN= 3; // パイントでなければならない ~
const int EN2_LIN2_PIN= 2;

const boolean CW =1;
const boolean CCW =0;


void Motor(boolean, int); // プロトタイプ
void brake(); // プロトタイプ
void stop(); // プロトタイプ

void setup() {
  Serial.begin(9600);
  pinMode(PWM1_HIN1_PIN, OUTPUT);
  pinMode(EN1_LIN1_PIN, OUTPUT);

  pinMode(PWM2_HIN2_PIN, OUTPUT);
  pinMode(EN2_LIN2_PIN, OUTPUT);

}

void loop() {
  Motor(CW, 100);
  delay(5000);

  brake();
  delay(3000);

  Motor(CCW, 100);
  delay(5000);

  stop();
  delay(3000);

  Motor(CCW, 50); // CWで50%の速度で
  delay(5000);

  brake();
  delay(3000);
  for(int i=0; i<=100; i++)
  {
    Motor(CCW, i);
    delay(100);
  }
  delay(3000);
  for(int i=100; i>=0; i--)
  {
    Motor(CCW, i);
    delay(100);
  }
  brake();
  delay(3000);
}


void stop()
{
    Serial.println ("=== Stop");
    digitalWrite(EN1_LIN1_PIN, LOW);
    digitalWrite(PWM1_HIN1_PIN, LOW);
    digitalWrite(EN2_LIN2_PIN, LOW);
    digitalWrite(PWM2_HIN2_PIN, LOW);
}
void brake()
{
    Serial.println ("=== Brake");
    digitalWrite(PWM1_HIN1_PIN, HIGH);
    digitalWrite(EN1_LIN1_PIN, LOW);
    digitalWrite(PWM2_HIN2_PIN, HIGH);
    digitalWrite(EN2_LIN2_PIN, LOW);
}


void Motor(boolean direction, int speed=0)
{
  int speedPWM = map(speed, 0, 100, 0, 255);
  Serial.print("Speed: "); Serial.print (speedPWM);
  Serial.print("(");Serial.print(speed);Serial.print("%)");


  if(direction){
   Serial.print(" dir: ");Serial.println ("CW");

    analogWrite(PWM1_HIN1_PIN, speedPWM);
    digitalWrite(EN1_LIN1_PIN, HIGH);

    digitalWrite(PWM2_HIN2_PIN, LOW);
    digitalWrite(EN2_LIN2_PIN, LOW);

  }else{
    Serial.print(" dir: ");Serial.println ("CCW");

    digitalWrite(PWM1_HIN1_PIN, LOW);
    digitalWrite(EN1_LIN1_PIN, LOW);

    analogWrite(PWM2_HIN2_PIN, speedPWM);
    digitalWrite(EN2_LIN2_PIN, HIGH);
  }

}




ファイル📁

その他のファイル