آموزش اتصال موتور درایور L298n به آردوینو

تصمیم دارید ربات دوچرخ خودتان را بسازید؟ فوقالعاده است! در این مسیر، باید یاد بگیرید چطور موتورهایی را که باعث حرکت ربات میشوند، کنترل کنید. رایجترین نوع موتوری که استفاده میشود، موتور DC است. این موتورها ساده، قابل اعتماد و عالی برای پروژههای مبتدی هستند. برای کار کردن به سیگنالهای پیچیده نیاز ندارند. فقط کافی است به آنها ولتاژ بدهید تا شروع به چرخش کنند.
ساده به نظر میرسد، درست است؟ پس چرا موتور را مستقیماً به آردوینو وصل نکنیم؟ نکته اینجاست: موتورهای DC به جریان بسیار بیشتری نسبت به آنچه آردوینو میتواند تأمین کند نیاز دارند. اگر موتور را مستقیماً از پایههای آردوینو تغذیه کنید، ممکن است جریان بیشازحد باعث آسیب به برد شود.
اینجاست که ماژول درایور موتور L298N وارد عمل میشود. این ماژول مانند پلی بین آردوینو کمقدرت و موتورهای پرقدرت شما عمل میکند. شما تنها سیگنالهای کنترلی کوچکی از آردوینو ارسال میکنید و L298N جریان بالای مورد نیاز موتور را بهصورت ایمن مدیریت میکند. به این ترتیب، هم موتور توان کافی دریافت میکند و هم آردوینو در امان میماند.
در این آموزش، با نحوه اتصال درایور موتور L298N به آردوینو آشنا میشوید، یاد میگیرید چطور سرعت و جهت چرخش دو موتور DC را کنترل کنید و ربات خود را در مدت کوتاهی به حرکت درآورید.
درک مفاهیم پایه کنترل موتور
پیش از یادگیری نحوه کار درایور موتور L298N، باید با دو مفهوم کلیدی آشنا شوید:
- مدار H-Bridge – برای کنترل جهت چرخش موتور استفاده میشود.
- PWM یا مدولاسیون پهنای پالس – برای کنترل سرعت موتور DC کاربرد دارد.
کنترل جهت با مدار H-Bridge
موتورهای DC سادهترین نوع موتور برای استفاده هستند! اگر یک باتری را به موتور DC وصل کنید، در یک جهت میچرخد. اگر سیمهای مثبت و منفی را جابهجا کنید، جهت چرخش نیز برعکس میشود. اما نمیتوان هر بار برای تغییر جهت، سیمها را بهصورت فیزیکی عوض کرد. اینجاست که مدار H-Bridge به کمک میآید.
H-Bridge مداری خاص با چهار کلید الکترونیکی است که به شکل حرف H چیده شدهاند و موتور در مرکز آن قرار دارد.

با روشن و خاموش کردن این کلیدها به ترتیبی خاص، میتوان جهت جریان برق را از میان موتور تغییر داد. این ترفند هوشمندانه اجازه میدهد جهت چرخش موتور را بدون نیاز به جابهجایی سیمها کنترل کنید.
کنترل سرعت با PWM (مدولاسیون پهنای پالس)
وقتی به موتور DC یک ولتاژ ثابت بدهید، با سرعتی ثابت میچرخد. اگر بخواهید سرعت آن را تغییر دهید، باید ولتاژ را تنظیم کنید — ولتاژ بیشتر باعث افزایش سرعت و ولتاژ کمتر باعث کاهش سرعت میشود.
اما تغییر فیزیکی ولتاژ بهصورت مداوم چندان عملی نیست. اینجاست که PWM یا مدولاسیون پهنای پالس وارد عمل میشود.
PWM روشی هوشمندانه برای کنترل میانگین توان ارسالشده به موتور است. بهجای ارسال ولتاژ ثابت، در این روش ولتاژ بهصورت بسیار سریع در بازههای زمانی کوتاه روشن و خاموش میشود.
مدت زمان روشن بودن هر پالس، که به آن دوره وظیفه (Duty Cycle) گفته میشود، مشخص میکند چه مقدار از هر چرخه ولتاژ «روشن» است.
- اگر ولتاژ در بیشتر زمان چرخه روشن باشد (پالس پهنتر)، موتور توان بیشتری دریافت کرده و سریعتر میچرخد.
- اگر ولتاژ در بیشتر زمان خاموش باشد (پالس باریکتر)، موتور توان کمتری گرفته و کندتر میچرخد.
این روش، یکی از اصلیترین تکنیکهای کنترل دقیق سرعت در رباتها و پروژههای آردوینو است.

