وحدة قيادة المحركات L298N مع Arduino: دليل التحكم بمحركات التيار المستمر

يحتوي هذا المقال على روابط تسويق بالعمولة مُعلَّمة بعلامة *. بصفتي شريكًا في برنامج Amazon Associates، أربح من عمليات الشراء المؤهلة، دون أي تكلفة إضافية عليك. يساعد ذلك على إبقاء الشروحات مجانية.

يُحمَّل الفيديو من YouTube (Google)، وقد يضع ملفات تعريف الارتباط (Cookies). سياسة الخصوصية

ملخص سريع

طريقة استخدام وحدة قيادة المحركات L298N ثنائية جسر H مع Arduino. يتناول الشرح مخطط الأطراف، وتوصيل محرك تيار مستمر واحد أو محركين، والتحكم في الاتجاه والسرعة باستخدام PWM، وإعداد مزود الطاقة. ويتضمن برنامجَي Arduino (Sketches)، أحدهما لمحركين والآخر لمحرك واحد. اختبرتُ هذا التجهيز على Arduino Uno مع محركَي تيار مستمر.

تحتاج محركات التيار المستمر إلى تيار أكبر مما يستطيع طرف Arduino توفيره، لذلك توضع وحدة قيادة المحركات بينهما. وتُعد وحدة L298N ثنائية جسر H من أكثر وحدات القيادة شيوعًا لهذه المهمة. هل أنت جديد على Arduino؟ ابدأ بقراءة ما هو Arduino و أساسيات برمجة Arduino.

ما هي وحدة قيادة المحركات L298N؟

L298N شريحة لقيادة المحركات (IC، أي دائرة متكاملة) تحتوي على جسرَي H، جسر لكل محرك (يشرح القسم التالي طريقة عمل جسر H). تُركّب الوحدة المستخدمة هنا هذه الشريحة على لوحة صغيرة مزودة بأطراف توصيل لولبية ومشتت حراري ومنظم جهد 5 V (قطعة تحوّل جهد تغذية المحركات إلى 5 V ثابتة). أطراف التوصيل اللولبية مشابك للأسلاك تُشدّ ببرغي؛ أما المشتت الحراري فكتلة معدنية تنقل الحرارة بعيدًا عن الشريحة. وبفضل قناتين مستقلتين، تضبط الوحدة اتجاه محركَي تيار مستمر وسرعتهما في الوقت نفسه من Arduino أو من أي متحكم دقيق آخر (حاسوب صغير على شريحة واحدة). وتقبل جهود تغذية للمحركات من 5 V إلى 35 V، وتوفر تيارًا متواصلًا يصل إلى 2 A لكل قناة، وهذا يكفي لمعظم محركات الهواة الصغيرة والمتوسطة.

الوحدة رخيصة ومتوفرة على نطاق واسع. في الفيديو المرافق لهذا المقال، وصّلتها بـ Arduino Uno ومحركَي تيار مستمر، ثم أجريت الاختبار نفسه مع Arduino Motor Shield و L293D Motor Shield.

كيف يعمل جسر H (H-bridge)

جسر H دائرة من أربعة مفاتيح مرتبة على شكل حرف H حول المحرك. ويؤدي إغلاق أزواج مختلفة من المفاتيح إلى تمرير التيار عبر المحرك في أحد الاتجاهين، وهذا ما يحدد دورانه إلى الأمام أو إلى الخلف.

الاتجاه الأمامي

عند إغلاق S1 و S4 وفتح S2 و S3، يتدفق التيار من مصدر التغذية عبر المحرك في اتجاه واحد، فيدور المحرك إلى الأمام.

H-bridge circuit diagram, forward direction: switches S1 and S4 closed, current flows through the DC motor from left to right.
الاتجاه الأمامي: S1 و S4 مغلقان، ويتدفق التيار عبر المحرك من اليسار إلى اليمين.

الاتجاه العكسي

عند إغلاق S2 و S3 وفتح S1 و S4، يتدفق التيار في الاتجاه المعاكس فينعكس دوران المحرك.

