کنترل سرعت موتور DC
در این بخش نحوه راه اندازی موتور DC به همراه پروژه هایی برای نمونه, توسط تیم الکترونیک و برنامه نویسی الکترونیک 98 برای شما علاقه مندان به پروژه های میکروکنترلر AVR آماده شده است. پس از اجرای این پروژه شما با نحوه تولید موج PWM و نحوه اتصال و راه اندازی تراشه L293D توسط میکروکنترلر AVR آشنا خواهید شد
در این پروژه قصد داریم تا سرعت یک موتور DC را از صفر تا مقدار بیشینه افزایش دهیم و دوباره از مقدار بیشینه به مقدار صفر برسانیم و سپس آن را در جهت معکوس تا مقدار بیشینه افزایش دهیم. این مدار شامل یک تراشه L293D است که از سویی به میکروکنترلر ATmega16 و از سویی دیگر به یک موتور DC متصل شده است. در ادامه به نحوه برنامه نویسی در محیط های نرم افزار Code Vision و نرم افزار Bascom-AVR به همراه شرح عملکرد برنامه نوشته شده می پردازیم.
لیست قطعات مورد نیاز:
:: میکروکنترلر ATmega16 | خرید
:: تراشه L293D | خرید
:: موتور DC | خرید
برنامه نویسی در محیط Code Vision
در ابتدا برای شروع برنامه نویسی باید نوع پورت ها را در محیط Code Wizard AVR تعیین کنید. برای اینکار گزینه New را از منوی File انتخاب کنید و در پنجره باز شده گزینه Project را فعال نمایید, سپس در پنجره باز شده دکمه Yes را فشار دهید. در اامه در زبانه Chip, میکروکنترلر ATmega16 را انتخاب کنید و در زبانه Ports, پایه ها را به صورت نشان داده شده در شکل زیر پیکربندی نمایید.
حال برای ایجاد موج PWM, از تایمر صفر استفاده کنید و آن را مانند شکل زیر پیکربندی نمایید.
توجه : به علت استفاده از Portb.3 به عنوان تولید کننده PWM این پایه را به صورت خروجی پیکربندی کنید.
در ادامه از منوی File گزینه Generate, Save and Exit را انتخاب کنید و تغییرات نشان داده شده در برنامه را در آن اعمال نمایید تا نوشتن برنامه به صورت زیر به پایان برسد:
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 |
#include #include void main(void) {int i; PORTB=0x00; DDRB=0x08; PORTD=0x00; DDRD=0x03; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 15.625 kHz // Mode: Fast PWM top=FFh // OC0 output: Non-Inverted PWM TCCR0=0x6C; TCNT0=0x00; OCR0=0x00; while (1) { PORTD.0=1; PORTD.1=0; for (i=1;i<255;i++) { OCR0=i; delay_ms(40); } for (i=255;i>1;i--) { OCR0=i; delay_ms(40); } OCR0=0; delay_ms(50); PORTD.0=0; PORTD.1=1; for (i=1;i<255;i++) { OCR0=i; delay_ms(40); } }; } |
شرح برنامه میکروکنترلر در محیط Code Vision به زبان C
خط 19 و 20 برنامه : جهت حرکت موتور را مشخص می کنیم، به اینصورت که با صفر و یک کردن دو پایه Portd.0 و Portd.1 که در برنامه به عنوان خروجی تعریف شده اند، به تراشه L2393D دستور می دهیم که موتور را به سمت راست و یا چپ بچرخاند.
خط 21 الی 25 برنامه : یک حلقه در برنامه تعریف می کنیم تا سرعت موتور را به کمک تولید پالس PWM به تدریج از صفر تا 12v ولت افزایش دهیم.
خط 26 الی 30 برنامه : اینبار توسط یک حلقه دیگر سرعت موتور را به کمک تولید پالس PWM به تدریج از 12 ولت تا 0v کاهش می دهیم.
خط 31 برنامه :موتور متوقف خواهد شد.
خط 32 برنامه : برنامه به مدت 50 میلی ثانیه متوقف خواهد شد.
خط 33 و 34 برنامه : با تغییر وضعیت دو پایه Portd.0 و Portd.1 جهت چرخش موتور را تغییر خواهیم داد.
خط 35 الی 39 برنامه : توسط این دستور با تعیین یک حلقه, سرعت موتور به تدریج از صفر تا 12v ولت افزایش خواهد یافت.
برنامه نوشته شده در محیط BASCOM-AVR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$regfile = “m16def.dat” $crystal = 4000000 Config Portd = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 256 Dim Cnt As Word Portd.1 = 1 Portd.1 = 0 For Cnt = 0 To 255 Pwm1a = Cnt Waitms 40 Next For Cnt = 255 To 0 Step -1 Pwm1a = Cnt Waitms 40 Next Pwm1a = 0 Wait 1 Portd.1 = 0 Portd.1 = 1 For Cnt = 0 To 255 Pwm1a = Cnt Waitms 40 Next End ‘end program |
شرح عملکرد برنامه در محیط BASCOM-AVR به زبان بیسیک BASIC
در این پروژه ابتدا پایه های ورودی تراشه L293D را طوری تحریک می کنیم که موتور در جهت مستقیم حرکت کند. سپس سرعت موتور را با تغییر چرخه کاری موج PWM از صفر تا صد در صد, از صفر تا مقدار ماکزیمم افزایش می دهیم, بعد به همین ترتیب سرعت آن از مقدار ماکزیمم تا صفر کاهش داده می شود. پس از رسیدن سرعت آن به صفر با تغییر جهت دوباره پروسه قبلی تکرار می شود.