検索コード

MOSFETオプトカプラHW-532を使ってArduinoで最大30Vの直流モーターの速度または負荷を制御する方法

MOSFETオプトカプラHW-532を使ってArduinoで最大30Vの直流モーターの速度または負荷を制御する方法

本プロジェクトガイドでは、ArduinoとHW-532オプトカプラ内蔵のMOSFETモジュールを使用して、汎用的な直流モーターの速度制御装置を作る方法を示します。MOSFETはFR120N、LR7843またはD4184。これにより、最大30Vまでの電圧の直流モーターの速度とオン/オフ状態を制御できます。HW-532モジュールは保護と絶縁を提供するため、モーターをArduinoに直接接続するよりも安全で信頼性が高くなります。

このプロジェクトはさまざまな用途で有用です。以下はいくつかの例です:

  • ロボットアームの速度を正確に制御すること
  • 冷却システム用可変速ファンの製作
  • 動作を調整できる自動機械の製作
  • 流体システム向け電動弁制御の開発

ハードウェア/コンポーネント

主要な構成要素はArduino、HW-532光結合MOSFETモジュール(MOSFETの選択肢:D4184、LR7843、またはFR120N)、DCモーター(定格電圧 ≤ 30V)、接続用配線で、オプションとして高度な制御用のポテンショメータやプッシュボタンスイッチを含めることができます(ビデオの19:34で)。

HW-532モジュール内でのMOSFETの選択は、あなたの電流要件によります(ビデオの01:24)。そのビデオでは異なるMOSFETの詳細な比較(ビデオの06:50)と、さまざまな用途への適合性(ビデオの09:45)が示されています。DCモーターのような誘導性負荷からモジュールを保護するため、ダイオードを入れることを忘れないでください(ビデオの06:00および22:02)。

配線ガイド

基本配線は、モーターの正端子をHW-532の出力に、モーターの負端子をHW-532のGNDに、HW-532の制御ピンをArduinoのデジタルピンに接続します(ビデオの11:16で)。

Arduino wriing for HW-532 MOFET motor driver
ポテンショメータとプッシュボタンを使ったより高度な制御については、ビデオに詳細な配線図が示されています(ビデオの19:44で)。

コードの解説

提供されたコードは3つの制御レベルを提供します:

Schematic for HW-532 using FR120N MOSFET
  1. オン/オフ制御:この簡単なコード(ビデオの15:05で)はデジタルピンを使ってモーターのオン・オフを切り替えます。ユーザーが設定できる部分はMOTOR_OUT_PINHW-532モジュールを制御するArduinoピンを定義する定数
  2. PWMによる速度制御:このコード(動画の15:39)では、パルス幅変調(PWM)を使ってモーターの速度を制御します。ユーザーは調整できます。SPEED_MAXそしてSPEED_MIN速度制御の上限と下限を設定し、motorControl()そしてstopMotor()関数はそれぞれ、モーターを制御するためと停止させるために使用されます。
  3. ポテンショメータとプッシュボタンによる制御:このコード(ビデオの22:12)は、ポテンショメータでモーターの速度を制御し、プッシュボタンで開始/停止できるようにします。ユーザーが設定可能な部分には以下が含まれます。POT_PIN(ポテンショメータの端子),MOTOR_OUT_PIN(PWM制御ピン),START_STOP_PIN(プッシュボタンピン),SPEED_MAX、そしてSPEED_MIN

ライブプロジェクト/デモンストレーション

このビデオでは、3つのコード例すべての動作を示しています。オン/オフ制御は(ビデオの11:41)で示され、その後にPWMによる速度制御(ビデオの16:53)、最後にポテンショメータとプッシュボタンによる制御(ビデオの23:02)が示されます。

  • [00:00] 導入とプロジェクト概要
  • [01:24] HW-532 モジュールとMOSFETのオプション
  • [03:23] 回路図と説明
  • [05:11] コンポーネントの詳細
  • [06:50] MOSFETデータシート解析
  • [11:16] 基本配線とオン/オフの実演
  • [15:05] オン/オフ制御用のArduinoコード
  • [15:39] Arduino用PWM速度制御コード
  • [19:34] ポテンショメータとプッシュボタンの配線
  • [22:12] ポテンショメータとプッシュボタンを使ったArduinoコード

画像

