كود البحث

كيفية التحكم في سرعة محرك تيار مستمر باستخدام ESP32 ووحدة L298N

كيفية التحكم في سرعة محرك تيار مستمر باستخدام ESP32 ووحدة L298N

يمكن أن تكون السيطرة على المحركات ذات التيار المستمر مهمة بسيطة مع المكونات والفهم الصحيحين. في هذا الدليل، سنستكشف كيفية التحكم في محركين ذاتي التيار المستمر باستخدام لوحة المايكروكنترولر ESP32 ووحدة قيادة المحرك L298N. بنهاية هذا الدليل، ستكون قادرًا على ضبط سرعة واتجاه محركاتك بناءً على إشارات PWM من ESP32، مما يتيح تطبيقات متعددة في الروبوتات والأتمتة.

ESP32_L298N_DC_الرئيسي

يوفر الفيديو المصاحب لهذا الدرس عرضًا مرئيًا لكامل العملية، بما في ذلك التوصيلات والبرمجة (في الفيديو عند 00:00).

شرح الأجهزة

وحدة تحكم محرك L298N
وحدة التحكم في المحرك L298N

لتحقيق التحكم في المحركات، سنستخدم ESP32 ووحدة تشغيل المحرك L298N. يعتبر ESP32 متحكم دقيق قوي يوفر إمكانيات الواي فاي والبلوتوث، مما يجعله مثالياً لمشاريع إنترنت الأشياء. L298N هو وحدة تشغيل محركات من نوع H-bridge تسمح لنا بالتحكم في اتجاه وسرعة المحركات باستخدام إشارات PWM. تحتوي وحدة L298N على دائرتين من نوع H-bridge، مما يعني أننا يمكننا التحكم في محركين بشكل مستقل. يسمح كل H-bridge بالتحكم في اتجاه المحرك (في اتجاه عقرب الساعة أو عكس اتجاه عقرب الساعة) والسرعة عن طريق تغيير إشارة PWM. من خلال توصيل دبابيس التمكين والمدخلات الخاصة بـ L298N إلى ESP32، يمكننا التلاعب بالمحركات بفعالية.

تفاصيل ورقة البيانات

الشركة المصنعة STMicroelectronics
رقم الجزء L298N
جهد المنطق/المدخلات والمخرجات 5 ف
جهد الإمداد ٥-٤٦ فولت (VS)
التيار الخارجي (لكل قناة) 2 أمبير كحد أقصى/قناة (حد أقصى مطلق)
التيار الذروي (لكل قناة) 2.5 أ
إرشادات تردد PWM 1 كيلو هرتز - 15 كيلو هرتز
عوامل تفكير المدخل 2.5 فولت (عالي)، 1.5 فولت (منخفض)
انخفاض الجهد / Rدي إس (أون)/ تشبع 1.8 فولت عند 2 أمبير
الحدود الحرارية 150 °م
حزمة 15 دبوس متعدد الوات
ملاحظات / متغيرات سائق محرك مزدوج H-bridge

  • تأكد من أن تصنيف جهد المحرك يتوافق مع جهد إمداد L298N.
  • استخدم تبريدًا كافيًا للعمل المستمر عند التيارات العالية.
  • قم بتوصيل أراضي جميع المكونات لتجنب الإشارات العائمة.
  • استخدم تردد PWM مناسب للتطبيق (1-15 كيلوهرتز).
  • كن حذرًا من تصنيفات التيار القصوى لتجنب السخونة المفرطة.
  • اختبر اتجاه المحرك قبل إنهاء الأسلاك لتفادي الأضرار.
  • اعتبر استخدام المكثفات المفصولة في مصدر الطاقة لتحقيق الاستقرار.

تعليمات التوصيل

ESP32_L298N_wiring

لربط L298N بـ ESP32، ابدأ بتوصيل المحركين DC بمنابع الخروج لـ L298N. قم بتوصيل المحرك 1 بالموصلات المعلمة بـOUT1وOUT2، ومحرك 2 إلىOUT3وOUT4لا تهم قطبية المحركات حيث سيتولى L298N إدارة الاتجاه. بعدها، قم بتوصيل مصدر الطاقة الخارجي الخاص بك بـVMSوGNDالم terminals على L298N. تأكد من أن الفولطية مناسبة لمحركاتك، عادةً بين 5 فولت و 46 فولت. الـ5Vيمكن استخدام الطرف على L298N لتزويد ESP32 بالطاقة إذا لزم الأمر، لكن تأكد من تلبية متطلبات التيار. بالنسبة لدبابيس التحكم، اتصلENAإلى GPIO 19،IN1إلى GPIO 18، وIN2إلى GPIO 5 للموتور 1. للموتور 2، قم بتوصيلIN3إلى GPIO 17،IN4إلى GPIO 16، وENBإلى GPIO 4. أخيراً، قم بتوصيل الأرضيات الخاصة بـ ESP32 و L298N معاً لضمان مرجع مشترك.

أمثلة شفرة ودليل توضيحي

توضح لقطات الشيفرة التالية كيفية التحكم في المحركات باستخدام مكتبة L298N المصممة لـ ESP32. تسهل المكتبة عملية إرسال الأوامر إلى المحركات. أولاً، يتم تضمين المكتبة اللازمة، ويتم تعريف معايير المحرك:


#include 
#define ENA 19
#define IN1 18
#define IN2 5
#define IN3 17
#define IN4 16
#define ENB 4
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB);

