کنترل استپر موتور با ماژول درایور A4988 و آردوینو

اگر قصد دارید یک پرینتر 3 بعدی یا یک دستگاه CNC طراحی کنید، نیاز به کنترل تعدادی استپر موتور خواهید داشت. با استفاده از یک آردوینو می‌­توانید همه موتورها را کنترل کنید که البته پردازش زیادی را به خود اختصاص خواهند داد. در این­صورت هیچ کار دیگری غیر از کنترل موتورها نمی‌­توانید با آردوینو انجام دهید مگر اینکه از یک درایور استپر موتور اختصاصی مانند ماژول درایور A4988 استفاده کنید.

این درایور تنها با استفاده از 2 پایه می‌­تواند سرعت و جهت چرخش یک استپر موتور دو قطبی مانند استپر موتور NEMA 17 را کنترل کند. چقدر عالی!!!

آیا میدانید یک استپر موتور چگونه کار می­‌کند؟

استپر موتورها از یک چرخ دندانه‌دار و آهن‌رباهای مغناطیسی که در هر لحظه یک پله، چرخ را می‌چرخاند تشکیل شده است. هر پالس در وضعیت HIGH انرژی بوبین را تامین می‌کند و نزدیک‌ترین دندانه از چرخ دندانه‌دار را جذب می‌کند و موتور یک پله حرکت می‌کند.

 نحوه پالس دادن به بوبین به رفتار موتور بستگی دارد.

  • ترتیب پالس‌ها جهت چرخش موتور را تعیین می‌کند.
  • فرکانس پالس سرعت موتور را تعیین می‌کند.
  • تعداد پالس‌ها مشخص کند که موتور چقدر می‌چرخد.

تراشه درایور استپر موتور A4988

در قلب ماژول درایور A4988، یک تراشه میکرواستپ تحت عنوان A4988 قرار دارد. این تراشه بسیار کوچک (0.8×0.6 اینچ) ساخت شرکت Allegro می‌­باشد.

درایور استپر موتور A4988 با حداکثر ولتاژ خروجی 35 ولت امکان کنترل یک استپر موتور دو قطبی مانند NEMA17 را با حداکثر جریان خروجی 2 آمپر به ازای هر سیم­‌پیچ، برای شما فراهم می­‌کند.

این درایور دارای دو پایه‌­ی کنترلی است، یک پایه برای کنترل سرعت و دیگری برای کنترل جهت چرخش موتور. علاوه­‌براین، این درایور با 5 رزولوشن مختلف کار می­‌کند: یک پله یا گام کامل، یک دوم گام، یک چهارم گام، یک هشتم گام و یک شانزدهم گام.

پایه‌های ماژول درایور A4988

این ماژول برای ارتباط با دنیای بیرون 16 پایه دارد که در تصویر زیر نشان داده شده‌­است:

16 پایه‌ ماژول درایور A4988

پایه‌های تغذیه

پایه‌های GNDو VMOTو VCC، پایه‌های تغذیه ماژول درایور A4988 هستند

ماژول A4988 دو اتصال برای تغذیه نیاز دارد.

VDD & GND: این دو پایه برای تأمین تغذیه­‌ی مدار منطقی داخلی که 5.5-3 ولت است، استفاده می‌­شوند.

VMOT & GND: این دو پایه نیز برای تأمین تغذیه موتور به کار می­روند که می‌­توان آن­ها را به ولتاژ­های 35-8 ولت متصل نمود.

طبق دیتاشیت، لازم است یک خازن دی‌کوپلینگ با قابلیت تحمل 4 آمپر به پایه‌­های تغذیه متصل شود.

 هشدار

بر روی برد این ماژول یک خازن سرامیکی قرار دارد که تراشه‌­ی درایور را در برابر افزایش ولتاژ آسیب‌پذیر می‌سازد. گاهی این افزایش ولتاژ به بیش از 35 ولت (ماکزیمم ولتاژ نامی A4988) می‌رسد که سبب آسیب جدی به برد و حتی موتور خواهد شد.

یک راه برای محافظت از درایور در برابر افزایش ولتاژهای بیش از حد، افزودن یک خازن الکترولیتی 100 میکروفاراد (یا حداقل 47 میکروفاراد)  به دو سر پایه‌های تغذیه‌ی موتور است.

پایه‌های انتخاب میکرواستپ

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

برای مثال، با انتخاب درایور NEMA17 با زاویه‌ی چرخش 1.8 درجه که به ازای یک دور چرخش کامل 200 استپ (گام) را طی می‌کند، در مد یک چهارم گام به ازای یک دور چرخش کامل 800 میکرواستپ را طی می‌کند.

