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

جمعه, 11 تیر 1395 19:27
این مورد را ارزیابی کنید
(27 رای‌ها)
  automee  
این مطلب متعلق به وبسایت اتومی است.
منبع

این مطلب بخش دوازدهم از آموزش جامع آردوینو (مبتدی و پیشرفته) است. در این قسمت قصد داریم به یکی از تجهیزات مهم در کارهای اتوماتیک به نام استپر موتور (Stepper motor) و نحوه راه‌اندازی بپردازیم. نحوه کار استپر موتور به گونه‌ای است که برای ایجاد حرکت‌های بسیار دقیق مناسب است. کارهایی که با استپر موتور قابل انجام است به روش‌های دیگر یا قابل انجام نیست یا با صرف هزینه و زمان بیشتر امکان‌پذیر خواهد بود. اگر در اینترنت به پروژه‌های انجام شده با استپر موتور نگاهی بیندازید، خواهید دید که چه ایده‌های جالبی در مورد آن وجود دارد: از ربات نقاش تا پرینتر سه‌بعدی و حتی دستگاه‌های صنعتی مانند CNC از استپر موتور استفاده می‌کنند.

قطعات مورد نیاز:

 

برد آردوینو و کابل رابط 

1 عدد
استپر موتور Nema17 1 عدد
IC درایور L293D 1 عدد
درایور A4988 1 عدد
درایور TB6560 1 عدد
خازن 100μF 1 عدد
مقاومت 220Ω 2 عدد
کلید فشاری 2 عدد
منبع تغذیه 1 عدد
بردبورد 1 عدد
سیم جامپر 1 بسته

 


معرفی استپر موتور

استپر موتور مانند اکثر موتورهای DC دارای دو بخش اصلی است: روتور و استاتور. روتور محور چرخان و استاتور بخش بیرونی و ثابت موتور است. روتور یک آهنربای دائم و استاتور شامل تعدادی سیم‌پیچ است که با اعمال ولتاژ تبدیل به آهنربای موقف می‌شود. استپر موتور را از این جنبه که اعمال ولتاژ به آن بدون براش صورت می‌گیرد می‌توان نوعی موتور براشلس دانست؛ اما مکانیزم حرکتی و نحوه کارکرد آن به حدی از موتورهای براشلس معمولی متفاوت است که معمولا استپر موتور را در این دسته قرار نمی‌دهند. ساختار داخلی استپر موتورها انواع مختلفی دارد که در اینجا قصد پرداختن به آنها را نداریم و تنها توضیحی کلی راجع به یک نوع متداول خواهیم داد.

استپر موتور

روتور استپر موتور دندانه‌هایی مانند یک چرخدنده دارد. از طرفی بر روی سیم‌پیچ‌ها نیز دندانه‌هایی وجود دارد. فاصله دندانه‌ها بر روی روتور و استاتور به گونه‌ای طراحی شده که در آن واحد فقط دندانه‌های یک سیم‌پیچ می‌تواند روبروی دندانه‌های روتور قرار بگیرد. اگر یک سیم‌پیچ فعال شود، نزدیک‌ترین دندانه‌های روتور را به خود جذب می‌کند. اگر این سیم‌پیچ غیر فعال شده و سیم‌پیچ مجاور فعال شود، روتور به اندازه‌ای خواهد چرخید تا دندانه‌های آن مقابل سیم‌پیچ فعال قرار بگیرد. به این اندازه چرخش روتور یک گام (Step) می‌گویند.

مکانیزم استپر موتور

هر چه تعداد گام‌های استپر موتور در یک دور چرخش بیشتر باشد، دقت حرکتی آن بیشتر است. به حرکتی که توضیح داده شد، یک گام کامل (Full step) گفته می‌شود. روش‌هایی وجود دارد که می‌تواند استپر موتور را به اندازه کسر صحیحی از گام کامل (مثلا ½ ، ¼ ، …) بچرخاند که نحوه عملکرد آن فراتر از این مطلب است. با روش‌های Microstepping می‌توان موتور را تا ١/٢٥٦ یک گام کامل چرخاند.
دو نوع استپر موتور unipolar و bipolar وجود دارد. استپر موتور unipolar قادر است موتور را تنها در یک جهت بچرخاند در حالی که استپر موتور bipolar توانایی حرکت دادن موتور در دو جهت را دارد. به هر استپر موتور تعدادی سیم متصل است که معمولا هر کدام به یک سیم‌پیچ وصل است. با دادن ولتاژ با ترتیبی مشخص به سیم‌پیچ‌ها می‌توان موتور را به حرکت در آورد. از آنجا که استپر موتور نیاز به ولتاژ و جریان نسبتا بالایی دارد، نمی‌توانید با آردوینو به تنهایی آن را راه‌اندازی کنید و حتما نیاز به یک درایور مخصوص برای تامین برق موتور دارید. برخی درایورهای موتورهای DC قابلیت راه‌اندازی استپر موتور را نیز دارند. برای انتخاب درایور مناسب استپر موتور باید دقت کنید که جریان و ولتاژ موتور کمتر از جریان و ولتاژ درایور باشد. جریان برای موتور و درایور به ازای هر سیم‌پیچ سنجیده می‌شود. همچنین برای اطمینان، سعی کنید جریان موتور ½ یا ١/٣ درایور باشد.


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

