logo-site-sefid
Search
Close this search box.
راه اندازی استپ موتور با آردوینو

راه اندازی استپ موتور با آردوینو

یک استپر موتور را چگونه با محرک A4988 و آردینو کنترل کنیم

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

مرور کلی راه اندازی استپ موتور با آردوینو

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

01-مرور-کلی


محرک پنج مرحله وضوح مختلف را ارائه می‌دهد: مرحله کامل، مرحله haft، مرحله یک چهارم، مرحله هشت و مرحله شانزدهم. همچنین دارای یک پتانسیومتر برای تنظیم خروجی جریان، خاموشی حرارتی در دمای بالا و حفاظت جریان متقاطع است.
ولتاژ منطقی آن از ۳ تا 5.5 ولت است و حداکثر جریان در هر فاز 2A است اگر خنک کننده اضافی خوبی فراهم شود یا جریان پیوسته 1A در هر فاز بدون سینک حرارتی یا خنک کننده باشد.

02-مرور-کلی

اتصال دهنده محرک استپر A4988

حالا اجازه دهید نگاه دقیقی به قسمت کوچکی از محرک بیندازیم و آن را با استپر موتور و کنترل‌کننده وصل کنیم. بنابراین ما با ۲ پین در سمت راست دکمه شروع می‌کنیم تا به محرک،پین های VDD و زمینی که نیاز داریم آن‌ها را به منبع تغذیه ۳ تا 5.5 ولت متصل کنیم و در مورد ما که کنترل‌کننده ما خواهد بود، برد آردینو که ۵ ولت را فراهم خواهد کرد. پین‌های 1A و 1B به یک سیم‌پیچ موتور و پین‌های 2A و 2B به سیم‌پیچ دیگر موتور متصل خواهند شد. برای تغذیه موتور از ۲ پین بعدی، زمینی و VMOT استفاده می‌کنیم که باید آن‌ها را به منبع تغذیه توان از ۸ تا ۳۵ ولت متصل کنیم و همچنین باید از خازن تجزیه با حداقل 47μF برای حفاظت از برد محرک در برابر ولتاژهای زیاد استفاده کنیم.

راه اندازی استپ موتور با آردوینو
راه اندازی استپ موتور با آردوینو

دو پین بعدی، Step وDirection، پین‌هایی هستند که ما در واقع برای کنترل حرکات موتور استفاده می‌کنیم. پین Direction، جهت چرخش موتور را کنترل می‌کند و ما باید آن را به یکی از پین‌های دیجیتال روی میکروکنترلر متصل کنیم، یا در مورد ما آن را به پین شماره ۴ برد آردینو متصل خواهم کرد.
با پین مرحله، مراحل میانی موتور را کنترل می‌کنیم و با هر پالس ارسالی به این پین، موتور یک مرحله را حرکت می‌دهد. بنابراین این بدان معنی است که ما نیازی به برنامه‌نویسی پیچیده، جداول ترتیب فاز، خطوط کنترل فرکانس و غیره نداریم، زیرا مترجم داخلی محرک A4988 از همه چیز مراقبت می‌کند. در اینجا همچنین لازم به ذکر است که این دو پین به هیچ ولتاژ داخلی کشیده نمی‌شوند، بنابراین نباید آن‌ها را شناور در برنامه مان رها کنیم.
بعدی پین SLEEP است و یک منطق پایین برد را در حالت خواب برای به حداقل رساندن مصرف برق در زمانی که موتور در حال استفاده نیست قرار می‌دهد.
سپس، پین RESET مترجم را به حالت HOME از پیش تعریف‌شده تنظیم می‌کند. این حالت HOME یا حالت میکرو استپ HOME را می توان از این اشکال از مجموعه داده‌های A4988 مشاهده کرد. بنابراین اینها موقعیت‌های اولیه هستند از جایی که موتور شروع می‌شود و آن‌ها بسته به وضوح میکرو استپ متفاوت هستند. اگر حالت ورودی به این پین منطقی پایین باشد، تمام ورودی‌های STEP نادیده گرفته خواهند شد. پین Reset یک پین شناور است بنابراین اگر ما قصد کنترل آن را در برنامه خود نداشته باشیم، باید آن را به پین SLEEP متصل کنیم تا آن را بالا ببریم و برد را فعال کنیم.

04-پین-خروجی-محرک-استپر-A4988

۳ پین بعدی (‏MS1، MS2 و MS3)‏ برای انتخاب یکی از پنج مرحله وضوح با توجه به جدول حقیقی بالا هستند. این پین‌ها مقاومت پایینی به کشش داخلی دارند بنابراین اگر ما آن‌ها را قطع کنیم، برد در حالت مرحله کامل عمل خواهد کرد.
آخرین مورد، پین ENABLE برای روشن یا خاموش کردن خروجی های FET استفاده می‌شود. بنابراین یک منطق بالا خروجی را از کار می‌اندازد.

طرح کلی مدار

این طرح کلی مدار کامل است. من از راه‌اندازی در حالت مرحله کامل استفاده خواهم کرد، بنابراین ۳ پین MS را قطع کرده و فقط پین های Step وDirection درایو را به پین‌های شماره ۳ و ۴ در برد آردوینو و همچنین پین‌های زمین و 5 ولت را برای تقویت برد متصل می‌کنم. همچنین من از یک خازن 100μF برای جدا کردن 12 ولت و آداپتور 1.5A برای تغذیه موتور استفاده خواهم کرد. من از یک استپر موتور دو قطبی NEMA17 استفاده خواهم کرد و سیم‌های A و C آن به پین‌های 1A و 1B و سیم‌های B و D به پین‌های 2A و 2B متصل خواهند شد. در پروژه های بعدی آموزش رباتیک ما از این مقاله استفاده خواهیم کرد.

