اگر قصد دارید یک پرینتر 3 بعدی یا یک دستگاه CNC طراحی کنید، نیاز به کنترل تعدادی استپر موتور خواهید داشت. با استفاده از یک آردوینو میتوانید همه موتورها را کنترل کنید که البته پردازش زیادی را به خود اختصاص خواهند داد. در اینصورت هیچ کار دیگری غیر از کنترل موتورها نمیتوانید با آردوینو انجام دهید مگر اینکه از یک درایور استپر موتور اختصاصی مانند ماژول درایور A4988 استفاده کنید.
این درایور تنها با استفاده از 2 پایه میتواند سرعت و جهت چرخش یک استپر موتور دو قطبی مانند استپر موتور NEMA 17 را کنترل کند. چقدر عالی!!!
آیا میدانید یک استپر موتور چگونه کار میکند؟
استپر موتورها از یک چرخ دندانهدار و آهنرباهای مغناطیسی که در هر لحظه یک پله، چرخ را میچرخاند تشکیل شده است. هر پالس در وضعیت HIGH انرژی بوبین را تامین میکند و نزدیکترین دندانه از چرخ دندانهدار را جذب میکند و موتور یک پله حرکت میکند.
نحوه پالس دادن به بوبین به رفتار موتور بستگی دارد.
- ترتیب پالسها جهت چرخش موتور را تعیین میکند.
- فرکانس پالس سرعت موتور را تعیین میکند.
- تعداد پالسها مشخص کند که موتور چقدر میچرخد.
تراشه درایور استپر موتور A4988
در قلب ماژول درایور A4988، یک تراشه میکرواستپ تحت عنوان A4988 قرار دارد. این تراشه بسیار کوچک (0.8×0.6 اینچ) ساخت شرکت Allegro میباشد.
درایور استپر موتور A4988 با حداکثر ولتاژ خروجی 35 ولت امکان کنترل یک استپر موتور دو قطبی مانند NEMA17 را با حداکثر جریان خروجی 2 آمپر به ازای هر سیمپیچ، برای شما فراهم میکند.
این درایور دارای دو پایهی کنترلی است، یک پایه برای کنترل سرعت و دیگری برای کنترل جهت چرخش موتور. علاوهبراین، این درایور با 5 رزولوشن مختلف کار میکند: یک پله یا گام کامل، یک دوم گام، یک چهارم گام، یک هشتم گام و یک شانزدهم گام.
پایههای ماژول درایور A4988
این ماژول برای ارتباط با دنیای بیرون 16 پایه دارد که در تصویر زیر نشان داده شدهاست:
پایههای تغذیه
ماژول 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 رزولوشن زیر را برای موتور تنظیم کنید.
MS1 | MS2 | MS3 | Microstep Resolution |
Low | Low | Low | Full step |
High | Low | Low | Half step |
Low | High | Low | Quarter step |
High | High | Low | Eighth step |
High | High | High | Sixteenth step |
سه پایهی انتخاب میکرواستپ با مقاومتهای داخلی Pull-down شدهاند؛ بنابراین اگر آنها را بدون اتصال باقی بگذارید، موتور در مد گام کامل عمل خواهد کرد.
پایههای کنترلی ورودی
این درایور دارای دو پایه کنترلی ورودی 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 میباشد. شما میتوانید هر استپر موتور دوقطبی با ولتاژ 35-8 ولت را به این پایهها متصل نمایید. هر یک از پایههای خروجی قادر به تأمین جریان حداکثر 2 آمپر برای موتور هستند. با این وجود، مقدار جریان تأمین شده برای موتور، به منبع تغذیهی سیستم، سیستم خنککننده و تنظیمات محدودکنندهی جریان بستگی دارد.
سیستم خنککننده-هیتسینک درایور A4988
اتلاف توان بیش از حد آیسی درایورA4988 ، منجر به افزایش دما میشود و چنانچه از میزان دمای قابل تحمل آیسی فراتر رود، منجر به آسیب دیدن آیسی خواهد شد.
اگرچه حداکثر جریان قابل تحمل آیسی درایور A4988 ، به ازای هر سیمپیچ 2 آمپر است، اما این تراشه تنها میتواند 1 آمپر را بدون اینکه بیش از حد داغ شود، برای هر سیمپیج تأمین کند. برای عبور جریان بیش از 1 آمپر به ازای هر سیمپیچ، استفاده از یک هیتسینک یا سایر روشهای خنکسازی ضروری است.
معمولاً همراه با ماژول درایور A4988، یک هیتسینک هم هست که توصیه میشود قبل از استفاده از درایور آن را نصب کنید.
محدودکنندهی جریان
پیش از استفاده از موتور، باید حداکثر جریان عبوری از سیمپیچهای استپر موتور محدود شود تا مانع از افزایش جریان بیش از حد موتور گردد.
پیش از استفاده از موتور، باید حداکثر جریان عبوری از سیمپیچهای استپر موتور محدود شود تا مانع از افزایش جریان بیش از حد موتور گردد.
روش اول
در این روش جریان محدود کننده، با اندازهگیری ولتاژ مرجع (Vref) از پایه “ref” انجام میشود.
- دیتاشیت استپر موتور مورد نظر خود را مطالعه نموده و جریان قابل تحمل آن را یادداشت نمایید. برای مثال، جریان قابل تحمل استپر موتور NEMA 17 با 200 پله در هر دور چرخش، 350 میلیآمپر به ازای 12 ولت است.
- درایور را در مد گام کامل قرار دهید. بدین منظور باید سه پایهی انتخاب میکرواستپ را بدون اتصال باقی بگذارید.
- موتور را در وضعیت ثابتی قرار دهید. بدین منظور هیچ پالسی نباید به پایهی ورودی STEP اعمال شود.
- درحالی که پتانسیومتر را تنظیم میکنید، ولتاژ آن (Vref) را اندازهگیری نمایید.
- جریان محدودکننده را از رابطهی زیر محاسبه کنید:
Current Limit = Vref x 2.5
برای مثال، چنانچه جریان قابل تحمل استپر موتور 350 میلیآمپر باشد، باید ولتاژ مرجع را بر روی 0.14 ولت تنظیم نمایید.
نکته
یک راه آسان برای تنظیم پتانسیومتر بر روی مقدار موردنظر این است که از گیره سوسماری استفاده کنید. به طوری که یک سر گیره را به پیچگوشتی وصل کرده و سر دیگر ان را به مولتیمتر خود متصل کنید. بدین ترتیب میتوانید همزمان با چرخاندن پتانسیومتر، ولتاژ را با مولتیمتر اندازه بگیرید.
روش دوم
در این روش جریان محدود کننده با اندازهگیری جریان عبوری از سیمپیچ انجام میشود.
- دیتاشیت استپر موتور مورد نظر خود را مطالعه نموده و جریان نامی آن را یادداشت نمایید. برای مثال، جریان استپر موتور مورد استفاده ما، ۳۵۰ میلی آمپر است.
- درایور را در مد گام کامل قرار دهید. بدین منظور باید سه پایهی انتخاب میکرواستپ را بدون اتصال باقی بگذارید.
- موتور را در وضعیت ثابتی قرار دهید. بدین منظور هیچ پالسی نباید به پایهی ورودی STEP اعمال شود.
- یک آمپرمتر را با یکی از سیمپیچهای استپر موتور خود سری و جریان عبوری از آن را اندازهگیری کنید.
- با استفاده از یک پیچگوشتی، پتانسیومتر را چرخانده و جریان محدود کننده را بر روی مقدار جریان قابل تحمل استپر موتور تنظیم کنید.
هربار که ولتاژ منطقی (VDD) تغییر میدهید، لازم است این مراحل مجدداً انجام شود.
نحوه اتصال ماژول درایور A4988 به آردوینو UNO
اکنون با داشتن اطلاعات کامل درباره این درایور، آن را به آردوینو متصل میکنیم.
اتصالات به سادگی انجام میشود. پایههای VDD و GND را به ترتیب به پایههای 5 ولت و زمین آردوینو متصل کنید. سپس پایههای ورودی DIRو STEPرا به ترتیب به پایههای خروجی دیجیتال شماره 2 و 3 آردوینو متصل نمایید.
در این مرحله، استپر موتور را به پایههای A1, A2, B1, B2 متصل کنید. معمولاً برد درایور A4988 با کانکتور 4 پایه موجود در چند موتور دو قطبی مطابقت دارد.
هشدار
اتصال و جدا کردن استپر موتور درحالی که درایور به تغذیه متصل است، به درایور آسیب میرساند.
سپس پایه RST را به پایه SLP/SLEEP متصل نموده تا درایور فعال شود. پایههای انتخاب میکرواستپ را بدون اتصال باقی بگذارید تا موتور در مد گام کامل عمل کند.
در نهایت، پایه تغذیه موتور را به پایههای VMOT و پایه زمین متصل کنید. به یاد داشته باشید که یک خازن الکترولیتی دیکوپلینگ 100 میکروفاراد نیز بین دو پایهی تغذیهی موتور قرار دهید.
کد آردوینو- مثال مقدماتی
برنامهی زیر درک کاملی راجع به نحوه کنترل سرعت و جهت چرخش یک استپر موتور دو قطبی با استفاده از ماژول درایور 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 لیست کتابخانهها را دانلود کرده و لیست کتابخانههای نصب شده را آپدیت کند.
سپس جستجوی خود را با نوشتن عبارت ‘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 به ازای هر فاز حداقل ۱۵۰۰ میلی آمپر تحمل جریان دارند.
این ۳۵۰ میلی آمپر را از کجا آورده اید؟
درود بر شما دوست عزیز
متن مقاله ویرایش شده و در تیتر (روش دوم جهت محدود کننده ی جریان) می توانید این موضوع را مطالعه نمایید. از توجه شما بسیار سپاسگذاریم 🙂