سه پایه‌ی انتخاب میکرو استپ

پایه‌های MS1, MS2 & MS3 در درایورA4988 ، سه پایه‌ی ورودی انتخاب سایز میکرواستپ هستند. با تنظیم سطح ولتاژ منطقی این سه پایه می‌توانید یکی از 5 رزولوشن زیر را برای موتور تنظیم کنید.

MS1MS2MS3Microstep Resolution
LowLowLowFull step
HighLowLowHalf step
LowHighLowQuarter step
HighHighLowEighth step
HighHighHighSixteenth step

سه پایه‌ی انتخاب میکرواستپ با مقاومت‌های داخلی Pull-down شده‌‍اند؛ بنابراین اگر آن‌ها را بدون اتصال باقی بگذارید، موتور در مد گام کامل عمل خواهد کرد.

پایه‌های کنترلی ورودی

این درایور دارای دو پایه کنترلی ورودی STEP و DIR است.

دو پایه کنترلی ورودی STEP و DIR

STEP: این پایه ورودی، میکرواستپ­‌های موتور را کنترل می­‌کند. به ازای هر پالس HIGH که به این پایه ارسال می‌شود، موتور را بر اساس تعداد میکرواستپ‌هایی که توسط پایه‌های انتخاب میکرواستپ تنظیم شده‌است، حرکت می‌دهد. ارسال هرچه سریع‌تر پالس‌ها، سبب چرخش سریع‌تر موتور خواهد شد

DIR: این پایه جهت چرخش موتور را کنترل می‌­کند. با اعمال ولتاژ HIGH به این پایه، موتور به صورت ساعت‌گرد و با اعمال ولتاژ LOW به این پایه، موتور به صورت پادساعت‌گرد خواهد چرخید.

اگر می‌خواهید موتور تنها در یک جهت بچرخد، کافی‌است این پایه را مستقیماً به VCC یا GND متصل کنید.

پایه‌های STEP ,DIR به‌طور داخلی به هیچ ولتاژ خاصی متصل نیستند، بنابراین نباید آن‌ها را آزاد رها کنید.

پایه‌های کنترل وضعیت توان

تراشه A4988 سه ورودی مختلف برای کنترل وضعیت توان دارد : EN, RST, SLP.

EN: این پایه‌ی ورودی، active low است؛ یعنی یا اعمال ولتاژ LOW به این پایه، درایور A4988 فعال می‌شود. به صورت پیش‌­فرض این پایه در وضعیت LOW قرار دارد؛ بنابراین درایور همیشه فعال است مگر آنکه آن‌ را در وضعیت HIGH قرار دهید.

SLP: این پایه‌ی ورودی، active low است؛ یعنی یا اعمال ولتاژ LOW به این پایه، درایور در مد Sleep قرار می‌گیرد و مصرف توان آن به حداقل می‌رسد. زمان‌هایی که موتور بلااستفاده است به منظور صرفه‌جویی در مصرف توان می‌توانید این پایه را به این‌ صورت مقداردهی کنید..

RST: این پایه‌ی ورودی،  active low است؛ یعنی یا اعمال ولتاژ LOW به این پایه، تمام ورودی‌های پایه‌ی STEP نادیده گرفته می‌شوند، تا زمانی که ولتاژ HIGH به این پایه اعمال شود. همچنین این پایه در وضعیت از پیش تعریف شده Home ، می‌تواند درایور را ریست کند. وضعیت Home وضعیت اولیه‌ای است که موتور شروع به‌کار می‌کند و با توجه به انتخاب میکرواستپ می‌تواند متفاوت باشد.

نکته
پایه RST در حالت عادی بدون اتصال است. اگر از این پایه استفاده نمی‌­کنید، می‌­توانید آن را به پایه SLP یا SLEEP وصل کنید تا وضعیت آن به HIGH تغییر کند و درایور فعال شود.

پایه‌های خروجی

درایور موتور A4988 دارای 4 پایه‌ی خروجی 1B, 1A, 2A , 2B می‌باشد

درایور موتور A4988 دارای 4 پایه‌ی خروجی 1B, 1A, 2A , 2B می‌باشد. شما می‌توانید هر استپر موتور دوقطبی با ولتاژ  35-8 ولت را به این پایه‌ها متصل نمایید. هر یک از پایه‌های خروجی قادر به تأمین جریان حداکثر 2 آمپر برای موتور هستند. با این وجود، مقدار جریان تأمین شده برای موتور، به منبع تغذیه‌ی سیستم، سیستم خنک‌کننده و تنظیمات محدودکننده‌ی جریان بستگی دارد.

