ساخت روبات


نحوه ساخت یک روبات مسیریاب

به نا م آنکه جان را فکرت آموخت

سر ارادت ما وآستان حضــرت دوست
که هر چه بر سر ما میرود ارادت اوسـت
نظیر دوست ندیدم اگر چه ازمه ومهر
نهادم آینه ها در مقابـــل رخ دوســت
صبا زحال دل تنگ ما چه شرح دهــــد
که چون شکنج ورقهای غنچه تو برتوست

اساتــید مـحترم ودوستــان دانــشجو ســلام

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

مشکلات زیادی در مقابل وجود داشت اول اینکه تجربه دوستان برای شروع کار اندک ودر حد اطلاعات عمومی بود و ابزار لازم در دسترس نداشتیم به هر حال اندیشه هایی برای تشکیل گروه رباتیک و فعال شدن آ ن از طرف دوستان صورت گرفت ولی دست اندرکاران مسئول از این تصمیم حمایـــت نکردند و ایجاد این گروه را به وقت مناسبی واگذار کردند .

به هر حال این گروه تشکیل شده و امید است دوستان دانشجو ی علا قه مند در این صحنه وارد شوند و با پشتکار از موقعیت بدست آمده بهره داری لازم رابکنند در گروههای بـــرق و مکانیک برای شروع کار به حد کافی ابزار کار و انرژی هست که کارها را به پیش ببرد.

وسیله ای که ساختمان و طرز کار آن در متن خواهد آمد ماشین دنبال کننده خط سیاه می باشد . این وسیله سه چرج است که قادراست با تشخیص یــک مسیر کدر بر روی یک صفحه سفید رنگ , روی آن مسیر حرکت کند.

مطالبی که درمتن خواهد آمد شامل تو ضیحاتی در مورد سخت افزار ونحـــوه عملکرد نرم افزاری سیستم می باشد.

در بخش سخت افزاری نحوه تــشخیص مسیر توسط سنسورهای نــوری مادون قــرمــز و عـملکرد مــوتـورهـای پـله ای تــو ضــیح داده خــواهـــد شـــد.

در قسمت نرم افزار هم تمامی حالات کاری سیستم و عملکرد مناسب بــرای بـرنــامـه نـویـسی هــر حــالــت تــو ضــیح داده خــواهــد شــــد.

امیــدواریم ایــن توضیحــات مـختصر در مـقدمه کــافی و مــفید بــاشــد.

ساخت این وسیله هر چند در نگاه اول سخت می نمود ولی مــشکلات یــکی پس از دیگری برداشته شد واین راه روشنی اسـت که به هر حال شروع شـــــده وادامه آن همت دوستان عزیز دانــشجو را چشم انتظار است.

معرفی میکروکنترلر 89c51

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

خانواده8x51خانواده ای متنوع با انواع و اقسام قابلیتها ست. 8051 دارای حافظهROMو8751دارایEPROMاست حافظه89C51ازنوع فلاش می باشد. 89c51 حدود4kbyte حافظه فلاش دارد.حافظه فلاش حافظهای است که به صورت یکباره ان رامیتوان پاک کرد(با پالس الکتریکی با ولتاژ 12+ولت)ودوباره ان را ازابتدا برنامه ریزی کرد. سازنده ادعا می کند تا چندین مرتبه امکان پاک کردن ونوشتن وجود دارد. نوع 20پایه همین میکروکنترلر با امکاناتی محدودتر وجود دارد که با نام892051در بازار موجود است که 2 kbyteحافظه فلاش دارد.

از لحاظ ساختمان داخلی میکروکنترلرهای خانواده8X51 دارای قسمتهای زیر است:

• واحد اصلی یا CPU

• حافظه RAM داخلی 128byte (تا 512byte در بعضی میکروکنترلرها)

• حافظه برنامه داخلی ROM یا EPROM یاEEPROM تا 8Kbyte

• چهار پورت8 بیتی ورودی-خروجی چند کاره

• سه تایمر16 بیتی که به صورت شمارنده هم قابل استفاده است

• پورت سریال

• دو عدد پایه برای وقفه های خارجی و سه عدد وقفه داخلی

• اوسیلاتور داخلی که کریستال در بیرون وصل می گردد

• قابلیت فضای خارجی برنامه تاbyte 64k

• فضای حافظه داده خارجی تاbyte 64k

• فضای ادرس دهی بیتی وقابلیت کار بر روی بیتهای مجزا

• رجیسترهای کنترلی و چهار بانک رجیستری مجزا

• واحد کنترل باسهای داده و ادرس

به شکل 2 توجه کنید.

دراین مدار از چهار پایه پورت P1 برای دریافت ورودی ها استفاده کرده ایم .سنسور1به پایه P1.0 و به ترتیب تا سنسور 4 که به پایه P1.3 وصل شده اند .از پورتP0 برای چرخاندن چرخ سمت چپ و از پورت P2 برای چرخاندن چرخ سمت راست استفاده شده است. درپورت P0 از مقاومت PULL UP باید استفاده شود اما در پورت P2 الزامی به این کار نمی باشد.

بیت P0.4 وP2.4 که با نام STEP معرفی شده است در ساختمان مربوط به مدار راه انداز موتور پله ای به کار رفته است و می تواند در حالتهای مختلف 1 یا0 باشد ولی در هر دو صورت موتور حرکت خود را خواهد داشت. درمدار از قابلیت RESET هم استفاده شده است هر بار که مشکتی در کار بروز کند با RESETکردن مدار مشکل را رفع کرد. کریستال مورد استفاده دراین مدارMHZ 12 می باشد.

حافظه:

ساختمان RAM داخلی:

بانک رجیستری حاوی8 byte از R0 تا R7 است . در برنامه های کاربردی با مقداردهیPSW یا توسط استفاده از دستور USINGمی توان شماره با نک رجیستری را تعیین کرد.

معمولاازبانک های رجیستری برای وقفه هااستفاده می شود .فرض کنید در حال استفاده از بانک صفر است اگر وقفه رخ دهد که دران R0 تا R7 به کار رفته باشند ممکن است مقادیر R0 تا را دستکاری کرده و در برگشت برنامه دچار خطا گردد. بنابر این دروقفه از بانک دیگری نام میبرند تا عملیات رادر R7 ان بانک انجام دهد. فضای ادرس پذیر غیر مستقیم در بعضی ای سی ها مثل 8052 وجود دارد که گاهی 128byte وبرای بعضی دیگر از ای سی ها تا256byte نیز هست.

حافظه برنامه:

حافظه برنامه در89C51 ازنوع فلاش و4kbyte است برنامه ای که قرار است اجرا شود به صورت کدهای ماشین در این قسمت از حافظه بار میشود وقابل اجرا است .

حافظه برنامه حافظه ای قابل گسترش است زیرا 8X51 قابلیت اجرای برنامه های خارجی را دارد و میتواند تا 64kbyte حافظه را ادرس د هی کند.در قسمت حافظه برنامه خارجی میتوان بلوک هایی از حافظه دیتای خارجی را هم جا داد با اتصال پایه هایRD وWR به ان حافظه داده میتوان نوشت یا خواند ارتباط دهی نرم افزاری این قسمت ها با دستور …و…MOVE X صورت می گیرد .

اگر بخواهیم از حافظه برنامه خارجی (حافظه کد)اعدادی را به داخل برنامه LOAD کنیم یکی از راههای ممکن استفاده ازدستور …و… MOVE C است البته قبلا باید حافظه کد را با اعداد مورد نظر انبا شته کرده باشیم .

دستورات زیر نحوه کار را نشان میدهد

Cseg at 1000H
DB …,…,

اعداد ثابتی رااز ادرس 1000Hبه بعد درحافظه برنامه (کد)قرار میدهد.

ثبات ها :

ثبات های ویژه: ثبات هایی هستند که اسامی انها ذکر میشود از ادرس 80H تا FFH در حافظه RAM داخلی قرار دارند که هر یک کار خاصی را انجام میدهد.

• P0 پورت شماره صفر قابل ادرس دهی بیتی وبایتی

• SP ثبات نشانگر پشته (بایتی)

• DPL قسمت کم ارزش ثبات دو بایتی نشانگرادرس داده

• DPH قسمت پر ارزش ثبات دو بایتی نشانگرادرس داده

• PCON ثبات کنترل توان –پرتوان –استراحت –نیمه توان

• TCON کنترل تایمرها دارای قابلیت ادرس دهی بیتی

• TMOD حالت تایمرها

• TL0 بایت کم ارزش ثبات تایمر صفر

• TL1بایت کم ارزش ثبات تایمر یک

• THO بایت پرارزش ثبات تایمر صفر

• TH1 بایت پرارزش ثبات تایمر یک

• P1 پورت شماره یک قابل ادرس دهی بیت به بیت

• SCON ثبات کنترل پورت سریال قابل ادرس دهی بیت به بیت

• SBUF بافر و ثبات اطلاعاتی پورت سریال

• P2 پورت شماره دو

• IE ثبات فعال کننده وقفه قابل ادرس دهی بیتی

• P3 پورت شماره سه قابل ادرس دهی بیت به بیت

• IP ثبات تقدم وقفه ها – اولویت وقفه ها –ادرس دهی بیتی

• T2CON کنترل تایمر دوم در 8X52

• RCAP2L کنترل وثبات شکار ومقایسه در52 و53

• RCAP2Hکنترل وثبات شکار ومقایسه در52 و53

• T2Lبایت کم ارزش ثبات تایمر دو

• T2Hبایت پر ارزش ثبات تایمر دو

• PSW پرچمهایCPU شامل CARY و صفر و توازن و…

• Aیا ACC ثبات انباره اصلی

• B ثبات انباره کمکی

بعضی از دستورات بجای خواندن از پایه ای سی از لچ میخوانند این دستورات دستوراتی هستند که ابتدا خوانده میشودسپس تغییر مییابدواحتمالا دوباره در لچ نوشته می شود. عبارتند از:

ANL,ORL,XRL,JBC,CPL,INC,DEC,DJNZ

همچنین سه دستور زیر کل پورت را به صورت بایتی میخوانند بعدبیت مورد نظررا تغییر میدهند ودوباره به صورت بایتی درلچ می نویسند

MOV Px.y,c

CLR Px.y

SETB Px.y

برای خواندن از پینهای P1 باید مراحل زیر طی شود:

در ابتدای برنامه MOV P1,#FFH ;

خواندن از MOV A,P1 ; P1

ماسک کردن بیتهای غیرضروریANL A,#0000\\\\ ;

بررسی سیستم روبات مسیریابی :

179652.jpgبر روی زمین خطی سیاه رنگ متمایز از زمینه روشن تصور کنید . پهنای این خط در حدود دو سانتی متر و طول انرا نامحدودبا پیچ وخمهای فراوان تصورکنید تئوری میگوید وقتی نور به جسمی کدر یا سیاه رنگ برخورد می کند قسمت بیشتری از نورجذب ان می شود و مقدار کمی از ان باز تابیده میشود و وقتی نور به جسمی روشن و سفید بتابد قسمت زیادی از نور را باز می تاباند و قسمت کمی را جذب می کند پس میتوان سفید یا سیاه بودن دو جسم را با اندازه گیری نوربازتابیده شده ازان حدس زد کافی است یک منبع نورانی داشته باشیم که نور رابه طرف جسم مورد نظر بتاباند ودرهمان حال یک سنسورنوری میزان نور بازتابش را اندازه گیری کند مطمئنا برای دو جسم با رنگهای مختلف یا دو جسم سفید وسیاه میزان باز تابش متفاوت ثبت خواهد شد.

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

مساله از این هم بدتراست چون لامپهای فلورسنت در هر ثانیه صد بار روشن وخاموش میشوند و سنسورها این مطلب را حس خواهند کرد اگر تلویزیون هم در محیط روشن باشدحرکت تصاویر نور محیط را دچار تغییر خواهد کرد.

راه حل چیست؟

راه حل اول :

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

نور لامپهای فلورسنت در اصل درطیف نزدیک به نورماورابنفش قراردارد که با ماده فسفرسانس میزانی ازان را به نور مرئی تبدیل می کنند با این وجود لامپهای فلورسنت نور قرمز یا مادون قرمز ندارند.درصد نور مادون قرمزتولیدی توسط این لامپها بسیارناچیزاست درعوض لامپهای رشته ای به میزان زیادی نورمادون قرمز ونورقرمزدارندونور ماورابنفش تولیدی توسط لامپهای رشته ای بسیار ناچیز و قابل صرفنظراست روی این اصل ما درسیستمی که قرار است مسیر سیاه رادرزمینه سفید تشخیص دهد از لامپهای مادون قرمز استفاده می کنیم دیودهایLED وجود دارند که در طیف مادون قرمز کار می کنند این دیودها نور مادون قرمز غیرمرئی تولید می کنند .

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

راه حل دوم:

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

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

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

نحوه تشخیص مسیر چگونه است ؟

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

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

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

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

ازسه عدد سنسور در یک ردیف و از سنسور چهارم در پشت سر انها استفاده شده است .



سنسورشماره دو سنسور اصلی وبقیه سنسورها پشتیبان ان هستند.

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

Lm339 دارای خروجی کلکتور باز است بنابراین در خروجی ان از یک مقاومت Pull up استفاده شده است ،برای راحتی کار،همواره میتوان با مشاهده LEDهای معمولیکه درخروجی مقایسه کننده ها که درخروجی مقایسه کننده ها متصل شده است به عملکرد سنسورهاپی برد LED یک تاLED چهارلامپهای LED معمولی هستند وروی روبات به صورت نمایشی قرارمیگیرند در اصل می توان انها را خروجی مدار نامید واز روی انها،برنامه نرم افزاری را نوشت و اصلاح کرد.

خروجی ها به ترتیب به پایه های P1.0 تا1.3 P از پورت یک وارد می شوند.توجه کنید که وقتی میخواهید پورت یک رابه صورت ورودی استفاده کنید در ابتدای برنامه ترانزیستورهای خروجی را از کار بیاندازید.این کار با نوشتن FFH در پورت P1 در ابتدای برنامه ،صورت میگیرد.

اگراین کار رانکنید وترانزیستورهای خروجی روشن باقی بمانند سطح خروجی را به صفرولت میکشانندوP1همواره OOH یا صفر را دریافت خواهد کرد. دستوری که باعث خواندن ورودی از پین می گردد P1و A MOV است بعضی از دستورات هستند که بجای خواندن از پین از latch ها می خوانند که دربهکار بردن انها باید دقت شود.

مقاومت داخلی سنسورهای مادون قرمز تابعی از نور برخورد کننده به انها است درنورهای ضعیف یا یک اتاق تاریک مقاومت سنسورهایی که ما استفاده کردهایم بالاتر از 100 k است. این مقاومت وقتی که سنسورها را در معرض نوربا شدت معمولی قرار دهیم تا  1 k هم کاهش پیدا می کند.

وقتی استوانه ای حاوی سنسور و LED مادون قرمز را جلوی یک جسم سیاه رنگ می گیریم مقاومتی حدود 50 k  وزمانی که جلوی یک جسم سفید رنگ قرار میدهیم مقاومتیحدود 20 k  رانشان میدهد .پتانسیو مترهای ورودی را طوری تنظیم می کنیم که وقتی جسم سیاه را داریم در خروجی +5 ولت برقرار باشد ووقتی جسم سفیدی را در مقابل استوانه های فلزی قرار دارد صفر ولت درخروجی داشته باشیم.



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

در زیر لیست این شانزده حالت را می توانید ببینید.

1- هیچ کدام از سنسورها روی خط سیاه قرار ندارند و همگی صفررا نشان میدهند.

2- فقط سنسور شماره 1روی خط سیاه قرار دارد.

3- فقط سنسور شماره 2روی خط سیاه قرار دارد

4- فقط سنسور شماره3 روی خط سیاه قرار دارد.

5- فقط سنسور شماره 4 روی خط سیاه قرار دارد.

6- فقط سنسور شماره 2و1روی خط سیاه قرار دارد.

7- سنسورهای 3و2 روی خط سیاه قرار دارد.

8- سنسورهای 4 و3 روی خط سیاه قرار دارد.

9- سنسورهای 4 و1 روی خط سیاه قرار دارد.

10- سنسورهای 3 و1 روی خط سیاه قرار دارد.

11- سنسورهای 4 و2 روی خط سیاه قرار دارد.

12- سنسورهای 3 و2 و1روی خط سیاه قرار دارد.

13- سنسورهای 4 و3 و2 روی خط سیاه قرار دارد.

14- سنسورهای 4 و1و2روی خط سیاه قرار دارد.

15- سنسورهای 4 و1و3 روی خط سیاه قرار دارد.

16- سنسورهای4 و3 و2 و1همگی روی خط سیاه قرار دارند.

شرایط حرکت روبات

حالت اول: روبات هنوز مسیر را پیدا نکرده

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

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

حالت دوم :گردش به راست

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

1- فقط سنسور شماره 3 مسیر سیاه را نشان دهد.

2- فقط سنسورهای شماره 3 و4 مسیر سیاه را نشان دهند.

3- فقط سنسورهای شماره 2و3 و4 مسیر سیاه را نشان دهند.

حالت سوم:گردش به چپ

عملیات گردش به چپ زمانی رخ میدهد که یکی از حالتهای زیر رخ داده باشد.

1- فقط سنسور شماره 1 مسیر سیاه را نشان دهد.

2- فقط سنسورهای شماره 1و4 مسیر سیاه را نشان دهند.

3- فقط سنسورهای شماره 1و2و4 مسیر سیاه را نشان دهند.

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

حالت چهارم:حرکت مستقیم به جلو

برای زمانی رخ می دهد که سنسورها دارای وضعیت زیر باشند.

1-زمانی که سنسور شماره 2 مسیر سیاه را نشان دهد.

2- زمانی که سنسورهای شماره 1و2 مسیر سیاه را نشان دهد.

3- زمانی که سنسورهای شماره 2 و3 مسیر سیاه را نشان دهد.

4- زمانی که سنسورهای شماره 2و4 مسیر سیاه را نشان دهد.

برای حرکت مستقیم به جلو باید هم چرخ راست وهم چرخ چپ را با حالت جلوگرد راه اندازی کرد یعنی به هر دو چرخ همزمان دستورجلوگرد صادر شود . برای این منظور همواره شماره مرحله هر موتور در جایی ذخیره می شود برای دستور جلوگرد کافی است شماره مرحله را افزایش دهیم و مرحله هر موتور را به ان اعمال کنیم سپس مدت چند میلی ثانیه صبر کنیم تا موتور از حالت قبلی به حالت جدید برود سپس برنامه را ادامه دهیم. باید توجه کرد که هر دو موتور همزمان مرحله جدید را می گیرند و سپس هر دو با هم به حالت جدید می روند.

حالت پنجم:حرکت به جلو و راست

حالت پنجم برای زمانی بکار می رود که حرکت یکی جلو یکی راست اجرا شودو سنسورها دارای وضعیت زیرباشند.

1- سنسورهای 1 و3 مسیر سیاه را نشان دهند.

2- سنسورهای 1 و2 و3 مسیر سیاه را نشان دهند.

3- سنسورهای 1 و3 و4 مسیر سیاه را نشان دهند.

4- سنسورهای 1 و3 و3 و4 مسیر سیاه را نشان دهند.

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

حالت ششم :حرکت به سمت عقب و گردش به راست وچپ

این حرکت زمانی رخ می دهد که فقط سنسور شماره 4 مسیر سیاه را نشان دهد .

وقتی فقط سنسور شماره 4 فعال است و مسیر سیاه را نشان می دهد باید روبات به سمت عقب برگردد اگر بعد از چند حرکت 1و 4 فعال شدند به سمت چپ گردش کند و اگر 3 و4 فعال شدند به سمت راست گردش کند.

سنسورها از پورت P1 وارد می شوند پس:



با چهار عدد بیت می توان شانزده حالت منطقی را ترسیم کرد.(عدد مربوطه در P1)



روش راه اندازی موتور پله ای

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







زیر برنامه زیر برای مرحله موجود کد مربوطه را قرار میدهد.



برنامه های اسمبلی

زیر برنامه Encoder

این زیر برنامه برای هر مرحله که در R7 قرار دارد کدی عددی صادر می کند ودر R4 قرار میدهد.

کلا 8 مرحله وجود دارد و 8 عدد کد.

Org 0500H  
Encoder:  
   
  Nop ;
Label 1: cjne R7,#1H, label 2 ;
  Move R4 , # 9H ;
  Ljmp encoder – end ;
   
Label 2: cjne R7,#2H, label 3 ;
  Move R4 , # 8H ;
  Ljmp encoder – end ;
   
Label 3: cjne R7,#3H, label 4 ;
  Move R4 , # 0c H ;
  Ljmp encoder – end ;
   
Label 4: cjne R7,#4H, label 5 ;
  Move R4 , # 4 H ;
  Ljmp encoder – end ;
   
Label 5: cjne R7,#5H, label 6 ;
  Move R4 , #6 H ;
  Ljmp encoder – end ;
   
Label 6: cjne R7,#6H, label 7 ;
  Move R4 , #2 H ;
  Ljmp encoder – end ;
   
Label 7: cjne R7,#7H, label 8 ;
  Move R4 , #3 H ;
  Ljmp encoder – end ;
   
Label 8: Move R4 , #2 H ;
  encoder – end :Ret
  Ljmp encoder – end ;

زیر برنامه ای برای جلو رفتن موتور سمت راست

org 0600H    
Right _go _ front    
     
  Cnje R6,#8 , not –equal 8  
  Move R6,#1 ; R6=8
  Ljmp encoder- call 0  
     
not – equal 8 : jc les-than 8  
  Move R6,#1 ; R6>8
  Ljmp encoder- call 0  
     
Les-than 8: inc R6 ; R6<8
     
Encoder call 0: mov R7,R6  
  Lcall encoder  
  Mov P2 ,R4  
  Ret  

زیر برنامه برای حرکت چرخ راست به سمت عقب.

- چرخ سمت راست به p2 وصل است.

org 0700H    
Right _go _ Back    
     
  Cnje R6,#8 , not –equa 1  
  Move R6,#8 ; ;R=1
  Ljmp encoder- call 2  
     
not – equal 1: jc les-than1 ;R6<1
  Dec R6 ;R6>1
  Ljmp encoder- cal l2  
     
Les-than 1: mov R6,#8 ;R6<8
     
Encoder call 2: mov R7,R6  
  Lcall encoder  
  Mov P2 ,R4  
  Ret  

زیربرنامه ای برای حرکت دادن چرخ سمت چپ به جلو:

R5=8مرحله موتور را نشان میدهد.

org 0800H    
Right _go _ Front    
     
  Cnje R5,#8 , not –equa8  
  Move R5,#1  
  Ljmp encoder- call 3  
     
not – equal 8: jc les-8 ;R5 <8
  Mov R5, # 1 ;R5>8
  Ljmp encoder- cal 3  
     
Les-8: Inc R5  
     
Encoder call 3: mov R7,R6  
  Lcall encoder  
  Mov P0 ,R4  
  Ret  

موتور سمت چپ به P0وصل است.

زیر برنامه ای برای عقب رفتن موتور سمت چپ:

org 0900H    
Right _go _ Back    
     
  Cnje R5,#1 , not –equa1  
  Move R5,#8 ;R5=1
  Ljmp encoder- call 4  
     
not – equal 8: jc les-1 ;R5 <1
  Dec R5 ;R5>1
  Ljmp encoder- cal 4  
     
Les-than 1: mov R5,# 8 ;R5<1
     
Encoder call 4: mov R7,R5  
  Lcall encoder  
  Mov P0 ,R4  
  Ret  

زیر برنامه تاخیر کوتاه 4msec

org 0A00H  
  nop
  nop
  nop
  nop

زیر برنامه تاخیر متوسط 100msec

deley100m:  
  mov R0 ,# 50
  mov Tmod, # 0001 0001 b
timer-set: mov Tho ,# 07 H
  mov Tho ,# D0 H
  set b Tro
  clr Tfo
loop : jnb Tfo,loop
  clr Tfo
  dec R0
  cjne R0,# 1, timer- set
  ret

زیر برنامه تاخیر بلند 2sec

org 0b00H  
   
deley 2s: mov R3,# 20
again2: call deley 100 m
  dec R3
  cjne R3 , 1H , again 2
  ret

زیر برنامه تاخیر 10sec

deley 10s: mov R3,# 100
again2: 1 call deley 100 m
  dec R3
  cjne R3 , 1 , again 10
  ret

برنامه استارت:

org 0000H  
  ljmp start 1
   
  org 1000H
start 1: mov P1, # FFH
  mov sp , #
  1 call deley 2s
start : mov A,P1
  Anl A, # 1111 0000 b

برنامه اصلی

main:  
  mov P1,# FFH
  call deley 0
  mov A,P1
Anl A, # 0000 1111 b
  Mov R1,A
State 1: cjne R1 ,# 0, state2
  L call find-line
  Ljmp start
   
State 2: cjne R1 ,# 1, state 3
  L call go-left
  Ljmp start
   
State 3: cjne R1 ,# 2, state4
  L call go-front
  Ljmp start
   
State 4: cjne R1 ,# 4, state5
  L call go-right
  Ljmp start
   
State 5: cjne R1 ,# 8, state6
  L call go-back
  Ljmp start
   
State 6: cjne R1 ,# 3, state7
  L call go-front
  Ljmp start
   
State 7: cjne R1 ,# 6, state8
  L call find-front
  Ljmp start
   
State 8: cjne R1 ,# 0CH, state9
  L call go-right
  Ljmp start
   
State 9: cjne R1 ,# 9, state10
  L call go-left
  Ljmp start
   
State 10: cjne R1 ,# 5, state11
  L call go-front-one-right
  Ljmp start
   
State 11: cjne R1 ,# 0AH, state12
  L call go-front
  Ljmp start
   
State 12: cjne R1 ,# 7, state13
  L call go-front-one-right
  Ljmp start
   
State 13: cjne R1 ,# 0EH, state14
  L call go-right
  Ljmp start
   
State 14: cjne R1 ,# 0bh, state15
  L call go-left
  Ljmp start
   
State 15: cjne R1 ,# 0DH, state16
  L call one-front-one-right
  Ljmp start
   
State 16: one-front-one-right
  Ljmp start
   

زیر برنامه های اصلی

1-حرکت روبات به سمت جلو

go-front:

l call right-go- front
l call left-go- front
l call deley 100m
ret

2-حرکت روبات به سمت عقب

go-back:

l call right-go- front
l call left-go- front
l call deley 100m
ret

3-چرخش روبات به سمت راست

go-right:

l call left-go- front
l call deley 100m
ret

4-چرخش روبات به سمت چپ

go-left:

l call right-go- front
l call deley 100m
ret

5-عملیات چرخیدن به دورخود از چپ

rotate-left

l call right-go-front
l call left-go- back
l call deley 100m
ret

6-حرکت یکی جلو – یکی راست

one-front-go- right:

l call right-go-front
l call left-go-front
l call deley 100m
l call left-go-front
l call deley 100m
ret

موتورهای پله ای:

معرفی:

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

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

مدار راه انداز موتور پله ای با ای سی به شماره uln 2003:

این ا ی سی یک بافر not کننده با ترانزیستور خروجی کلکتور باز است. اگر بخواهیم همین مدار را با ترازیستور طراحی کنیم استفاده از یک دیود هم الزامی است.

سه نوع کنترل بر روی موتور پله ای می توان داشت فرض می گیریم موتور پله ای ازنوع چهار قطبی باشد:

1- تر تیب چهار مرحله ای معمولی پله کامل



2- تر تیب چهار مرحله ای پله نصفه یا نیم پله



3- تر تیب هشت مرحله ای پله کامل موجی



اما ترتیبی که ما در ساخت روبات از ان استفاده کرده ایم ترتیب هشت مرحله ای است.

در مورد موتور پله ای که بکار برده شده است سیم پیچهای A وB وC وD و همچنین خروجیهای Com همگی توسط سیمهای رنگی مشخص شده اند خروجیهای Com با رنگ سبز از موتور خارج شده اند.

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



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

مدارات الکتریکی :

مدارات الکتریکی مورد نیاز در با استفاده از نرم افزار EWB طراحی شده اند.

• نرم افزار شماره 1

• نرم افزار شماره 2




 

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد