در اين جلسه، با توضيح در مورد نحوهي انجام تنظيمات اوليه در CodeWizard، مطلب راه اندازي موتورهاي ربات به كمك PWM را تكميل خواهيم كرد...
به نام خدا
با عرض سلام خدمت دوستان عزيزم
در اين جلسه، با توضيح در مورد نحوهي انجام تنظيمات اوليه در CodeWizard، مطلب راه اندازي موتورهاي ربات به كمك PWM را تكميل خواهيم كرد.
همانطور كه در جلسهي پيش هم متذكر شديم، در اينجا مجال نيست تا تمام مباحث مربوط به PWM و تايمرها را باز كنيم و مفصل به آنها بپردازيم، به همين خاطر در اين جلسه قسمتي از تنظيمات در CodeWizard را بدون توضيح آموزش ميدهيم.
براي انجام تنظيمات به كمك CodeWizard، ابتدا بايد طبق روندي كه در جلسهي 26 توضيح داده شد، يك پروژهي جديد در CodeVision بسازيد.
پس از انجام تنظيمات ساير لبهها (مانند Ports، Chip و .... ) در CodeWizard، لبهي Timers را باز كنيد.
همانطور كه ميبينيد ميكروكنترلر ATmega16 داراي 3 تايمر مجزا است و ما براي توليد PWM بايد از اين تايمرها استفاده كنيم. تايمرها كاربردهاي متعددي دارند، و يكي از مهمترين مباحث در ميكروكنترلر هستند، ما هم در مورد تايمرها در جلسات آينده مفصل توضيح خواهيم داد. اما در اين جلسه فقط استفاده از تايمرها را براي ايجاد PWM براي كنترل موتورهاي ربات استفاده ميكنيم.
Timer0 مربوط به رجيستر OCR0 است و بايد به شكل زير تنظيم شود.
نكتهاي كه در مورد تنظيم هر 3 تايمر بايد رعايت شود، اين است كه در بخش "Clock Value" بايد پايينترين فركانس را انتخاب كنيد. در اين مورد توضيح مختصري ميدهم، ولي اگر عزيزان اين بند را متوجه نشوند اهميت زيادي ندارد: اندازهي فركانسي كه انتخاب ميكنيد در اين بخش، در حكم اندازهي همان Delayهايي است كه براي توليد PWM به صورت عادي (كه در ابتداي جلسهي قبل توضيح داديم) استفاده ميكنيم. يعني در حقيقت طول موج را در نمودار ولتاژ بر زمان تعيين ميكند. هر چه فركانس بالاتري را انتخاب كنيد، طول موج كمتر ميشود. در عمل ديده شده كه هر چه فركانس پايينتر باشد و در نتيجه طول موج بيشتر باشد، موتورها بهتر هدايت ميشوند. به همين خاطر در بالا گفته شد كه دوستان پايينترين فركانس را براي "Clock Value" انتخاب كنند.
تايمر1 بايد به شكل زير تنظيم شود. دقت كنيد كه ممكن است در بخش Clock Value شما فركانسي كه در شكل زير نمايش داده شده است را در گزينهها نداشته باشيد، ولي همانطور كه گفته شد فقط مهم اين است كه شما پايينترين فركانس را انتخاب كنيد.
همانطور كه ميبينيد، تايمر1 داراي دو خروجي مجزا است كه رجيسترهاي مربوط به آنها OCR1AL و OCR1BL هستند.
تايمر2 ميز به شكل زير تنظيم ميشود و مانند تايمر0 فقط يك خروجي دارد.
يا سگ نگهبان نيز يكي از مباحث مربوط به تايمرهاست كه در جلسات آينده به آن خواهيم پرداخت.حال كه همهي تنظيمات لازم را در CodeWizard انجام دادهايد، "Generate, Save and Exit" انتخاب كنيد و وارد فضاي برنامه نويسي شويد.
نكتهي بسيار مهم: براي كنترل هر موتور، علاوه بر يك پايهي PWM، يك خروجي معمولي نيز لازم داريم تا بتوانيم به وسيلهي اين دو پايه و به كمك درايور موتور، اختلاف پتانسيل مورد نظر را بر روي دو پايهي موتور برقرار كنيم. اين 2 پايه را به دو پايهي ورودي L298 متصل ميكنيم و دو پايهي موتور را نيز، به دو پايهي خروجي L298 متصل ميكنيم. حال ميتوانيم موتور را به وسيلهي ميكروكنترلر با سرعت دلخواه كنترل كنيم. به عنوان مثال اگر بخواهيم موتور ما تقريباً با سرعت نصف بچرخد، و پايههاي PD.6 و PD.7 (مربوط به رجيستر OCR2) را به L298 متصل كرده باشيم،برنامهي زير را بايد بنويسيم:
و اگر بخواهيم موتور ما با همين سرعت و در جهت معكوس بچرخد، مينويسيم:
براي درك اين موضوع دقت كنيد كه در اين حالت چه ولتاژي توسط L298 بر روي موتورها قرار داده ميشود. همانطور كه ميدانيد، سرعت و جهت چرخش موتور وابسته به اختلاف ولتاژي است كه بر روي پايههاي موتور قرار داده ميشود. |
تا به اينجا مباحث پايهاي در ميكروكنترلرهاي AVR مطرح شده است و همين آموختههاي دوستان، نيازهاي اوليهي شما عزيزان را براي ساخت رباتهاي نسبتاً حرفهاي برطرف ميسازد.
از اين به بعد، مطالب به با دامنهي گستردهتري پيرامون ساير مباحث مربوط به رباتيك،ارائه خواهد شد. در هر جلسه مطلب جديدي را مطرح كرده و در مورد آن توضيح ميدهيم و ديگر مطالب به شكل كنوني به صورت زنجيرهوار و وابسته به هم، نخواهند بود.
طبيعتاً براي درك هر مطلبي نياز به مقدمات و پيشنيازهايي است، كه در ابتداي هر جلسه پيش نيازهاي مطالبي كه در ان جلسه قرار است مطرح شوند، ذكر خواهد شد، تا به اين ترتيب پراكندگي مطالب، دوستان را دچار سر در گمي نكند.
مجدداً از دوستان عزيزي كه مخاطب اين بخش هستند و مطالب را با ما دنبال ميكنند، تقاضا ميشود هر پيشنهاد و انتقادي براي ارتقا سطح كيفي اين بخش دارند، با ما در ميان بگذارند.
تا جلسهي آينده خدا نگهدار.
دوست شما، فراز اميرغياثوند