05-طرح-کلی-مدار

محدودیت جریان A4988

قبل از اینکه موتور را به هم وصل کنیم، باید محدودیت جریان محرک را تنظیم کنیم تا مطمئن شویم که جریان در محدوده جریان موتور است. ما می‌توانیم این کار را با تنظیم ولتاژ مرجع با استفاده از پتانسیومتر روی برد و در نظر گرفتن این معادله انجام دهیم:
حد جریان = VRef x 2

06-محدودیت-جریان-A4988

با این حال این معادله همیشه درست نیست زیرا سازندگان مختلفی برای برد محرک A4988 وجود دارند. این یک نسخه آزمایشی از مورد من است: من پتانسیومتری را تنظیم کردم و ولتاژ مرجع ۰.۶ ولت را اندازه‌گیری کردم. بنابراین محدودیت فعلی باید مقدار 2 * 0.6، برابر با 1.2A باشد.

07-محدودیت-جریان-A4988

اکنون چون من از محرک در حالت مرحله کامل استفاده می‌کنم و با توجه به A4988 مجموعه داده‌ها در این حالت جریان سیم‌پیچ می‌تواند تنها به ۷۰ % از حد جریان برسد،. 1.2A*0.7برابر با 0.84A خواهد بود. به منظور بررسی این موضوع، من یک کد ساده را آپلود کردم که منطق پیوسته را به پین Step ارسال می‌کند (‏به طوری که بهتر بتوانیم متوجه جریان شویم)‏و اندازه گیر خود را به صورت سری به یک سیم‌پیچ موتور متصل کرده و آن را تقویت کنم. چیزی که من به دست آوردم 0.5A بود که به این معنی بود که معادله برای مورد من درست نبود.

08-محدودیت-جریان-A4988

کد آردوینو و A4988

این یک کد نمونه است. ابتدا باید پین‌های step و Direction را تعریف کنیم. در مورد ما، آن‌ها پین‌های شماره ۳ و ۴ در برد آردینو هستند و به آن‌ها stepPin و dirPin و بخش راه‌اندازی گفته می‌شود که باید آن‌ها را به عنوان یک خروجی تعریف کنیم.

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
// defines pins numbers
const int stepPin = 3; 
const int dirPin = 4; 
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}
void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  
  digitalWrite(dirPin,LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for(int x = 0; x < 400; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}

در بخش حلقه ابتدا پین Direction را در وضعیت بالا قرار می‌دهیم که موتور را قادر می‌سازد تا در یک جهت خاص حرکت کند. حالا با استفاده از این برای حلقه، ما موتور را به یک چرخش کامل تبدیل می‌کنیم. همانطور که محرک بر روی حالت مرحله کامل تنظیم می‌شود و استپر موتور ما دارای زاویه مرحله ۱.۸ درجه، یا ۲۰۰ مرحله است، ما به ۲۰۰ پالس در پین Step نیاز داریم تا یک چرخش کامل چرخه ایجاد کنیم. بنابراین حلقه ۲۰۰ تکرار خواهد داشت و هر بار حلقه پین Step را روی بالا و سپس پایین برای ساخت پالس‌ها تنظیم می‌کند. بین هر یک از digitalWrite باید کمی تأخیر اضافه کنیم تا سرعت موتور به آن وابسته باشد.
پس از این چرخش کامل چرخه، ما یک تأخیر دوم خواهیم داشت، سپس جهت چرخش را با تنظیم dirPin در یک حالت پایین تغییر می‌دهیم و در حال حاضر با این حلقه از ۴۰۰ تکرار، ۲ چرخش کامل چرخه خواهیم داشت. در پایان، یک تأخیر دیگر هم وجود دارد. حال بیایید کد را آپلود کنیم و ببینیم چگونه کار خواهد کرد.
من یک مثال دیگر برای این آموزش درست کردم، که در آن سرعت موتور را با استفاده از یک پتانسیومتر کنترل می‌کنم. این کد منبع این مثال است:

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
// Defines pins numbers
const int stepPin = 3;
const int dirPin = 4; 
int customDelay,customDelayMapped; // Defines variables
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
 
  digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
  
  customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
  // Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(customDelayMapped);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
  int customDelay = analogRead(A0); // Reads the potentiometer
  int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
  return newCustom;  
}

 

 

 

رضا قنبری
متخصص آموزش رباتیک

رضا قنبری هستم متخصص آموزش رباتیک با بیش از 10 سال سابقه فعالیت در ایران

این مطلب را به اشتراک بگذارید

ماژول کاهنده

ماژول كاهنده قبل از خواندن مقاله ماژول كاهنده بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته اند از

ماژول تشخیص دود و گاز

ماژول تشخیص دود و گاز قبل از خواندن این مقاله بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته

دسته بندی نشده

ماژول WIFI

ماژول WIFI قبل از خواندن این مقاله بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته اند از مقالات

دیدگاه‌ خود را بنویسید

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