H-bridge circuit diagram, reverse direction: switches S2 and S3 closed, current flows through the DC motor from right to left.
الاتجاه العكسي: S2 و S3 مغلقان، ويتدفق التيار عبر المحرك من اليمين إلى اليسار.

التحكم في السرعة باستخدام PWM

يتحكم تعديل عرض النبضة (PWM) في سرعة المحرك. فبدلًا من توفير جهد ثابت، يشغّل Arduino طرف التمكين (Enable) ويطفئه بسرعة كبيرة. وتحدد نسبة زمن التشغيل إلى زمن الإيقاف، أي دورة العمل (Duty Cycle)، متوسط الجهد الذي يصل إلى المحرك. فدورة عمل بنسبة 50 بالمئة توفر نحو نصف جهد التغذية، فيدور المحرك أبطأ، ودورة عمل بنسبة 100 بالمئة توفر الجهد الكامل لأقصى سرعة. في وحدة L298N، تُوجَّه إشارة PWM إلى طرفَي التمكين ENA و ENB.

PWM signal diagram showing square waves with different duty cycles: a higher duty cycle means a higher average voltage.
تحدد دورة عمل PWM متوسط الجهد: كلما ارتفعت دورة العمل زادت سرعة الدوران.

شرح مخطط أطراف L298N (Pinout)

L298N module pinout: motor outputs OUT1 to OUT4, power terminals +12 V, GND and +5 V, control pins ENA, IN1 to IN4 and ENB.

أطراف خرج المحرك (OUT1، OUT2، OUT3، OUT4): تتصل أطراف التوصيل اللولبية هذه بمحركات التيار المستمر. يقود OUT1 و OUT2 المحرك A، ويقود OUT3 و OUT4 المحرك B.

أطراف الطاقة (+12 V، GND، +5 V): الطرف المكتوب عليه +12 V هو مدخل تغذية المحركات. وهذه التسمية مجرد اسم، إذ يقبل الطرف جهدًا من 5 V إلى 35 V. أما GND فهو الأرضي المشترك بين تغذية المحركات ودائرة التحكم في L298N و Arduino. ويعمل طرف +5 V بطريقتين: عند تركيب وصلة منظم 5 V (وصلة القفز، أو Jumper، قطعة بلاستيكية صغيرة تربط طرفين)، يُخرج الطرف 5 V. وعند نزع وصلة منظم 5 V (وهذا ضروري فوق 12 V)، يحتاج الطرف إلى تغذية منطقية بجهد 5 V من الخارج، مثلًا من طرف 5 V في Arduino. والتغذية المنطقية هي جهد 5 V الذي يشغّل دائرة التحكم في L298N.

أطراف التمكين والإدخال

طرفا التمكين (ENA، ENB): يشغّل هذان الطرفان كل قناة من قناتي المحركين ويحددان سرعتها. لكل من ENA و ENB وصلة قفز خاصة به، هما وصلة ENA ووصلة ENB، وتربط كل منهما طرف التمكين بطرف 5 V المجاور له. عند تركيب وصلة ENA أو ENB، يدور المحرك المعني بأقصى سرعة كلما اختارت أطراف الاتجاه الخاصة به الدوران إلى الأمام أو إلى الخلف. وإذا نزعت تلك الوصلة ووصلت طرف التمكين بطرف PWM في Arduino بدلًا منها، تحصل على تحكم متغير في السرعة من 0 إلى 255 عبر analogWrite(). ورغم اسمها، لا تُخرج الدالة analogWrite() جهدًا تماثليًا، بل تُخرج إشارة PWM الموصوفة أعلاه، بقيمة من 0 (مطفأة دائمًا) إلى 255 (مشغّلة دائمًا).

أطراف الإدخال (IN1، IN2، IN3، IN4): تحدد هذه المداخل الرقمية الأربعة اتجاه الدوران. IN1 و IN2 للمحرك A، و IN3 و IN4 للمحرك B. يسرد الجدول جميع الحالات الممكنة للمحرك A؛ ويعمل المحرك B بالطريقة نفسها مع IN3 و IN4 و ENB.