در این بخش می‌خواهیم یک موتور معروف به نام Nema17 را راه‌اندازی کنیم. این موتور نسبت اندازه خودش قدرت زیادی دارد و جریان نسبتا زیادی مصرف می‌کند. بنابراین اگر می‌خواهید از آن استفاده کنید یا باید باتری قوی در اختیار داشته باشید یا از یک منبع تغذیه خارجی استفاده کنید. من راه دوم را پیشنهاد می‌کنم چون به ندرت نیاز دارید که استپر موتور را در یک وسیله متحرک استفاده کنید. البته اگر موتور کوچکتری دارید، تمام مطالب برای راه‌اندازی آن یکسان بوده و بنابراین جای نگرانی نیست.
استپر موتور نیز مثل موتور DC برای تامین توان راه‌اندازی نیاز به درایور دارد. درایورهای مختلفی برای کار با استپر موتور وجود دارند. معمولا درایورها توانایی راه‌اندازی موتور DC و استپر موتور را دارند (مانند L298) اما برای کار با هر کدام درایورهای خاصی متداول است. یک درایور پرکاربرد برای استپر موتور، L293D است که هم به صورت IC (تراشه) و هم به صورت ماژول موجود است. در این قسمت می‌خواهیم به راه‌اندازی استپر موتور با تراشه L293D بپردازیم.

تراشه L293D

IC را روبروی خودتان بگیرید به طوری که علامت U شکل در بالا قرار بگیرد. این تراشه ١٦ پایه دارد. شماره هر پایه و عملکرد هر کدام به صورت زیر است:

پایه های l293d

پایه‌های ٨ و ١٦ که تغذیه موتورها و تراشه هستند را به ترتیب به منبع تغذیه خارجی (مثلا 12V) و ولتاژ 5V وصل کنید. این درایور می‌تواند برای ولتاژهای تا 36V استفاده شود. همچنین تغذیه درایور حداکثر 7V است. پایه‌های ٤، ٥، ١٢ و ١٣ را به GND وصل کنید. برای محافظت از درایور در برابر حرارت تولید شده، می‌توانید این پایه‌ها را به یک هیت سینک (Heat sink) وصل کنید تا به خنک‌سازی آن کمک شود. پایه‌های ١ و ٩ فعال‌ساز موتورها (Enable) بوده و دقیقا مانند Enable در درایور موتور DC عمل می‌کنند. پایه ٢ فرمان را از آردوینو گرفته (Input)، تقویت کرده و به موتور که به پین ٣ وصل شده می‌فرستد (Output). پایه‌های ٦-٧ ، ١٠-١١ و ١٤-١٥ نیز دقیقا وظیفه‌ای مشابه پایه‌های 2 و 3 دارند. بیشتر استپر موتورها ٤ سیم دارند که هر کدام به یکی از پایه‌های گفته شده متصل می‌شود. پایه ١ سیم‌های ٣ و ٦ و پایه ٩ سیم‌های ١١ و ١٤ را فعال می‌کنند.

دفترچه راهنمای درایور L293D

مدار تراشه l293d

همان طور که قبلا توضیح داده شد، برای به حرکت در آوردن استپر موتور، باید سیم‌پیچ‌های آن به ترتیب مشخصی تحریک شوند. این ترتیب را می‌توانید در دفترچه راهنمای هر موتور مشاهده کنید. معمولا برای جلوگیری از پیچیدگی کار با استپر موتور در آردوینو از کتابخانهstepper.hاستفاده می‌شود. به این ترتیب می‌توانید ساده‌تر موتور را کنترل کنید. چیزی که برای راه‌اندازی موتور باید بدانید تعداد گام‌های موتور در یک دور چرخش است و نیز اینکه هر سیم به کدام سیم‌پیچ وصل شده است. بقیه کار را به کتابخانه استپر موتور واگذار کنید.

دانلود کتابخانه Stepper

 

