راه اندازی استپر موتور 28BYJ-48
اصول اولیه کنترل استپر موتور
اتصالات مدار
اتصالات طبق شماتیک ارائهشده
اتصالات به شرح زیر است:
1-استپر موتور:
معمولاً پینهای هدر مادگی موتور بهصورت گروهی به پورت متناظر روی ماژول ULN2003 متصل میشوند، اما ممکن است استثناهایی وجود داشته باشد. به شماتیک بالا توجه کنید (مشاهده تصویر بزرگشده بسیار کمککننده خواهد بود!).
2-آردوینو و درایور:
هر پین دیجیتال دلخواه میتواند به درایور متصل شود، به ترتیب از چپ برای کویلهای A، B، C، D. پینهایی برای E، F و G نیز وجود دارد، اما در این پروژه از آنها استفاده نمیکنیم.
پورت + را به پورت ۵ ولت آردوینو متصل کنید (در صورت تمایل میتوانید به پورت ۳.۳ ولت نیز متصل کنید) و پورت – را به پورت GND آردوینو وصل کنید (چندین پورت GND وجود دارد، هر کدام را میتوانید انتخاب کنید).
نحوه کار استپر موتور
استپر موتور با اعمال پالسهای جریان به ترتیب به هر یک از کویلهای موتور کار میکند، که هر پالس موتور را یک گام کوچک به جلو میبرد. با تکرار این توالی، حرکتی ایجاد میشود که میتوان آن را با دقت بسیار بالا کنترل کرد، بدون نیاز به خروجیهای PWM.
در اینجا از مدل هشتفازی استفاده میکنیم که هر کویل را به ترتیب فعال میکند و گاهی اوقات دو کویل بهطور همزمان فعال میشوند. در اینجا نیازی به خروجیهای PWM نیست، زیرا پالسها بهصورت دیجیتال (۱ یا ۰) هستند.
ترتیبی که نیرو به کویلها اعمال میشود، جهت حرکت موتور را تعیین میکند. اگر نیرو را به ترتیب از A به D اعمال کنیم، موتور در جهت ساعتگرد میچرخد، و اگر نیرو را به ترتیب از D به A اعمال کنیم، موتور در جهت پادساعتگرد میچرخد.
Code
#define A 2
#define B 3
#define C 4
#define D 5
#define NUMBER_OF_STEPS_PER_REV 512
این بخش پینهای متصل به هر کویل را تعریف میکند. ما از ۵۱۲ گام در هر دور برای این استپر موتور استفاده میکنیم. این تعداد را به تعداد گامهای موتور خود تغییر دهید.
void setup(){
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
}
این بخش هر پین را بهعنوان پین خروجی مقداردهی اولیه میکند.
void write(int a,int b,int c,int d){
digitalWrite(A,a);
digitalWrite(B,b);
digitalWrite(C,c);
digitalWrite(D,d);
}
void onestep(){
write(1,0,0,0);
delay(5);
write(1,1,0,0);
delay(5);
write(0,1,0,0);
delay(5);
write(0,1,1,0);
delay(5);
write(0,0,1,0);
delay(5);
write(0,0,1,1);
delay(5);
write(0,0,0,1);
این بخش تمام کار اصلی را انجام میدهد. تابع onestep هر کویل را به نوبت فعال میکند تا حرکت ایجاد شود. تأخیرهای بین فعالسازیها سرعت تابع onestep را تعیین میکند.
void loop(){
int i;
i=0;
while(i
این بخش موتور را یک دور کامل (در جهت ساعتگرد) میچرخاند.
کد کامل پروژه
#define A 2
#define B 3
#define C 4
#define D 5
#define NUMBER_OF_STEPS_PER_REV 512
void setup(){
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
}
void write(int a,int b,int c,int d){
digitalWrite(A,a);
digitalWrite(B,b);
digitalWrite(C,c);
digitalWrite(D,d);
}
void onestep(){
write(1,0,0,0);
delay(5);
write(1,1,0,0);
delay(5);
write(0,1,0,0);
delay(5);
write(0,1,1,0);
delay(5);
write(0,0,1,0);
delay(5);
write(0,0,1,1);
delay(5);
write(0,0,0,1);
delay(5);
write(1,0,0,1);
delay(5);
}
void loop(){
int i;
i=0;
while(i