IN1IN2ENAالمحرك A
HIGHLOWHIGH أو PWMيدور إلى الأمام
LOWHIGHHIGH أو PWMيدور في الاتجاه العكسي
LOWLOWHIGH أو PWMيكبح (توقف سريع)
HIGHHIGHHIGH أو PWMيكبح (توقف سريع)
أي قيمةأي قيمةLOW (analogWrite 0)يتباطأ حتى يتوقف (توقف حر)

الكبح (Brake): توصل وحدة القيادة سلكَي المحرك بخط التغذية نفسه (كلاهما بالموجب أو كلاهما بالأرضي)، فيتوقف المحرك بسرعة. التوقف الحر (Coast): تفصل وحدة القيادة مخارجها، فيتباطأ المحرك من تلقاء نفسه حتى يتوقف.

المكونات المطلوبة (BOM)

المكوّنالكميةملاحظات
Arduino Uno (أو لوحة متوافقة)1تصلح أي لوحة Arduino ذات أطراف رقمية تدعم PWM
وحدة قيادة المحركات L298N ثنائية جسر H1اللوحة الحمراء ذات أطراف التوصيل اللولبية
محرك تيار مستمر (محرك هواة من 3 V إلى 12 V)1 أو 2محركات TT بعلبة تروس (محركات صغيرة بتروس بلاستيكية لسيارات الروبوت) تعمل جيدًا
مزود طاقة للمحركات1حزمة بطاريات أو مزود طاقة مخبري (جهاز يعمل بكهرباء الشبكة وجهد خرجه قابل للضبط). اختر جهدًا أعلى من الجهد المقنن للمحرك بنحو 2 V، لأن L298N يُسقط من 1.4 V إلى 2 V. لمحركات TT بجهد 6 V: بطارية LiPo من نوع 2S بجهد 7.4 V (بطارية ليثيوم بوليمر من خليتين)
أسلاك توصيل (Jumper) ذكر-أنثى (دبوس في أحد الطرفين ومقبس في الطرف الآخر)نحو 10وصّل أطراف L298N بمقابس التوصيل في Arduino (صفوف المقابس على امتداد حواف اللوحة)
لوحة التجارب Breadboard (اختيارية)1لوحة بنقاط تلامس نابضية للتوصيل دون لحام؛ تُبقي التوصيلات مرتبة
هيكل الروبوت والعجلات (اختياري)1 مجموعةلبناء سيارة روبوت

توصيل L298N مع Arduino

يوضح الجدول التوصيلات بين وحدة L298N و Arduino Uno لتشغيل محركَي تيار مستمر بسرعة واتجاه مستقلين لكل منهما.

طرف L298Nالوظيفةطرف Arduinoملاحظات
ENAسرعة المحرك A (PWM)D10 (PWM)انزع وصلة ENA للتحكم في السرعة عبر PWM
IN1مدخل الاتجاه 1 للمحرك AD9القيمة HIGH أو LOW تحدد الاتجاه
IN2مدخل الاتجاه 2 للمحرك AD8القيمة HIGH أو LOW تحدد الاتجاه
IN3مدخل الاتجاه 1 للمحرك BD7القيمة HIGH أو LOW تحدد الاتجاه
IN4مدخل الاتجاه 2 للمحرك BD6القيمة HIGH أو LOW تحدد الاتجاه
ENBسرعة المحرك B (PWM)D5 (PWM)انزع وصلة ENB للتحكم في السرعة عبر PWM
+12 V (VCC)القطب الموجب لتغذية المحركاتلا شيءوصّله بالقطب الموجب لبطارية المحركات أو لمزود الطاقة
GNDأرضي مشتركGNDبالغ الأهمية: وصّل GND في L298N بكل من سالب تغذية المحركات و GND في Arduino
+5 Vمخرج منظم 5 Vلا شيءيُخرج 5 V عند تركيب وصلة منظم 5 V؛ راجع قسم مزود الطاقة والسلامة أدناه
Wiring diagram: L298N motor driver connected to an Arduino Uno, two DC motors and a 9 V supply on a DC barrel jack adapter; the Arduino runs on USB.
مخطط التوصيل: وحدة L298N موصولة بـ Arduino Uno مع محركَي تيار مستمر ومزود طاقة خارجي.

