يحتوي هذا المقال على روابط تسويق بالعمولة مُعلَّمة بعلامة *. بصفتي شريكًا في برنامج Amazon Associates، أربح من عمليات الشراء المؤهلة، دون أي تكلفة إضافية عليك. يساعد ذلك على إبقاء الشروحات مجانية.
ملخص سريع
طريقة استخدام وحدة قيادة المحركات 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، يتدفق التيار من مصدر التغذية عبر المحرك في اتجاه واحد، فيدور المحرك إلى الأمام.

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

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

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

أطراف خرج المحرك (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.
| IN1 | IN2 | ENA | المحرك A |
|---|---|---|---|
| HIGH | LOW | HIGH أو PWM | يدور إلى الأمام |
| LOW | HIGH | HIGH أو PWM | يدور في الاتجاه العكسي |
| LOW | LOW | HIGH أو PWM | يكبح (توقف سريع) |
| HIGH | HIGH | HIGH أو PWM | يكبح (توقف سريع) |
| أي قيمة | أي قيمة | LOW (analogWrite 0) | يتباطأ حتى يتوقف (توقف حر) |
الكبح (Brake): توصل وحدة القيادة سلكَي المحرك بخط التغذية نفسه (كلاهما بالموجب أو كلاهما بالأرضي)، فيتوقف المحرك بسرعة. التوقف الحر (Coast): تفصل وحدة القيادة مخارجها، فيتباطأ المحرك من تلقاء نفسه حتى يتوقف.
المكونات المطلوبة (BOM)
| المكوّن | الكمية | ملاحظات |
|---|---|---|
| Arduino Uno (أو لوحة متوافقة) | 1 | تصلح أي لوحة Arduino ذات أطراف رقمية تدعم PWM |
| وحدة قيادة المحركات L298N ثنائية جسر H | 1 | اللوحة الحمراء ذات أطراف التوصيل اللولبية |
| محرك تيار مستمر (محرك هواة من 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 للمحرك A | D9 | القيمة HIGH أو LOW تحدد الاتجاه |
| IN2 | مدخل الاتجاه 2 للمحرك A | D8 | القيمة HIGH أو LOW تحدد الاتجاه |
| IN3 | مدخل الاتجاه 1 للمحرك B | D7 | القيمة HIGH أو LOW تحدد الاتجاه |
| IN4 | مدخل الاتجاه 2 للمحرك B | D6 | القيمة 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؛ راجع قسم مزود الطاقة والسلامة أدناه |

مزود الطاقة والسلامة
تنتج معظم مشكلات 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 Rev3 الرسمي على مقابس Uno، فلا تمتد أي أسلاك توصيل بين وحدة القيادة و Arduino. ويقود محركَي تيار مستمر (أو محركًا خطويًا واحدًا، وهو محرك يدور بخطوات ثابتة) بتيار يصل إلى 2 A لكل قناة. يُضبط الاتجاه بالطرفين DIR A و DIR B، والسرعة بالطرفين PWM A و PWM B. ويفرض الدرع أطراف Arduino التي تستخدمها، وهو عادةً أغلى من وحدة L298N المستقلة. وشريحة L298P في الدرع هي شريحة القيادة L298N نفسها ولكن بغلاف مختلف. ويُستخدم هذا الدرع في مشروع سيارة روبوتية تتفادى العوائق على هذا الموقع.
L293D 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.
جدول مقارنة سريع
| الميزة | وحدة L298N | Arduino Motor Shield | درع L293D |
|---|---|---|---|
| عدد محركات التيار المستمر المدعومة | 2 | 2 | حتى 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 أي جهد يبلغ نحو 2.3 V فما فوق على أنه HIGH، لذلك تصلح الإشارات المنطقية بجهد 3.3 V. وصّل الأرضيات معًا، وتأكد من حصول الوحدة على تغذيتها المنطقية بجهد 5 V، إما من منظم 5 V المدمج أو من الخارج (راجع قسم مزود الطاقة والسلامة).
نعم، محرك خطوي ثنائي القطب واحد (محرك خطوي بملفين، ملف لكل جسر H)، باستخدام القناتين معًا.
المصادر والمشاريع التالية
يستخدم مشروعا سيارة الروبوت المذكوران أعلاه مبدأ جسر H نفسه، لكن على درع للمحركات.
- شرح مستشعر المسافة بالموجات فوق الصوتية (HC-SR04) مع Arduino: قياس المسافة للروبوتات المتحركة.
- شرح وحدة البلوتوث HC-05/HC-06 مع Arduino: اتصال لاسلكي بين هاتفك و Arduino.
- دليل التحكم بمحرك السيرفو مع Arduino: محركات السيرفو للأذرع الروبوتية وآليات التحريك الأفقي والرأسي (Pan-Tilt).
- رادار Arduino باستخدام مستشعر الموجات فوق الصوتية ومحرك سيرفو: يجمع بين التحكم في محرك السيرفو واستشعار المسافة.

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