درایور موتور L298N
در مرکز ماژول، یک تراشه مشکی بزرگ با هیتسینک فلزی وجود دارد — همان L298N معروف.
این تراشه یک درایور دوپل کامل (Dual Full-Bridge Driver) با قابلیت تحمل ولتاژ و جریان بالا است که برای کنترل بارهای القایی مانند موتورهای DC، موتورهای پلهای (Stepper Motors)، رلهها و سلونوئیدها طراحی شده است. عملکرد آن مانند یک تقویتکننده جریان است؛ یعنی سیگنالهای کنترلی کمجریان از آردوینو را دریافت کرده و به سطح جریان و ولتاژ بالاتری که برای عملکرد موتور لازم است، تبدیل میکند.

در هسته خود، L298N شامل دو مدار H-Bridge مجزا است. همانطور که گفتیم، H-Bridge برای کنترل جهت چرخش موتور DC استفاده میشود. بنابراین، چون L298N دو پل دارد، میتواند دو موتور DC مجزا را بهطور همزمان کنترل کند. همچنین میتوان این دو پل را با هم ترکیب کرد تا یک موتور پلهای دوقطبی (Bipolar Stepper Motor) را کنترل کند.
توان و ولتاژ
در زمینه توان، L298N بسیار انعطافپذیر است. این تراشه میتواند با ولتاژهایی از 5 تا 46 ولت کار کند و تا 2 آمپر جریان پیوسته برای هر کانال ارائه دهد. این مقدار برای طیف وسیعی از موتورها — از مدلهای کوچک و تفریحی گرفته تا مدلهای قدرتمندتر — مناسب است.
حفاظت حرارتی (Thermal Protection)
تراشه L298N دارای سیستم محافظت حرارتی داخلی است. یعنی اگر تراشه بیش از حد گرم شود — مثلاً به دلیل مصرف زیاد جریان توسط موتور یا خنکنشدن مناسب — خروجیها بهصورت خودکار برای مدتی قطع میشوند تا از آسیب جلوگیری شود. پس از بازگشت دما به حد ایمن، تراشه دوباره بهصورت خودکار شروع به کار میکند.
مشخصات فنی L298N
- ولتاژ خروجی موتور: 5 تا 46 ولت
- ولتاژ ورودی منطق (Logic): 4.5 تا 7 ولت
- جریان پیوسته هر کانال: 2 آمپر
- توان اتلافی حداکثر: 25 وات
برای جزئیات بیشتر میتوانید به دیتاشیت رسمی L298N مراجعه کنید.
پین های ماژول L298N
ماژول درایور موتور L298N در مجموع 11 پین دارد. برای استفاده درست از آن، باید با عملکرد هر گروه از پینها آشنا شوید.

پین های تغذیه

دو پین اصلی برای ورودی تغذیه وجود دارد: VS و VSS.
- VS ورودی توان اصلی برای موتورهاست. معمولاً روی ماژول با برچسب +12V مشخص میشود، اما در واقع میتواند بازهای از 5 تا 46 ولت DC را پشتیبانی کند. نکته مهم این است که ولتاژی که موتور دریافت میکند کمی کمتر از مقدار ورودی است، زیرا ترانزیستورهای داخلی H-Bridge حدود 2 ولت افت ولتاژ ایجاد میکنند.
- VSS ورودی تغذیه برای مدارهای منطقی داخلی تراشه است که به 5 ولت ثابت نیاز دارد. این 5 ولت را میتوان به دو روش تأمین کرد:
- تغذیه مستقیم خارجی: اتصال یک منبع 5 ولت به پین VSS.
- استفاده از رگولاتور داخلی ماژول: این رگولاتور داخلی توان مورد نیاز را از ورودی موتور (VS) گرفته و به 5 ولت منطقی تبدیل میکند. در این حالت نیازی به اتصال دستی پین VSS نیست.
همچنین، پین GND زمین مشترک (Ground) ماژول است و باید بین آردوینو و منبع تغذیه موتور مشترک باشد تا مدار به درستی کار کند.
پین های خروجی موتور

این پینها برای اتصال مستقیم به موتورها استفاده میشوند:
- OUT1 و OUT2 برای موتور اول (Motor A)
- OUT3 و OUT4 برای موتور دوم (Motor B)
شما میتوانید هر موتور DC با ولتاژ کاری بین 5 تا 46 ولت را به این خروجیها متصل کنید.
پین های کنترل جهت