مزود الطاقة والسلامة

تنتج معظم مشكلات L298N عن طريقة توصيل الطاقة.

غذِّ المحركات من مصدر طاقة خاص بها. تسحب محركات التيار المستمر تيارًا أكبر بكثير مما يستطيع طرف 5 V في Arduino توفيره بأمان. وإذا غُذّيت من Arduino، فإنها تسبب انخفاضات في الجهد وسلوكًا غير منتظم، وقد تُلحق ضررًا دائمًا باللوحة. وصّل حزمة بطاريات أو محول طاقة منفصلًا بطرف +12 V في L298N.

وصّل أرضيًا مشتركًا. يجب توصيل GND في Arduino و GND في L298N والقطب السالب لتغذية المحركات معًا. فمن دون أرضي مشترك، لا يستطيع L298N قراءة الإشارات المنطقية القادمة من Arduino (مستويات HIGH و LOW على أطراف التحكم) بشكل صحيح، فتتصرف المحركات بشكل غير متوقع أو لا تتحرك إطلاقًا.

منظم الجهد وهبوط الجهد والضجيج الكهربائي

منظم 5 V المدمج. عند تركيب وصلة منظم 5 V وتوصيل جهد من 7 V إلى 12 V بطرف +12 V، يُخرج طرف +5 V جهدًا منظمًا مقداره 5 V. ويمكن لهذا الطرف تغذية Arduino: وصّله بطرف 5 V في Arduino، وليس بطرف VIN (الطرف الذي يغذي منظم الجهد الخاص بـ Arduino). وفوق 12 V، انزع وصلة منظم 5 V لحماية المنظم، وغذِّ طرف +5 V بتغذية منطقية بجهد 5 V من الخارج. في الاختبارات الأولى، غذِّ Arduino عبر USB والمحركات من مصدر منفصل. وتغذية Arduino من طرف +5 V في L298N ممكنة أيضًا، لكن ضجيج المحركات يصل حينها إلى Arduino.

هبوط الجهد. المفاتيح الأربعة في كل جسر H داخل L298N ترانزستورات ثنائية القطبية (BJTs). ويُسقط كل ترانزستور في حالة التوصيل جزءًا من الجهد، لذلك يضيع نحو 1.4 V إلى 2 V من جهد التغذية على شكل حرارة في وحدة القيادة. فمع تغذية بجهد 6 V، يصل إلى المحركات نحو 4 V إلى 4.6 V. اختر مصدر تغذية أعلى من الجهد المقنن للمحرك بنحو 2 V. ولمحركات TT بعلبة تروس (جهدها المقنن عادةً من 3 V إلى 6 V)، تعمل بطارية LiPo 2S بجهد 7.4 V بشكل جيد: فبعد هبوط الجهد في L298N، يصل إلى المحركات نحو 5.4 V إلى 6 V. ويمكن أيضًا تشغيل المحركات بحزمة من أربع بطاريات AA بجهد 6 V، لكن المنظم المدمج لا يستطيع توفير 5 V مستقرة إذا قل الجهد عن نحو 7 V. لذلك، مع حزمة كهذه، انزع وصلة منظم 5 V ووصّل طرف 5 V في Arduino بطرف +5 V في L298N.

ضجيج المحركات. تولّد محركات التيار المستمر ضجيجًا كهربائيًا (نبضات جهد قصيرة)، خاصةً عند بدء الدوران أو عكس الاتجاه. أبقِ توصيلات الطاقة محكمة. والحم مكثفًا سيراميكيًا بسعة 100 nF بين طرفَي كل محرك. كما يقلل مكثف كهروليتي بسعة من 100 µF إلى 470 µF موصول عبر طرفَي تغذية المحركات من هبوط الجهد عند بدء دوران المحرك.