في هذا المقتطف، نقوم بتعريف دبابيس التحكم لكلا المحركين. مثيل المكتبةrobotيتم إنشاؤه، والذي سيتم استخدامه للتحكم في المحركات طوال البرنامج. بعد ذلك، نقوم بإعداد الاتصال التسلسلي وتهيئة مثيل الروبوت في الـsetup()وظيفة:


void setup() {
  Serial.begin(115200);
  robot.begin();
}

هذا يهيئ الاتصال التسلسلي لعملية تصحيح الأخطاء ويعد مكتبة التحكم في المحرك للعمل. أخيرًا، يتم وضع منطق التحكم الرئيسي في الـloop()وظيفة، حيث يمكننا تدوير المحركات وضبط سرعتها:


void loop() {
  robot.rotate(motor1, 80, CW); // run motor1 at 80% speed in CW direction
  delay(3000); // wait for 3 seconds
  robot.brake(1); // brake motor1
  delay(2000); // wait for 2 seconds
}

توضح هذه الفقرة كيفية تدوير المحرك 1 بسرعة 80% في اتجاه عقارب الساعة لمدة ثلاث ثوانٍ قبل التوقف. يتضمن الكود الكامل منطقًا إضافيًا للمحرك 2 وسرعات متغيرة، والتي يمكن رؤيتها في البرنامج الكامل المحمّل أسفل المقال.

عرض / ماذا تتوقع

عند التنفيذ، يجب أن تستجيب المحركات لإشارات PWM المرسلة من ESP32. ستشاهد المحرك 1 يدور في اتجاه عقارب الساعة بسرعة 80%، تليها عملية كبح. يتضمن البرنامج أيضًا منطقًا لإدارة تغييرات السرعة تدريجيًا، والذي يمكن اختباره من خلال مراقبة تسارع المحرك من 0% إلى 100% (في الفيديو عند 05:00). من الأخطاء الشائعة عدم توصيل الأرضيات بشكل صحيح، مما قد يؤدي إلى سلوك غير منتظم، وتجاوز تصنيفات التيار لـ L298N، مما يتسبب في سخونته. تأكد من مراقبة سلوك المحرك وضبط المعلمات حسب الحاجة.

طوابع زمنية للفيديو

  • 00:46 مقدمة
  • 04:07 توصيل ESP32 مع L298N
  • 06:10 إعداد بيئة تطوير Arduino للعمل مع لوحات ESP32
  • 08:15 شرح كود أردوينو
  • 15:00 عرض التحكم في محرك واحد
  • 16:00 عرض التحكم في محركين تيار مستمر
  • :00 عرض تشغيل ESP32 من L298N والطاقة الخارجية

الصور

وحدة تحكم المحرك L298N
وحدة تحكم المحرك L298N
ESP32_L298N_DC_main
ESP32_L298N_DC_main
ESP32_L298N_wiring
ESP32_L298N_wiring
278-Library Example for L298N Module to control DC motors
اللغة: C++
/*
 * Library Example for L298N Module to control DC motors
 * 
 * This code is to control a single motor. For two motor control, please open L298N_DC_2_Motors.
 * This code is ready for ESP32.
 * Watch video instructions for this code:  https://youtu.be/2JTMqURJTwg
 * 
 * Written by Ahmad Shamshiri on December 24, 2019 
 * in Ajax, Ontario, Canada. www.robojax.com
 * 
 * 
  * 
 * Get this code and other Arduino codes from Robojax.com.

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * 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 downloaded 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/>.
 */

#include <Robojax_L298N_DC_motor.h>
// motor 1 settings
#define CHA 0
#define ENA 19 // this pin must be PWM enabled pin if Arduino board is used
#define IN1 18
#define IN2 5

// motor 2 settings
#define IN3 17
#define IN4 16
#define ENB 4// this pin must be PWM enabled pin if Arduino board is used
#define CHB 1

const int CCW = 2; // do not change
const int CW  = 1; // do not change

#define motor1 1 // do not change
#define motor2 2 // do not change

// for single motor
//Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, true);	

// for two motors without debug information	// Watch video instruction for this line: https://youtu.be/2JTMqURJTwg
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA,  IN3, IN4, ENB, CHB);

// for two motors with debug information
//Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB, true);

void setup() {
  Serial.begin(115200);
  robot.begin();
  //L298N DC Motor by Robojax.com

}

void loop() {
  
 // robot.demo(1);
  robot.rotate(motor1, 80, CW);//run motor1 at 60% speed in CW direction
  robot.rotate(motor2, 70, CCW);//run motor1 at 60% speed in CW direction
  
  delay(3000);

  robot.brake(1);
  robot.brake(2);  
  delay(2000);


  robot.rotate(motor1, 100, CW);//run motor1 at 60% speed in CW direction
  delay(3000);
  
  robot.rotate(motor2, 100, CCW);//run motor1 at 60% speed in CW direction
  
  robot.brake(1);
  robot.brake(2);   
  delay(2000);  

  for(int i=0; i<=100; i++)
  {
    robot.rotate(motor1, i, CW);// turn motor1 with i% speed in CW direction (whatever is i) 
    delay(100);
  }
  delay(2000);
  
  robot.brake(1);
  delay(2000);  
  
  for(int i=0; i<=100; i++)
  {
    robot.rotate(motor2, i, CW);// turn motor1 with i% speed in CW direction (whatever is i) 
    delay(100);
  }
  delay(2000);
  
  robot.brake(2);
  delay(2000);    
  // Robojax L298N Library. Watch video instruction https://youtu.be/2JTMqURJTwg
}

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

ملفات📁

مكتبات أردوينو (ملف مضغوط)

Fritzing File