كود البحث

كيفية استخدام MOSFET مع عازل بصري HW-532 للتحكم في سرعة أو حمل محرك تيار مستمر حتى 30 فولت باستخدام أردوينو

كيفية استخدام MOSFET مع عازل بصري HW-532 للتحكم في سرعة أو حمل محرك تيار مستمر حتى 30 فولت باستخدام أردوينو

يوضح دليل المشروع هذا كيفية بناء منظم سرعة لمحرك تيار مستمر متعدد الاستخدامات باستخدام أردوينو ووحدة MOSFET معزولة بصريًا HW-532. قد يكون الـ MOSFET...FR120N، LR7843 أو D4184.يتيح لك ذلك التحكم في سرعة وحالة التشغيل (تشغيل/إيقاف) لمحرك تيار مستمر بجهد يصل إلى 30 فولت. توفر وحدة HW-532 الحماية والعزل، مما يجعلها أكثر أمانًا وموثوقيةً من توصيل المحرك مباشرةً بالأردوينو.

هذا المشروع ذو قيمة لتطبيقات متنوعة. فيما يلي بعض الأمثلة:

  • التحكم بدقة في سرعة ذراع روبوتية
  • بناء مروحة ذات سرعة متغيرة لأنظمة التبريد
  • إنشاء آلات مؤتمتة ذات حركة قابلة للتعديل
  • تطوير نظام تحكم بصمام محركي لأنظمة الموائع

الأجهزة/المكونات

المكونات الأساسية هي الأردوينو، ووحدة MOSFET معزولة ضوئيًا HW-532 (مع خيارات MOSFET مثل D4184 أو LR7843 أو FR120N)، ومحرك تيار مستمر (تصنيف الجهد ≤ 30V)، وأسلاك توصيل، وبشكل اختياري، مقاوم متغير (بوتنشيومتر) وزر ضغط للتحكم المتقدم (في الفيديو عند 19:34).

يعتمد اختيار MOSFET داخل وحدة HW-532 على متطلبات التيار لديك (في الفيديو عند 01:24). يقدم الفيديو مقارنة مفصّلة بين أنواع MOSFET المختلفة (في الفيديو عند 06:50) ومدى ملاءمتها لمختلف التطبيقات (في الفيديو عند 09:45). تذكر تضمين دايود للأحمال الحثّية مثل المحرّكات ذات التيار المستمر لحماية الوحدة (في الفيديو عند 06:00 و22:02).

دليل الأسلاك

التوصيل الأساسي يربط الطرف الموجب للمحرك بمخرج HW-532، والطرف السالب للمحرك بأرضي HW-532، ودبوس التحكم في HW-532 بدبوس رقمي في Arduino (في الفيديو عند 11:16).

Arduino wriing for HW-532 MOFET motor driver
لتحكم أكثر تقدماً باستخدام مقاوم متغير وزر ضغط، يظهر مخطط توصيل مفصّل في الفيديو (في الفيديو عند 19:44)

شرح الكود

يوفر الكود المقدم ثلاثة مستويات من التحكم:

Schematic for HW-532 using FR120N MOSFET
  1. التحكم في التشغيل/الإيقاف:يستخدم هذا الكود البسيط (في الفيديو عند 15:05) دبوسًا رقميًا لتشغيل المحرك وإيقافه. الجزء الذي يمكن للمستخدم تخصيصه هوMOTOR_OUT_PINثابت يحدد أي دبوس في الأردوينو يتحكم في وحدة HW-532.
  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.

مشروع مباشر/عرض توضيحي

يعرض الفيديو تشغيل أمثلة الشيفرة الثلاثة جميعها. يُعرض التحكم بالتشغيل/الإيقاف (في الفيديو عند 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] كود أردوينو للتحكم بالتشغيل/الإيقاف
  • [15:39] كود أردوينو للتحكم في السرعة باستخدام PWM
  • [19:34] توصيل الأسلاك مع المقاوم المتغير وزر الضغط
  • [22:12] كود أردوينو مع مقاوم متغير وزر ضغط

الصور