HW-532用FR120N MOSFETの回路図
HW-532用FR120N MOSFETの回路図
HW-532_driver_module-1
HW-532_driver_module-1
HW-532_driver_module-2
HW-532_driver_module-2
HW-532_driver_module-4
HW-532_driver_module-4
HW-532_driver_module-5
HW-532_driver_module-5
Arduino wriing for HW-532 MOFET motor driver
Arduino wriing for HW-532 MOFET motor driver
792-Code 1- Switch: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
言語: C++
/*
 * レッスン 108-1: このレッスンでは、FR120N、LR7843、およびD4184 MOSFETを使用して、最大10AのDC負荷をオン/オフする方法を学びます。HW-532は、モジュールに応じて5Vから30Vまでの負荷を最大10Aで光絶縁されています。回路図が示され、配線図が説明されており、押しボタンやポテンショメーターを使用した異なる配線方法も示されています。  
 * ビデオ https://youtu.be/eqXaqRFAWrA  
 * 
 * 著者: Ahmad Shamshiri for RoboJax.com  
 * // 2022年8月25日にカナダのAajxで公開。  
 * 
 * プロジェクト1: モーターまたは負荷のオン/オフ(このプロジェクト)  
 * プロジェクト2: Arduinoコードを使用して速度を制御  
 * プロジェクト3: ポテンショメーターと押しボタンを使用して速度を制御  
 * 
 * このコードのビデオ指示を視聴: https://youtu.be/eqXaqRFAWrA  
 * 
 * このコードは、ここから始まるArduinoステップバイステップコースの一部です: https://youtu.be/-6qSrDUA5a8  
 * 
 * このコードのライブラリは、http://robojax.com/を訪れてください。  
 * 
 * このチュートリアルが役に立った場合は、私がこのようなコンテンツを作成し続けることができるようにサポートしてください。クレジットカードを使用してPayPalで寄付してください https://bit.ly/donate-robojax  
 * 
 * このコードは「現状のまま」で提供され、保証や責任はありません。この注意書きをそのまま保持する限り、自由に使用できます。*  
 * このコードはRobojax.comからダウンロードされました。  
 * このプログラムはフリーソフトウェアです: 自由に再配布および/または修正できます。  
 * GNU一般公衆ライセンスの条件の下で、フリーソフトウェア財団によって公開されたライセンスのバージョン3に従って、または(お客様の選択に応じて)以降のバージョンで使用できます。  
 * 
 * このプログラムは、役に立つことを期待して配布されていますが、保証はありません; 特定の目的に対する商品性や適合性の仮の保証もありません。詳細については、GNU一般公衆ライセンスを参照してください。  
 * 
 * あなたはこのプログラムと共にGNU一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合は、<https://www.gnu.org/licenses/>を参照してください。
 */
const int MOTOR_OUT_PIN=2;


void setup() {
 // Robojax  MOSFET Motor driver code
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);
  digitalWrite(MOTOR_OUT_PIN, HIGH);


}

 // the loop routine runs over and over again forever:
void loop() {


 // Robojax XY-GMOS MOSFET Motor driver code
} // loop end
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
言語: C++
# include <Arduino_LSM6DS3.h>

/*
 * Lesson 108-2: In this lesson we learn how to use  the module with FR120N , LR7843 and D4184 MOSFET to turn ON/OFF DC load up to up to 10A. HW-532 optically isolated from 5V to 30V load up to 10A depending on the module. Schematic shown, wiring diagram explained, different 
 * method of wiring with push button and potentiometer also shown. 
 * Video https://youtu.be/eqXaqRFAWrA
 * Get code for this project from https://robojax.com/RJT797
 *  
 * Written by Ahmad Shamshiri for RoboJax.com
 * // Published on Aug 25, 2022 in Aajx, ON, Canada.
 * 
 *  
 *   Project 1: Turning ON/OFF a motor or load (this project)
 *   Project 2: Controlling Speed using Arduino code
 *   Project 3: Controlling Speed using potentiometer and a push button
 * Watch Video instruction for this code:https://youtu.be/eqXaqRFAWrA
 * 
 * This code is part of Arduino Step by Step Course which starts here:  https://youtu.be/-6qSrDUA5a8
 * 
 * for library of this code visit http://robojax.com/
 * 
 *  If you found this tutorial helpful, please support me so I can continue creating 
 *  content like this. Make a donation using PayPal by credit card https://bit.ly/donate-robojax 
 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
 *      This program is free software: you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation, either version 3 of the License, or
 *      (at your option) any later version.
 *  
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *  
 *      You should have received a copy of the GNU General Public License
 *      along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


const int MOTOR_OUT_PIN = 3;

const int SPEED_MAX = 100; // in %
const int SPEED_MIN = 0; // in %

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // between 0 to 100%.
 // video instruction https://youtu.be/eqXaqRFAWrA


void setup() {
 // Robojax XY-GMOS MOSFET Motor driver code
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // setup ends

 // the loop routine runs over and over again forever:
void loop() {


 // video https://youtu.be/eqXaqRFAWrA
  motorControl(50); // run motor at 50%
  delay(5000); // keep it running for 5000ms or 5 seconds
   stopMotor(); // stop the motor
  delay(3000); // keep it stopped for 5000ms or 5 seconds

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // stop motor
  delay(3000); // keep it stopped for 5000ms or 5 seconds

   for(int i=100; i >0; i--)
  {
    motorControl(i);
    delay(200);
  }

 // Robojax LR7843 MOSFET Motor driver code
} // loop end


/*
 * motorControl(int s)
 * @brief controls the motor with the value s
 * @param return nothing
 * @param "type" is character
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Robojax LR7843 MOSFET Motor driver code
 // video https://youtu.be/eqXaqRFAWrA
  int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
  Serial.print("Speed: "); Serial.print(s);Serial.println("%");
  analogWrite(MOTOR_OUT_PIN, k);
} // motorControl


/*
 * stopMotor()
 * @brief stops the motor
 * @param return nothing
 * @param 
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void stopMotor(){
 // Robojax XY-GMOS MOSFET Motor driver code
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()

794-Code 3- Potentiometer: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
言語: C++
/*
 * レッスン108-3: 可変抵抗器(ポテンショメーター)を使ってモーターの速度を制御し、Arduinoを使ってスタート/ストップ押しボタンを使用する方法。
 * 
 * このレッスンでは、FR120N、LR7843、D4184 MOSFETを使って、最大10AのDC負荷をON/OFFする方法を学びます。HW-532は、モジュールに応じて5Vから30Vの負荷で最大10Aの光電絶縁を提供します。回路図が示され、配線図が説明され、押しボタンやポテンショメーターを使用した異なる配線方法も示されています。
 * ビデオ https://youtu.be/eqXaqRFAWrA
 * このプロジェクトのコードは https://robojax.com/RJT797 から取得できます。
 * RoboJax.comのためにアハマド・シャムシリが執筆しました。
 * // 2022年8月25日にカナダのオンタリオ州Aajxで公開。
 * 
 * プロジェクト1: モーターまたは負荷をON/OFFする
 * プロジェクト2: Arduinoコードを使って速度を制御する
 * プロジェクト3: ポテンショメーターと押しボタンを使って速度を制御する(このプロジェクト)
 * 
 * このコードのビデオ指示を見る: https://youtu.be/eqXaqRFAWrA
 * 
 * このコードは、ここから始まるArduinoステップバイステップコースの一部です: https://youtu.be/-6qSrDUA5a8
 * 
 * このコードのライブラリはこちらで訪問: http://robojax.com/
 * 
 * このチュートリアルが役に立った場合は、私のコンテンツ制作を続けられるよう支援してください。クレジットカードでPayPalを使って寄付してください https://bit.ly/donate-robojax
 * 
 * このコードは、「現状のまま」で、保証や責任はありません。このメモをそのまま保持する限り、自由に使用できます。*
 * このコードはRobojax.comからダウンロードされました。
 * このプログラムはフリーソフトウェアです:GNU一般公衆ライセンスの下で再配布および/または変更できます。これは、フリーソフトウェア財団によって発行されたライセンスのバージョン3または(あなたの選択により)任意の後のバージョンの条件に従います。
 * 
 * このプログラムは、有用であることを期待して配布されていますが、いかなる保証もなく、特定の目的に対する適合性の暗黙の保証さえありません。詳細については、GNU一般公衆ライセンスをご覧ください。
 * 
 * GNU一般公衆ライセンスのコピーをこのプログラムとともに受け取っているはずです。受け取っていない場合は、<https://www.gnu.org/licenses/>を参照してください。
 */
const int POT_PIN =A0; // can change
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // for push button switch

const int SPEED_MAX = 100; // in %
const int SPEED_MIN = 0; // in %
 // video instruction https://youtu.be/eqXaqRFAWrA

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // between 0 to 100%.

void pushButton();
void setup() {
 // Robojax XY-GMOS MOSFET Motor driver code
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");
  pinMode(START_STOP_PIN, INPUT_PULLUP);
  pinMode(MOTOR_OUT_PIN, OUTPUT);
 // video instruction https://youtu.be/eqXaqRFAWrA


}

 // the loop routine runs over and over again forever:
void loop() {

 pushButton();
 int potValue =analogRead(POT_PIN);
 int speedPercent = map(potValue, 0, 1023, 0, 100);

 if(motorState ==RUN)
 {
  motorControl(speedPercent);
 }else{
  stopMotor();
 }


  delay(500);
 // Robojax XY-GMOS MOSFET Motor driver code
 // video instruction https://youtu.be/eqXaqRFAWrA
} // loop end


/*
 * motorControl(int s)
 * @brief controls the motor with the value s
 * @param return nothing
 * @param "type" is character
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Robojax LR7843 MOSFET Motor driver code
 // video instruction https://youtu.be/eqXaqRFAWrA
  int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
  Serial.print("Speed: "); Serial.print(s);Serial.println("%");
  analogWrite(MOTOR_OUT_PIN, k);
} // motorControl



/*
 * stopMotor()
 * @brief stops the motor
 * @param return nothing
 * @param 
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void stopMotor(){
 // Robojax XY-GMOS MOSFET Motor driver code
 // video instruction https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()



/*
 * pushButton()
 * @brief reads the push button
 * @param return nothing
 * @param 
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void pushButton()
{
 // Robojax XY-GMOS MOSFET Motor driver code
 // video instruction https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // pushButton()

必要かもしれないもの

リソースと参考文献

まだリソースはありません。

ファイル📁

データシート(pdf)

フリッツィングファイル

他のファイル