كود البحث

تحكم في عدة محركات تيار مستمر باستخدام وحدة BTS7960 مع أردوينو

تحكم في عدة محركات تيار مستمر باستخدام وحدة BTS7960 مع أردوينو

في هذا الدرس، سنستكشف كيفية التحكم في عدةmotors DC باستخدام وحدة BTS7960 مع Arduino. تعتبر وحدة BTS7960 سائق محرك قوي قادر على التعامل مع تيارات عالية وتتيح التحكم الدقيق في اتجاه المحرك وسرعته من خلال PWM (تعديل عرض النبضة). بحلول نهاية هذا المشروع، سيكون لديك إعداد يعمل يمكنه التحكم في محركين DC، مما يجعلها تدور في كل من الاتجاهين العقارب والساعات. سيوGuidك هذا الدرس خلال إعداد الأجهزة، وتعليمات الأسلاك، والشفرة اللازمة لتشغيل المحركات. لفهم أوضح للعملية بأكملها، تأكد من مشاهدة الفيديو المصاحب (في الفيديو في :00).

BTS7960_وحدة-3

شرح الأجهزة

المكون الرئيسي لهذا المشروع هو وحدة محرك BTS7960. تحتوي هذه الوحدة على متحكمين من نوع H-bridge يمكنهما التحكم في اتجاه المحركات عن طريق تغيير قطبية الجهد المطبق على المحرك. يمكن لكل متحكم التعامل مع تيار يصل إلى 43 أمبير، مما يجعلها مناسبة للتطبيقات عالية القدرة. كما تتميز الوحدة بحماية مدمجة ضد الحالات الحرارية الزائدة والتيار الزائد. بالإضافة إلى BTS7960، ستحتاج إلى لوحة Arduino للتحكم في المحركات. ترسل Arduino إشارات PWM إلى وحدة تشغيل المحرك، مما يسمح لك بضبط سرعة واتجاه المحركات. تعتبر الاتصالات بين Arduino ووحدة BTS7960 ضرورية، حيث إنها تحدد كيفية استجابة المحركات للإشارات.

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

شركة مصنعة إنفينيون تكنولوجيز
رقم الجزء BTS7960
جهد المنطق/المدخلات والمخرجات 3.3 فولت إلى 5 فولت
جهد التغذية ٥-٤٠ ف
تيار الخرج (لكل قناة) ٤٣ أ ماكس
تيار الذروة (لكل قناة) 60 أ
إرشادات تردد PWM 5-25 كيلو هرتز
عتبات منطق الإدخال 0.8 فولت (مرتفع)، 0.3 فولت (منخفض)
انخفاض الجهد / Rدي إس(آن)/ تشبع ١٦ ميغا أوم
الحدود الحرارية 150 °م كحد أقصى
حزمة TO-263
ملاحظات / متغيرات تكوين جسر H مزدوج

  • تأكد من وجود تبريد مناسب عند التشغيل عند تيارات عالية.
  • استخدم مقياس سلك مناسب للاتصالات الكهربائية.
  • تحقق مرة أخرى من تخطيط الدبابيس بين الأردوينو و BTS7960.
  • قم بتنفيذ تقييد التيار لمنع تلف الوحدة.
  • استخدم المكثفات المعزولة بالقرب من مزود الطاقة من أجل الاستقرار.
BTS7960_module-2

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

BTS7960-_2_motor_wiring

لربط وحدة BTS7960 باردوينو، اتبع هذه الوصلات بدقة: 1. **وصلات الطاقة**: قم بتوصيل الطرف الموجب لمصدر الطاقة الخاص بك بالطرف B+ على وحدة BTS7960، والطرف السالب بالطرف B-. تأكد من أن مصدر الطاقة يتوافق مع متطلبات جهد المحركات لديك. 2. **وصلات المحرك**: قم بتوصيل أسلاك المحرك بالأطراف M+ وM- على الوحدة. سيمكن ذلك الوحدة من التحكم في المحرك. 3. **دبابيس الأاردوينو**: قم بتوصيل الدبابيس التالية في الأاردوينو بوحدة BTS7960: - الدبوس 3 (RPWM) إلى دبوس RPWM على الوحدة. - الدبوس 4 (R_EN) إلى دبوس R_EN على الوحدة. - الدبوس 5 (R_IS) إلى دبوس R_IS على الوحدة. - الدبوس 6 (LPWM) إلى دبوس LPWM على الوحدة. - الدبوس 7 (L_EN) إلى دبوس L_EN على الوحدة. - الدبوس 8 (L_IS) إلى دبوس L_IS على الوحدة. 4. **وصلات الأرض**: قم بتوصيل دبوس الأرض للأردوينو بدبوس الأرض على وحدة BTS7960 لضمان مرجع مشترك للإشارات. تأكد من أن جميع الاتصالات آمنة لتجنب أي سلوك غير متوقع أثناء التشغيل.

قم بتثبيت المكتبة المطلوبة

لتثبيت الـrobojax_BTS7960_motor_driver_libraryفي بيئة تطوير أريدو، قم أولاً بتنزيل ملف ZIP للمكتبة من الرابط المقدم. بعد保存 الملف، افتح بيئة تطوير أريدو وانتقل إلىرسم > تضمين المكتبة > إضافة مكتبة .ZIP...في نافذة اختيار الملف، انتقل إلى ملف ZIP الذي تم تنزيله، حدده، وانقر على "فتح". ستقوم بيئة التطوير المتكاملة بعد ذلك بتثبيت المكتبة. يمكنك تأكيد التثبيت الناجح من خلال التحقق منملف > أمثلةقائمة، حيث يجب أن تظهر فئة جديدة باسم "مكتبة دافع المحرك Robojax BTS7960". يمكنك الآن تضمين رأس المكتبة في كودك مع#include <RobojaxBTS7960.h>.

أمثلة على الشيفرة وإرشادات الاستخدام

توضح مقتطفات الشفرة التالية كيفية إعداد والتحكم في المحركات باستخدام وحدة BTS7960. يقوم الإعداد الأولي بتعريف الأرجل المتصلة بالمحركات وتهيئة كائنات المحرك:


// pins for motor 1
#define RPWM_1 3
#define R_EN_1 4
#define R_IS_1 5
#define LPWM_1 6
#define L_EN_1 7
#define L_IS_1 8

// pins for motor 2
#define RPWM_2 9
#define R_EN_2 10
#define R_IS_2 12
#define LPWM_2 11
#define L_EN_2 A0
#define L_IS_2 A1

#include 
RobojaxBTS7960 motor1(R_EN_1, RPWM_1, R_IS_1, L_EN_1, LPWM_1, L_IS_1, debug);
RobojaxBTS7960 motor2(R_EN_2, RPWM_2, R_IS_2, L_EN_2, LPWM_2, L_IS_2, debug);

يقوم هذا القسم من الكود بإعداد تعريفات الدبابيس وإنشاء نسخ من فئة `RobojaxBTS7960` لكلا المحركين. تقوم دالة `setup()` بتهيئة المحركات ومراقب السيريال:


void setup() {
  Serial.begin(9600); // setup Serial Monitor
  motor1.begin();
  motor2.begin();
}

هنا، تقوم دالة `motor.begin()` بتحضير كل محرك للعمل، مما يتيح لك التحكم فيها في دالة `loop()`. في دالة `loop()`، يمكنك التحكم في المحركات باستخدام أوامر مثل هذه:


void loop() {
   motor1.rotate(100, CW); // run motor 1 at 100% speed CW
   delay(5000); // run for 5 seconds
   motor1.stop(); // stop motor 1
   delay(3000); // stop for 3 seconds
   motor2.rotate(100, CCW); // run motor 2 at 100% speed CCW
   delay(5000); // run for 5 seconds
   motor2.stop(); // stop motor 2
   delay(3000); // stop for 3 seconds
}

يوضح هذا القسم كيفية تدوير المحركات في كلا الاتجاهين والتحكم في سرعتها. الشيفرة الكاملة مُحمّلة أدناه للمقالة كمرجع لك.

عرض / ما يمكن توقعه

عند الانتهاء من توصيل الأسلاك وتحميل الكود، يجب أن تلاحظ دوران المحركات في كلا الاتجاهين، مع عقارب الساعة وعكس عقارب الساعة. سيعمل الكود على تشغيل كل محرك بأقصى سرعة لمدة خمس ثوانٍ، يتوقف لمدة ثلاث ثوانٍ، ويعيد العملية. ترقب أي مشكلات محتملة مثل الاتصالات العكسية أو نقص في إمدادات الطاقة. إذا واجهت مشاكل، تحقق مرة أخرى من توصيلاتك وتأكد من أن مصدر الطاقة كافٍ (في الفيديو عند 00:00).

طوابع الفيديو

  • 00:00 ابدأ
  • شرح الأجهزة
  • 04:06 تم عرض ورقة البيانات
  • 07:07 شرح الأسلاك
  • 09:00 شرح الكود
  • 14:33 عرض
  • اختبار الحد الأقصى الحالي 16:47
  • 19:25 صورة حرارية
  • 19:27 اختبار كود مختلف