این پینها با روشن و خاموش کردن کلیدهای داخلی H-Bridge، جهت چرخش موتور را تعیین میکنند.
- IN1 و IN2 کنترلکننده جهت موتور A هستند.
- IN3 و IN4 کنترلکننده جهت موتور B.
با ترکیب منطقی حالتهای HIGH (1) و LOW (0) در این پینها، میتوانید جهت چرخش یا توقف موتورها را تعیین کنید:
| Input1 | Input2 | وضعیت چرخش موتور |
|---|---|---|
| Low (0) | Low (0) | موتور خاموش |
| High (1) | Low (0) | حرکت روبهجلو |
| Low (0) | High (1) | حرکت به عقب |
| High (1) | High (1) | موتور خاموش |
این تنظیمات پایه، اساس کنترل جهت موتورها در پروژههای رباتیک و آردوینو را تشکیل میدهند.
پین های کنترل سرعت

پینهای ENA و ENB مسئول کنترل سرعت چرخش موتورها هستند.
در حالت پایه، این پینها مانند کلیدهای سادهی روشن و خاموش عمل میکنند. وقتی یکی از آنها را در حالت HIGH قرار دهید، موتور مربوطه فعال میشود و با حداکثر سرعت میچرخد. در حالت LOW، موتور غیرفعال شده و کاملاً متوقف میشود.
اما قابلیت این پینها فراتر از یک کلید ساده است. با ارسال یک سیگنال PWM (Pulse Width Modulation) به پینهای ENA یا ENB، میتوانید سرعت هر موتور را بهصورت دقیق کنترل کنید.
در روش PWM، موتور بهصورت بسیار سریع و پیدرپی در هر ثانیه روشن و خاموش میشود. سرعت موتور بستگی دارد به اینکه در هر چرخه، موتور چه مدت در حالت روشن باقی بماند (که به آن دوره وظیفه یا Duty Cycle گفته میشود):
- اگر سیگنال در بیشتر زمان روشن باشد، موتور سریعتر میچرخد.
- اگر سیگنال فقط برای مدت کوتاهی روشن باشد، سرعت چرخش کاهش مییابد.
معمولاً ماژول L298N همراه با جامپرهایی روی پینهای ENA و ENB ارائه میشود که آنها را مستقیماً به 5 ولت متصل میکند. در این حالت، موتورها بهطور پیشفرض با حداکثر سرعت کار میکنند. اگر بخواهید سرعت را از طریق آردوینو کنترل کنید، باید این جامپرها را بردارید و پینهای ENA و ENB را به پایههای PWM آردوینو وصل کنید.
افت ولتاژ در تراشه L298N
هنگامی که یک ترانزیستور در حالت روشن یا اشباع (Saturation) قرار دارد، مقدار کمی از ولتاژ درون آن تلف میشود. درایور L298N از ترانزیستورهای پیوند دوقطبی (BJT) در مدار H-Bridge خود استفاده میکند، که به دلیل ساختارشان افت ولتاژ قابلتوجهی دارند.
طبق دیتاشیت، افت ولتاژ در L298N معمولاً بین 1.8 تا 3.2 ولت در جریان حدود 1 آمپر است و میتواند تا حدود 5 ولت در جریان 2 آمپر نیز برسد.

بهطور میانگین، میتوان افت ولتاژ 2 ولت را در استفادههای معمولی در نظر گرفت.
یعنی اگر شما 12 ولت به پین تغذیه موتور (VS) بدهید، موتور در عمل حدود 10 ولت دریافت میکند. به همین دلیل است که ممکن است موتورهای 12 ولتی شما با تغذیه دقیقاً 12 ولت از طریق L298N، با حداکثر سرعت خود نچرخند.

برای دستیابی به حداکثر سرعت، باید ولتاژی حدود 2 ولت بیشتر از مقدار مورد نیاز موتور تأمین کنید.
- برای موتور 5 ولتی، حدود 7 ولت تأمین کنید.
- برای موتور 12 ولتی، حدود 14 ولت لازم است تا موتور با سرعت واقعی خود کار کند.
رگولاتور داخلی 5 ولت و جامپر مربوطه
ماژول L298N دارای یک رگولاتور ولتاژ داخلی 78M05 است. وظیفه این رگولاتور تبدیل توان ورودی موتور (پین VS) به ولتاژ ثابت 5 ولت برای تغذیه مدار منطقی تراشه است. به این ترتیب، در حالت فعال بودن رگولاتور نیازی به تأمین جداگانه 5 ولت از طریق پین VSS نیست.
روی ماژول یک جامپر کوچک قرار دارد که فعال یا غیرفعال بودن این رگولاتور را مشخص میکند:

