راه اندازی ماژول درایور موتور L298N با آردوینو | در دنیای رباتیک و پروژههای الکترونیکی، کنترل موتورها یکی از اساسیترین بخشها است. ماژول درایور L298N به عنوان یک راه حل مقرون به صرفه و کارآمد، امکان کنترل دقیق و قابل اعتماد موتورهای DC و استپر (پلهای) موتور دو قطبی مانند NEMA17 را فراهم میکند. در این مقاله از آموزشگاه خانه رباتیک ایران به بررسی ویژگیها، کاربردها و نحوه استفاده از ماژول L298N میپردازیم و شما را با قدرت و انعطاف پذیری که این درایور در اختیار شما قرار میدهد، آشنا میکنیم. از کنترل سرعت با استفاده از تکنیک PWM گرفته تا تغییر جهت چرخش با مدار H-Bridge (پل H)، در ماژول L298N که میتواند پروژههای الکترونیکی شما را به سطح بعدی برساند. در ادامه با هم نگاهی دقیقتر به این ماژول درایور میاندازیم.
راه اندازی ماژول درایور موتور L298N با آردوینو
معرفی ماژول L298N:
ماژول درایور L298N یک درایور موتور دو کاناله است که برای راه اندازی موتورهای DC و استپر مورد استفاده قرار میگیرد. این ماژول از آی سی L298 استفاده میکند و قادر به کنترل دو موتور DC با جریان نامی تا ۲ آمپر در هر کانال است.
ویژگیهای کلیدی ماژول L298N عبارتند از:
- ماکزیمم ولتاژ عملیاتی آن برابر ۴۶ ولت DC است.
- ماکزیمم جریان خروجی آن برابر ۲ آمپر (۳ آمپر در پیک جریان) است.
- توان آن برابر ۲۵ وات است.
- سطح ولتاژ ورودیهای آن برابر ۵ ولت است.
- دمای کاری در این ماژول برابر -۲۵ تا ۱۳۰ درجه سلسیوس است.
ماژول L298N دارای یک رگولاتور ۵ ولت برای تامین ولتاژ منطقی و همچنین دیودهای حفاظتی و LED نشانگر اتصال تغذیه است. این ماژول به دلیل داشتن دو نصفه پل (H-Bridge)، امکان کنترل جهت چرخش و سرعت موتورها را فراهم میکند.
راه اندازی و کنترل موتور DC:
برای راه اندازی موتور DC باید توانایی کنترل سرعت و جهت چرخش موتور را داشته باشیم. برای کنترل آن ما از دو تکنیک PWM و H-Bridge با کمک ماژول درایور L298N استفاده میکنیم.
مدولاسیون پهنای پالس یا PWM: کنترل سرعت موتور
پل H یا H-Bridge: کنترل جهت دوران موتور
تکنیک PWM برای کنترل سرعت موتور DC :
مدولاسیون پهنای پالس (PWM) یک روش کارآمد برای کنترل سرعت موتورهای DC است که با تغییر ولتاژ ورودی میتوان این کار را انجام داد. این تکنیک با تغییر دادن پهنای پالسهای الکتریکی، ولتاژ متوسط اعمال شده به موتور را با تولید دنبالهای از پالسهای ON-OFF تنظیم میکند. در PWM، فرکانس پالس ثابت است ولی چرخه کاری یا Duty cycle (نسبت زمان روشن به کل دوره پالس) تغییر میکند. با افزایش چرخه کاری، موتور سریعتر میچرخد و با کاهش آن، سرعت کمتر میشود. این روش به ما اجازه میدهد تا با دقت بالا و بهره وری انرژی بهتر، سرعت موتور را کنترل کنیم.
در شکل زیر تکنیک PWM و ارتباط مقادیر مختلف چرخه کاری با مقدار متوسط ولتاژ ورودی به تصویر کشیده شده است:
تکنیک H-Bridge برای کنترل جهت دوران موتور DC:
تکنیک پل H یا H-Bridge، یک روش محبوب برای کنترل جهت چرخش موتورهای DC است که در ماژولهایی مانند L298N به کار میرود. این تکنیک از چهار سوئیچ برای تغییر جهت جریان الکتریکی عبوری از موتور با تغییر قطب ولتاژ ورودی آن را کنترل میکند. با فعال کردن جفتهای مختلف سوئیچها، میتوان جهت دوران موتور را به جلو یا عقب تغییر داد. این تکنیک به دلیل سادگی و اثر بخشی آن در کنترل موتورها، در بسیاری از پروژههای الکترونیکی و رباتیک استفاده میشود.
آشنایی دقیقتر با ماژول L298N:
آی سی درایور موتور L298N:
L298 بصورت یک قطعه الکترونیکی ( چیپ بزرگ مشکی رنگ ) متصل به یک هیت سینک نسبتا بزرگ در مرکز ماژول قرار دارد. این چیپ یک درایور موتور H-Bridge دوکاناله است که میتواند دو موتور DC را بصورت مستقل هدایت کند و به همین منظور گزینه مناسبی برای ساخت رباتهای دو چرخ است.
منبع تغذیه:
این ماژول به وسیله یک ترمینال ۳.۵ میلیمتری سه پین تغذیه میشود.
- ولتاژ منبع تغذیه موتور (Vs): برای تغذیه موتورها استفاده میشود و میتواند بین ۵ تا ۳۵ ولت DC باشد.
- ولتاژ منطقی (Vss): معمولا ۵ ولت است و برای تغذیه مدار منطقی درونی ماژول به کار میرود.
- زمین (GND): برای اتصال به زمین مدار استفاده میشود.
راه اندازی ماژول درایور موتور L298N با آردوینو
این ماژول در حقیقت دارای دو پین تغذیه ورودی VSS و VS است. پین VS ولتاژ الکتریکی مورد نیاز برای درایور موتور را به مدار پل H داده که بین ۵ تا ۳۵ ولت متغیر است و ولتاژ الکتریکی پین VSS برای تغذیه مدارهای منطقی است که از ۵ تا ۷ ولت تغییر میکند.
این ماژول همچنین شامل یک رگولاتور ۵ ولت ۷۸M05 است که یک تنظیم کننده ولتاژ خطی است و برای تبدیل ولتاژ ورودی به ۵ ولت خروجی ثابت است. این رگولاتور پین ۵ ولت ورودی را به یک خروجی ۵ ولتی با جریان ۰.۵ آمپری تبدیل میکند که از آن میتوان به عنوان منبع تغذیه آردوینو یا هر مداری که به تغذیه ۵ ولتی نیاز دارد استفاده کرد. این رگولاتور با استفاده از یک جامپر میتواند فعال یا غیر فعال شود. وقتی جامپر فعال است، رگولاتور ۵ ولت فعال میشود و منبع تغذیه منطقی از منبع تغذیه موتور تامین میشود.
هشدار: در صورتی که ولتاژ منبع تغذیه موتور کمتر از ۱۲ ولت باشد میتوانید جامپر را برای فعال سازی در جای خود قرار دهید در غیر این صورت منجر به خراب شدن رگولاتور ۵ ولت میشود. همچنین در هنگام قرار دادن جامپر در جای خود، دقت کنید که منبع تغذیه موتور و منبع تغذیه ۵ ولت جداگانه تامین نشوند.
افت ولتاژ ماژول L298N:
یکی از مشخصات مهم در استفاده از ماژول درایور L298N افت ولتاژ آن است که در حدود ۲ ولت است. این افت ولتاژ به دلیل افت ولتاژ ترانزیستورهای سوئیچینگ مدار پل H میباشد. بنابراین، اگر ولتاژ ورودی به ماژول ۱۲ ولت باشد، موتور DC ولتاژی در حدود ۱۰ ولت دریافت میکند که این قضیه به معنای این است که یک موتور DC 12 ولتی هیچ وقت با حداکثر سرعت خود نمیچرخد.
با در نظر گرفتن افت ولتاژ ۲ ولت، برای یک موتور DC 5ولتی باید ولتاژ تغذیه ۷ ولتی در ترمینال ورودی ماژول درایور تامین شود. به همین ترتیب برای یک موتور ۱۲ ولتی باید تغذیه ترمینال ورودی ۱۴ ولت در نظر گرفته شود.
ترمینالهای خروجی ماژول درایور:
کانالهای خروجی درایور موتور L298N برای دو موتور A و B با دو پین ۳.۵ میلیمتری به لبه ماژول درایور متصل شدهاند. به این دو ترمینال میتوانید دو موتور الکتریکی DC با ولتاژ کاری ۵ تا ۳۵ ولت وصل کرد که هر پین خروجی میتواند تا ۲ آمپر جریان برای موتور الکتریکی تامین کند. با این حال میزان جریان اعمالی، به منبع تغذیه سیستم بستگی دارد.
پینهای کنترل ماژول درایور موتور L298
برای هر یک از کانالهای ماژول L298N، دو نوع پین کنترلی وجود دارد که با استفاده از آنها بصورت هم زمان میتوان هم سرعت و هم جهت چرخش موتور DC را کنترل کرد:
- پینهای کنترل جهت دوران موتورهای DC
- پینهای کنترل سرعت موتورهای DC
پینهای کنترل جهت چرخش:
با استفاده از پینهای کنترل جهت چرخش، میتوانیم موتور را در دو جهت مستقیم و عقبگرد کنترل کرد. در حقیقت این پینها سوئیچهای مدار H-Bridge در آی سی L298 را کنترل میکنند. در این ماژول دو پایه برای کنترل جهت هر کانال وجود دارد. پینهای IN1 و IN2 جهت چرخش موتور A و پینهای IN3 و IN4 جهت چرخش موتور B را کنترل میکنند.
کنترل جهت چرخش از طریق اعمال منطق HIGH (5 ولت) و یا منطق LOW (0 ولت) طبق جدول زیر میباشد.
ورودی ۱ | ورودی ۲ | جهت چرخش موتور |
LOW (۰ ولت) | LOW (۰ ولت) | موتور خاموش |
HIGH (۵ ولت) | LOW (۰ ولت) | چرخش در جهت مستقیم |
LOW (۰ ولت) | HIGH (۵ ولت) | چرخش در جهت معکوس |
HIGH (۵ ولت) | HIGH (۵ ولت) | موتور خاموش |
پینهای کنترل سرعت درایور موتور:
دو پین کنترل سرعت یعنی ENA و ENB برای روشن و خاموش کردن موتورها و کنترل سرعت موتورهای A و B مورد استفاده قرار میگیرند. با اعمال منطق HIGH (5 ولت) موتورها به چرخش در میآیند و با اعمال منطق LOW (0 ولت) موتورها متوقف میشوند. سرعت و تعداد دور موتورها از طریق تکنیک PWM کنترل میشود.
معمولا ماژول درایور L298 بر روی پینهای کنترل سرعت جامپر دارد. وقتی جامپر در جای خود قرار دارد، موتور فعال است و با حداکثر سرعت خود میچرخد. چنانچه قصد داشته باشیم سرعت موتور را به وسیله برنامه کنترل کنید باید جامپرها را از روی ماژول برداشته و به پینهای PWM آردوینو متصل شود.
پینهای خروجی ماژول درایور موتور L298N:
پین VCC: این پین برای تامین ولتاژ مصرفی موتورها است و مقدار ولتاژ آن از ۵ ولت تا ۳۵ ولت است که به توصیه شرکت سازنده ولتاژی بین ۵ تا ۱۲ ولت کافی است.
توجه داشته باشید که اگر جامپر ۵ ولت در محل مورد نظر قرار داشته باشد، برای رسیدن به حداکثر سرعت موتور باید مقدار ولتاژ تغذیه ۲ ولت بیشتر از ولتاژ نامی موتور اعمال شود.
پین GND: پین زمین مشترک بین منبع تغذیه و برد کنترل کننده است.
پین ۵ volt: تامین کننده ولتاژ مورد نیاز مدارات منطقی سوئیچینگ داخلی آی سی L298 است. اگر جامپر ۵ ولت در جای خود قرار داشته باشد، این پین به عنوان یک پین خروجی عمل میکند و میتوان از آن برای تغذیه آردوینو استفاده کرد. اگر این جامپر در جای خود قرار نداشته باشد، باید این پین به پین ۵ ولت آردوینو وصل شود.
پین ENA: با متصل کردن این پین میتوان موتور A را کنترل کرد. با اعمال منطق HIGH به این پین موتور A شروع به کار کردن میکند که اینکار معادل نگه داشتن جامپر در سر جای خود است و با برداشتن جامپر موتور متوقف خواهد شد. با برداشتن جامپر و اتصال پین به ورودی PWM امکان کنترل سرعت موتور A فراهم خواهد شد.
راه اندازی ماژول درایور موتور L298N با آردوینو
پین ENB: با متصل کردن این پین میتوان موتور B را کنترل کرد. با اعمال منطق HIGH به این پین موتور B شروع به کار کردن میکند که اینکار معادل نگه داشتن جامپر در سر جای خود است و با برداشتن جامپر موتور متوقف خواهد شد. با برداشتن جامپر و اتصال پین به ورودی PWM امکان کنترل سرعت موتور B فراهم خواهد شد.
پینهای IN1 و IN2: برای کنترل جهت دوران موتور A استفاده میشوند. هنگامی که به یکی از این پینها منطق HIGH (5 ولت) و به پین دیگر منطق LOW (0 ولت) اعمال شود، شافت موتور در یک جهت شروع به دوران میکند. اگر به هر دو پین منطق HIGH یا LOW اعمال شود، موتور توقف خواهد کرد.
پینهای IN3 و IN4: برای کنترل جهت دوران موتور B استفاده میشوند. هنگامی که به یکی از این پینها منطق HIGH (5 ولت) و به پین دیگر منطق LOW (0 ولت) اعمال شود، شافت موتور در یک جهت شروع به دوران میکند. اگر به هر دو پین منطق HIGH یا LOW اعمال شود، موتور توقف خواهد کرد.
پینهای خروجی OUT1 و OUT2: به ورودی موتور A وصل میشوند.
پینهای خروجی OUT3 و OUT4: به ورودی موتور B وصل میشوند.
راه اندازی ماژول L298N با آردوینو UNO:
برای راه اندازی این ماژول درایور به وسایل زیر نیاز داریم:
- ماژول درایور موتور L298N
- موتور گیربکس ۱۲ ولت ۲۰۰ دور مدل ۲۵GA-370
- برد آردوینو UNO
- سیم جامپر نری به مادگی ۲۰ سانتی متری
ابتدا منبع تغذیه را به موتورهای DC متصل میکنیم. در این مدار ما از موتورهای DC گیربکسی (موتور TT) که معمولا در رباتهای دو چرخ بکار میروند، استفاده میکنیم. این موتورها ولتاژی بین ۳ تا ۱۲ ولت است. بنابراین یک منبع تغذیه خارجی ۱۲ ولت به پین VCC وصل میکنیم. با در نظر گرفتن افت ولتاژ داخلی ماژول، حداکثر ولتاژ دریافتی موتورها ۱۰ ولت است که سبب کاهش سرعت حداکثری دور موتورها میشود ؛ البته این موضوع قابل قبول است.
در قدم بعدی باید ۵ ولت را برای مدارات منطقی L298N تامین کنیم. به همین خاطر، از رگولاتور داخلی ۵ ولت استفاده میکنیم و آن را از منبع تغذیه موتور میگیریم؛ برای این کار جامپر EN را سر جای خود نگه میداریم.
پینهای ورودی و فعال ساز ماژول یعنی پینهای ENA و IN1 و IN2 و IN3 و IN4 و ENB را به ۶ پایه از خروجی دیجیتال آردوینو ( پایه های ۳ و ۴ و ۵ و ۷ و ۸ و ۹) متصل کنید. توجه کنید که پایههای خروجی ۳ و ۹ آردوینو، هر دوی آنها PWM هستند.
در آخر، یک موتور را به ترمینال A (OUT1 و OUT2) و موتور دیگر به ترمینال B (OUT3 و OUT4) را وصل کنید.
در نهایت با انجام مراحل بالا و اتمام کار، چیزی شبیه شکل زیر خواهید داشت:
کد نویسی آردوینو برای کنترل موتور DC با ماژول درایور:
در ادامه مثالی از طریقه کنترل سرعت و جهت چرخش موتور DC با کد نویسی آردوینو را خواهیم داشت:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ ۷۴ ۷۵ ۷۶ ۷۷ ۷۸ ۷۹ ۸۰ |
// Motor A connections int enA = ۹; int in1 = ۸; int in2 = ۷; // Motor B connections int enB = ۳; int in3 = ۵; int in4 = ۴; 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(۱۰۰۰); speedControl(); delay(۱۰۰۰); } // 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, ۲۵۵); analogWrite(enB, ۲۵۵); // Turn on motor A & B digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(۲۰۰۰); // Now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(۲۰۰۰); // 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 // Decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(۲۰); } // Now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } |
کد آردوینو بالا بسیار ساده است و نیاز به هیچ کتابخانهای ندارد.
ابتدا مشخص میکنیم که پینهای ماژول درایور به کدام یک از پینهای آردوینو متصل است:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ |
// Motor A connections int enA = ۹; int in1 = ۸; int in2 = ۷; // Motor B connections int enB = ۳; int in3 = ۵; int in4 = ۴; |
قسمت تنظیم کد یا همان void setup، همهی پینهای کنترلی موتور به عنوان خروجی دیجیتال (OUTPUT) تعریف میشوند و مقدار اولیه آنها بصورت 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); } |
در ادامه دو تابعی که توسط کاربر تعریف شده را در یک حلقه نرم افزاری با فاصله زمانی یک ثانیه فراخوانی میکنیم.
۱ ۲ ۳ ۴ ۵ ۶ ۷ |
void loop() { directionControl(); delay(۱۰۰۰); speedControl(); delay(۱۰۰۰); } |
توابع تعریف شده به صورت زیر است:
()directionControl: این تابع هر دو موتور به مدت دو ثانیه در جهت مستقیم به حرکت در میآورد، سپس به مدت دو ثانیه در جهت معکوس به چرخش در میآورد و در نهایت هر دو موتور را خاموش میشوند.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ |
void directionControl() { // Set motors to maximum speed // For PWM maximum possible values are 0 to 255 analogWrite(enA, ۲۵۵); analogWrite(enB, ۲۵۵); // Turn on motor A & B digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(۲۰۰۰); // Now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(۲۰۰۰); // Turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } |
()speedControl: این تابع با تولید سیگنال PWM توسط تابع analogWrite() سرعت چرخش موتور را از صفر تا حداکثر افزایش میدهد و مجددا سرعت موتورها را از حداکثر به صفر میرساند و موتورها خاموش میشوند.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ |
void speedControl() { // Turn on motors digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Accelerate from zero to maximum speed // Decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(۲۰); } // Now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } |
اکنون شما با توجه به اطلاعاتی که در این مقاله کسب کردهاید میتوانید به راحتی ماژول خود را راه اندازی کنید.
شعبه بابل: پل کارگر به سمت کشوری، روبروی ماکروویو، جنب فروشگاه جانبو
شعبه ساری: خیابان مهدیه، نبش بهمن شرقی