كود Arduino: التحكم في محركَي تيار مستمر

ارفع برنامج Arduino (Sketch) التالي باستخدام Arduino IDE (البرنامج الذي تكتب به برامج Arduino وترفعها إلى اللوحة). يدير البرنامج المحركين إلى الأمام بقيمة PWM تساوي 128، ثم يوقفهما، ثم يعكس اتجاههما، ثم يوقفهما مرة أخرى.

البرنامج الكامل: التحكم في محركين

/**
 * L298N Motor Driver - Two DC Motor Control
 * Author: Omar Draidrya
 * Website: omartronics.com
 *
 * Controls forward, stop, and reverse for two DC motors
 * using the L298N dual H-bridge with PWM speed control.
 */

#define IN1 9    // Motor A direction pin 1
#define IN2 8    // Motor A direction pin 2
#define IN3 7    // Motor B direction pin 1
#define IN4 6    // Motor B direction pin 2
#define ENA 10   // Motor A speed control (PWM)
#define ENB 5    // Motor B speed control (PWM)

void setup() {
  // Set all motor control pins as outputs
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);

  // Start with motors stopped
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void loop() {
  // --- Move both motors FORWARD at half speed ---
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 128);   // Motor A at ~50% speed
  analogWrite(ENB, 128);   // Motor B at ~50% speed
  delay(2000);

  // --- STOP both motors ---
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(2000);

  // --- Move both motors BACKWARD at half speed ---
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  analogWrite(ENA, 128);
  analogWrite(ENB, 128);
  delay(2000);

  // --- STOP both motors ---
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(1000);
}

شرح الكود

تعريف الأطراف (الأسطر من 10 إلى 15): تُعرَّف أسماء ستة أطراف باستخدام #define. وقبل الترجمة البرمجية (Compiling، أي تحويل الكود إلى تعليمات تفهمها اللوحة)، يستبدل Arduino IDE كل اسم برقمه، فيعني IN1 في الكود الطرف 9. يحدد IN1 و IN2 اتجاه المحرك A، ويحدد IN3 و IN4 اتجاه المحرك B. أما ENA و ENB فيحددان سرعة كل محرك عبر PWM. اخترت الطرفين 10 و 5 لـ ENA و ENB لأنهما يدعمان PWM في Arduino Uno.

setup(): يضبط الكود الأطراف الستة كلها كمخارج باستخدام pinMode()، ويضع أطراف الاتجاه الأربعة على LOW. ووضع أطراف الاتجاه على LOW منذ البداية يضمن أن يبدأ المحركان في حالة توقف.

الدوران إلى الأمام: عند وضع IN1 على HIGH و IN2 على LOW يدور المحرك A إلى الأمام، وعند وضع IN3 على HIGH و IN4 على LOW يدور المحرك B إلى الأمام. ويرسل analogWrite(ENA, 128) إشارة PWM بدورة عمل تقارب 50 بالمئة (128 من 255)، فيتلقى المحرك في المتوسط نحو نصف جهد التغذية ويدور أبطأ. ثم ينتظر الكود ثانيتين (2 s).

الإيقاف: يضع الكود أطراف الاتجاه الأربعة كلها على LOW، بينما تحتفظ أطراف التمكين بإشارة PWM. وعندما يكون المدخلان على LOW وطرف التمكين مفعّلًا، توصل وحدة القيادة سلكَي المحرك كليهما بالأرضي، فيكبح المحرك. وإذا أردت أن يتوقف المحرك توقفًا حرًا بدلًا من ذلك، فاكتب analogWrite(ENA, 0).

الدوران العكسي: عند وضع IN1 على LOW و IN2 على HIGH ينعكس دوران المحرك A، وعند وضع IN3 على LOW و IN4 على HIGH ينعكس دوران المحرك B. وتبقى قيمة PWM عند 128.

مثال بمحرك واحد

للتحكم في محرك واحد، استخدم المحرك A فقط. التوصيل: IN1 بالطرف 9، و IN2 بالطرف 8، و ENA (بعد نزع وصلة ENA) بالطرف 10. اترك IN3 و IN4 و ENB دون توصيل. يدير البرنامج التالي المحرك إلى الأمام بدورة عمل 75 بالمئة (191)، ثم يوقفه، ثم يعكس اتجاهه بنسبة 50 بالمئة (128)، ثم يوقفه مرة أخرى.

/**
 * L298N - Single DC Motor Control
 * Author: Omar Draidrya
 * Website: omartronics.com
 *
 * Drives one DC motor forward, stops, reverses, and stops.
 * Uses Motor A channel only (IN1, IN2, ENA).
 */

#define IN1  9   // Motor A direction pin 1
#define IN2  8   // Motor A direction pin 2
#define ENA  10  // Motor A speed (PWM)

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENA, OUTPUT);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
}

void loop() {
  // Forward at 75 % speed
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, 191);
  delay(2000);

  // Stop
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  delay(1000);

  // Reverse at 50 % speed
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, 128);
  delay(2000);

  // Stop
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  delay(1000);
}

اختبر التجهيز واضبطه

ابدأ بمحرك واحد. افصل المحرك B واختبر المحرك A أولًا؛ فاكتشاف مشكلات التوصيل والكود أسهل مع محرك واحد. وبعد أن يعمل المحرك A، وصّل المحرك B.

تحقق من الاتجاه. ارفع الكود وتحقق مما إذا كان المحرك يدور إلى الأمام أثناء مقطع الدوران الأمامي. وإذا دار في الاتجاه الخاطئ، فبدّل سلكَي المحرك في طرف التوصيل اللولبي، أو بدّل رقمَي الطرفين IN1 و IN2 في الكود.

ابدأ بقيم PWM منخفضة. جرّب قيمة مثل 80 أو 100 قبل analogWrite(ENA, 255). فالمحرك البطيء أكثر أمانًا في الاختبار وأسهل في الملاحظة. وتحت نحو 50 إلى 70، تكتفي محركات كثيرة بالطنين أو تعجز عن الدوران (تبقى ساكنة رغم وصول التغذية)، لأن متوسط الجهد منخفض جدًا للتغلب على الاحتكاك. وعندما اختبرت عند القيمة 64، واجه المحرك الأيمن صعوبة في الدوران أمام الاحتكاك، فرفعت القيمة إلى 128.

المشكلات الشائعة واستكشاف الأخطاء وإصلاحها