برنامه زیر را در آردوینو بارگذاری کنید. این برنامه موتور را یک دور ساعتگرد و یک دور پادساعتگرد می‌چرخاند.

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/

#include <Stepper.h>
#define stepsPerRevolution 200
// Coil#1: Red-Green
// Coil#2: Yellow-Blue
#define redWire 2
#define greenWire 3
#define yellowWire 4
#define blueWire 5
//Creating object for clockwise rotation
Stepper driveCW(stepsPerRevolution, redWire, greenWire, yellowWire, blueWire);
//Creating object for counter-clockwise rotation
Stepper driveCCW(stepsPerRevolution, greenWire, redWire, yellowWire, blueWire);

void setup()
{
}
void loop()
{
    for (int i = 0; i < stepsPerRevolution; i++)
    {
        driveCW.step(1);
        delay(20);
    }
    delay(1000);
    for (int i = 0; i < stepsPerRevolution; i++)
    {
        driveCCW.step(1);
        delay(20);
    }
    delay(1000);
}

در این برنامه ابتدا یک شیء برای حرکت ساعتگرد و یک شیء برای حرکت پادساعتگرد موتور تعریف شده است. برای تعریف استپر موتور باید تعداد گام در یک دور و سیم‌های آن مشخص شود:

Stepper driveCW(stepsPerRevolution, redWire, greenWire, yellowWire, blueWire);
Stepper driveCCW(stepsPerRevolution, greenWire, redWire, yellowWire, blueWire);