سیستم خنک‌کننده-هیت­سینک درایور A4988

اتلاف توان بیش از حد آی‌سی درایورA4988 ، منجر به افزایش دما می‌شود و چنانچه از میزان دمای قابل تحمل آی‌سی فراتر رود، منجر به آسیب ‌دیدن آی‌سی خواهد شد.

اگرچه حداکثر جریان قابل تحمل آی‌سی درایور A4988 ، به ازای هر سیم‌­پیچ 2 آمپر است، اما این تراشه تنها می‌تواند 1 آمپر را بدون اینکه بیش از حد داغ شود، برای هر سیم‌­پیج تأمین کند. برای عبور جریان بیش از 1 آمپر به ازای هر سیم‌­پیچ، استفاده از یک هیت‌­سینک یا سایر روش­‌های خنک‌­سازی ضروری است.

هیت سینک ماژول درایور A4988

 معمولاً همراه با ماژول درایور A4988، یک هیت­‌سینک هم هست که توصیه می­شود قبل از استفاده از درایور آن را نصب کنید.

محدودکننده‌­ی جریان

پیش از استفاده از موتور، باید حداکثر جریان عبوری از سیم‌­پیچ‌­های استپر موتور محدود شود تا مانع از افزایش جریان بیش از حد موتور گردد.

محدود کننده جریان درایور A4988

پیش از استفاده از موتور، باید حداکثر جریان عبوری از سیم‌­پیچ‌­های استپر موتور محدود شود تا مانع از افزایش جریان بیش از حد موتور گردد.

روش اول

در این روش جریان محدود کننده، با اندازه‌گیری ولتاژ مرجع (Vref) از پایه “ref” انجام می­شود.

  1. دیتاشیت استپر موتور مورد نظر خود را مطالعه نموده و جریان قابل تحمل آن را یادداشت نمایید. برای مثال، جریان قابل تحمل استپر موتور NEMA 17 با 200 پله در هر دور چرخش، 350 میلی‌آمپر به ازای 12 ولت است.
  2. درایور را در مد گام کامل قرار دهید. بدین منظور باید سه پایه­‌ی انتخاب میکرواستپ را بدون اتصال باقی بگذارید.
  3. موتور را در وضعیت ثابتی قرار دهید. بدین منظور هیچ پالسی نباید به پایه­‌ی ورودی STEP اعمال شود.
  4. درحالی که پتانسیومتر را تنظیم می­‌کنید، ولتاژ آن (Vref) را اندازه‌گیری نمایید.
  5. جریان محدودکننده را از رابطه­‌ی زیر محاسبه کنید:

Current Limit = Vref x 2.5

برای مثال، چنانچه جریان قابل تحمل استپر موتور 350 میلی­‌آمپر باشد، باید ولتاژ مرجع را بر روی 0.14 ولت تنظیم نمایید.

محدود کردن جریان با استفاده از اندازه‌گیری ولتاژ مرجع

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

روش دوم

در این روش جریان محدود کننده با اندازه‌گیری جریان عبوری از سیم­‌پیچ انجام می­شود.

  1. دیتاشیت استپر موتور مورد نظر خود را مطالعه نموده و جریان نامی آن را یادداشت نمایید. برای مثال، جریان استپر موتور مورد استفاده ما، ۳۵۰ میلی آمپر است.
  2. درایور را در مد گام کامل قرار دهید. بدین منظور باید سه پایه­‌ی انتخاب میکرواستپ را بدون اتصال باقی بگذارید.
  3. موتور را در وضعیت ثابتی قرار دهید. بدین منظور هیچ پالسی نباید به پایه­‌ی ورودی STEP اعمال شود.
  4. یک آمپرمتر را با یکی از سیم‌­پیچ‌­های استپر موتور خود سری و جریان عبوری از آن­ را اندازه‌گیری کنید.
  5. با استفاده از یک پیچ­‌گوشتی، پتانسیومتر را چرخانده و جریان محدود کننده را بر روی مقدار جریان قابل تحمل استپر موتور تنظیم کنید.
محدود کردن جریان با استفاده از روش انداره‌گیری جریان سیم‌پیچ

هربار که ولتاژ منطقی (VDD) تغییر می­‌دهید، لازم است این مراحل مجدداً انجام شود.

نحوه اتصال ماژول درایور A4988 به آردوینو UNO

اکنون با داشتن اطلاعات کامل درباره این درایور، آن ­را به آردوینو متصل می­‌کنیم.