العَرَضالسبب المحتملالحل
المحرك لا يدورلا توجد تغذية للمحركات؛ أو ENA أو ENB بلا وصلة قفز ولا سلك PWM؛ أو قيمة PWM منخفضة جدًا؛ أو طرفا الاتجاه على المستوى نفسهتحقق من أن مصدر التغذية موصول بـ +12 V و GND وأنه مُشغَّل. تحقق من تركيب وصلتَي ENA و ENB، أو من توصيل ENA و ENB بأطراف PWM (فمن دون أي منهما قد تبقى القناة مطفأة). ارفع قيمة analogWrite (جرّب 200 أو 255). اضبط IN1 و IN2 على مستويين مختلفين
المحرك يطنّ لكنه لا يدورقيمة PWM منخفضة جدًا، أو المحرك عالق ميكانيكيًاارفع قيمة PWM أو أزل سبب الانحشار
يدور في اتجاه واحد فقطأحد طرفَي الاتجاه غير موصول، أو رقم الطرف في الكود خاطئاختبر كل طرف اتجاه بمفرده باستخدام digitalWrite() بالقيمتين HIGH و LOW وراقب المحرك
المحرك ضعيف أو بطيءجهد التغذية منخفض جدًا. يُسقط L298N نحو 1.4 V إلى 2 V: فمصدر بجهد 5 V يترك للمحرك من 3 V إلى 3.6 V، ومصدر بجهد 6 V يترك له من 4 V إلى 4.6 Vاستخدم مصدر تغذية أعلى من الجهد المقنن للمحرك بنحو 2 V؛ وتحقق من قيمة PWM
يُعاد تشغيل Arduino (Reset) عند بدء دوران أحد المحركاتيؤدي تيار الاندفاع في المحرك (Inrush Current، أي ذروة تيار قصيرة عند البدء) إلى هبوط جهد التغذية، ويضيف ضجيج المحرك نبضات جهدغذِّ Arduino عبر USB أو من مصدر طاقة خاص به، واجعل GND وحده مشتركًا، وأضف المكثفين المذكورين في فقرة ضجيج المحركات
المحرك يستجيب بشكل غير منتظم أو لا يستجيبGND غير مشتركوصّل GND في Arduino و GND في L298N وسالب تغذية المحركات معًا
لا يوجد تحكم في السرعة، والمحرك إما يعمل بكامل سرعته أو متوقف تمامًاENA أو ENB موصول بطرف لا يدعم PWMفي Arduino Uno، تدعم الأطراف 3 و 5 و 6 و 9 و 10 و 11 فقط الدالة analogWrite()؛ ابحث عن الرمز ~ المطبوع بجانب رقم الطرف
يعمل بشكل متقطعأطراف توصيل لولبية مرتخية، غالبًا بسبب اهتزاز المحركشدّ جميع أطراف التوصيل اللولبية؛ وانزع العزل عن أطراف الأسلاك وأدخلها بإحكام
وحدة القيادة تسخنيحوّل L298N هبوط الجهد فيه إلى حرارة: فعند تيار 1 A وهبوط جهد 2 V، تنتج كل قناة نحو 2 W، لذلك يسخن المشتت الحراري حتى عند تيار أقل بكثير من القيمة المقننة 2 Aإذا كانت حرارته لا تسمح بلمسه، فخفّف الحمل، أو اخفض قيمة PWM، أو انتقل إلى وحدة قيادة للتيارات العالية مثل BTS7960

L298N مقارنةً بخيارات أخرى لقيادة المحركات مع Arduino

من البدائل الشائعة لوحدة L298N درع Arduino Motor Shield ودرع L293D Motor Shield. والدرع (Shield) لوحة تُركَّب على مقابس التوصيل في Arduino.

Arduino Motor Shield

Arduino Motor Shield wiring diagram: the shield on an Arduino Uno connected to two DC motors.
Arduino Motor Shield: يُركَّب مباشرة على Arduino، لذلك تكون التوصيلات أبسط.
Arduino Motor Shield Rev3 top view with screw terminals for motor A, motor B and Vin, the L298P driver chip and the header pins for the Uno.
Arduino Motor Shield Rev3: أطراف توصيل لولبية للمحركين A و B ومدخل تغذية المحركات Vin على اليسار، وشريحة القيادة L298P في المنتصف.

يُركَّب درع Arduino Motor Shield Rev3 الرسمي على مقابس Uno، فلا تمتد أي أسلاك توصيل بين وحدة القيادة و Arduino. ويقود محركَي تيار مستمر (أو محركًا خطويًا واحدًا، وهو محرك يدور بخطوات ثابتة) بتيار يصل إلى 2 A لكل قناة. يُضبط الاتجاه بالطرفين DIR A و DIR B، والسرعة بالطرفين PWM A و PWM B. ويفرض الدرع أطراف Arduino التي تستخدمها، وهو عادةً أغلى من وحدة L298N المستقلة. وشريحة L298P في الدرع هي شريحة القيادة L298N نفسها ولكن بغلاف مختلف. ويُستخدم هذا الدرع في مشروع سيارة روبوتية تتفادى العوائق على هذا الموقع.

L293D Motor Shield

L293D Motor Shield wiring diagram: the shield on an Arduino connected to two DC motors and a 9 V supply.
L293D Motor Shield: يقود ما يصل إلى أربعة محركات تيار مستمر، ويُبرمج باستخدام مكتبة Adafruit Motor Shield.

