شِفر (کود) جستجو

کنترل چندین موتور DC با استفاده از ماجیول BTS7960 و آردوینو

کنترل چندین موتور DC با استفاده از ماجیول BTS7960 و آردوینو

در این آموزش، ما به بررسی نحوه کنترل چندین موتور DC با استفاده از ماجیول BTS7960 و یک آردوینو خواهیم پرداخت. BTS7960 یک درایور موتوری قدرتمند است که قادر به مدیریت جریان‌های بالا می‌باشد و امکان کنترل دقیق جهت و سرعت موتور را از طریق PWM (مدولاسیون عرض پالس) فراهم می‌کند. در پایان این پروژه، شما یک سیستم عملیاتی خواهید داشت که می‌تواند دو موتور DC را کنترل کند و آن‌ها را در دو جهت عقربه‌های ساعت و خلاف عقربه‌های ساعت بچرخاند. این آموزش شما را از طریق تنظیمات سخت‌افزاری، دستورالعمل‌های سیم‌کشی و کدی که برای راه‌اندازی موتورها نیاز است راهنمایی خواهد کرد. برای درک بهتر کل فرآیند، حتماً ویدیو همراه را بررسی کنید (در ویدیو در 00:00).

BTS7960_module-3

توضیح سخت‌افزار

اجزای اصلی این پروژه ماجیول درایور موتور BTS7960 است. این ماجیول شامل دو درایور H-bridge است که می‌توانند با تغییر قطبیت ولتاژ اعمال شده به موتور، جهت موتور را کنترل کنند. هر درایور می‌تواند تا 43 آمپر جریان را مدیریت کند که آن را برای کاربردهای پرقدرت مناسب می‌سازد. ماجیول همچنین از حفاظت داخلی در برابر شرایط دما و جریان بیش از حد برخوردار است. علاوه بر BTS7960، به یک برد آردوینو برای کنترل موتور ها نیاز دارید. آردوینو سیگنال‌های PWM را به درایور موتور ارسال می‌کند که به شما این امکان را می‌دهد تا سرعت و جهت موتور ها را تنظیم کنید. اتصالات بین آردوینو و ماجیول BTS7960 حیاتی هستند، زیرا تعیین کننده نحوه پاسخ موتور ها به سیگنال‌ها هستند.

جزئیات ورقه داده

تولیدکننده اینفینئون تکنولوژی‌ها
شماره قطعه BTS7960
ولتاژ منطق/ ورودی و خروجی ۳.۳ ولت تا ۵ ولت
ولتاژ تغذیه ۵-۴۰ ولت
جریان خروجی (به ازای هر کانال) ۴۳ آ مکس
جریان اوج (به ازای هر کانال) ۶۰ آ
راهنمایی فرکانس PWM ۵-۲۵ کیلوهرتز
آستانه‌های منطقی ورودی ۰.۸ ولت (بالا)، ۰.۳ ولت (پایین)
افت ولتاژ / RDS(on)/ اشباع ۱۶ میلی‌اهم
محدودیت‌های حرارتی حداکثر ۱۵۰ درجه سانتی‌گراد
بسته TO-263
یادداشت‌ها / انواع پیکربندی دوگانه H-bridge

  • اطمینان حاصل کنید که هنگام کار با جریان‌های بالا، هیت سینک مناسبی وجود داشته باشد.
  • از اندازه مناسب سیم برای اتصالات برق استفاده کنید.
  • پایه‌های مربوط به Arduino و BTS7960 را دوباره بررسی کنید.
  • پیاده‌سازی محدودیت جریان برای جلوگیری از آسیب به ماجیول.
  • از خازن‌های جداسازی در نزدیکی منبع تغذیه برای پایداری استفاده کنید.
BTS7960_ماجیول-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در IDE آردوینو، ابتدا فایل ZIP کتابخانه را از واصل ارائه شده دانلود کنید. پس از ذخیره فایل، IDE آردوینو خود را باز کرده و به آن مراجعه کنید.اسکچ > شامل کتابخانه > افزودن کتابخانه .ZIP.... در پنجره انتخاب فایل، به فایل ZIP دانلود شده بروید، آن را انتخاب کنید و روی "باز کردن" کلیک کنید. سپس IDE کتابخانه را نصب خواهد کرد. شما می‌توانید با بررسی، نصب موفقیت‌آمیز را تأیید کنید.پرونده > نمونه‌هامنویی که باید یک دسته جدید به نام "کتابخانه درایور موتور 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).

زمان‌بندی ویدئوها

  • ۰۰:۰۰ شروع
  • ۰۰:۴۸ توضیح سخت‌افزار
  • 04:06 دیتاشیت مشاهده شد
  • 07:07 توضیحات سیم‌کشی
  • ۹:۰۰ شِفر (کود) توضیح داده شده است
  • ۱۴:۳۳ نمایش
  • ۱۶:۴۷ حداکثر امتحان جریان
  • 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

فایل‌ها📁

کتابخانه‌های آردوینو (zip)

برگه مشخصات (pdf)

فایل فریزینگ