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

برای اتصال ماجیول 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 امتحان شِفر (کود) مختلف
++
/*
* 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
منابع و مراجع
-
خارجیBTS7960 اَمه زون ژاپنamzn.to
-
خارجیBTS7960 در اَمه زون اسپانیاamzn.to
-
خارجیBTS7960 در اَمه زون ایتالیاamzn.to
-
خارجیBTS7960 در اَمه زون فرانسهamzn.to
-
خارجی
-
خارجی
-
خارجیBTS7960، اَمه زون آلمانamzn.to
-
خارجیبرگه داده ماجیول BTS7960 (PDF)handsontec.com
-
خارجیخرید BTS7960، اَمه زون بریتانیاamzn.to
فایلها📁
کتابخانههای آردوینو (zip)
-
robojax_BTS7960_کتابخانه_درایور_موتور
robojax_BTS7960_motor_driver_library.zip0.10 MB
برگه مشخصات (pdf)
-
BTS7960_datasheet
BTS7960_datasheet.pdf0.45 MB
فایل فریزینگ
-
BTS7960_راننده
BTS7960_driver.fzpz0.01 MB