اتصالات به سادگی انجام میشود. پایه‌­های VDD و GND را به ترتیب به پایه‌­های 5 ولت و زمین آردوینو متصل کنید. سپس پایه‌های ورودی  DIRو  STEPرا به ترتیب به پایه‌های خروجی دیجیتال شماره 2 و 3 آردوینو متصل نمایید.  

در این مرحله، استپر موتور را به پایه‌های A1, A2, B1, B2 متصل کنید. معمولاً برد درایور A4988 با کانکتور 4 پایه موجود در چند موتور دو قطبی مطابقت دارد.

هشدار

اتصال و جدا کردن استپر موتور درحالی که درایور به تغذیه متصل است، به درایور آسیب می­رساند.

سپس پایه RST را به پایه SLP/SLEEP متصل نموده تا درایور فعال شود. پایه‌های انتخاب میکرواستپ را بدون اتصال باقی بگذارید تا موتور در مد گام کامل عمل کند.

در نهایت، پایه تغذیه موتور را به پایه­‌های VMOT و پایه زمین متصل کنید. به یاد داشته باشید که یک خازن الکترولیتی دی‌کوپلینگ 100 میکروفاراد نیز بین دو پایه­‌ی تغذیه­‌ی موتور قرار دهید.

نحوه‌ی اتصال درایور A4988 به آردوینو و استپ موتور

کد آردوینو- مثال مقدماتی

برنامه­‌ی زیر درک کاملی راجع به نحوه کنترل سرعت و جهت چرخش یک استپر موتور دو قطبی با استفاده از ماژول درایور A4988 به شما خواهد داد. که می‌­توانید از آن به عنوان برنامه‌­ی پایه در اکثر پروژه‌­ها و آزمایشات عملی استفاده نمایید.

// Define pin connections & motor's steps per revolution
const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

void setup()
{
	// Declare pins as Outputs
	pinMode(stepPin, OUTPUT);
	pinMode(dirPin, OUTPUT);
}
void loop()
{
	// Set motor direction clockwise
	digitalWrite(dirPin, HIGH);

	// Spin motor slowly
	for(int x = 0; x < stepsPerRevolution; x++)
	{
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(2000);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(2000);
	}
	delay(1000); // Wait a second
	
	// Set motor direction counterclockwise
	digitalWrite(dirPin, LOW);

	// Spin motor quickly
	for(int x = 0; x < stepsPerRevolution; x++)
	{
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(1000);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(1000);
	}
	delay(1000); // Wait a second
}

توضیحات کد

برنامه با معرفی پایه‌های آردوینو که به ترتیب به پایه‌های STEP و DIR ماژول درایور A4988 متصل شده­‌اند، آغاز می‌­شود.

سپس متغیر stepsPerRevolution تعریف و با توجه به مشخصات استپر موتور موردنظر مقداردهی می­‌گردد.

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

در تابع setup، تمام پایه‌های کنترلی موتور به عنوان یک خروجی دیجیتال تعریف می‌­شوند.

pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);

در تابع loop، چرخش موتور به آرامی و به صورت ساعت‌گرد انجام می­شود و سپس در طی مدت زمان یک ثانیه به سرعت جهت چرخش موتور تغییر و به صورت پادساعت‌گرد خواهد چرخید.

کنترل جهت چرخش: به منظور کنترل جهت چرخش یک موتور، پایه DIR را در وضعیت HIGH یا LOW قرار می­‌دهیم. ورودی HIGH موتور را به صورت ساعت‌گرد و ورودی LOW موتور را به صورت پادساعت‌گرد خواهد چرخاند.

digitalWrite(dirPin, HIGH);

کنترل سرعت: سرعت یک موتور با فرکانس پالس­‌های ارسالی به پایه STEP تعیین می­شود. پالس­‌های بیشتر موتور را با سرعت بیشتری می­چرخاند. پالس چیزی نیست جز HIGH کردن خروجی، انتظار به اندازه­‌ی یک بیت و سپسLOW کردن خروجی و انتظار مجدد به اندازه‌­ی یک بیت. با تغییر تأخیر بین دو پالس، فرکانس پالس‌­ها و در نتیجه سرعت موتور تغییر می­‌کند.

for(int x = 0; x < stepsPerRevolution; x++) {
	digitalWrite(stepPin, HIGH);
	delayMicroseconds(1000);
	digitalWrite(stepPin, LOW);
	delayMicroseconds(1000);
}

کد آردوینو- استفاده از کتابخانه AccelStepper

در کاربردهای ساده­‌ی تک موتوره، کنترل استپرموتور بدون استفاده از یک کتابخانه ساده است. اما برای کنترل چندین استپرموتور به یک کتابخانه نیاز خواهید داشت.

