در این پست از سایت اِمیک, راه اندازی استپر موتور یا موتور پله ای را با استفاده از ای سی درایور L298 و میکروکنترلر AVR اموزش خواهیم داد. تفاوت استپر موتور با موتورهای DC معمولی در این است که بر خلاف موتور های DC معمول دارای جاروبک یا براش (brush) استپر موتورها نوعی موتورهای براشلس یا بدون جاروبک هستند. همچنین موتورهای DC برای رسیدن به دور در دقیقه (RPM) بالا طراحی می شوند ولی استپر موتورها برای رسیدن به گشتاور (torque) بالا طراحی شده اند و در نتیجه این طراحی سرعت پایین تری دارند اما در مجموع حرکت آنها دارای دقت بیشتری است. استپر موتورها دارای کاربردهای مختلفی می باشند و در دستگاه هایی که نیاز به دقت دارند مانند CNC و یا پرینترهای 3D و… استفاده می شوند. در پروژه هایی که در اینده قرار خواهیم داد, حتماً از استپر موتور استفاده می شود بنابراین این مطلب را با دقت مطالعه کنید.
همانطور که گفته شد ما در این پروژه برای راه اندازی استپر موتور از ای سی درایور L298 استفاده خواهیم کرد. قبلا در این پست بطور کامل در مورد این ای سی توضیح داده شد که می توانید مطالعه کنید. ما در این پروژه از استپر موتور 5 ولت 28BYJ-48 استفاده می کنیم که برخی از مشخصات ان را در زیر مشاهده می کنید:
- مدل : 28BYJ-48
- ولتاژ مجاز : 5VDC
- تعداد فاز : 4
- نرخ تغییرات سرعت : 1/64
- زاویه چرخش : 5.625° /64
شماتیک پروژه راه اندازی استپر موتور با L298 و میکرو AVR :
قبل از قرار دادن شماتیک بهتر است ابتدا با سیم های این استپر موتور و نحوه چرخش ان اشنا شویم. این استپر موتور دارای 4 فاز می باشد بنابراین دارای 4 سیم برای هر کدام از فازها و یک سیم مشترک می باشد که با توجه به برنامه نویسی ما باید این سیم مشترک را به مثبت یا منفی متصل کنیم, به تصویر زیر دقت کنید :
سیم مشترک ما سیم قرمز است که ما در این پروژه باید به منفی متصل کنیم. برای چرخش موتور ما باید 4 سیم دیگر را به انها مقادیری که در جدول زیر امده را اعمال کنیم.
معادل هگز | Orange | Yellow | Pink | Blue | مقدار |
0x01 | 0 | 0 | 0 | 1 | 1 |
0x03 | 0 | 0 | 1 | 1 | 2 |
0x02 | 0 | 0 | 1 | 0 | 3 |
0x06 | 0 | 1 | 1 | 0 | 4 |
0x04 | 0 | 1 | 0 | 0 | 5 |
0x0C | 1 | 1 | 0 | 0 | 6 |
0x08 | 1 | 0 | 0 | 0 | 7 |
0x09 | 1 | 0 | 0 | 1 | 8 |
برای اینکه استپر موتور ما یک گام که برای این موتور برابر است با 5.625 درجه بچرخد باید یک بار هر 8 مقدار گفته شده در جدول بالا به سیم های استپر موتور اعمال شود. بنابراین برای اینکه استپر موتور یک دور کامل (360 درجه) بزند باید 64 گام (5.625*64=360) حرکت کند یا به عبارت دیگر باید 64 بار هر 8 مقدار جدول بالا به سیم های استپر موتور اعمال شود.
برای چپگرد و راستگرد کردن استپر موتور فقط کافی است که مقادیر جدول بالا را برعکس به ان اعمال کنیم یعنی اگر با اعمال مقادیر 1 تا 8 استپر موتور ما راستگرد می چرخد, در صورتی که مقادیر را از اخر اعمال کنیم یعنی از 8 تا 1 استپر موتور چپگرد می چرخد.
شماتیک با استفاده از ای سی l298 :
(تصویرها را ذخیره کنید تا بتونید در اندازه بزرگتر مشاهده کنید)
در شماتیک بالا نحوه اتصال استپر موتور و ای سی L298 و میکرو ATmega16 را به هم مشاهده می کنید, برای تغییر چرخش موتور از راستگرد به چپگرد می توانید از کلید متصل به پین 40 میکرو (پین 0 پورت A) استفاده کنید. از انجایی که موتور ما با ولتاژ 5 ولت کار می کند, بنابراین پین Vs ای سی L298 را هم به VCC متصل می کنیم. در عمل شما باید پین های 10 و11 میکرو را به ترتیب به ولتاژ مثبت و منفی تغذیه متصل کنید(در شبیه سازی این پین ها وجود ندارند). نحوه اتصال سیم های استپر موتور به ای سی L298 هم که مشخص شده است, طبق رنگ بندی مشخص شده سیم ها را متصل کنید و حتما سیم مشترک یا قرمز را به منفی تغذیه متصل کنید. برای این پروژه حتما از منبع تغذیه با جریان دهی مناسب استفاده کنید.
شماتیک با استفاده از ماژول ای سی L298 :
من خودم برای تست عملی پروژه از ماژول این ای سی استفاده کردم که کار را بسیار راحت تر میکنه. شماتیک این پروژه با ماژول L298 به صورت زیر است:
توجه کنید که حتما جامپرهای پین های ENA و ENB ماژول (در تصویر زیر با 2 و 3 مشخص شده اند) را قرار بدید تا خروجی ماژول فعال بشه و اگر جامپری که در تصویر زیر با 1 نامگذاری شده را بذارید دیگه لازم نیست که به ترمینال VCC مازول (5V+) ولتاژی اعمال کنید. نحوه اتصال سیم های استپر موتور به ماژول هم که با توجه به رنگ هاشون به خروجی های OUT1 تا OUT4 متصل کنید.
برنامه پروژه با کدویژن :
ما در این پروژه از میکروکنترلر ATmega16 با فرکانس داخلی 1 مگاهرتز استفاده کرده ایم. پین ها 0 تا 3 از پورت C برای اتصال به ماژول باید خروجی باشند و پین 0 پورت A را برای اتصال کلید باید ورودی کنیم و مقاومت بالاکش ان را هم فعال کنیم. در زیر برنامه نهایی این پروژه را مشاهده می کنید :
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 |
////////// WWW.EMIC.IR ////////// #include <mega16.h> #include <delay.h> void main(void) { unsigned char step[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; //ارايه روبرو شامل 8 مقدار مي باشد که براي راه اندازي استپر موتور بايد اين مقادير به ترتيب به پايه هاي استپر موتور اعمال شود// int i ; //FOR تعريف متغير براي شمارنده حلقه// DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (1<<PORTA0); DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0); PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); while (1) { if(PINA.0==1) { //زده نباشد شرط روبرو اجرا مي شود A در صورتي که کليد متصل به پين 0 پورت// for(i=0;i<=7;i++) { PORTC=step[i]; //مي ريزد C دستور روبرو مقادير ارايه بالا را به ترتيب روي پورت// delay_ms(2); } } if(PINA.0==0) { //زده باشد شرط روبرو اجرا مي شود A در صورتي که کليد متصل به پين 0 پورت// for(i=7;i>=0;i--) { PORTC=step[i]; //مي ريزد C دستور روبرو مقادير ارايه بالا را به ترتيب روي پورت// delay_ms(2); } } } } |
توضیحات قسمت های مهم برنامه نوشته شده, سوالات خودتون رو می تونید در قسمت نظرات مطرح کنید
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
اگه یک گام استپ موتور 1.8 درجه باشه چه تغییری در کد باید ایجاد بشه
سلام خسته نباشید
زاویه چرخش موتور رو چطوری تنظیم کنم؟
SensA ,SensB روی برد نیست. ENA,ENB هم جامپر شدن نیازی هست که جامپر رو برداریم و به vcc وصل کنیم؟
بعد از انجام پروژه موتور فقط میلرزه ولی شافت نمیچرخه
سلام اگه سیم مشترک به vccوصل کنیم برنامه باید تفییر بدیم ؟ ممنون از اموزش
سلام, بله
سلام رنگ سیم هارو چجوری میشه عوض کرد در پروتئوس
سلام, روی سیم دابل کلیک کن و از قسمت Colour رنگش را انتخاب کنید
سلام
این برای موتور 2 فاز کار میکنه ؟
سلام : توضیحات خیلی خوب بود
سلام، خیلی ممنون از آموزش خوبتون.
آیا میشه با تغییر مقدار delay ، سرعت موتور را کنترل کرد؟ راه اصولی آن چیست؟
تشکر از emic.
سلام خسته نباشد تشکر از سایت خوبتون من از مدل 12 ولت همین موتور استفاده می کنم ایا رنگ سیم ها به همین شکل است
سلام, فکر می کنم بله خوب اگر موتور را دارید خودتون بررسی کنید
سلام چطوری میشه که دو استپ موتور رو نسب به هم تنظیم کرد مثلا یک فلز گردی شکل که چندتا سوراخ دراه وصله به استپ موتور و استپ موتور دیگه یک قطعه وصله به اون که از تک تک اون سوراخا می گذره ؟؟؟
سلام, من دقیقا نمیدونم چه کاری می خواهید بکنید ولی مطمعنا میشه فقط باید برنامشو بنویسید حالا می تونید برای هر دو استپ موتور از یک میکرو استفاده کنید یا اینکه برای هر کدام از میکروکنترلر جداگانه استفاده کنید
سلام
یه دوستی داشتیم که توی مراسم ختم پدرم به جای تسلیت گفتن همش می پرسید راستی کفن رو چند خریدین؟ چقدر گرفتن میت رو شستن ؟ آیا جنازه قابل فروش نیست؟ قبر چنده؟
پرسش شما هم مثل همونه.
برادر گلم برو تحقیق و پژوهش کن و جواب سوالاتت رو در جایی که مربوط به اون میشه بپرس.
سلام میشود بجای کلید دستی از چشمی استفاده کرد
ودوم اینکه ایا سرعتش قابل تغییر است
سلام, منظورتون رو از چشمی متوجه نشدم و در این پروژه امکان کنترل سرعت وجود ندارد برای کنترل سرعت باید به پین های ENA و ENB موج PWM اعمال کنید. قبلا یک پروژه برای کنترل موتور DC قرار داده بودم که امکان کنترل سرعت هم وجود داشت, می تونید اون پست را در اینجا مشاهده کنید.