دستور(step(nدر کتابخانه استپر موتور، موتور را به میزان n گام حرکت می‌دهد. با تنظیم تاخیر بین هر گام، سرعت چرخش موتور را می‌توانید تغییر دهید:

for (int i = 0; i < stepsPerRevolution; i++)
{
   driveCW.step(1);
   delay(20);
}

در برنامه بالا دستور step موتور را با بالاترین سرعت ممکن به تعداد گام خواسته شده حرکت می‌دهد. به همین دلیل از دستور تاخیر برای کاهش سرعت موتور استفاده شد. روش دیگر کار با کتابخانه استپر موتور، کنترل سرعت است. در صورتی که از دستور(setSpeed(vاستفاده کنید، می‌توانید سرعت موتور را (بر حسب دور بر دقیقه) تنظیم کرده و سپس از دستور step برای حرکت به میزان دلخواه استفاده کنید. با این کار دیگر نیازی به استفاده از تاخیر و حلقه for نیست. برنامه زیر از روش دوم برای کنترل موتور استفاده می‌کند:

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/

#include <Stepper.h>
#define stepsPerRevolution 200
// Coil#1: Red-Green
// Coil#2: Yellow-Blue
#define redWire 2
#define greenWire 3
#define yellowWire 4
#define blueWire 5
Stepper driveCW(stepsPerRevolution, redWire, greenWire, yellowWire, blueWire);

void setup()
{
  driveCW.setSpeed(60);
}

void loop()
{
  driveCW.step(stepsPerRevolution);
  delay(1000);
  driveCW.step(-stepsPerRevolution);
  delay(1000);
}

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

A4988 یک درایور مخصوص استپر موتورهای کوچک و متوسط است که به دلیل ابعاد کوچکش بسیار مورد توجه بوده است. کار با این درایور ساده است چرا که تنها با دو ورودی سرعت و جهت، می‌توانید موتورتان را کنترل کنید. این درایور توانایی تحمل 2A جریان و 35V ولتاژ را دارد. A4988 در درون خود مدارهای محافظتی و نیز یک هیت سینک کوچک برای دفع حرارت اضافی دارد. این درایور قابلیت راه‌اندازی موتور به صورت میکرواستپ تا ١/١٦ را دارد.

درایور a4988

درایور A4988 ١٦ پایه دارد. پایه‌های STP و DIR میزان حرکت و جهت موتور را مشخص کرده و به آردوینو وصل می‌شود. با High یا Low کردن پایه DIR می‌توانید موتور را در دو جهت مختلف به حرکت در آورید. پایه‌های 1A و 1B به مثبت و منفی یک کویل و پایه‌های 2A و 2B به مثبت و منفی کویل دیگر موتور متصل می‌شوند. پایه‌های VMOT و GND مجاور آن، تغذیه موتور و VDD و GND مجاور آن تغذیه برد درایور هستند. همچنین پایه‌های M1، M0 و M2 برای تعیین میکرواستپ موتور استفاده می‌شوند. با استفاده از جدول زیر می‌توانید نحوه میکرواستپ موتور را تعیین کنید:

 

M0

M1

M2

میزان گام

Low

Low

Low

کامل

High

Low

Low

½

Low

High

Low

¼

High

High

Low

1/8

High

High

High

1/16

این پایه‌ها با یک مقاومت Pull-down ،100kΩ شده‌اند و بنابراین در حالت عادی در شرایط Low هستند. پس اگر پایه‌های میکرواستپ فرمانی دریافت نکنند، موتور با گام کامل کار خواهد کرد.
برای شروع، پایه‌های STP و DIR را به پین‌های ٢ و ٣ آردوینو و پایه‌های مربوط به موتور و تغذیه را مطابق آنچه گفته شد وصل کنید. همچنین پایه‌های RST و SLP را به یکدیگر وصل کنید. علاوه بر آن یک خازن 100μF بین پایه‌های مثبت و منفی منبع تغذیه متصل کنید تا نوسانات ولتاژ به درایور آسیب نزند. دقت کنید که پایه مثبت خازن (پایه بلندتر) را به VMOT وصل کنید. معمولا در کنار پایه منفی خازن‌ها یک علامت منفی گذاشته شده است که تشخیص مثبت و منفی آن را ساده‌تر می‌کند.

 

مدار a4988

 

حالا برنامه زیر را بر روی آردوینو بارگذاری کرده و نتیجه را مشاهده کنید.

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/

#define stepPin 3
#define directionPin 2
#define stepsPerRevolution 200

void stepperRun(int steps, int speedRpm)
{
  if (steps < 0)
  {
    digitalWrite(directionPin, LOW);
    steps = abs(steps);
  }
  else
    digitalWrite(directionPin, HIGH);
  long fullStepTime = 1000000 * 60 / (stepsPerRevolution * speedRpm); // in microseconds
  for (int i = 0; i < steps; i++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(fullStepTime / 2);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(fullStepTime / 2);
  }
}

void setup()
{
  pinMode(stepPin, OUTPUT);
  pinMode(directionPin, OUTPUT);
}

void loop()
{
  stepperRun(stepsPerRevolution,20);
  delay(1000);
  stepperRun(-stepsPerRevolution,20);
  delay(1000);
  stepperRun(stepsPerRevolution*3,60);
  delay(1000);
  stepperRun(-stepsPerRevolution*3,60);
  delay(1000);
}

در این برنامه یک تابع به نامstepperRunتعریف شده که تعداد گام و سرعت را دریافت کرده و موتور را به حرکت در می‌آورد. در این تابع برای اینکه بتوانیم موتور را پادساعتگرد بچرخانیم، پایه DIR را Low می‌کنیم.

if (steps < 0)
{
  digitalWrite(directionPin, LOW);
  steps = abs(steps);
}
else
  digitalWrite(directionPin, HIGH);

تابعfullStepTimeزمان مورد نیاز برای هر گام را با توجه به سرعت موتور و تعدد گام در هر دور آن محاسبه می‌کند. برای یک حرکت پیوسته باید نصف این زمان پایه STP در حالت High و نصف آن در حالت Low قرار بگیرد.

long fullStepTime = 1000000 * 60 / (stepsPerRevolution * speedRpm); // in microseconds
for (int i = 0; i < steps; i++)
{
   digitalWrite(stepPin, HIGH);
   delayMicroseconds(fullStepTime / 2);
   digitalWrite(stepPin, LOW);
   delayMicroseconds(fullStepTime / 2);
}

راه اندازی با درایور TB6560

در این قسمت قصد داریم یک درایور نسبتا حرفه‌ای برای استپر موتور را معرفی کنیم. درایور TB6560 توانایی‌های بسیار بیشتری نسبت به سایر موارد معرفی شده و البته قیمت بیشتری نیز دارد. این درایور می‌تواند تا 3A جریان را برای استپر موتور به راحتی تامین کند و به همین دلیل انتخاب مناسبی برای موتورهای قوی‌تر خواهد بود. نحوه کار و اتصالات TB6560 تقریبا مشابه درایور A4988 است که در قسمت قبل معرفی شد. پایه‌های A- و A+ به دو سر یک سیم‌پیچ و پایه‌های B- و B+ به دو سر سیم‌پیچ دیگر موتور متصل می‌شوند. پایه CLK+ و CW+ به آردوینو وصل شده و به ترتیب برای ارسال تعداد گام و جهت حرکت استفاده می‌شوند. پایه‌های CLK- و CW- نیز به GND وصل می‌شوند. همچنین پایه‌های 24V+ و GND نیز به مثبت و منفی منبع تغذیه متصل می‌شوند. تراشه‌ها و اجزای داخلی این درایور باعث شده است تا کنترل موتور با دقت بالایی صورت گیرد. همچنین TB6560 مدارات محافظتی در برابر جریان بالا و ولتاژ پائین دارد.

 

درایور tb6560

 

اولین چیزی که در مورد TB6560 در نگاه اول توجه را جلب می‌کند، وجود هیت‌سینک‌ بزرگی بر روی این برد است. این هیت‌سینک می‌تواند حرارت زیادی را دفع کرده و امکان کار با جریان‌های بالا تا 3A را بدهد. مورد متفاوت دیگری که در این درایور وجود دارد قرار داشتن تعدادی سوئیچ تنظیم بر روی آن است. این بخش از درایور بسیار اهمیت دارد و قبل از اینکه موتورتان را راه‌اندازی کنید حتما از صحیح بودن تنظیمات این بخش مطمئن شوید.

تنظیمات tb6560

خوشبختانه تمام توضیحات مربوطه بر روی خود برد چاپ شده و نیاز نیست چیزی را به خاطر بسپارید. سه سوئیچ اول (SW1-SW2-SW3) به همراه سوئیچ s1 برای تنظیم جریان اعمالی به موتور استفاده می‌شوند. یک قابلیت جالب این درایور کنترل جریان موتور است. با تنظیم جریان با استفاده از سوئیچ‌ها می‌توانید مقدار دلخواهی جریان به موتور بدهید. با کنترل جریان می‌توانید گشتاور موتور را کنترل کنید. به بیان ساده، هرچه جریان بیشتری به موتور داده شود، قدرت آن بیشتر شده و البته فشار بیشتری به آن آمده و حرارت بیشتری نیز تولید می‌شود. قبل از تنظیم جریان حتما مطمئن شوید که موتور توانایی تحمل این مقدار جریان را دارد. اگر قدرت موتور برایتان اهمیتی ندارد و سرعت کاری بالایی ندارید، نیازی به بالا بردن جریان نیست. سوئیچ‌های s3 و s4 برای تنظیم میکرواستپ موتور است. این درایور می‌تواند موتور را با میکرواستپ تا ١/١٦ راه‌اندازی کند. سایر سوئیچ‌ها را در وضعیت صفر باقی بگذارید.
برای راه‌اندازی موتور با TB6560 پایه CLK+ و CW+ را به پین‌های ٣ و ٢ دیجیتال وصل کنید. در این قسمت من از یک موتور Nema17 و تغذیه 9V استفاده کرده‌ام.

مدار tb6560

 

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

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/

#define stepPin 3
#define directionPin 2
#define stepsPerRevolution 200

void stepperRun(int steps, int speedRpm)
{
  if (steps < 0)
  {
    digitalWrite(directionPin, LOW);
    steps = abs(steps);
  }
  else
    digitalWrite(directionPin, HIGH);
  long fullStepTime = 1000000 * 60 / (stepsPerRevolution * speedRpm); // in microseconds
  for (int i = 0; i < steps; i++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(fullStepTime / 2);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(fullStepTime / 2);
  }
}

void setup()
{
  pinMode(stepPin, OUTPUT);
  pinMode(directionPin, OUTPUT);
}

void loop()
{
  for (int i = 1; i < 10; i++)
    stepperRun(stepsPerRevolution * i / 4, 15 * i);
  for (int i = 9; i > 0; i--)
    stepperRun(stepsPerRevolution * i / 4, 15 * i);
  delay(3000);
}

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

در این قسمت قصد داریم به عنوان یک پروژه کوچک موتور Nema17 را با درایور A4988 به صورت دستی کنترل کنیم. برای این کار می‌خواهیم از دو کلید برای حرکت ساعتگرد و پادساعتگرد استفاده کنیم. کلیدها انواع مختلفی دارند اما همگی کار مشابهی انجام می‌دهند. کار کلید برقرار کردن اتصال الکتریکی بین دو پایه در صورت فشرده شدن است. در اینجا ما از یک کلید چهار پایه ساده استفاده کرده‌ایم. در کلیدهای چهار پایه، پایه‌های روبرو به یکدیگر وصل هستند؛ در واقع همان دو پایه در کلید موجود است و چهار پایه برای راحتی کار قرار داده شده‌اند. در صورتی که کلید فشرده شود، دو پایه آن به هم اتصال می‌یابند. یک پایه را به 5V و پایه دیگر را به یک پین دیجیتال آردوینو وصل کنید. به این ترتیب در صورت فشردن کلید ولتاژ High به آن پایه ارسال خواهد شد. پایه دوم را با یک مقاومت به GND وصل کنید. در این صورت زمانی که کلید فشرده نشده، مقدار Low به آردوینو فرستاده می‌شود.
اتصالات مدار A4988 مانند حالت قبل است. دو کلید را به پین‌های ٨ و ١٣ آردوینو وصل کنید. همین پایه کلیدها را با یک مقاومت 220Ω به زمین و پایه دیگر را به 5V وصل کنید.

 

مدار کنترل استپر موتور

 

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

/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/

#define stepPin 3
#define directionPin 2
#define stepsPerRevolution 200
#define forwardSwitch 8
#define backwardSwitch 13

void stepperRun(int steps, int speedRpm)
{
  if (steps < 0)
  {
    digitalWrite(directionPin, LOW);
    steps = abs(steps);
  }
  else
    digitalWrite(directionPin, HIGH);
  long fullStepTime = 1000000 * 60 / (stepsPerRevolution * speedRpm); // in microseconds
  for (int i = 0; i < steps; i++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(fullStepTime / 2);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(fullStepTime / 2);
  }
}

void setup()
{
  pinMode(stepPin, OUTPUT);
  pinMode(directionPin, OUTPUT);
}

void loop()
{
  bool isforward = digitalRead(forwardSwitch);
  bool isbackward = digitalRead(backwardSwitch);
  if (isforward)
  {
    stepperRun(stepsPerRevolution / 8, 60);
    delay(1000);
  }
  else if (isbackward)
  {
    stepperRun(-stepsPerRevolution / 8, 60);
    delay(1000);
  }
}

پروژه کنترل استپر موتور


نتیجه‌گیری

در این آموزش با استپر موتور و درایورهای مختلفی برای راه‌اندازی آن و همچنین با کتابخانه استپر موتور آشنا شدید. همان طور که دیدید روش‌های راه‌اندازی، چه از نظر کدنویسی و چه از نظر سخت‌افزاری بسیار متنوع است. تازه این همه روش‌های ممکن نیست! اینکه شما از چه روشی - از تراشه کوچکی مثل L293D یا از درایور حرفه‌ای TB6560- استفاده کنید بستگی به نیاز و کاربرد شما دارد.
در آموزش بعدی، نحوه کار با ماژول کارت SD را خواهید آموخت.
نظرات شما باعث بهبود محتوای آموزشی ما می‌شود. اگر این آموزش را دوست داشتید، همین‌طور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.

خواندن 55842 دفعه
داوود درستکار

داوود درستکار دانش‌آموخته کارشناسی مهندسی مکانیک از دانشگاه صنعتی اصفهان و کارشناسی ارشد از دانشگاه تهران است. وی همچنین عضو تیم تحقیقاتی مرکز سیستمها و فناوریهای پیشرفته دانشگاه تهران (CAST) است. داود مسلط به طراحی و تحلیل سیستم‌های دینامیکی، طراحی و ساخت ربات، کنترل سیستم‌های غیرخطی و پیاده‌سازی سیستم‌های هوشمند با استفاده از آردوینو است. مهمترین علاقه او در حوزه رباتیک، پرنده‌های بدون سرنشین، رباتهای توانبخشی و ساخت تجهیزات هوشمندسازی و کنترل می‌باشد.

کاربرانی که در این گفتگو شرکت کرده اند

نظرات (98)

  1. روح الله بشیره

سلام مهندس جان...من یک cnc دارم و استپر موتور ها رو میخام قوی تر کنم آیا با تغییر استپر موتور کدنویسی هم باید تغییر کنه؟؟؟یا فقط جریان و ولتاژی که گفتین رو با درایور تقویت کنم؟؟؟

 
  1. بهزاد

سلام مهندس جان وقتت بخیر استپ موتورم خوب کار نمیکنه فک کنم داره پالس گم میکنه.وقتی میخواد بچرخه هم میخواد راست بچرخه هم چپ و هیچ طرفم نمیچرخه علتش چی میتونه باشه؟

 
  1. Amir Mohamad

سلام
من یک استپر MST342C02 با درایور SMD42 دارم و میخواهم گشتاور موتور رو با جریان در یک سرعت (Full-step/sec) مشخص تغییر بدم. از کتابخونه ی Accelstepper هم استفاده میکنم. میتونم با استفاده از آردوینو میزان جریان رو تنظیم کنم تا گشتاور کم یا زیاد...

سلام
من یک استپر MST342C02 با درایور SMD42 دارم و میخواهم گشتاور موتور رو با جریان در یک سرعت (Full-step/sec) مشخص تغییر بدم. از کتابخونه ی Accelstepper هم استفاده میکنم. میتونم با استفاده از آردوینو میزان جریان رو تنظیم کنم تا گشتاور کم یا زیاد بشه؟

ادامه مطلب
 
  1. مهدی

سلام ممنون اموزشی که گزاشتین خیل کمک کرد بهم
فقط من متوجه نشدم دقیقا fullStepTime چطوری بدست امدش و حاوی چه رابطه ای هستش؟ من دیتاشیت درایور tbرو هم نگا کردم چیزی ندیدم
ممنون میشم توضیح بدین هرعدد یا متغییر برای چی هستش

 
  1. پشتیبانی    مهدی

سلام مهدی عزیز
این مطلب جزو فرمول محاسبه زمان استپ کامل برای موتور هست

 
  1. محمد احمدی

سلام
خسته نباشی استاد
من دوتا استپر موتور با درایو a4988 و تغذیه و... از سایتتون گرفتم
یکی از استپر موتور هام باید فقط با یه سرعت مشخص حرکت کنه
ولی اون یکی استپرموتور باید با کلید هم سرعتش کم و زیاد بشه هم حرکت ساعتگرد و پادساگتگرد داشته باشه...

سلام
خسته نباشی استاد
من دوتا استپر موتور با درایو a4988 و تغذیه و... از سایتتون گرفتم
یکی از استپر موتور هام باید فقط با یه سرعت مشخص حرکت کنه
ولی اون یکی استپرموتور باید با کلید هم سرعتش کم و زیاد بشه هم حرکت ساعتگرد و پادساگتگرد داشته باشه برا بوبین پیچی میخوام
شما میتونید تو برنامه کمکم کنید یا کسی هست بهم معرفی کنید
هزینه ی برنامه رو هم پرداخت میکنم

ادامه مطلب
 
  1. پشتیبانی    محمد احمدی

سلام محمد عزیز
انجام پروژه در حوزه کاری شرکت نمی باشد. پروژه ای که بیان کردید، دشوار نبوده و خودتان با استفاده از آموزش های زیر می تونید انجام دهید.
آموزش کنترل استپر صنعت بازار
https://b2n.ir/y24830
می تونید از آموزش زیر هم کمک بگیرید.

ادامه مطلب
 
  1. بابک

درود استاد من یک cnc ساخته ام لطفا برنامه نویسی تبدیل حرکت دورانی استپ موتور به خطی و روتاری را بفرمایید

 
  1. پشتیبانی    بابک

سلام دوست عزیز
برای تبدیل حرکت دورانی به خطی ابتدا باید از یک مکانیزم مکانیکی کمک بگیرید. یعنی مثلا با استفاده از یک پولی و تسمه این کار را انجام دهید.
برنامه نویسی یک دستگاه CNC از صفر در صورتی که یک برنامه نویس حرفه ای باشید ممکن است هفته ها...

سلام دوست عزیز
برای تبدیل حرکت دورانی به خطی ابتدا باید از یک مکانیزم مکانیکی کمک بگیرید. یعنی مثلا با استفاده از یک پولی و تسمه این کار را انجام دهید.
برنامه نویسی یک دستگاه CNC از صفر در صورتی که یک برنامه نویس حرفه ای باشید ممکن است هفته ها زمان ببرد. برای راه اندازی دستگاهتون پیشنهاد می کنم از یک فرمور (همون برنامه مخصوص یک دستگاه) آماده استفاده کنید. فرمور رایج برای دستگاه های CNC، فرمور GRBL است که می تونید از لینک زیر دانلود کنید.
https://github.com/grbl/grbl
همچنین برای آموزش استفاده از این فرمور رو هم می تونید از لینک زیر استفاده کنید:
https://www.youtube.com/watch?v=m998bYioHqs
موفق باشید.

ادامه مطلب
 
  1. سجاد جلالی

با عرض سلام و وقت بخیر
من استپر و درایور TB6560 از شما خریداری کردم ولی مشکلی در کار استپر وجود دارد، ابتدا که استپر موتور شروع به کار میکند سرعت و جریان ثابتی دارد ولی به مرور زمان مثلا بعد از نیم ساعت کار جریان و سرعت افزایش پیدا میکند(به...

با عرض سلام و وقت بخیر
من استپر و درایور TB6560 از شما خریداری کردم ولی مشکلی در کار استپر وجود دارد، ابتدا که استپر موتور شروع به کار میکند سرعت و جریان ثابتی دارد ولی به مرور زمان مثلا بعد از نیم ساعت کار جریان و سرعت افزایش پیدا میکند(به خصوص در 1/16 استپ)، البته میزان تغییر جریان و سرعت خیلی زیاد نیست ولی برای کاربرد من که خیلی دقیق است این تغییرات قابل قبول نیست.
ممنون میشم راهنمایی بفرمایید چگونه به سرعت ثابتی در طول زمان زیاد برسم؟

با تشکر

ادامه مطلب
 
  1. پشتیبانی    سجاد جلالی

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

سلام دوست عزیز
جریان الکتریکی که موتور میکشد بستگی به تغییرات بار روی شفت موتور و دمای کاری موتور دارد و ممکن است در طول زمان تغییر کند. از این لحاظ چیز عجیبی نیست که جریان کم یا زیاد شود ... ولی سرعت موتور به سرعت پالس دهی میکروکنترلر شما بستگی دارد و اگر سرعت موتور شما تغییر میکند این یعنی سرعت پالس دهی میکرو شما تغییر کرده و احتمالا مشکل از آنجاست.

ادامه مطلب
 
  1. علی

سلام استاد؛
خسته نباشید،
مطالبتون خیلی عالی بود

یه سوال داشتم از خدمتتون
در درایور A4988 ، مثلا وقتی Low High High میشه، 1/8 گام حرکت میکنه.
در این صورت باید stepsPerRevolution را در تابع fullStepTime، 8 برابر کنیم؟
البته اگر بخوایم تا آخر با...

سلام استاد؛
خسته نباشید،
مطالبتون خیلی عالی بود

یه سوال داشتم از خدمتتون
در درایور A4988 ، مثلا وقتی Low High High میشه، 1/8 گام حرکت میکنه.
در این صورت باید stepsPerRevolution را در تابع fullStepTime، 8 برابر کنیم؟
البته اگر بخوایم تا آخر با همین 1/8 گام کار کنیم؟

ادامه مطلب
 
  1. پشتیبانی    علی

سلام علی عزیز
بله همین طور است

 
  1. علی    پشتیبانی

خیلی ممنون استاد

 
  1. محمد

سلام مهندس
وقت بخیر
واقعا عالی بود
فقط چطوری میشه با درایور A4988، استپر موتور رو با زاویه ی مشخص حرکت داد.
مثلا با زاویه ی 11.61 درجه. (با دقت صدم درجه)

 
  1. پشتیبانی    M.B.

سلام
یه موتور 96 استپ رو با a4988 بخواید با بالاترین دقت دوران بدید بایستی هر سه پین M0وM1وM2 رو در حالت High قرار بدید تا قابلیت میکرواستپ 1/16 فعال شود(یعنی هر پله موتور شما به 16 قسمت تقسیم میشود.) موتور 96 استپ به شما دقت 3.75 درجه میدهد و...

سلام
یه موتور 96 استپ رو با a4988 بخواید با بالاترین دقت دوران بدید بایستی هر سه پین M0وM1وM2 رو در حالت High قرار بدید تا قابلیت میکرواستپ 1/16 فعال شود(یعنی هر پله موتور شما به 16 قسمت تقسیم میشود.) موتور 96 استپ به شما دقت 3.75 درجه میدهد و اگر این 3.75 درجه را به 16 قسمت تقسیم کنید نهایتا دقت شما در هر گام میشود 0.234375 تقریبا 0.2 درجه بنابراین اگر از کتابخانه stepper.h استفاده میکنید با هر بار اجرای دستور step(n) که n تعداد گام هست 0.2*n درجه موتور شما حرکت میکند.

ادامه مطلب
 
  1. M.B.    پشتیبانی

خیلی ممنون مهندس جان

 
  1. پشتیبانی    M.B.

خواهش میکنم

 
  1. حسین خانی اصل

چه جوری میتونم تصویر ارسال کنم؟

 
  1. پشتیبانی    حسین خانی اصل

سلام حسین عزیز
ارسال تصویر مقوله ای پیچیده تر و خارج از حوزه این بحث می باشد. می تونید از لینک زیر کمک بگیرید
https://www.youtube.com/watch?v=dkNsi6SeSxs
موفق باشید

 
هیچ نظری در اینجا وجود ندارد
بارگذاری بیشتر ...

نظر خود را اضافه کنید.

ارسال نظر بعنوان یک مهمان
پیوست ها (0 / 3)
مکان خود را به اشتراک بگذارید

محتوای آموزشی استفاده شده در این سایت محافظت شده می باشد و هرگونه کپی برداری از محتواهای تولید شده توسط تیم صنعت بازار موجب پیگرد خواهد بود. استفاده از مطالب صنعت بازار تنها با ذکر منبع به صورت لینک فعال بلامانع است

ما را دنبال کنید:

Copyright © 2017-2018 | Sanatbazar.com