الخميس، 7 نوفمبر، 2013

دارة قيادة المحركات Motor driver L298

دارة قيادة المحركات Motor driver L298




سأتحدث في هذه التدوينة عن استخدام الدارة المتكاملة L298 و هي دارة تستخدم لقيادة محركين كهربائيين بتيار أعظمي 2أمبير لكل محرك , و تتميز بسهولة التحكم و تحملها لفولتيات حتى 36 فولت .

النشرة الفنية لهذه القطعة تبين الخصائص الكهربائية لهذه القطعة و توزيع أرجلها .



استخدام الدارة المتكاملة بحد ذاته يحتاج مركبات الكترونية جانبية , مثل الدايودات و المقاومات و مبددات الحرارة , لذلك أُفضل الحديث عن القطعة التي تسمى L298 Module و هو لوحة جاهزة تسهل التعامل مع هذه الدارة المتكاملة و تختصر الوقت و الجهد .

مبدأ التحكم :

لهذه القطعة عدة مداخل و هي :

مداخل المحركات : و عددها 4 مداخل و موزعة بواقع مدخلين في كل جهة , و يربط بهما المحرك الكهربائي .

تكون هذه المخارج مرقمة ب OUT1-OUT4 , نربط المحرك الأول بالمدخلين OUT1 ,OUT2  و المحرك الثاني بالمدخلين OUT3,OUT4 هكذا نستطيع التحكم بسهولة باتجاه دوران المحرك .



هناك المداخل ENA,ENB هذان مدخلان التفعيل , إذا تم تطبيق صفر منطقي LOW فإن المحرك لن يدور ابداً و سيتوقف , و اذا كان بوضع التفعيل HIGH فإن التحكم ينتقل عن طريق المداخل IN1-IN4 بصورة عامة و توفيراً للمداخل Pins في الأردوينو , يتم وضع jumper صغير بين هذه المداخل مع ال 5v لتفعيلها دائماً .


التحكم يكون عن طريق المداخل من IN1-IN4 حيث أن IN1 يتحكم بالمدخل OUT1 و الIN2 يتحكم ب OUT2 و هكذا , فبتطبيق 1 منطقي "5 فولت" على مدخل IN1 مثلاً سيتم تمرير التيار ممن خلال OUT1 و عند تطبيق 0 منطقي سيتم ايقاف مرور التيار عبر OUT1 .

هذا مثال بسيط لكيفية التحكم بمحرك .

توصيلة المداخل مع الأردوينو سهلة , من المفضل توصيلها مع مداخل تدعم ال PWM مثل 3,5,6,9,10,11  لنستطيع التحكم بسرعة المحرك .




كمثال بسيط , سنقوم بتوصيل المحركين بتوصيلة كالتالي :
و سنقوم بعمل برنامج يقوم بدوران المحرك مع و عكس عقارب الساعة و توقيفه بسهولة .


التوصيل :

البرنامج :
/*
// This code to drive 2 DC Motor using L298 Module
// Connect :

IN1 >>>> D3
IN2 >>>> D5
IN3 >>>> D6
IN4 >>>> D9

code written For 
http://www.genotronex.com

Mohannad Rawashdeh

*/
const int IN1=3;
const int IN2=5;
const int IN3=6;
const int IN4=9;
void setup() {
  // fIRST , define the Motor's pin as an OUTPUT
pinMode( IN1 ,OUTPUT);
pinMode( IN2 ,OUTPUT);
pinMode( IN3 ,OUTPUT);
pinMode( IN4 ,OUTPUT);

}
void ClockWise(){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
}
void CounterClockWise(){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
}
void Stop(){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,LOW);
}

void loop() {
  // put your main code here, to run repeatedly: 
 ClockWise();delay(2000);
 Stop();delay(500);
 CounterClockWise();delay(2000);
 Stop();delay(500);
}


و هذا البرنامج للتحكم بسرعة المحرك .


/*
// This code to drive 2 DC Motor using L298 Module
// Connect :

IN1 >>>> D3
IN2 >>>> D5
IN3 >>>> D6
IN4 >>>> D9

code written For 
http://www.genotronex.com

Mohannad Rawashdeh

*/
const int IN1=3;
const int IN2=5;
const int IN3=6;
const int IN4=9;
void setup() {
  // fIRST , define the Motor's pin as an OUTPUT
pinMode( IN1 ,OUTPUT);
pinMode( IN2 ,OUTPUT);
pinMode( IN3 ,OUTPUT);
pinMode( IN4 ,OUTPUT);

}
void ClockWise(int Speed){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
 
  analogWrite(IN1,0);
  analogWrite(IN2,Speed);
  analogWrite(IN3,Speed);
  analogWrite(IN4,0);
}
void CounterClockWise(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  analogWrite(IN1,Speed);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,Speed);
}
void Stop(){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,0);
}

