یکشنبه, آبان 13, 1403
ادامه منو
    خانهپروژه های میکروکنترلر AVRپروژه با ماژول هاکنترل دور موتور dc با میکروکنترلر avr

    کنترل دور موتور dc با میکروکنترلر avr

    در این پروژه ما توسط ای سی L298 و میکروکنترلر atmega16 جهت چرخش (چپ گرد و راست گرد) و سرعت چرخش یک موتور dc را کنترل می کنیم. کنترل سرعت موتور با استفاده از pwm میکرو انجام می شود, بنابراین در این پروژه شما با نحوه راه اندازی و استفاده از pwm در میکرو avr اشنا می شوید.

    PWM چیست؟ PWM یا Pulse Width Modulation ( مدولاسیون عرض پالس ) یک موج مربعی است که به طور متناوب 0 و 1 می شود. دامنه این موج می تواند بر حسب نیاز ما متغیر باشد, که با تغییر Duty Cycle (نسبت سطح 1 در یک دوره تناوب) می توان برای کنترل موتور و… از ان استفاده کرد. به تصویر زیر دقت کنید بهتر متوجه می شوید :

    با اعمال موج های PWM بالا به درایور L298 می توانید توان یک موتور DC را بین ۰ تا ۱۰۰% تغییر دهید که این تغییر توان تاثیر مستقیمی بر سرعت موتور خواهد گذاشت.

     

    ای سی درایور L298 :

    همانطور که می دانید جریان خروجی پین های میکروکنترلرها محدود است و نمیتوان قطعاتی که نیاز به جریان زیادی برای راه اندازی دارند را مستقیما به میکرو وصل کرد. بنابراین ما نیاز به یک قطعه واسط داریم تا جریان مورد نیاز را ایجاد کند که به ان قطعه درایور می گویند.

    درایور L298  یکی از قطعات مناسب جهت راه اندازی موتور است که با توجه به جریان دهی مناسب ( تا یک آمپر در هر کانال ) می تواند نیاز بسیاری از پروژه ها را مرتفع سازد. این قطعه می تواند دو موتور را  به صورت مجزا راه اندازی کرده و جهت گردش و سرعت آنها را کنترل نماید. که این کنترل  توسط اعمال ولتاژ به چهار ورودی منطقی این قطعه صورت می گیرد( برای هر موتور دو ورودی ) که می توان خروجی میکروکنترلر یا مدارات حسگر را به صورت مستقیم به این چهار ورودی متصل نمود و به راحتی موتور را کنترل کرد.

    پین 1 : CURRENT SENSING A

    • از این پایه جهت کنترل جریان موتور A  استفاده می گردد. همچنین می توان این پایه را به صورت مستقیم به خط منفی مدار GND اتصال داد که در این صورت کنترلی بر روی جریان وجود ندارد

    پین 2 : OUTPUT 1

    • این پایه به یکی از ترمینالهای موتور A  متصل می گردد 

    پین 3 : OUTPUT 2

    • این پین به ترمینال دیگر موتور A متصل شده

    پین 4 : (SUPPLY VOLTAGE (VS

    • به پایه باید ولتاژ مورد نظر خود جهت اعمال به موتورها را متصل نمایید. این ولتاژ با توجه به  موتورهای مورد استفاده شما حداکثر تا 46 ولت می تواند افزایش یابد. برای ساخت رباتهای کوچک به طور معمول بین 6 تا 12 ولت است

    پین 5 : INPUT 1 TTL Compatible Inputs 1 to drive Motor A

    • این پایه باید به صفر یا پنج ولت متصل گردد که همراه با پین 7 می توانند جهت گردش موتور را مشخص نمایند

    پین 6 : ENABLE A TTL Compatible Enable Input for Motor A

    • این پایه جهت روشن و خاموش کردن موتور A  و در بیشتر مواقع جهت اعمل فرکانس  PWM  به موتور استفاده می گردد. پنج ولت موتور را روشن و صفر موتور را خاموش می کند

    پین 7 : INPUT 2 TTL Compatible Inputs 2 to drive Motor A

    • این پایه باید به صفر یا پنج ولت متصل گردد که همراه با پین 5 می توانند جهت گردش موتور را مشخص نمایند

    پین 8 : GND

    • اتصال به خط منفی مدار GND

    پین 9 : (LOGIC SUPPLY VOLTAGE (VSS

    • اتصال به 5 تا 7 ولت

    پین 10 : INPUT 3 TTL Compatible Inputs 1 to drive Motor B

    • این پایه باید به صفر یا پنج ولت متصل گردد که همراه با پین 12 می توانند جهت گردش موتور B  را مشخص نمایند

    پین 11 : ENABLE B TTL Compatible Enable Input for Motor B

    • این پایه جهت روشن و خاموش کردن موتور B  و در بیشتر مواقع جهت اعمل فرکانس  PWM  به موتور استفاده می گردد. پنج ولت موتور را روشن و صفر موتور را خاموش می کند

    پین 12 : INPUT 4 TTL Compatible Inputs 2 to drive Motor B

    • این پایه باید به صفر یا پنج ولت متصل گردد که همراه با پین 10 می توانند جهت گردش موتور B  را مشخص نمایند

    پین 13 : OUTPUT 3

    • این پایه به یکی از ترمینالهای موتور B  متصل می گردد

    پین 14 : OUTPUT 4

    • این پین به ترمینال دیگر موتور B  متصل می گردد

    پین 15 : CURRENT SENSING B

    • از این پایه جهت کنترل جریان موتور B  استفاده می گردد. همچنین می توان این پایه را به صورت مستقیم به خط منفی مدار GND اتصال داد که در این صورت کنترلی بر روی جریان وجود ندارد.

     

    شماتیک پروژه :

    همانطور که در شماتیک بالا می بینید, سه کلید برای راست گرد , چپ گرد و توقف موتور قرار داده شده و یک پتانسیومتر که با تغییر ان سرعت موتور تغییر خواهد کرد . کلیدها توسط سه مقاومت Pull up شده اند و درنتیجه زمانی که کلید وصل نیست پین های میکرو یک هستند و زمانی که کلید فشار داده شود پینی که کلید به ان متصل است صفر می شود. 

    در این پروژه ما فقط از یک موتور استفاده کردیم, بنابراین پین های مربوط به موتور B در ای سی L298 را نیاز نداریم .

    برای حفاظت از قطعات مدار لازم است که پین های خروجی L298 که به دو سر موتور متصل می شوند (OUT1 و OUT2) را مانند شماتیک بالا به 4 دیود و خازن متصل کنیم .

    توجه کنید که پین 9 ای سی L298 به 5 ولت متصل شده و پین 4 باید به ولتاژ مورد نیاز موتور ما (تا حداکثر 46 ولت) متصل شود که ما در شماتیک بالا به 12 ولت متصل کرده ایم .

    پین شماره 21 میکروکنترلر خروجی موج PWM ما هست (OC2) که به پین 6 یا ENA متصل شده است و با تولید موج های PWM مختلف سرعت موتور تغییر می کند.

    تصویر بزرگتر و واضح تر از مدار در فایل هایی که در انتها قرار داده شده وجود دارد که می توانید دانلود کنید

     

    برنامه این پروژه با کدویژن :

    در نرم افزار کدویژن یک پروژه جدید ایجاد کنید و در محیط کدویزارد میکروکنترلر را ATmega16 انتخاب کرده و فرکانس را 1 مگاهرتز تنظیم کنید. پین های 0 و 1 از پورت C را خروجی کنید و پین 7 از پورت D که برای تولید موج PWM ما می باشد را هم خروجی کنید. پین های پورت B که به کلیدها متصل هستند, خودشان ورودی هستند و لازم نیست در انها تغییری ایجاد کنید.

    در این پروژه با اندازه گیری ولتاژ انالوگی که به پین 40 میکرو یا ADC0 توسط پتانسیوتر اعمال می شود, موج PWM متناسب با ان تولید می کنیم. بنابراین لازم است که ADC میکرو را هم فعال کنیم, تنظیمات ADC در کدویزارد به صورت زیر باشد:

    توجه کنید که حتما تیک Use 8 bits را فعال کنید .

    میکرو ATMEGA16 دارای سه تایمر می باشد که از انها می توان برای تولید موج PWM استفاده کرد. خروجی PWM تایمر 0 پایه 4 می باشد و با نام OC0 نامگذاری شده است . تایمر 1 این میکرو از انجایی که 16 بیتی است 2 خروجی با نام های OC1A-OC1B دارد (پین های 18 و 19 میکرو) و تایمر 2 که 8 بیتی است و یک خروجی به نام OC2 دارد (پین 21) .

    ما در این پروژه از تایمر 2 میکرو یا OC2 برای ایجاد موج PWM استفاده می کنیم, که تنظیمات کدویزارد برای فعال شدن ان به صورت زیر است :

    برنامه نهایی این پروژه به صورت زیر می باشد :

    توابع و دستورات استفاده شده در برنامه بطور کامل توضیح داده شده است و نیاز به توضیح دیگری نیست ولی اگر در مورد هر قسمت از این پروژه سوالی داشتید می تونید در نظرات مطرح کنید. موفق باشید…

    کلیپ شبیه سازی :

     

    دانلود فایل ها

    پسورد فایل زیپ : www.emic.ir

     

     

    نظر یادتون نره …

    عابد رازانی
    عابد رازانیhttps://emic.ir/
    فارغ التحصیل کارشناسی الکترونیک از دانشکده باهنر شیراز و علاقمند به برنامه نویسی و طراحی مدارات الکترونیکی, در حال حاضر به تولید محتوای آموزشی و طراحی و انجام پروژه مشغول هستم.

    27 نظرات

    1. سلام.خسته نباشید.اگر بخوایم این پروژه رو با صفحه ال سی دی هم راه بندازیم که سرعت رو بهمون نشون بده باید چیکار کنیم؟

    2. سلام آقای رازانی برای تنظیم کردن سرعت های دلخواه مثل 15 RPM یا 30 RPM بجای استفاده از پتاسیومتر چه دستوراتی لازم است؟

    3. باید تایمر ۱ رو هم فعال کنیم ،که تایمر 1 این میکرو از انجایی که 16 بیتی است 2 خروجی با نام های OC1A-OC1B دارد. میشه از رجیسترOC1A استفاده کرد، مابقی کد ها مانند انچه برای تایمر۲ نوشتیم رو برای تایمر ۱ هم می نویسیم. از پین های B3و B4و B5 برای چپ گرد و راست گرد موتور دوم استفاده می کنیم،از پین A1برای تغییر سرعت موتور دوم که به پتانسومتر متصل است استفاده می کنیم. D6 میکرو را به ENB ای سی l298 متصل می کنیم که پایه 11 درایور هست برای روشن و خاموشن کردن و pwm و پین های C2 وC3 میکرو را به پایه های به پایه های 11و 12 درایور برای تغییر گردش موتور استفاده می کنیم.

    4. سلام ممنون بابت توضیحات عالی و کاملتون
      فقط ی سوال داشتم اگر بخوایم موتور دوم رو هم تو این برنامه کنترل کنیم توی کد نویسی و پین ها و رجیستر ها نیاز هست چه تغییراتی ایجاد کنیم؟ممنون

    5. سلام مهندس. برای راه انداز پنج موتور به روش زیر چگونه می توانیم پیاده سازی کنیم؟قصد داریم 5 موتور DC را به وسیله PWM و میکروکنترلر ATMEGA16 کنترل کنیم ، همانگونه که میدانید این
      میکرو دارای 2 خط PWM هست . برنامه ای بنویسید که در آن با استفاده از تابعی به نام
      PWM_Generat(m1_pwm,m2_pwm,m3_pwm,m4_pwm,m5_pwm) امکان ایجاد 5 خط
      PWM وجود داشته باشد ، پارامتر های m_pwm duty cycle سیگنال های pwm را بر حسب درصد تعیین می
      کند ، مثلا PWM_Generat(100,50,10,20,70) سیگنال PWM موتور 1 را با duty cycle 100 درصد و
      موتور 2 را با 50 درصد و … درایو می کند

    6. سلام. در مورده استفاده از خازن گفتید که برای محافظت هست. میشه لطفا بیشتر در مورد نقش خازن و بود و نبودش در مدار توضیح بدید و اینکه چرا 100نانو فاراد انتخاب کردید؟

    7. سلام وقت بخیر
      عرض کنم اگه بجای موتور dc از استپ موتور استفاده کنیم چون از هر 4 تا خوروجی درایو استفاده میکنیم ایا باید دوتا pwm با اختلاف 180 درجه به پایه های درایو بدیم یا همون یدونه pwm رو مشترک به هردوتاش بدیم کار میکنه و میشه سرعت رو کنترل کرد قسمت چپگرد راست گرد رو میخواهم حذف کنم .
      با تشکر

    8. سلام واقعا عالی بود. ساده روان با جزئیات کامل دقیق مخصوصا پایه درایور و برنامه نویسی. دست گلتون درد نکنه. وقتی این وبسایتو باز میکنم کیف میکنم. perfect

    9. با سلام
      اگه ممکنه همین اموزشو بدون استفاده از کلید توضیح بدید که جهت و سرعت چرخش موتور فقط از طریق کد نویسی کنترل بشه
      ممنون

      • سلام, سوالتون را درست متوجه نشدم. منظورتون اینه که یک سرعت و جهت پیش فرض بهش بدیم و کلیدها را حذف کنیم و فقط با همون سرعت و جهت مورد نظر بچرخه؟ یا چیز دیگه ای منظورتون بوده

    10. سلام داداش… دمت گرم که این تایمر کانتر و ای دی سی رو با تصویر توضیح دادی من یه کم متوجه شدم… چون مبتدی هستم… تازه امروز یه ال ای دی چشمک زن رو تونستم راه اندازی کنم… داداش یه چیزی رو خواهشا” اگه میتونی با تصویر برام توضیح بده خیلی کلافم کرده… ببین الان تو این پروژه … میکرو 10 و 11 صفر و پنج ولت هستش.. حالا ال 298 هم شماره چهارش 12 تا 46 ولت… باز شماره ی 9 این ال298 پنج ولت…. خوب اینا چه جوری میشه؟ یعنی باید 12ولت بدم به پایه ی چهارمه 298 و بعد 5ولت جداگانه بدم به پایه ی دهم میکرو … بعدش 5ولت جداگانه بدم به پایه ی نهم ال298 و زمینهارو یکی کنم با هم… یکی اینو متوجه نمیشم…. دیگه اینکه مثلا” پتانسیومتر دو قطب مثبت منفیش به کجا وصل شده… یا اینکه اون یکی سره کلیدهای راست و چپگرد و توقف به کجا وصل شده… مقاومتها اون یه سرشون به کجا وصل شده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
      ممنون میشم راهنماییم کنی.

      • سلام, اگه موتوری که استفاده می کنید 12 ولت است باید به پین 4 ای سی l298 دوازده ولت اعمال کنید و همین 12 ولت رو هم با یک ای سی رگولاتور 7805 به 5 ولت تبدیل کنید و برای میکرو و تغذیه l298 (پین 9) استفاده کنید. در مورد پتانسیومتر هم دو سرش به مثبت 5 ولت و زمین متصل شده (اون مثلث که به پایه بالایی متصل شده نماد 5 ولت است و پایه پایین هم به نماد زمین متصل هست). برای کلیدها و مقاومت ها هم همینطور است, یعنی یک سر کلیدها و مقاومت ها به میکرو متصل هست و سر دیگر کلیدها به زمین و سر دیگه مقاومت ها به مثبت 5 ولت متصل هست

    11. واقع دستتون درد نکنه عااااااالی بود چسسسسسسبید
      من نه می دونستم pwm چیه نهadc ولی با همین یه صفحه کیلت داستان دستم اومد و دیگه برام گنگ نیستن
      کاش همه اموزشها اینجوری بود
      انقد که خوب بود من قشنگ از روش جزوه نوشتم می خونم و می فهمم
      بازم تشششششششکر

    ارسال دیدگاه

    لطفا نظر خود را وارد کنید!
    لطفا نام خود را اینجا وارد کنید

    spot_img