آموزش راه اندازی ماژول L298 برای افرادی که نیاز به راه اندازی موتورهای الکتریکی رله و قطعات با مصرف بالا نیاز دارند مناسب است. این قطعه الکترونیکی که به صورت ماژول آماده استفاده است کارایی بالایی در راه اندازی انواع موتور دارد. آموزش راه اندازی ماژول L298 شامل شناخت ماژول کارایی و محدودیت سخت افزاری شرایط استفاده و شناخت پینهای ورودی و خروجی میباشد.
ماژول L298 درایور ( L298N DC Motor Driver Module ) چیست؟
قطعه الکترونیکی L298N در دنیای الکترونیک به عنوان درایور یا ران کننده شناخته میشود. درایور یا ران کننده ابزاری الکترونیکی برای کنترل جریان و ولتاژ جهت را اندازی یک مصرف کننده پر مصرف است. این قطعه الکترونیکی با دریافت فرمان از پردازنده اقدام به روشن کردن مصرف کننده میکند.از این قطعه بیشتر برای راه اندازی موتور DC استفاده میگردد. L298N دارای دو ویژگی برجسته است.
- راه اندازی دو موتور DC جداگانه
- توانایی تغییر جهت راست گرد و چپ گرد هر دو موتور به صورت جداگانه
- توانایی کنترل سرعت موتور ها
راه اندازی موتور DC با ماژول درایور L298N
هنگام راه اندازی یک موتور الکتریکی DC اگر توان کنترل دور موتور و سرعت آن را داشته باشیم میتوانیم بگوییم که به صورت کامل موتور را راهاندازی نمودهایم. برای این منظور باید از دو روش زیر استفاده نماییم.
- سیگنال PWM
- پل H برای کنترل چپ گرد راست گرد کردن موتور
کنترل PWM برای کنترل سرعت موتور DC
جهت افزایش و کاهش دور RPM موتور باید میزان ولتاژ ورودی موتور را افزایش و کاهش دهیم. به این صورت با افزایش ولتاژ ورودی دور و چرخش موتور در دقیقه افزایش پیدا میکند. هنگامی که ولتاژ ورودی کاهش یابد دور بر دقیقه چرخش موتور نیز کاهش مییابد.
برای این منظور از تکنیک سیگنال PWM استفاده مینماییم. سیگنال PWM به این صورت است که تعداد بسیار زیادی از مقادیر یک و صفر منطقی ( 0 – 5 Vdc ) در واحد زمان ارسال میشود. ولتاژ خروجی با تکنیک PWM قابل افزایش و کاهش است . این افزایش و کاهش ولتاژ که به پهنای باند سیگنال ارسالی در واحد زمان بستگی دارد را چرخهی کار یا ( Duty Cycle ) میگویند.
هر چقدر چرخه کار سیگنال PWM بیشتر باشد ولتاژ خروجی نیز متناسب با سیگنال بیشتر میشود. در نتیجه سرعت موتورنیز افزایش پیدا میکند. تصویر زیر چرخه افزایش ولتاژ خروجی با تغیر چرخهی کار ( Duty Cycle ) را نمایش میدهد.
پل H برای کنترل جهت چرخش موتور
تنها راه چرخش جهت حرکت یک موتور الکتریکی DC تغییر پلاریته یا ورودیهای مثبت و منفی دو سر مصرف کننده آن است. علت این نام گذاری در شکل قرار گیری منابع تغذیه موتور و موتور در مرکز این مدار میباشد.
هر بار که یکی از پلهای دو طرف به صورت ضرب دری بسته میشوند. جهت ورودی ها تغییر پیدا میکند.
ماژول درایور L298N
در مرکز ماژول درایور یک قطعه الکترونیکی همراه با هیت سینک وجود دارد که درایور L298N میباشد.
درایور L298N قابلیت راه اندازی همزمان دو موتور را با تکنیک پل H دارا میباشد. که این ماژول را گزینهای مناسب برای پروژههای رباتیک میکند. زیرا با استفاده از این ماژول ره راحتی میتوان ربات را کنترل نمود. این ماژول که دارای رگولاتور داخلی است با ولتاژی بین 4 تا 35 ولت کار میکند همچنین به ازای هر کانال قابلیت مصرف 2 آمپر را میدهد. بیشتر موتورهای DC با این ولتاژ و آمپر قابل راه اندازی هستند.
- ولتاژ خروجی برای مصرف کننده: 5 الی 35 ولت DC
- ولتاژ توصیه شده توسط شرکت سازنده: 5 الی 12 ولت DC
- ولتاژ مصرفی درایور : 5 الی 7 ولت DC
- جریان قابل تحمل به ازای هر خروجی: 2 آمپر
- توان ماکزیموم درایور : 25 وات
معرفی پینهای خروجی ماژول درایور L298N
درایور L298 در مجموع 11 پین ورودی و خروجی دارد که در ادامه به معرفی هرکدام میپردازیم.
VCC این پین ولتاژ مصرفی موتورها را تامین میکند و ولتاژی بین 5 تا 35 ولت را میتوان به آن وصل نمود البته به توصیه شرکت سازنده ولتاژ بین 5-12 ولت کافی است.
GND منفی یا زمین است که به صورت مشترک بین منبع تغذیه و برد کنترل کننده متصل میشود.
5V ولتاژ مصرفی درایور است و باید به منبع تغذیه 5 ولت دیسی متصل گردد.
ENA با متصل کردن این پایه به ولتاژ 5 ولت یا یک منطقی یکی از دو بخش قابل کنترل درایور فعال میشود.
IN1 & IN2 این دو پین وظیفه کنترل پل H را دارند که مربوط به دو خروجی 1 و 2 میباشند.
IN3 & IN4 این دو نیز وظیفه کنترل پل H را دارند که مربوط به به دو خروجی 3 و 4 هستند.
ENB با متصل کردن این پایه به ولتاژ 5 ولت یا یک منطقی یکی از دو بخش قابل کنترل درایور فعال میشود.
OUT1 & OUT2 به ورودیهای موتور A متصل میگردد.
OUT3 & OUT4 به ورودیهای موتور B متصل میگردد.
کنترل روشن و خاموش کردن جهت چرخش و RPM موتور
برای سه هردف روشن کردن تغیر جهت چرخش موتور و افزایش و کاهش سرعت چرخش به اطلاعات زیر نیاز داریم.
یک موتور DC برای روشن شدن و چرخیدن در هر طرف نیاز به یک ولتاژ مثبت و اتصال به زمین دارد برای این منظر از پینهای IN1 & IN2 & IN4 & IN3 استفاده مینماییم.
لازم است به این نکته توجه کنید که IN1 & IN2 خروجی OUT1 & OUT2 را کنترل مینمایند که جدول کنترل به شرح زیر میباشد.
IN1 IN2 OUT1 OUT2
LOW(0) LOW(0) LOW(0) LOW(0)
HIGH(1) LOW(0) HIGH(1) LOW(0)
LOW(0) HIGH(1) LOW(0) HIGH(1)
HIGH(1) HIGH(1) HIGH(1) HIGH(1)
در جدول بالا خط اول در صورتی که IN1 صفر باشد OUT1 نیز صفر خواهد بود. در نتیجه با تغییر پلاریته خروجیهای OUT1 & OUT2 در خط دوم میبینیم که میتوان جهت موتورها را تغییر داد.
برای کنترل افزایش و کاهش دور موتور لازم است که از امواج PWM استفاده شود. اگر به پین ENA & ENB سیگنال PWM ارسال شود میتوانیم خروجی OUT1 & OUT2 & OUT3 & OUT4 را کنترل نماییم. باید توجه داشت که ENA خروجی OUT1 & OUT2 را همزمان افزایش و کاهش میدهد این مورد برای ENB و OUT3 & OUT4 نیز صادق است. در صورتی که نخواهیم از سیگنال PWM استفاده نماییم و هدف روشن و خاموش کردن با حداکثر جریان باشد در کنار پینهای ENA & ENB دو عدد جامپر وجود دارد که آنها را به یک منطقی متصل میکند با این کار هر مقداری که به عنوان منبع تغذیه در بخش VCC وارد مدار شده باشد با تحریک ورودیهای کنترل کننده IN 1 – 4 در خروجی OUT 1 – 4 با کمی کاهش قابل دریافت است.
میزان افت ولتاژ در ماژول درایور L298N
میزان افت ولتاژ در ماژول درایور L298N مقدار 2 ولت است. ترانزیستورهای سوئیچینگ داخلی L298N در هنگام فعال شدن افت ولتاژ تقریباً 1 ولت دارند و از آنجایی که یک پل H نیاز به عبور جریان از دو ترانزیستور دارد، کل افت ولتاژ 2 ولت است.بنابراین، اگر 12 ولت را به سوکت تغذیه موتور وصل کنید، موتورها تقریباً 10 ولت دریافت خواهند کرد.
با در نظر گرفتن افت 2 ولت، اگر از موتورهای 5 ولت استفاده می کنید، باید 7 ولت را در برای سوکت تغذیه فراهم کنید و اگر موتورهای 12 ولت دارید، ولتاژ تغذیه موتور شما باید 14 ولت باشد.
از هیت سینک مناسب استفاده کنید
این افت ولتاژ منجر به هدر رفتن توان زیادی به شکل گرما می شود. به همین دلیل برای اینکه درایورهای موتور L298N به شکل صحیح کار کند و دیرتر خراب شود از یک هیت سینک بزرگ برای خنک سازی این درایور استفاده کنید
راهاندازی ماژول درایور L298N با آردوینو
جهت راه اندازی ماژول L298N اتصالات را مشابه شماتیک زیر به آردوینو متصل نمایید.
VCC را به مثبت 12 ولت منبع تغذیهای که میخواهید ولتاژ و جریان موتورها را تامین کند متصل کنید. ( اخطار از منبع تغذیه بیشتر از 2 آمپر استفاده نکنید. )
GND را منفی یا زمین منبع تغذیه و یکی از GND های برد آردوینو متصل کنید. ( اخطار : در صورتی که دو برد مجزا یک منفی مشترک نداشته باشند ارتباط برقرار نخواد شد. )
OUT1 & PUT2 را که خروجی ماژول هستند به مصرف کننده یا موتور شماره یک متصل نمایید.
ENA را به پایه دیجیتال شماره 9 آردوینو متصل کنید. ( PWM )
IN1 را به پایه دیجیتال شماره 8 آردوینو متصل کنید.
IN2 را به پایه دیجیتال شماره 7 آردوینو متصل کنید.
IN3 را به پایه دیجیتال شماره 5 آردوینو متصل کنید.
IN4 را به پایه دیجیتال شماره 4 آردوینو متصل کنید.
ENB را به پایه دیجیتال شماره 3 آردوینو متصل کنید. ( PWM )
OUT3 & OUT4 را که خروجی ماژول هستند به مصرف کننده یا موتور شماره دو متصل نمایید.
نمونه کد آردوینو جهت راه اندازی ماژول درایور موتور L298N
پس از اجرای اتصالات مشابه تصویر بالا برد آردوینو را به کامپیوتر متصل کرده و کدهای زیر را روی برد آپلود نمایید.
// 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);
}