در آموزش استفاده از سنسورها برای کنترل جهت و سرعت Brushed Motors و راهاندازی یک موتور پلهای (Stepper) دو قطبی از آموزش آردوینو به کنترل موتورهای DC جاروبکدار با سنسورهای نوری، PWM و H-Bridge و همچنین راهاندازی موتور پلهای دو قطبی با استفاده از کتابخانه Stepper و دستورات سریال پرداختیم.در این قسمت قصد داریم درباره راهاندازی یک موتور پلهای دو قطبی با استفاده از EasyDriver Board و راهاندازی یک موتور پلهای Unipolar با ULN2003A Driver Chip صحبت کنیم.
فرض کنید یک موتور پلهای دو قطبی (چهار سیم) دارید و میخواهید آن را با استفاده از EasyDriver Board و تحت کنترل برنامه حرکت دهید.
این راهحل مشابه آنچه در اموزش قبلی گفته شده است و از همان پروتکل فرمان سریال که در آنجا توضیح داده شد استفاده میکند، اما در اینجا از برد محبوب EasyDriver استفاده شده است. شکل ( 1 ) نحوه اتصالات را نشان میدهد.

شکل( 1 ) اتصال EasyDriver Board
اسکچ زیر جهت حرکت و تعداد پلهها را از طریق پورت سریال کنترل میکند. برخلاف کد اموزش قبل، این اسکچ به Stepper library نیاز ندارد، چون EasyDriver Board کنترل سیمپیچهای موتور را به صورت سختافزاری انجام میدهد:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
/* * Stepper_Easystepper sketch * stepper is controlled from the serial port. * a numeric value followed by '+' or '-' steps the motor * a numeric value followed by 's' changes the speed */ const int dirPin = 2; const int stepPin = 3; const int enPin = 4; int speed = 100; // desired speed in steps per second int steps = 0; // the number of steps to make long last_step = millis(); long timeout = 30 * 1000; // turn off the motor after 30 secs of inactivity void setup() { pinMode(dirPin, OUTPUT); pinMode(stepPin, OUTPUT); pinMode(enPin, OUTPUT); Serial.begin(9600); } void loop() { if (millis() > last_step + timeout) { digitalWrite(enPin,HIGH); // Turn off the motor } if ( Serial.available()) { char ch = Serial.read(); if(isDigit(ch)) // is ch a number? { steps = steps * 10 + ch - '0'; // yes, accumulate the value } else if(ch == '+') { step(steps); steps = 0; } else if(ch == '-') { step(-steps); steps = 0; } else if(ch == 's') { speed = steps; Serial.print("Setting speed to "); Serial.println(steps); steps = 0; } } } void step(int steps) { int stepDelay = 1000 / speed; //delay in ms for speed given as steps per sec int stepsLeft; digitalWrite(enPin,LOW); // Enable the motor last_step = millis(); // determine direction based on whether steps_to_mode is + or - if (steps > 0) { digitalWrite(dirPin, HIGH); stepsLeft = steps; } if (steps < 0) { digitalWrite(dirPin, LOW); stepsLeft = -step } // decrement the number of steps, moving one step each time while(stepsLeft > 0) { digitalWrite(stepPin,HIGH); delayMicroseconds(1); digitalWrite(stepPin,LOW); delay(stepDelay); stepsLeft--; // decrement the steps left } } |
EasyDriver Board از طریق پایههایی که با M+ و GND مشخص شدهاند تغذیه میشود؛ این پایهها در قسمت بالا و سمت راست شکل ( 1 ) نشان داده شدهاند. این برد با ولتاژهایی بین ۸ ولت تا ۳۰ ولت کار میکند؛ برای انتخاب ولتاژ کاری درست، مشخصات موتور پلهای خود را بررسی کنید. اگر از یک Stepper 5V استفاده میکنید، باید ۵ ولت را به پایههای مشخصشده با GND و +5V اعمال کنید؛ این پایهها در پایین و سمت چپ EasyDriver Board قرار دارند. همچنین باید جامپر روی PCB که با APWR مشخص شده است را قطع کنید. این کار رگولاتور روی برد را جدا میکند و موتور و EasyDriver Board را از یک منبع تغذیه خارجی ۵ ولتی تغذیه میکند.
این اسکچ زمانی که موتور بیش از ۳۰ ثانیه حرکت نکرده باشد، با HIGH کردن پایه Enable خروجی را غیرفعال میکند و مصرف توان را کاهش میدهد. مقدار LOW خروجی را فعال میکند. با تغییر متغیر last_step میتوانید این timeout را تنظیم کنید.
گزینههای حرکت پلهای با اتصال پایههای MS1 و MS2 به +5V یعنی HIGH یا GND یعنی LOW انتخاب میشوند؛ همانطور که در جدول ( 1 ) نشان داده شده است. وقتی برد مطابق شکل ( 1 ) متصل باشد، از وضوح Full-step استفاده میکند، یعنی هر دو پایه MS1 و MS2 در وضعیت LOW هستند. همچنین توجه داشته باشید که پایه reset زمانی که به GND متصل نشده باشد در وضعیت پیشفرض خود قرار دارد، یعنی HIGH است. پایین کشیدن آن به LOW باعث خاموش شدن کنترل Stepper میشود.
| Resolution | MS1 | MS2 |
|---|---|---|
| Full step | LOW | LOW |
| Half step | HIGH | LOW |
| Quarter step | LOW | HIGH |
| Eighth step | HIGH | HIGH |
جدول (1 ) گزینههای Microstep
|
1 2 3 |
// use the following for speed given in RPM int speed = 100; // desired speed in RPM int stepsPerRevolution = 200; // this line sets steps for one revolution |
شما میتوانید کد را به گونهای تغییر دهید که مقدار سرعت، تعداد دور بر ثانیه را تعیین کند؛ به صورت زیر:
|
1 |
int stepDelay = 60L * 1000L / stepsPerRevolution / speed; // speed as RPM |
فرض کنید یک موتور پلهای Unipolar پنجسیم یا ششسیم دارید و میخواهید آن را با استفاده از ULN2003A Darlington driver chip کنترل کنید.
یک Stepper از نوع Unipolar را مطابق شکل ( 2 ) متصل کنید. اتصال +V باید به منبع تغذیهای وصل شود که از نظر ولتاژ و جریان، برای نیاز موتور شما مناسب باشد. برای خازن ۰٫۱ µF باید از خازن سرامیکی استفاده کنید.
اسکچ زیر موتور را با استفاده از فرمانهایی که از پورت سریال دریافت میشود حرکت میدهد. یک مقدار عددی که با علامت + دنبال شود، موتور را در یک جهت پله میدهد؛ علامت - موتور را در جهت دیگر پله میدهد:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/* * Stepper sketch * stepper is controlled from the serial port. * a numeric value followed by '+' or '-' steps the motor */ #include <Stepper.h> // change this to the number of steps on your motor #define STEPS 24 // create an instance of the stepper class, specifying // the number of steps of the motor and the pins it's // attached to Stepper stepper(STEPS, 2, 3, 4, 5); int steps = 0; void setup() { stepper.setSpeed(30); // set the speed of the motor to 30 RPMs Serial.begin(9600); } void loop() { if ( Serial.available()) { char ch = Serial.read(); if(isDigit(ch)) // is ch a number? { steps = steps * 10 + ch - '0'; // yes, accumulate the value } else if(ch == '+') { stepper.step(steps); steps = 0; } else if(ch == '-') { stepper.step(steps * -1); steps = 0; } else if(ch == 's') { stepper.setSpeed(steps); Serial.print("Setting speed to "); Serial.println(steps); steps = 0; } } } |

شکل( 2 ) اتصال موتور پلهای Unipolar با استفاده از ULN2003 driver
این نوع موتور دو سیمپیچ دارد و هر سیمپیچ یک اتصال به مرکز دارد. در موتورهایی که فقط پنج سیم دارند، هر دو اتصال مرکزی روی یک سیم مشترک بیرون آورده شدهاند. اگر اتصالات مشخص نشده باشند، میتوانید سیمبندی را با استفاده از یک مولتیمتر شناسایی کنید. مقاومت بین جفتهای مختلف سیم را اندازه بگیرید تا دو جفت سیمی را پیدا کنید که بیشترین مقاومت را دارند. سیم center tap باید نصف مقاومت کل سیمپیچ را داشته باشد. یک روند مرحلهبهمرحله برای انجام این کار موجود است.
من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.