void loop() {
 //Rise Up
  for(int i=0;i<255;i++){
  ClockWise(i);
  delay(10);
  }
   for(int i=255;i>0;i--){
  ClockWise(i);
  delay(10);
  }
 
 for(int i=0;i<255;i++){
 CounterClockWise(i);
 delay(10);
 }
 for(int i=255;i>0;i--){
 CounterClockWise(i);
 delay(10);
 }
}
و هذا الفيديو يوضح طريقة عمل هذين البرنامجين







24 التعليقات :

  1. مجهود رائع
    دلي استفسار هل Motor driver L298 قادره علي التحكم في 2 محرك
    Stepper Motor NEMA 17 - 4.8 Kg.cm
    ولك جزيل الشكر

    ردحذف
  2. لوحده لا , ستحتاج ل l297 معه

    ردحذف
  3. هل يوجد مكتبه خاصه لدارة قيادة المحركات Motor driver L298

    ردحذف
  4. هل توجد مكتبه خاصه ب motor driver L298

    ردحذف
  5. طب انا لو هاعمل روبوت 15 كيلو ينفع استخدم دارة قيادة المحركات Motor driver L298 ولا تتحرق

    ردحذف
    الردود
    1. حسب المحرك و هل انت تستخدم Gear مثلاً ؟ الجواب هو نعم و لا في آن واحد لانه يعتمد على وجود او عدم وجود gear في روبوتك لرفع العزم ميكانيكياً .

      كم عدد المحركات لديك ؟ حاول ان تبني دارة H-Bridge خاصة بك في هذه الحاله

      حذف
    2. السلام عليكم… استخدمت محرك خطوي نوع unipolar.. مع قطعة l298 عند تشغيلها ترتفع درجة حرارتها وعند تركها لفترة ما يقارب دقيقة يؤدي الى تلفها هل الارتفاع في درجة حرارة القطعة هو خطأ في الربط ..افيدونا اذا امكن كيفية ربط المحرك الخطوي نوع unipolar

      حذف
    3. التيار عالي للمحرك , اما عليك استخدام دارة قيادة اخرى او وضع مبرد جيد لتبديد الحرارة على ان لا يكون تيار المحرك يزيد عن 2 امبير

      حذف
  6. const int m1=3;
    const int m2=5;

    void setup(){

    pinMode( m1,OUTPUT);
    pinMode( m2,OUTPUT);

    void ClockWise(){
    digitalWrite(m1,HIGH);
    digitalWrite(m2,LOW);

    void unticlockwise(){
    digitalWrite(m1,LOW);
    digitalWrite(m2,HIGH);
    void STop(){
    digitalWrite(m1,LOW);
    digitalWrite(m2,LOW);
    void loop(){
    ClockWise();delay(5000);
    STop();delay(500);
    unticlockwise();delay(5000);
    STop();delay(500);
    لقد كتبت هذا الكود لتشغيل موتور واحد علي الاردينو مثل المكتوب ولم يقبل
    ما الخطا ؟

    ردحذف
    الردود
    1. الخطأ هو نسيان اغلاق "{" وهذا الكود بعد التعديل
      const int m1=3;
      const int m2=5;

      void setup(){

      pinMode( m1,OUTPUT);
      pinMode( m2,OUTPUT);
      }
      void ClockWise(){
      digitalWrite(m1,HIGH);
      digitalWrite(m2,LOW);
      }
      void unticlockwise(){
      digitalWrite(m1,LOW);
      digitalWrite(m2,HIGH);}
      void STop(){
      digitalWrite(m1,LOW);
      digitalWrite(m2,LOW);}
      void loop(){
      ClockWise();delay(5000);
      STop();delay(500);
      unticlockwise();delay(5000);
      STop();delay(500);}

      حذف
  7. ما وظيفة الامر Rotate
    يا ريت لو تفصل ؟؟؟

    ردحذف
  8. هل يتوافق دارة قيادة المحركات
    Motor driver L298
    مع برنامج ماخ 3 او كام المستخدم لتشغيل ماكينات CNC

    ردحذف
  9. عاوز كود line follower (2DC motor +2 infrared sensor(

    ردحذف
  10. blue-sm-irf blutooth مهندس تعاملت مع هاي القطعة قبل هيك؟ جبتها من برا لمشروعي وما اشتغلت وما ضل وقت لاوصي على وحدة جديدة

    ردحذف
  11. السلام عليكم
    لو سمحت انا دلوقتى كنت جايب H-bridge L298 وبحث ولقيت ان المفروض نحط معاها 8 دايود ومقاومات ومكثفات .... فكنت حابب اعرف ليه بنحط معاه الكلام ده ..... وفرضا انى هشغله ع موتورين اكتر جهد ممكن ادخله عليهم 12 فولت فلازم بردك اوصل معاه المقاومات والدايودات والمكثفات ولا ممكن اوصل IC مباشرة مع الموتور .... ارجو الافاده
    ملحوظه انا جايب ic وليس module

    ردحذف
    الردود
    1. الدايودات أعتقد أنها حماية من التيار العائد من ملفات الوتور بعد فصل التيار عنه وبيكون المسمي بتاعه free wheeling diode
      أما المقاومات ليها
      ممكن تستخدم علشان تعرف منها الامبير المسحوب وبالتالي تقدر تعمل كنترول علي التشغيل وممكن تعمل حماية علي الدائره لو زاد الامبير عن المقنن , وهي بتكون مقاومة قيمتها صغيره جدا أسمها shunt resistance عند مرور تيار فيها بيكون علي طرفيها مللي فولت يعبر عن قيمة الامبير
      المكثفات بتكون فلتر للشوشره اللي ممكن تأثر علي عمل الدائرة

      حذف
  12. السلام عليكم و رحمة الله و بركاته
    و لو اني متأخر سنة على الموضوع لكن أنا محتاج جواب ضروري ان كان بالامكان
    أنا اشتريت هذه المتكاملة اعتمادا على المعطيات المنشورة عنها لكي أغذي موتور 24 فولت و مقاومته 17 أوم,
    يعني التيار المستهلك لا يتعدى 1.4 أومبير في حالة الاحتكاك القصوى التي لا يصل اليها الموتور
    لكنها تعطلت عن العمل بعد فترة من التوصيل
    فهل السبب هو ال 24 فولت و لو أنه في الداتاشيت أجد أن جهد الدخل يمكن أن يصل الى 46 فولت
    OPERATING SUPPLY VOLTAGE UP TO 46 V
    . TOTAL DC CURRENT UP TO 4 A
    . LOW SATURATION VOLTAGE
    . OVERTEMPERATURE PROTECTION
    . LOGICAL ”0” INPUT VOLTAGE UP TO 1.5 V
    (HIGH NOISE IMMUNITY)
    أرجوا من ربنا أن يفتكر حد الموضوع ده ويجيب بارك الله فيه

    ردحذف
    الردود
    1. يعتمد العمل لهذه القطعه على النسبة بين التيار و الفولتية المطبقة , بالعادة لا تتحمل قدرة عاليه "اقل من 18 واط " .
      حاول استخدام مبرد اكبر اذا اردت تشغيل محرك بقدرة عاليه , او استعمل دارات تغذيه غير L298

      حذف
  13. ربطت لهذه القطعة محرك خطوي unipolar 12v 2.5A اشتغل المحرك لمدة ما يقارب دقيقة بعدها تلفت القطعة هل الخطأ هو من الربط او البرنامج و..هل من الممكن ان اربط هكذا نوع من المحركات اذا امكن من جنابكم الطيب توضيح ربط هذه المحركات مع هذه القطعة…

    ردحذف
    الردود
    1. طبيعي جداً ان يحترك لان القطعه مصممه للعمل مع تيار اقل من 2 امبير عند هذه الفولتيه و انت مررت من خلاله 2.5 امبير فمن الطبيعي ان يحترق
      وصل محرك ذو تيار اقل و للتيارات الأعلى هناك دارات اخرى لقيادة المحرك

      حذف
  14. بارك الله بكم ووفقكم
    هل استطيع استخدام هذه الدارة لتحريك عواكس الطاقة الشمسية بحيث تتتبع ضوء الشمس

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.