هدف پروژه: آشنایی با موتور های پله ای و نحوه راه اندازی آن ها. روال کار به این صورت است که توسط آی سی LM298 یک موتور پله ای را درایو می کنیم. توسط ترمینال نامینیک از داخل کامپیوتر سرعت و جهت موتور را تعیین می کنیم. برای اطلاعات بیشتر در مورد ترمینال، سایت را ببینید.

سخت افزار استفاده شده: در این مثال از برد آموزشی avr شرکت نامینیک مبتنی بر تراشه ATMEGA32 استفاده شده است. آی سی LM298 روی برد موجود است و قبلا در مورد آن صحبت کرده ایم. ورودی های کنترلی این آی سی به پین های صفر تا 5 پورت c وصل است. پورت سریال میکرو نیز به کابل USB برای ارتباط با کامپیوتر متصل می شود.

کتابخانه های مورد نیاز: کتابخانه خود میکرو که در خط 9 برنامه دیده می شود. و کتابخانه های تاخیر و توابع ورودی خروجی در خطوط 10 و 11.

تشریح کد: آی سی LM298 برای راه اندازی موتور های DC بوده و ما در اینجا فقط به عنوان بافر و تقویت جریان از آن استفاده کردیم. ضمن اینکه جریان دهی موتور های پله ای معمولی موجود در بازار بسیار پایین تر از قدرت این آی سی است و حتی با 4 ترانزیستور معمولی نیز می توان این موتور ها را راه اندازی کرد.

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

1-راه اندازی موجی        2-راه اندازی کامل       3-راه اندازی نیم پله 

ما فقط راه اندازی  موجی یا اصطلاحا تک بیتی را مورد برسی قرار می دهیم. موتورهای پله ای تک قطبی معمولا 6 پایه دارند. 2 پایه به نام com که به تغذیه وصل می شوند. هر پایه com با دو سیم پیچ مشترک است و سر دیگر سیم پیچ ها بیرون موتور آمده اند که به ترتیب پایه  com خودشان A، B ، C وD نامگذاری می شوند. در حالت راه اندازی موجی ابتدا مثلا ترمینال  A، 1  شده و بقیه صفر می شوند. در ادامه ترمینال B یک شده و بقیه صفر می شوند و همین طور این چرخه ادامه می یابد. سرعت پالس ها سرعت چرخش موتور را مشخص می کند. البته این سرعت حد مشخصی دارد که در دیتاشیت موتور ها موجود است و هرچه سرعت بالاتر رود، گشتاور کاهش می یابد. منحنی این مسائل نیز در دیتاشیت ها موجود است. مثلا برای یک موتور پله ای 20 پالس بر دور قسمتی از دیتاشیت به این شرح است: ولتاژ نامی 3 ولت. گشتاور نگهدارنده در حالت راه اندازی کامل 1.6 میلی نیوتون متر. حداکثر سرعت در ولتاژ نامی 1500 پالس بر ثانیه (در این حالت گشتاور فقط 0.2 میلی نیوتون متر. یک منحنی تقریبا خطی از سرعت 0 و گشتاور 1.6 تا گشتاور صفر و منحنی از نقطه ای که دیدید رد می شود (1500 و 0.2)). حد اکثر سرعت در 2.5 برابر ولتاژ نامی 5000 پالس بر ثانیه (گشتاور 0.2 میلی نیوتون متر.). اینرسی روتور 9 نانو کیلوگرم بر متر مربع و فرکانس رزونانس در حالت بی باری 140 هرتز (با توجه به اینرسی روتور و بار روی شفت محاسبه فرکانس رزونانس جدید مهم است). البته برای ما ایرانی ها که کار ها را هردمبیل انجام می دهیم همان محدویت 1500 پالس در یک ثانیه بس است.( اصلا نیازی هم به دیتاشیت نبود! مهم نیست کارخانه سازنده چه ساخته و در چه مواردی استفاده می شود و اصلا چگونه استفاده می شود، بلکه با سعی و خطا این 1500 را هم خودمان به دست می آودیم!!؟) .  راه اندازی کامل مانند راه اندازی موجی است ولی در هر لحظه فقط دو ترمینال 1 است و این دو 1 پشت سر هم ترمینال ها را به ترتیب می پیماید. در حالت نیم موج می توانید تعداد پله های لازم برای حرکت 360 درجه ای را دو برابر کنید. که بحث ما نیست و در اینترنت می توانید بیابید. حالات دیگری هم هستند که می توانید تعداد پالس بر دور را به چند میلیون برسانید که در ابتدای مقاله بحث شد. ضمن اینکه عملا دیگر پالسی نداریم و کارمان شبه آنالوگ می شود و چه بسا استفاده از موتور DC مناسب تر از تحمل سختی درایو موتور پله ای در این حالت ها باشد.

می پردازیم به برنامه. در تابع main بعد از مقدار دهی اولیه (خط 148)، چیزهایی در ترمینال چاپ می شود (خطوط 153 و 154). بعد راهنمای برنامه در ترمینال چاپ می شود. هر عددی بین 1 تا 7  را در ترمینال تایپ کنید، روشن و خاموش بودن موتور، جهت چرخش آن و تعداد پالس در ثانیه برای شما مشخص می شود. بجز عدد HELP برنامه.


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
void main(void)
{
 
init_variable();
 
// Global enable interrupts
#asm("sei")
 
printf("WWW.NAMINIC.COMnr");
printf("STEPER MOTOR TEST.r");
 
show_help();
 
while (1)
      {
         printf("nrpress any key:");
         gets(&state,1);
         delay_ms(400);
          
         if(state>='1' && state<='7')
         {
            switch(state)
            {
                case '1':
                    start_stop();
                    break;
                case '2':
                    reverse_aim=~reverse_aim;
                    for(j=0;j<1000;j++);
                    break;
                case '3':
                    i_speed();
                    break;
                case '4':
                    d_speed();
                    break;
                case '5':
                    motor_inf();
                    break;   
                case '6':
                    show_help();
                    break;
                case '7':
                    break;
                default:
                 
            }
            if(state!='5')
            {
                 motor_inf();
            }
         }
         else
         {
            printf("nr--------This key is incorrect. Press '6' to see HELP");
         }
         if(state=='7')
         {
            PORTC &=0xC0;
            printf("nr--------The program ENDED.");
            TIMSK &=0xFE;
            TCCR0=0x00;
            while(1);
         }
      }
}

دانلود سورس کد

در  اینجا شما میتوانید سورس برنامه را دریافت