الصور

BTS7960_module-1
BTS7960_module-1
BTS7960_module-2
BTS7960_module-2
BTS7960_module-3
BTS7960_module-3
BTS7960_module-4-heat-sink
BTS7960_module-4-heat-sink
BTS7960-_2_motor_wiring
BTS7960-_2_motor_wiring
203-Arduino Code to control two or more DC motors using BTS7960 motor driver
اللغة: C++
++
/*
* This is the Arduino code for the BTS7960 DC motor driver.
Using this code, you can control more than one motor to rotate in both directions: clockwise (CW) 
and counter-clockwise (CCW).
📚⬇️ Download and resource page for this video https://robojax.com/RJT169
📚⬇️ Download and resource page https://robojax.com/RJT170


Written by Ahmad Shamshiri for Robojax.com on
July 16, 2020 in Ajax, Ontario, Canada.

Watch video instructions for this code:  https://youtu.be/PUL5DZ9TA2o


BTS7960B
If you found this tutorial helpful, please support me so I can continue creating 
content like this. You can support me on Patreon: http://robojax.com/L/?id=63

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

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

*/

// pins for motor 1
#define RPWM_1 3 // define pin 3 for RPWM pin (output)
#define R_EN_1 4 // define pin 2 for R_EN pin (input)
#define R_IS_1 5 // define pin 5 for R_IS pin (output)

#define LPWM_1 6 // define pin 6 for LPWM pin (output)
#define L_EN_1 7 // define pin 7 for L_EN pin (input)
#define L_IS_1 8 // define pin 8 for L_IS pin (output)
// motor 1 pins end here

// pins for motor 2
#define RPWM_2 9 // define pin 9 for RPWM pin (output)
#define R_EN_2 10 // define pin 10 for R_EN pin (input)
#define R_IS_2 12 // define pin 12 for R_IS pin (output)

#define LPWM_2 11 // define pin 11 for LPWM pin (output)
#define L_EN_2 A0 // define pin 7 for L_EN pin (input)
#define L_IS_2 A1 // define pin 8 for L_IS pin (output)
// motor 2 pins end here



#define CW 1 //
#define CCW 0 //
#define debug 1 //

#include <RobojaxBTS7960.h>
RobojaxBTS7960 motor1(R_EN_1,RPWM_1,R_IS_1, L_EN_1,LPWM_1,L_IS_1,debug);//define motor 1 object
RobojaxBTS7960 motor2(R_EN_2,RPWM_2,R_IS_2, L_EN_2,LPWM_2,L_IS_2,debug);//define motor 2 object and the same way for other motors

void setup() {
  // BTS7960 Motor Control Code by Robojax.com 20190622
  Serial.begin(9600);// setup Serial Monitor to display information

   motor1.begin();
   motor2.begin();   
   
    // BTS7960 Motor Control Code by Robojax.com 20190622 
}

void loop() {
   // BTS7960 Motor Control Code by Robojax.com 20190622 
    motor1.rotate(100,CW);// run motor 1 with 100% speed in CW direction
    delay(5000);//run for 5 seconds
    motor1.stop();// stop the motor 1
    delay(3000);// stop for 3 seconds
    motor1.rotate(100,CCW);// run motor 1 at 100% speed in CCW direction
    delay(5000);// run for 5 seconds
    motor1.stop();// stop the motor 1
    delay(3000);  // stop for 3 seconds

    motor2.rotate(100,CW);// run motor 2 with 100% speed in CW direction
    delay(5000);//run for 5 seconds
    motor2.stop();// stop the motor 2
    delay(3000);// stop for 3 seconds
    motor2.rotate(100,CCW);// run motor 2 at 100% speed in CCW direction
    delay(5000);// run for 5 seconds
    motor2.stop();// stop the motor 2
    delay(3000);  // stop for 3 seconds

    
  // slowly speed up the motor 1 from 0 to 100% speed
    for(int i=0; i<=100; i++){ 
        motor1.rotate(i,CCW);
        delay(50);
    } 
  
   // slow down the motor 2 from 100% to 0
    for(int i=100; i>0; i--){ 
        motor2.rotate(i,CCW);
        delay(50);
    } 
    motor2.stop();// stop motor 2
    delay(3000); // stop for 3 seconds        
 // BTS7960 more than 1 Motor Control Code by Robojax.com 20190622  
}// loop ends

ملفات📁

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

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

Fritzing File