كود البحث

كيفية استخدام 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
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

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


}

 // يستمر روتين الحلقة مرارًا وتكرارًا إلى الأبد:
void loop() {


 // كود تشغيل محرك Robojax XY-GMOS MOSFET
} // نهاية الحلقة
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
اللغة: C++
# include <Arduino_LSM6DS3.h>

/*
 * الدرس ١٠٨-٢: في هذا الدرس، نتعلم كيفية استخدام الوحدة مع ترانزستورات 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 MOTOR_OUT_PIN = 3;

const int SPEED_MAX = 100; // في ٪
const int SPEED_MIN = 0; // في ٪

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // بين 0 إلى 100%.
 // تعليمات الفيديو https://youtu.be/eqXaqRFAWrA


void setup() {
 // كود تشغيل محرك Robojax XY-GMOS MOSFET
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // ينتهي الإعداد

 // يستمر روتين الحلقة مرارًا وتكرارًا إلى الأبد:
void loop() {


 // فيديو https://youtu.be/eqXaqRFAWrA
  motorControl(50); // تشغيل المحرك بنسبة 50٪
  delay(5000); // استمر في تشغيله لمدة 5000 مللي ثانية أو 5 ثوانٍ
   stopMotor(); // أوقف المحرك
  delay(3000); // أبقه متوقفًا لمدة 5000 مللي ثانية أو 5 ثوانٍ

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // إيقاف المحرك
  delay(3000); // أبقه متوقفًا لمدة 5000 مللي ثانية أو 5 ثوانٍ

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

 // رمز تشغيل محرك Robojax LR7843 MOSFET
} // نهاية الحلقة


/*
 * motorControl(int s)
 * @brief يتحكم بالمحرك بالقيمة s
 * @param لا يُرجع أي قيمة
 * @param "type" حرف
 * في ٨ مايو ٢٠٢٠، الساعة ٢:٣٦ صباحًا، في أجاكس، أونتاريو، كندا
 */
void motorControl(int s)
{
 // رمز تشغيل محرك Robojax LR7843 MOSFET
 // فيديو 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);
} // التحكم في المحرك


/*
 * stopMotor()
 * @brief يوقف المحرك
 * @param لا يُرجع أي شيء
 * @param 
 * في ٨ مايو ٢٠٢٠، الساعة ٢:٣٦ صباحًا في أجاكس، أونتاريو، كندا
 */
void stopMotor(){
 // كود تشغيل محرك Robojax XY-GMOS MOSFET
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // توقف المحرك

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; // يمكن أن تتغير
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // لمفتاح الضغط

const int SPEED_MAX = 100; // في ٪
const int SPEED_MIN = 0; // في ٪
 // تعليمات الفيديو https://youtu.be/eqXaqRFAWrA

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // بين 0 إلى 100%.

void pushButton();
void setup() {
 // كود تشغيل محرك Robojax XY-GMOS MOSFET
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");
  pinMode(START_STOP_PIN, INPUT_PULLUP);
  pinMode(MOTOR_OUT_PIN, OUTPUT);
 // تعليمات الفيديو https://youtu.be/eqXaqRFAWrA


}

 // يستمر روتين الحلقة مرارًا وتكرارًا إلى الأبد:
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
 // تعليمات الفيديو https://youtu.be/eqXaqRFAWrA
} // نهاية الحلقة


/*
 * motorControl(int s)
 * @brief يتحكم بالمحرك بالقيمة s
 * @param لا يُرجع أي قيمة
 * @param "type" حرف
 * في ٨ مايو ٢٠٢٠، الساعة ٢:٣٦ صباحًا، في أجاكس، أونتاريو، كندا
 */
void motorControl(int s)
{
 // رمز تشغيل محرك Robojax LR7843 MOSFET
 // تعليمات الفيديو 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);
} // التحكم في المحرك



/*
 * stopMotor()
 * @brief يوقف المحرك
 * @param لا يُرجع أي شيء
 * @param 
 * في ٨ مايو ٢٠٢٠، الساعة ٢:٣٦ صباحًا في أجاكس، أونتاريو، كندا
 */
void stopMotor(){
 // كود تشغيل محرك Robojax XY-GMOS MOSFET
 // تعليمات الفيديو https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // توقف المحرك



/*
 * pushButton()
 * @brief يقرأ زر الضغط
 * @param لا يُرجع شيئًا
 * @param 
 * في ٨ مايو ٢٠٢٠، الساعة ٢:٣٦ صباحًا، في أجاكس، أونتاريو، كندا
 */
void pushButton()
{
 // كود تشغيل محرك Robojax XY-GMOS MOSFET
 // تعليمات الفيديو https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // زر الضغط

الأشياء التي قد تحتاجها

الموارد والمراجع

لا توجد موارد حتى الآن.

ملفات📁

ورقة البيانات (pdf)

Fritzing File

ملفات أخرى