يستخدم درع L293D Motor Shield (الذي يُباع غالبًا كنسخة متوافقة من Adafruit Motor Shield V1) الشريحة L293D، ويقود ما يصل إلى أربعة محركات تيار مستمر أو محركين خطويين. ولا توفر كل قناة سوى 0.6 A بشكل متواصل (1.2 A كذروة)، وهذا أقل من L298N. وتبرمجه باستخدام مكتبة Adafruit Motor Shield (AFMotor.h)، وهي مجموعة كود جاهزة تتضمن دوال مثل motor.run(FORWARD) و motor.setSpeed(200). وبفضل قنواته الأربع، يناسب الدرع المشاريع التي تضم ثلاثة أو أربعة محركات صغيرة يسحب كل منها أقل من 0.6 A. ويُستخدم هذا الدرع في مشروع سيارة روبوتية يُتحكَّم بها عبر البلوتوث على هذا الموقع، وذلك بإصدار Adafruit Motor Shield V1.2.

جدول مقارنة سريع

الميزةوحدة L298NArduino Motor Shieldدرع L293D
عدد محركات التيار المستمر المدعومة22حتى 4
التيار لكل قناة2 A متواصل2 A متواصل0.6 A متواصل
نطاق جهد المحركاتمن 5 V إلى 35 Vمن 5 V إلى 12 Vمن 4.5 V إلى 25 V
نوع التركيبوحدة مستقلة تُوصَل بالأسلاكدرع (يُركَّب على Arduino)درع (يُركَّب على Arduino)
التحكم في السرعة عبر PWMالطرفان ENA/ENB (PWM)الطرفان PWM A/Bعبر مكتبة AFMotor
مرونة اختيار الأطرافعالية (تختار الأطراف بنفسك)منخفضة (توزيع ثابت للأطراف)منخفضة (توزيع ثابت للأطراف)
التكلفةمنخفضة جدًامتوسطةمنخفضة
الأنسب لـتوصيلات مخصصة، وسيارات الروبوت، وتعلّم أساسيات جسر Hنماذج أولية سريعة بأقل قدر من التوصيلاتمشاريع متعددة المحركات تحتاج إلى كود بسيط

لأول سيارة روبوت، يُعد L298N خيارًا جيدًا: فهو رخيص ويتحمل ما يصل إلى 2 A لكل قناة. وعيبه الرئيسي هو هبوط الجهد البالغ من 1.4 V إلى 2 V، الذي يهدر الطاقة ويسخّن الوحدة. ولمحركات الجهد المنخفض، تكون الخسارة أقل مع وحدة قيادة تستخدم مفاتيح MOSFET (ترانزستورات يسقط عليها جهد أقل بكثير مما يسقط على ترانزستورات BJT)، مثل TB6612FNG.

الأسئلة الشائعة

هل يمكنني استخدام L298N مع ESP32 أو مع لوحة أخرى تعمل بجهد 3.3 V؟

نعم. تقرأ مداخل L298N أي جهد يبلغ نحو 2.3 V فما فوق على أنه HIGH، لذلك تصلح الإشارات المنطقية بجهد 3.3 V. وصّل الأرضيات معًا، وتأكد من حصول الوحدة على تغذيتها المنطقية بجهد 5 V، إما من منظم 5 V المدمج أو من الخارج (راجع قسم مزود الطاقة والسلامة).

هل يستطيع L298N قيادة محرك خطوي؟

نعم، محرك خطوي ثنائي القطب واحد (محرك خطوي بملفين، ملف لكل جسر H)، باستخدام القناتين معًا.

المصادر والمشاريع التالية

يستخدم مشروعا سيارة الروبوت المذكوران أعلاه مبدأ جسر H نفسه، لكن على درع للمحركات.

3 رأي حول “L298N Motor Driver with Arduino: DC Motor Control Guide”

أضف تعليق