وقتی جامپر در جای خود باشد:
- رگولاتور 5 ولت فعال میشود.
- تراشه از ورودی موتور تغذیه میگیرد و پین VSS به خروجی 5 ولت تبدیل میشود.
- این خروجی میتواند تا 0.5 آمپر جریان تأمین کند — که معمولاً برای تغذیه آردوینو یا ماژولهای کوچک کافی است.

وقتی ولتاژ ورودی بیش از 12 ولت باشد:
- نباید از رگولاتور داخلی استفاده کنید.
- در این حالت باید جامپر را جدا کنید تا از آسیب دیدن رگولاتور جلوگیری شود.
در صورت برداشتن جامپر:
- رگولاتور داخلی غیرفعال میشود.
- پین VSS به ورودی اجباری تبدیل میشود، یعنی باید 5 ولت خارجی از منبعی دیگر (مثلاً از آردوینو) به آن متصل کنید تا مدار منطقی تراشه تغذیه شود.

این طراحی انعطافپذیر باعث میشود بتوانید L298N را هم با منابع تغذیه ولتاژ پایین و هم بالا بهصورت ایمن و کارآمد استفاده کنید.
اتصال ماژول درایور موتور L298N به آردوینو
اکنون که با نحوه عملکرد ماژول L298N آشنا شدیم، میتوانیم آن را به آردوینو متصل کنیم.
ابتدا منبع تغذیه موتورها را وصل میکنیم. در این آزمایش از موتورهای TT استفاده شده است که معمولاً در رباتهای دوچرخ کاربرد دارند. این موتورها بهطور معمول با ولتاژ بین 3 تا 6 ولت بهخوبی کار میکنند. از آنجا که ماژول L298N حدود 2 ولت افت ولتاژ دارد، یک منبع تغذیه خارجی 7 ولتی را به ترمینال VS متصل میکنیم تا موتورها ولتاژ ایدهآل 5 ولت را دریافت کنند.
در مرحله بعد باید توان 5 ولتی را برای مدار منطقی داخلی L298N تأمین کنیم. بهجای استفاده از منبع تغذیه جداگانه، از رگولاتور 5 ولتی داخلی ماژول استفاده میکنیم. برای این کار، جامپر مربوط به رگولاتور 5 ولتی را در جای خود نگه دارید تا ماژول، توان 5 ولت را از منبع تغذیه موتور دریافت کند.
حال نوبت به اتصال پایههای کنترلی میرسد. ماژول L298N دارای چهار پایه ورودی به نامهای IN1، IN2، IN3 و IN4 است که برای کنترل جهت چرخش موتورها استفاده میشوند. این پایهها را به خروجیهای دیجیتال 8، 7، 5 و 4 در آردوینو متصل میکنیم.
برای کنترل سرعت چرخش موتورها از PWM یا «مدولاسیون پهنای پالس» استفاده میکنیم. برای این منظور، جامپرهای کوچک روی ENA و ENB را برداشته و آنها را به پایههای 9 و 3 آردوینو (که قابلیت PWM دارند) متصل میکنیم.
مدار ماژول l298 و آردوینو
در نهایت، موتورها را به ترمینالهای خروجی ماژول L298N وصل کنید. موتور اول به ترمینال A (پایههای OUT1 و OUT2) و موتور دوم به ترمینال B (پایههای OUT3 و OUT4) متصل میشود. لازم نیست زیاد نگران ترتیب سیمهای موتور باشید؛ اگر جهت چرخش موتور اشتباه بود، کافی است سیمها را با هم جابهجا کنید. در این اتصالات هیچ جهت خاصی «درست» یا «غلط» محسوب نمیشود.
جدول زیر مرجع سریع اتصالات پایهها را نشان میدهد:
| ماژول L298N | آردوینو |
|---|---|
| GND | GND |
| ENA | 9 |
| IN1 | 8 |
| IN2 | 7 |
| IN3 | 5 |
| IN4 | 4 |
| ENB | 3 |
تصویر زیر دیاگرام کامل سیمکشی این راهاندازی را نشان میدهد.

نمونه کد آردوینو
در ادامه، یک نمونه کد ساده آردوینو آورده شده است که نحوه کنترل جهت و سرعت دو موتور DC را با استفاده از درایور L298N نشان میدهد. برای اجرای این کد نیازی به کتابخانه خاصی نیست و تنها از توابع داخلی محیط Arduino IDE استفاده میشود.
کد کامل در فایل دانلودی انتهای صفحه قرار گرفته است. در اینجا قسمت های مختلف کد را بررسی میکنیم.
این مثال راهی عالی برای یادگیری عملی کنترل سرعت و جهت موتورها با استفاده از L298N است. پس از درک این اصول، میتوانید سیستمهای پیچیدهتری مانند رباتهای ساده یا خودروهای کنترل از راه دور بسازید.
توضیح کد
در ابتدای کد، پایههایی که قرار است برای کنترل موتورها استفاده شوند، تعریف میشوند. برای موتور A یک پایه فعالسازی (Enable) در نظر گرفته شده است تا بتوان سرعت آن را با PWM کنترل کرد، و دو پایه برای تعیین جهت چرخش موتور در نظر گرفته شده است. به همین ترتیب، برای موتور B نیز یک پایه فعالسازی و دو پایه کنترل جهت تعریف شدهاند.
// اتصالات موتور A int enA = 9; int in1 = 8; int in2 = 7; // اتصالات موتور B int enB = 3; int in3 = 5; int in4 = 4;
در تابع setup()، هر شش پایه کنترلی موتور به عنوان خروجی تنظیم میشوند، زیرا آردوینو باید سیگنالها را به ماژول L298N ارسال کند. همچنین با قرار دادن همه پایههای کنترل جهت در حالت LOW، اطمینان حاصل میشود که موتورها هنگام روشن شدن آردوینو بهصورت ناگهانی شروع به چرخش نکنند.
void setup() {
// تنظیم همه پایههای کنترل موتور به عنوان خروجی
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// خاموش کردن موتورها در حالت اولیه
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
در تابع loop() دو تابع اصلی فراخوانی میشوند که بین آنها یک ثانیه تأخیر وجود دارد. تابع اول directionControl() جهت چرخش موتورها را کنترل میکند و تابع دوم speedControl() سرعت آنها را تنظیم میکند.
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
اکنون عملکرد هرکدام از این توابع را بهصورت جداگانه بررسی میکنیم.
تابع directionControl() برای نمایش نحوه کنترل جهت چرخش هر دو موتور به کار میرود. ابتدا هر دو موتور در بیشترین سرعت ممکن فعال میشوند (با تنظیم پایههای فعالسازی روی HIGH). سپس سیگنالهای لازم به پایههای کنترل جهت ارسال میشوند تا هر دو موتور در جهت مستقیم بچرخند. پس از دو ثانیه، جهت چرخش موتورها برعکس میشود تا دو ثانیه در جهت مخالف حرکت کنند. در پایان، با تنظیم تمام پایههای کنترل جهت روی LOW، هر دو موتور متوقف میشوند.
void directionControl() {
// تنظیم موتورها روی بیشترین سرعت
digitalWrite(enA, HIGH);
digitalWrite(enB, HIGH);
// فعالسازی موتور A و B در جهت مستقیم
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// تغییر جهت چرخش موتورها
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// خاموش کردن موتورها
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
تابع speedControl() برای کنترل سرعت موتورها با استفاده از PWM طراحی شده است. در ابتدا پایههای کنترل جهت طوری تنظیم میشوند که هر دو موتور در یک جهت بچرخند. سپس با افزایش تدریجی مقدار PWM از 0 تا 255، سرعت موتورها بهآرامی افزایش مییابد که شبیه به حالت شتابگیری است. پس از رسیدن به حداکثر سرعت، روند برعکس میشود و مقدار PWM از 255 به 0 کاهش مییابد تا موتورها بهتدریج کند و در نهایت متوقف شوند. در انتها، پایههای کنترل جهت برای خاموش کردن کامل موتورها روی LOW تنظیم میشوند.
void speedControl() {
// روشن کردن موتورها
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// افزایش تدریجی سرعت از صفر تا حداکثر
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// کاهش تدریجی سرعت از حداکثر تا صفر
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// خاموش کردن موتورها
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
این دو تابع با ترکیب یکدیگر نشان میدهند که چگونه میتوان با استفاده از ماژول L298N، هم جهت و هم سرعت موتورهای DC را کنترل کرد. این روش پایهایترین شیوه برای درک عملکرد PWM و کنترل موتورها در پروژههای رباتیک مبتنی بر آردوینو است و میتواند مبنایی برای ساخت سیستمهای پیشرفتهتر باشد.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود








سلام و عرض ادب
ببخشید چرا در تصویر enA به یک پایه دیجیتال متصل شده است اما در کد از analogWrite برای enA استفاده شده است ؟