رسم بياني لـ HW-532 باستخدام ترانزستور MOSFET FR120N
رسم بياني لـ HW-532 باستخدام ترانزستور MOSFET FR120N
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++
/*
 * الدرس ١٠٨-١: في هذا الدرس، نتعلم كيفية استخدام الوحدة مع ترانزستورات MOSFET FR120N وLR7843 وD4184 لتشغيل/إيقاف حمل تيار مستمر حتى ١٠ أمبير. HW-532 معزول بصريًا من حمل ٥ فولت إلى ٣٠ فولت حتى ١٠ أمبير، حسب الوحدة. يُعرض الرسم التخطيطي، ويُشرح مخطط الأسلاك، كما يُعرض طرق توصيل مختلفة باستخدام زر ضغط ومقياس جهد.
 * 
 * فيديو: https://youtu.be/eqXaqRFAWrA
 * 
 * كتبه أحمد شمشيري لموقع RoboJax.com
 * // نُشر في ٢٥ أغسطس ٢٠٢٢ في آجكس، أونتاريو، كندا.
 * 
 * المشروع ١: تشغيل/إيقاف محرك أو حمل (هذا المشروع)
 * المشروع ٢: التحكم في السرعة باستخدام شفرة أردوينو
 * المشروع ٣: التحكم في السرعة باستخدام مقياس الجهد وزر ضغط
 * 
 * شاهد فيديو تعليمي لهذا الكود: https://youtu.be/eqXaqRFAWrA
 * 
 * هذا الكود جزء من دورة أردوينو خطوة بخطوة، والتي تبدأ من هنا: https://youtu.be/-6qSrDUA5a8
 * 
 * للحصول على مكتبة لهذا الكود، تفضل بزيارة http://robojax.com/
 * 
 * إذا وجدت هذا الشرح مفيدًا، يُرجى دعمي لأستمر في إنشاء محتوى مماثل. تبرع عبر باي بال أو ببطاقة الائتمان: https://bit.ly/donate-robojax
 * 
 * هذا الكود "كما هو" دون أي ضمان أو مسؤولية. الاستخدام مجاني طالما حافظت على هذه الملاحظة سليمة.*
 * تم تنزيل هذا الكود من Robojax.com
 * هذا البرنامج برنامج حر: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، إما الإصدار 3 من الرخصة، أو (حسب رغبتك) أي إصدار لاحق.
 * 
 * يُوزع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أي ضمان؛ حتى دون الضمان الضمني لقابلية التسويق أو الملاءمة لغرض معين. راجع رخصة جنو العمومية لمزيد من التفاصيل.
 * 
 * من المفترض أنك استلمت نسخة من رخصة جنو العمومية مع هذا البرنامج. إذا لم تكن قد استلمتها، فراجع <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++
/*
 * الدرس ١٠٨-٣: التحكم في سرعة المحرك باستخدام المقاومة المتغيرة (مقياس الجهد) واستخدام زر التشغيل/الإيقاف مع أردوينو.
 * 
 * في هذا الدرس، نتعلم كيفية استخدام الوحدة مع ترانزستورات MOSFET FR120N وLR7843 وD4184 لتشغيل/إيقاف حمل تيار مستمر حتى ١٠ أمبير. HW-532 معزول بصريًا من حمل ٥ فولت إلى ٣٠ فولت حتى ١٠ أمبير، حسب الوحدة. يوضح الرسم التخطيطي، ومخطط الأسلاك، وطرق التوصيل المختلفة باستخدام زر التشغيل ومقياس الجهد.
 * 
 * فيديو: https://youtu.be/eqXaqRFAWrA
 * 
 * احصل على أكواد هذا المشروع من https://robojax.com/RJT797
 * كتبه أحمد شمشيري لموقع RoboJax.com
 * // نُشر في ٢٥ أغسطس ٢٠٢٢ في آجكس، أونتاريو، كندا.
 * 
 * المشروع ١: تشغيل/إيقاف محرك أو حمل
 * 
 * المشروع ٢: التحكم في السرعة باستخدام كود أردوينو
 * 
 * المشروع ٣: التحكم في السرعة باستخدام مقياس الجهد وزر ضغط (هذا المشروع)
 * 
 * شاهد فيديو تعليمي لهذا الكود: https://youtu.be/eqXaqRFAWrA
 * 
 * هذا الكود جزء من دورة أردوينو خطوة بخطوة، والتي تبدأ من هنا: https://youtu.be/-6qSrDUA5a8
 * 
 * للحصول على مكتبة لهذا الكود، تفضل بزيارة http://robojax.com/
 * 
 * إذا وجدت هذا الشرح مفيدًا، يُرجى دعمي لأستمر في إنشاء محتوى مماثل. تبرع عبر باي بال أو ببطاقة الائتمان: https://bit.ly/donate-robojax
 * 
 * هذا الكود "كما هو" دون أي ضمان أو مسؤولية. الاستخدام مجاني طالما حافظت على هذه الملاحظة سليمة.*
 * تم تنزيل هذا الكود من Robojax.com
 * هذا البرنامج برنامج حر: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية كما نشرتها مؤسسة البرمجيات الحرة، إما الإصدار 3 من الرخصة، أو (حسب رغبتك) أي إصدار لاحق.
 * 
 * يُوزع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أي ضمان؛ حتى دون الضمان الضمني لقابلية التسويق أو الملاءمة لغرض معين. راجع رخصة جنو العمومية لمزيد من التفاصيل.
 * 
 * من المفترض أنك استلمت نسخة من رخصة جنو العمومية مع هذا البرنامج. إذا لم تكن قد استلمتها، فراجع <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)

Fritzing File

ملفات أخرى