در مثال بعدی از یک کتابخانه استپرموتور پیشرفته تحت عنوان کتابخانه‌­ی AccelStepper استفاده می­‌کنیم. این کتابخانه موارد زیر را پشتیبانی می­‌کند.

  • افزایش و کاهش سرعت
  • مدیریت همزمان چندین استپر موتور

نصب کتابخانه

ابتدا برای نصب کتابخانه به مسیر Sketch > Include Library > Manage Libraries بروید. صبر کنید تا LibraryManager  لیست کتابخانه‌ها را دانلود کرده و لیست کتابخانه‌های نصب شده را آپدیت کند.

اپدیت کتابخانه‌های نصب شده از طریق LibraryManager

سپس جستجوی خود را با نوشتن عبارت ‘accelstepper’ فیلتر کنید. از بین چند گزینه‌ای که می‌بینید، اولی را نصب کنید.

نصب کتابخانه accelstepper

کد آردوینو

در این برنامه، ابتدا سرعت موتور در یک جهت افزایش یافته، سپس کاهش می‌­یابد و در حالت استراحت قرار می­گیرد. پس از یک دور چرخش کامل موتور، جهت چرخش تغییر می­‌کند. این امر چندین مرتبه تکرار می­شود.

// Include the AccelStepper Library
#include <AccelStepper.h>

// Define pin connections
const int dirPin = 2;
const int stepPin = 3;

// Define motor interface type
#define motorInterfaceType 1

// Creates an instance
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
	// set the maximum speed, acceleration factor,
	// initial speed and the target position
	myStepper.setMaxSpeed(1000);
	myStepper.setAcceleration(50);
	myStepper.setSpeed(200);
	myStepper.moveTo(200);
}

void loop() {
	// Change direction once the motor reaches target position
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	// Move the motor one step
	myStepper.run();
}

توضیحات کد

برنامه با افزودن کتابخانه‌­­ی نصب شده AccelStepper آغاز می­شود.

#include <AccelStepper.h>

پس از آن پایه‌های آردوینو که به ترتیب به پایه‌های STEP و DIR از ماژول درایور DRV8825 متصل شده‌‍اند، تعریف می­شوند. همچنین مقدار متغیر motorInterfaceType را 1 قرار می­دهیم (1به معنای یک درایور استپرموتور خارجی با پایه‌های STEP و DIR است).

// Define pin connections
const int dirPin = 2;
const int stepPin = 3;

// Define motor interface type
#define motorInterfaceType 1

سپس یک شیء از کتابخانه تحت عنوان myStepper می‌­سازیم.

AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

در تابع setup، ابتدا حداکثر سرعت موتور را بر روی 1000 تنظیم کرده و سپس یک ضریب سرعت برای موتور تعیین می­‌کنیم تا امکان افزایش و کاهش سرعت استپر موتور را فراهم سازیم.

سرعت معمولی موتور و تعداد پله‌هایی که می­خواهیم حرکت کند را بر روی 200 تنظیم می­‌کنیم (به خاطر اینکه استپر موتور NEMA 17 در یک دور کامل 200 پله را طی می­‌کند).

void setup() {
	myStepper.setMaxSpeed(1000);
	myStepper.setAcceleration(50);
	myStepper.setSpeed(200);
	myStepper.moveTo(200);
}

در تابع loop، از دستور if برای بررسی اینکه موتور باید چه مسافتی را طی کند ( با خواندن مقدار تابع distanceToGo ) تا به موقعیت هدف برسد (با استفاده از تابع moveTo )، استفاده می­‌کنیم. زمانی­‌که مقدار تابع distanceToGo به صفر برسد، با کمک تابع moveTo جهت چرخش موتور را تغییر می­‌دهیم.

در انتهای تابع loop، تابع ()run فراخوانی می­شود. این تابع مهم‌­ترین تابع است؛ زیرا بدون اجرای این تابع موتور حرکت نخواهد کرد.

void loop() {
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	myStepper.run();
}

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

مقالات مشابه

۲ دیدگاه. Leave new

  • درود به شما.
    جریان قابل تحمل استپر Nema17 واقعن ۳۵۰ میلی آمپر است؟!
    تمامی موتورهای Nema 17 به ازای هر فاز حداقل ۱۵۰۰ میلی آمپر تحمل جریان دارند.
    این ۳۵۰ میلی آمپر را از کجا آورده اید؟

    پاسخ
    • درود بر شما دوست عزیز
      متن مقاله ویرایش شده و در تیتر (روش دوم جهت محدود کننده ی جریان) می توانید این موضوع را مطالعه نمایید. از توجه شما بسیار سپاسگذاریم 🙂

      پاسخ

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

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات