رباتیک والکترونیک روبواچ پیRoboHp رباتیک والکترونیک |
||||||||||
جمعه 27 بهمن 1391برچسب:آموزش برنامه نویسی ربات مسیریاب,آموزش برنامه نویسی به زبانc,آموزش کدویژن,آموزش برنامه نویسی,robohp, :: 19:48 :: نويسنده : پهلوان پور
به نام خدا ابتدا با توابعي كه براي ايجاد وقفه در اجراي دستورات برنامه توسط CodeVision براي كاربران در نظر گرفته شده آشنا ميشويم. delay_ms( ); while(1) تنها نكتهي بسيار مهم در استفاده از توابع delay اضافه كردن هِدِرفايل Header file باعنوان delay.h به برنامه است.( در مورد هدر فايلها هم در آينده توضيح خواهيم داد، اما در اين جلسه هيچ توضيحي در مورد آن نميدهيم تا از بحث اصلي يعني PWM منحرف نشويم.) براي اين كار، جمله كه اولين جملهي برنامهي شما است را پيدا كنيد. (اين جمله را CodeWizard در برنامهي شما نوشته است). حال كافيست اين جمله را درست زير ان تايپ كنيد: دقت كنيد كه اين دستور نيازي به « ; » ندارد !! با آموختن تابع delay، ديگر شما ميتوانيد هر ولتاژي را كه ميخواهيد بر روي پايههاي خروجي ايجاد كنيد. البته دوستان دقت داشته باشند كه ولتاژي كه با تكنيك PWM شبيه سازي ميشوند، در حقيقت ولتاژ خاصي نيستند و فقط شبيه سازي شدهي ولتاژهاي مختلف هستند. هرچند كه در راهاندازي موتورها اين تكنيك بسيار كارآمد است، اما بايد دقت نظر لازم را در استفاده از اين تكنيك در ساير موارد را داشته باشيد. همانطور كه ميدانيد موتورهاي متعارفي كه براي ساخت رباتها استفاده ميشود،ممكن است ولتاژهاي كاري مختلفي داشته باشند (مثلاً 12ولت، 24 ولت، 6 ولت و ...) و براي راهاندازي آنها بايد از درايورهاي موتور مثل L298 استفاده كنيم. سوالي كه ممكن است پيش آيد اين است كه وقتي ما ميكروكنترلر را به درايورهاي موتور(مثل L298) وصل ميكنيم و از تكنيك PWM براي كنترل سرعت موتور استفاده ميكنيم، چه وضعيتي پيش ميآيد؟ مثلاً وقتي ما PWM مربوط به ولتاژ 2.5 ولت را توليد ميكنيم، درايور ما چه عكس العملي نشان ميدهد؟ آيا ولتاژ 2.5 ولت بر روي پايههاي موتور قرار ميگيرد؟ براي پاسخ دادن به اين سوال بايد به ساختار PWM دقت كنيم، ما وقتي PWM مربوط به 2.5 ولت را توليد ميكنيم، در حقيقت سطح ولتاژ خروجي را با فواصل زماني برابر 0 و 1 ميكنيم، پس اگر اين خروجي را، به ورودي L298 وصل كنيم(مثلاً پايهي 7)، L298 نيز موتور را با همين الگو كنترل ميكند و ولتاژي كه به موتور ميدهد را 0 و 1 ميكند. و همانطور كه ميدانيد، L298 هر ولتاژي كه بر روي پايهي شمارهي 4 آن قرار گرفته باشد را بر روي موتور قرار ميدهد(اگر ولتاژ كاري موتور 12 ولت باشد، بايد اين پايه به 12 ولت متصل شود) . پس جواب سوال بالا منفيست!!! وقتي ما PWM مربوط به 2.5 ولت را توليد ميكنيم، در حقيقت سطح ولتاژ خروجي در 50 درصد زمان 1 و بقيهي زمان 0 است. پس اگر همان طور كه در بالا اشاره شد، اين PWM به درايوري مثل L298 داده شود، و ولتاژ پايهي 4 ِ آن 12ولت باشد، درايور، ولتاژ 6 ولت را به موتور ميدهد. در نتيجه اهميتي ندارد چه ولتاژي بر روي پايهي 4 ِ L298 قرار گرفته باشد، وقتي كه ما PWM مربوط به 2.5 ولت را توليد ميكنيم، درايور ولتاژي كه به موتور ميدهد را 50 درصد ميكند. در نتيجه بهتر است از اين به بعد به جاي آن كه بگوييم PWM مربوط به 2.5 ولت، بگوييم PWMااا50 درصد. يا به جاي PWM ِمربوط به 1 ولت، بگوييم PWMااا20 درصد در ميكروكنترلرهاي خانوادهي AVR، نيازي نيست در هربار استفاده از PWM ، چندين خط برنامه بنويسيم. در ATmega16 چهارپايهي مشخص از آي سي به اين موضوع اختصاص داده شده است. يعني اين چهارپايه علاوه بر كاربردهاي معمولي خود، اين قابليت را دارند كه در مواقع لزوم براي توليد PWM استفاده شوند. يك عدد صحيح بين 0 تا 255 = نام رجيستر مربوطه ; اين عدد، بيانگر توان PWM شماست، و شما توان PWM ِ مورد نياز خود را با اين عدد مشخص ميكنيد. كه 255 بالاترين توان و مربوط بهPWMااا100 درصداست، و 0 پايينترين توان و مربوط به PWMااا0 درصد است. OCR0=127; OCR1AL=51; // 20% Duty Cycle on PD.5 منتظر سوالات و نظرات دوستان خوبم هستم. نظرات شما عزیزان:
درباره سایت به فروشگاه رباتیک والکترونیک RoboHpخوش آمدید آخرین مطالب پيوندها ![]() نويسندگان |
||||||||||
![]() |