آردوینو, پروژه آردوینو

راه اندازی موتور DC با درایور L293D و آردوینو

آموزش کنترل و راه اندازی موتور DC با درایور L293D و آردوینو

کسانی که می‌خواهند رباتی بسازند که حرکت می‌کند، باید بدانند که چگونه می‌توان یک موتور DC را به آی‌سی مخصوص و آردوینو متصل کرد. واقعیت آن است که ارزان‌ترین و آسان‌ترین راه برای انجام این کار، استفاده از آی‌سی L293D می‌باشد. اینک در پروژه کنترل و راه اندازی موتور DC با درایور L293D و آردوینو، موضوع گفته شده را به صورت عملی توضیح می‌دهیم زیرا با این روش هم سرعت و هم مسیر حرکت ربات تنظیم خواهد شد.

دیگر مزیت این پروژه، امکان کنترل کردن یک استپر موتور تک‌قطبی مانند 28BYJ-48 یا یک استپر موتور دوقطبی مانند NEMA 17 خواهد بود. پس برای یادگیری این آموزش، با بهنام رباتیک همراه باشید.

فهرست مطالب

لوازم مورد نیاز برای پروژه راه اندازی موتور DC با درایور L293D و آردوینو

کنترل و راه اندازی موتور DC با درایور L293D و آردوینو

برای اینکه بتوانید موتور DC مدنظرتان را به طور تمام و کمال کنترل کنید، باید بتوانید سرعت و مسیر چرخش آن را تحت اشراف خود درآورید. امکان انجام این کار با یکی از دو روش زیر وجود دارد:

PWM؛ برای کنترل سرعت موتور

شما می‌توانید با تغییر ولتاژ ورودی یک موتور DC، سرعت آن را کم یا زیاد کنید. یکی از تکنیک‌های پرطرفدار و کاربردی برای انجام این کار، مدولاسیون پهنای پالس یا همان PWM است.

PWM تکنیکی به شمار می‌رود که در آن مقدار میانگین ولتاژ ورودی توسط ارسال پالس‌های روشن و خاموش تنظیم می‌شود. این ولتاژ میانگین برای عرض پالس‌ها که با عنوان چرخه وظیفه نیز شناخته شده، ناچیز می‌باشد.

در این میان، هر چه چرخه وظیفه بیشتر شود، ولتاژ میانگین وارد شده به موتور DC نیز افزایش می‌یابد و در نتیجه سرعت موتور هم بیشتر خواهد شد. در سمت دیگر، هر چه چرخه وظیفه کمتر گردد، ولتاژ میانگین ورودی موتور DC هم کمتر خواهد شد و سرعت آن افت می‌کند.

تصویر زیر تکنیک PWM را با چرخه‌های وظیفه متعدد و ولتاژ میانگین متعدد نشان می‌دهد.

چرخه وظیفه PWM
چرخه وظیفه PWM

H-Bridge؛ برای کنترل مسیر چرخش موتور

مسیر چرخش موتور را می‌توان با تغییر قطب واردکننده ولتاژ به موتور عوض کرد. یک تکنیک پرکاربرد برای انجام این کار، H-Bridge نام دارد.

یک مدار مجهز به H-Bridge چهار سوئیچ دارد که به شکل حرف انگلیسی H مرتب شده‌اند و موتور نیز در وسط آنها جای گرفته است.

بستن دو سوئیچ به صورت همزمان سبب می‌شود که قطب واردکننده ولتاژ به موتور تغییر کند و در نتیجه مسیر چرخش موتور عوض شود.

انیمیشن زیر نحوه کارکرد مدار H-Bridge را نشان می‌دهد.

نحوه کارکرد مدار h-bridge
نحوه کارکرد مدار h-bridge

آشنایی با آی‌سی L293D پیش از راه اندازی موتور DC با درایور L293D و آردوینو

L293D یک درایور موتور دو کاناله از نوع H-Bridge است که توانایی راه‌اندازی دو موتور DC یا یک استپر موتور را دارا می‌باشد. این یعنی L293D می‌تواند دو موتور را به صورت جداگانه کنترل کند تا بتوانیم این آی‌سی را یکی از بهترین گزینه‌ها برای ربات‌های دارای دو چرخ بدانیم.

در اکثر مواقع، از L293D برای درایو کردن موتورها استفاده می‌شود ولی می‌توان از آن برای کنترل هر نوع قطعه رسانا مانند رله سولونوئید یا یک ترانزیستور سوئیچینگ پاور نیز بهره برد.

آی‌سی درایور L293D می‌تواند چهار سولونوئید، چهار موتور DC تک مسیره، دو موتور DC دو مسیره و یا یک استپر موتور را کنترل کند.

این آی‌سی همچنین، با ولتاژ تغذیه 4.5 تا 36 ولت سازگار است و می‌تواند در اوج عملکرد، در هر کانال 1.2 آمپر جریان ارائه دهد بنابراین با اکثر موتورهایی که در بازار وجود دارد، سازگار است.

L293D یک دیود نگه‌دارنده داخلی دارد تا وقتی موتور بدرستی به آن وصل نشده، آسیبی به موتور وارد نکند.

آشنایی با مشخصات فنی L293D پیش از راه اندازی موتور DC با درایور L293D و آردوینو

ولتاژ خروجی موتور

4.5 تا 36 ولت

ولتاژ ورودی منطقی

5 ولت

جریان خروجی در هر کانال

600 میلی‌آمپر

حداکثر جریان خروجی در هر کانال

1.2 آمپر

 

آشنایی با پین‌های L293D قبل از راه اندازی موتور DC با درایور L293D و آردوینو

آی‌سی L293D مجموعاً 16 پین دارد که در ادامه به بررسی آنها می‌پردازیم:

پین‌های آی‌سی درایور L293D
پین‌های آی‌سی درایور L293D

آشنایی با پین‌های پاور پیش از شروع پروژه راه اندازی موتور DC با درایور L293D و آردوینو

این آی‌سی به طور کلی دو پین پاور دارد که عبارتند از:

  • VS (Vcc2): این پین قدرت لازم برای H-Bridge داخلی آی‌سی را فراهم می‌آورد تا موتورها کنترل شوند. شما می‌توانید ولتاژ 4.5 تا 36 ولت را به این پین وارد کنید.
  • VSS (Vcc1): این پین برای کنترل مدار منطقی داخلی که باید 5 ولت باشد، کاربردی خواهد بود.
  • GND: این همان پین اتصال به زمین است. تمامی چهار پین GND این آی‌سی از داخل به هم وصل شده‌اند و وظیفه خارج کردن گرمای ایجاد شده در شرایط سخت و شدید کاری را بر عهده دارند.
پین‌های پاور آی‌سی درایور L293D
پین‌های پاور آی‌سی درایور L293D

آشنایی با پین‌های خروجی قبل از شروع پروژه راه اندازی موتور DC با درایور L293D و آردوینو

کانال‌های خروجی L293D برای کنترل موتور اول در پین‌های Out1 و Out2 و برای کنترل موتور دوم در پین‌های Out3 و Out4 ارائه شده‌اند. شما می‌توانید ولتاژ 5 تا 36 ولت DC را به این پین‌ها وارد کنید.

هر کانال آی‌سی می‌تواند 600 میلی‌آمپر جریان را به موتور DC هدایت کند ولی مقدار جریان رسیده به موتور بستگی به منبع نیروی استفاده شده توسط شما خواهد داشت.

پین‌های خروجی آی‌سی درایور L293D
پین‌های خروجی آی‌سی درایور L293D

آشنایی با پین‌های کنترل مسیر پیش از شروع پروژه راه اندازی موتور DC با درایور L293D و آردوینو

با استفاده از پین‌های کنترل مسیر، می‌توانید مشخص کنید که موتور به سمت جلو برود یا عقب. در واقع این پین‌ها سوئیچ‌های مدار H-Bridge که درون L293D قرار گرفته‌اند را کنترل می‌کنند.

این آی‌سی به ازای هر کانال، دو پین کنترل مسیر دارد. پین‌های IN1 و IN2 مسیر چرخش موتور اول و پین‌های IN3 و IN4 مسیر چرخش موتور دوم را کنترل می‌کنند.

پین‌های کنترل مسیر آی‌سی درایور L293D
پین‌های کنترل مسیر آی‌سی درایور L293D

برای مشخص کردن نحوه چرخش موتور، می‌توانید ولتاژ 5 ولت HIGH و یا LOW را به پین‌های نامبرده اعمال کنید. جدول زیر نشان می‌دهد که این پین‌ها چه‌طور کار می‌کنند:

مسیر چرخش

پین IN2

پین IN1

موتور خاموش

Low(0)

Low(0)

حرکت به جلو

Low(0)

High(1)

حرکت به عقب

High(1)

Low(0)

موتور خاموش

High(1)

High(1)

آشنایی با پین‌های کنترل سرعت قبل از آغاز پروژه راه اندازی موتور DC با درایور L293D و آردوینو

پین‌های کنترل سرعت ENA و ENB برای روشن و خاموش کردن موتورها و کنترل سرعت آنها به کار می‌روند.

رساندن این پین‌ها به وضعیت HIGH سبب چرخش موتورها شده و رساندن وضعیت آنها به LOW سبب متوقف شدن موتورها می‌شود. ضمناً به خاطر وجود مدولاسیون پهنای پالس (PWM) می‌توان سرعت موتورها را کنترل کرد.

پین‌های کنترل سرعت آی‌سی درایور L293D
پین‌های کنترل سرعت آی‌سی درایور L293D

سیم‌کشی مدار پروژه راه اندازی موتور DC با درایور L293D و آردوینو

حالا که همه چیز را در مورد آی‌سی L293D می‌دانیم، باید شروع به وصل کردن آن به آردوینو بکنیم.

ابتدا منبع تغذیه را به موتورها وصل می‌کنیم. در این پروژه، از موتور اسباب‌بازی DC که با عنوان موتور TT نیز شناخته شده و در ربات‌های دارای دو چرخ دیده می‌شود، استفاده کرده‌ایم. این موتورها برای فعالیت به ولتاژ 3 تا 12 ولت نیاز دارند بنابراین ولتاژ 5 ولت را به پین Vcc2 آی‌سی L293D وصل می‌کنیم.

در مرحله بعد، باید ولتاژ 5 ولت منطقی را به مدار L293D بزنیم. برای انجام این کار، می‌بایست پین VSS یا Vcc1 آی‌سی را به پین خروجی 5 ولت آردوینو متصل کنیم.

اینک نوبت به اتصال ورودی آی‌سی و وصل کردن پین‌های ENA، IN1، IN2، IN3، IN4 و ENB آن به ترتیب به پین‌های دیجیتالی 9، 8، 7، 5، 4 و 3 آردوینو رسیده است. توجه داشته باشید که PWM در پین‌های خروجی 9 و 3 آردوینو به صورت پیش‌فرض فعال است.

در نهایت، سراغ وصل کردن یک موتور به پین‌های OUT1 و OUT2 و موتور دیگر به پین‌های OUT3 و OUT4 می‌رویم. شما می‌توانید اتصالات هر کدام از موتورها که می‌خواهید را تغییر دهید زیرا هیچ روش مطلقاً درست یا مطلقاً اشتباهی برای این کار وجود ندارد.

وقتی طبق توضیحات، سیم‌کشی مدار پروژه راه اندازی موتور DC با درایور L293D و آردوینو را انجام دادید، باید چیزی شبیه تصویر زیر در اختیار داشته باشید.

سیم‌کشی مدار راه اندازی موتور DC با درایور L293D و آردوینو
سیم‌کشی مدار راه اندازی موتور DC با درایور L293D و آردوینو

کد نمونه پروژه راه اندازی موتور DC با درایور L293D و آردوینو

کد زیر به شما نشان می‌دهد که چگونه سرعت و مسیر چرخش موتور DC را با آی‌سی L293D کنترل کنید. این چند خط کد می‌توانند نمونه مناسبی برای پروژه‌های مشابه شما باشند.

				
					// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;

void setup() {
	// Set all the motor control pins to outputs
	pinMode(enA, OUTPUT);
	pinMode(enB, OUTPUT);
	pinMode(in1, OUTPUT);
	pinMode(in2, OUTPUT);
	pinMode(in3, OUTPUT);
	pinMode(in4, OUTPUT);
	
	// Turn off motors - Initial state
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

void loop() {
	directionControl();
	delay(1000);
	speedControl();
	delay(1000);
}

// This function lets you control spinning direction of motors
void directionControl() {
	// Set motors to maximum speed
	// For PWM maximum possible values are 0 to 255
	analogWrite(enA, 255);
	analogWrite(enB, 255);

	// Turn on motor A & B
	digitalWrite(in1, HIGH);
	digitalWrite(in2, LOW);
	digitalWrite(in3, HIGH);
	digitalWrite(in4, LOW);
	delay(2000);
	
	// Now change motor directions
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	delay(2000);
	
	// Turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

// This function lets you control speed of the motors
void speedControl() {
	// Turn on motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	
	// Accelerate from zero to maximum speed
	for (int i = 0; i < 256; i++) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Decelerate from maximum speed to zero
	for (int i = 255; i >= 0; --i) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Now turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}
				
			

توضیح کد پروژه راه اندازی موتور DC با درایور L293D و آردوینو

کدهای نوشته شده در آردوینو ساده هستند و برای استفاده از آنها نیازی به کتابخانه نخواهد بود. این کدها با بیان اینکه کدام پین‌های آردوینو به کدام پین‌های آی‌سی L293D وصل شده، آغاز شده‌اند.

				
					// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;
				
			

در قسمت Setup، همه پین‌های کنترل موتور (اعم از پین‌های کنترل مسیر و پین‌های کنترل سرعت) عنوان خروجی دیجیتال را دریافت کرده‌اند. ضمن اینکه همه پین‌های کنترل مسیر نیز به وضعیت LOW درآمده‌اند تا موتورها خاموش شوند.

				
					void setup() {
	// Set all the motor control pins to outputs
	pinMode(enA, OUTPUT);
	pinMode(enB, OUTPUT);
	pinMode(in1, OUTPUT);
	pinMode(in2, OUTPUT);
	pinMode(in3, OUTPUT);
	pinMode(in4, OUTPUT);
	
	// Turn off motors - Initial state
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}
				
			

در قسمت Loop، دو تابع تعریف شده را با فاصله زمانی 1 ثانیه ایجاد کرده‌ایم.

				
					void loop() {
	directionControl();
	delay(1000);
	speedControl();
	delay(1000);
}
				
			

این تابع‌ها عبارتند از:

  • directionControl(): این تابع به موتورها فرمان می‌دهد تا با بیشترین سرعت ممکن به مدت 2 ثانیه به سمت جلو بروند. سپس به مدت 2 ثانیه مسیر حرکت موتور را برعکس می‌کند. در نهایت موتورها خاموش خواهند شد.
				
					void directionControl() {
	// Set motors to maximum speed
	// For PWM maximum possible values are 0 to 255
	analogWrite(enA, 255);
	analogWrite(enB, 255);

	// Turn on motor A & B
	digitalWrite(in1, HIGH);
	digitalWrite(in2, LOW);
	digitalWrite(in3, HIGH);
	digitalWrite(in4, LOW);
	delay(2000);
	
	// Now change motor directions
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	delay(2000);
	
	// Turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}
				
			
  • speedControl(): این تابع با تولید سیگنال PWM توسط تابع analogWire()، سرعت هر دو موتور را از 0 به حداکثر مقدار ممکن می‌رساند. سپس سرعت آنها را به 0 کاهش خواهد داد و در پایان موتورها را خاموش خواهد کرد.
				
					void speedControl() {
	// Turn on motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	
	// Accelerate from zero to maximum speed
	for (int i = 0; i < 256; i++) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Decelerate from maximum speed to zero
	for (int i = 255; i >= 0; --i) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Now turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}
				
			

2 دیدگاه در “راه اندازی موتور DC با درایور L293D و آردوینو

  1. احمد علی میش مست نهی گفت:

    سلام..
    خسته نباشید..من تازه، کار با آردینو رو شروع کردم‌و اولین تجربه خودم رو با دوعدد موتور dcطبق برنامه شما مدار رو بستم و تستش کردم..خوشبختانه همانگونه که گفته بودید و در تشریح برنامه ذکر کرده بودین مدار بدون هیچ مشکلی کار میکرد..ممنون و سپاس فراوان از زحمات شما..برای برنامه های کار بردی که مورد نیازم هست چگونه میتونم با شما در ارتباط باشم؟در مجموع ممنونم

    1. فروشگاه بهنام رباتیک گفت:

      سلام
      وقت بخیر
      خیلی خوشحالیم که تونستید با مقاله آموزشی ما یکی از اولین پروژه‌های آردوینو خودتون رو به انجام برسونید.
      شما میتونید برای اینکه با ما در ارتباط باشید، توی یکی از شبکه‌های اجتماعی واتس‌اپ، تلگرام و ایتا در ارتباط باشید.
      با تشکر از همراهی شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *