پروژه شبیه ساز آسانسور
فهرست
مقدمه 1
شرح پروژه 3
قسمت های مکانیکی 4
بخش های سخت افزار الکترونیکی 7
اصول تزویج کننده های نوری 11
مختصری راجع به استپ موتور 18
مختصری راجع به آی سی درایور ULN2003A 22
قسمت نرم افزار و برنامه نویسی میکروکنترولر 23
برنامه به زبان بیسیک 25
الگوریتم 32
مختصری در مورد برنامه مدار 33
شماتیک مدار 37
فیبر مدار 39
مقدمه
1. عنوان طرح پیشنهادی:
شبیه ساز آسانسور
2. شرح کامل طرح (تعیین مشخصات فنی)
هدف از این مدار شبیه سازی یک آسانسور مبتنی بر سیستم میکروکنترولری است و مدلی کوچک برای طراحی یک آسانسور می باشد.
این آسانسور دارای 4 طبقه است که در داخل آسانسور کلیدهای 1-4 برای انتخاب طبقه مورد نظر وجود دارد. در بیرون آسانسور و جلو درب ها کلیدی نیز وجود دارد که عملکرد آن مانند کلیدهای داخل آسانسور است و هر یک از آنها نماینده شماره طبقه مورد نظر است.
در جلو درب هر طبقه یک نمایشگر 7-Seg و یک لامپ در زیر هر کلید وجود دارد. از نمایشگر 7-Seg به منظور نمایش موقعیت آسانسور استفاده می شود و روشن بودن لامپ های زیر هر کلید درخواست توقف آسانسور برای طبقه مورد نظر را نشان می دهد و پس از توقف آسانسور در طبقه مربوطه لامپ خاموش خواهد شد. همچنین عملکرد لامپ های کلیدهای داخل آسانسور نیز بصورت ذکر شده می باشد.
نحوه عملکرد کلی مدار بصورت زیر است:
به دلیل اینکه آسانسور داری 4 طبقه است به همین منظور 4 رجیستر که بصورت یک صف پیکربندی شده اند نیز به منظور ثبت درخواست ها و رسیدگی به آنها بکار می رود.
نحوه پاسخ به درخواست ها اینگونه است که پس از هر درخواست، شماره طبقه مورد نظر در یکی از رجیسترها ثبت می شود.
بطوریکه درخواست اول در رجیستر اول و در خواست دوم در رجیستر دوم و … . پس از اینکه رجیستر اول از شماره طبقه مورد نظر پر شد، آسانسور شروع به حرکت به سمت طبقه مورد نظر می کند. در همین بین رجیسترهای 2 و 3 و 4 را چک می کند و اگر طبقه درخواست شده دیگری بین مبدا و مقصد ثبت شده باشد در آنجا نیز توقف می کند. پس از توقف در هر طبقه، شماره طبقه مورد نظر از صف درخواست ها حذف شده و برنامه با شیفت دادن درخواست ها فاصله بوجود آمده را حذف می کند.
پس از رسیدن آسانسور به مقصد اول، شماره درخواست آن از رجیستر اول حذف گردیده و درخواست ها به سمت آن رجیستر به منظور حذف فضای خالی ایجاد شده شیفت داده می شوند.
در این مرحله دستگاه دوباره رجیستر اول را چک می کند و طبقه مورد نظر را مقصد قرار می دهد و فرایند بالا مکررا تکرار می گردد.
3. امکانات مورد نیاز برای پروژه:
* یک میکروکنترولر برای عمل پردازش و کنترل فرایندها
* یک مدار تغذیه تثبیت شده با قابلیت اطمیان مناسب به منظور تامین جریان مورد نیاز برای قسمت های ولتاژ پایین و حساس
* کلیدها
* نمایشگرها
* کابل ها و فیبر مدار چاپی و دیگر اتصالات
شرح پروژه:
این پروژه مربوط به طراحی یک آسانسور با اجزای مکانیکی و شبیه به آسانسور واقعی است. با توجه به پیچیدگی آسانسور واقعی و قطعات مورد استفاده در اینگونه دستگاه ها و با توجه به اینکه این پروژه می بایست در ابعاد کوچک محقق گردد و همچنین لزوم کم هزینه بودن طرح، این آسانسور کمی از سیستم آسانسور واقعی فاصله گرفته ولی در کل سعی شده که شباهت زیادی به آسانسور واقعی داشته باشد. از جمله موراد عدم استفاده از سیستم های ترمز موجود در آسانسور واقعی است. با توجه به اینکه این امر در این ابعاد محقق نیست و در صورت امکان هزینه بر است مجبور شدیم تا از روش دیگر این کار را انجام دهیم. که متعاقبا ذکر خواهد شد.
با توجه به اینکه طرح یک نمونه کوچک باید باشد، تعداد طبقات به منظور کوچکی دستگاه به 3 طبقه محدود گردید. که کمترین ابعاد به جهت پیاده سازی ویژگی های نرم افزاری و ساختار تصمیم گیری با توجه به موقعیت های مختلف است. بعنوان مثال میتوان به توقف در طبقات میانی در صورت درخواست و در طول حرکت اشاره کرد.
بطور کلی این پروژه از سه بخش زیر تشکیل شده که درباره آنها بطور کامل بحث خواهد شد.
1. مکانیک
2. سخت افزار الکترونیک
3. نرم افزار و برنامه نویسی میکروکنترولر
1. قسمت های مکانیکی :
پیاده سازی این بخش با توجه به محدودیت قطعات و همچنین بالا بودن هزینه ها کمی مشکل ایجاد می کند و دردسر ساز است. طراحی بخش متحرک آسانسور که بتواند بدون حرکت افقی خاصی که ایجاد مشکل کند، کار خود را انجام دهد. و یا اینکه این حرکات موجب خطای سنسورهای مورد استفاده نشود. همچنین استحکام قسمت های مکانیکی نیز باید مورد توجه قرار می گرفت.
یکی از مشکلات دیگر انتخاب یک بخش برای ایجاد گشتاور برای بالا و یا پائین بردن قسمت متحرک آسانسور بود. سرعت چرخش موتور با توجه به ابعاد طرح باید پائین باشد و همچنین موتور نیز می بایست از قدرت مناسبی برخوردار باشد. همچنین یک سیستم ترمز نیز باید برای مدار در نظر گرفته می شد. از دیگر مسائل موجود انتخاب محل مناسب برای سنسور بود.
البته قسمت های مکانیکی با توجه به اینکه کاملا قابل روئیت هستند نیاز به توضیح ندارند و در این گزارش از توضیح آن به همین مطالب بالا اکتفا می شود.
شکل های 1 الی 5، نمایی از آسانسور را نشان میدهد.
شکل 1
شکل 2
شکل 3
شکل 4
شکل 5
2. بخش های سخت افزار الکترونیکی :
این بخش اهمیت ویژه ای دارد و با ترکیب با نرم افزار، بخش کنترل کننده را بوجود می آورد.
سخت افزارهای الکترونیکی از بخش های عمده زیر تشکیل شده است:
* منبع تغذیه و مدارات تثبیت کننده ولتاژ
* سنسورهای نوری و همچنین کلیدها
* نمایشگرها
* قسمت میکروکنترولر برای انجام محاسبات و تصمیم گیری و همچنین کنترل اجزای دیگر
* موتور و مدارت مربوط به آن
* فیبر مدارچاپی- ترمینال ها و همچنین سیم های ارتباط دهنده
شکل 6، نمایی از برد مدار به همراه قطعات را نشان می دهد.
شکل 6
* منبع تغذیه و مدارات تثبیت کننده ولتاژ:
منبع تغذیه از قسمت های زیر تشکیل شده است:
* ترانسفورماتور کاهنده
* پل دیودها
* فیوز
* خازن های صافی
* خازن های ظرفیت پائین به منظور حذف نویز
* رگولاتور یا تثبیت کننده های ولتاژ
ترانسفورماتور وظیفه کاهش ولتاژ خط 220V.AC 50Hz برق شهر را به ولتاژ پائین حدودا 9V.AC 50Hz به عهده دارد. با توجه به اینکه در مدار از موتور الکتریکی با ولتاژ پائین استفاده شده، بنابراین منبع تغذیه باید قادر باشد تا جریان مورد نیاز آن را فراهم کند.
همچنین استفاده از 7-Seg و چندین LED در مدار به منظور نمایش اطلاعات مصرف مدار را افزایش داده است.
بنابراین ترانسفورماتور باید جریان مورد نیاز مدار را بدون افت قابل ملاحظه ولتاژ به مدار تحویل دهد.
پل دیود در ورودی مدار و بعد از ترانسفورماتور قرار دارد. پل دیود متشکل از چهار دیود است که در مدارات یکسوساز تمام موج به کار می رود. همچنین این 4 دیود در یک پکیج موجود می باشد که از این نمونه در این مدار استفاده شده است.
همچنین با توجه به اینکه تمامی جریان های مدار از آن عبور میکند باید تحمل این جریان را داشته باشد تا ایجاد مشکل نکند.
رگولاتورها یا تثبیت کننده های ولتاژ:
این مدار دارای 2 رگولاتور برای تثبیت ولتاژ است.
a. آی سی 7805 که یک رگولاتور 5 ولتی است و برای تامین ولتاژ مدارات میکروکنترولری و همچنین LED ها و همچنین سنسورها و Pullup سوئیچ ها و همچنین به منظور تغذیه 7-Seg به کار می رود.
b. آی سی 7806 که یک رگولاتور 6 ولتی است و صرفا جهت تامین ولتاژ مورد نیاز برای قسمت موتور و آی سی درایور ULN2003A به کار می رود.
با توجه به اینکه تغذیه موتور استفاده شده 6 ولت است به همین دلیل برای تغذیه آن از رگولاتور جداگانه استفاده شده.
به دلیل بالا بودن جریان مصرفی موتور (حدود 600mA)، توان تلف شده بر روی این رگولاتور زیاد است و برای انتقال حرارت به محیط،حتما باید بروی هیت سینک نصب گردد.
در مورد رگولاتور 7805 به دلیل اینکه جریان مصرفی مدارات وابسته به آن کمتر از جریان قابل تحمل بدون هیت سینک است، استفاده از هیت سینک برای آن لزومی ندارد و رگولاتور بروی برد پیچ می شود.
در ضمن حرارت تولید شده رگولاتور 6 ولتی بسیار زیاد است. اما مشکلی ایجاد نمی کند، زیرا این سری از آی سی ها در برابر حرارت و همچنین جریان بالا و اتصال کوتاه شدن خروجی محافظت شده هستند و همچنین جریان کشیده شده از آن نیز کمتر از مقدار مجاز قید شده در برگه های اطلاعاتی آن است.
با توجه به اینکه موتور جریان زیادی مصرف می کند، 1 عدد فیوز برای محافظت در مدار استفاده شده. بعلت گرم شدن زیاد رگولاتو احتمال دارد مثلا پس از مدتی رگولاتور فرسوده شده و بسوزد و در صورتی که ولتاژ خروجی آن از حد مجاز بیشتر شود، جریان زیادی از موتور عبور کرده و آن را می سوزاند.
همچنین اگر به هر علتی موتور دچار مشکل شود و یا سیم های آن اتصال کوتاه شوند. این فیوز از سوختن رگولاتور و آی سی درایور و همچنین پل دیود و ترانس جلوگیری بعمل می آورند.
خازن های صافی به منظور حذف ریپل های موجود به علت وجود موج سینوسی در ورودی بعد از پل دیود و همچنین خازنهای بعد از رگولاتورها به منظور تغییرات ناگهانی ولتاژ بر اثر پیک های لحظه ای جریان هستند. همچنین خازنهای بعد از رگولاتوئر باید مقدارشان زیاد نباشد، زیرا در لحظه روشن کردن مدار باعث عبور جریان لحظه ای بسیار زیادی از آی سی رگولاتور می شوند.
همچنین خازنهای سرامیکی ظرفیت پائین به منظور حذف پارازیت های ناشی از فرکانس بالای کارکرد میکروکنترولر و همچنین حذف نویزهای موتور و جلوگیری از ورود آن ها به خط تغذیه و مدارات حساس مانند سنسورها و میکروکنترولر است.
مقدار این خازن ها را اکثرا 100nF انتخاب میکنند. این خازن ها حتی الامکان باید به محل تولید نویز و یا محلی که باید نویزها وجود نداشته باشند نزدیک باشد.و به منظور افزایش حفاظت و اطمینان میتوان چندین خازن را موازی کرد و در محل مورد نظر قرار داد.
* سنسورهای نوری و همچنین کلیدها:
در این پروژه برای تشخیص طبقات از سنسورهای نوری استفاده شده. این سنسورها همان اپتو کانترهای مادون قرمز هستند.
اپتو کانترها در رده تزویج کننده های نوری خاص قرار میگیرند.
اصول تزویج کننده های نوری:
یک وسیله تزویج کننده نوری بطور ساده، یک واحد عایق است که بخش هی Rx و Tx با توان بالا، بطور مجزا از یکدیگر در درون آن قرار گرفته اند و توسطنور به یکدیگر تزویج می گردند.
در اینجا بخش Tx یک LED است ولی بخش Rx ممکن است یک ترانزیستور نوری، یک FET نوری، یک ترایاک نوری و یا نوع دیگری از عناصر نمیه هادی حساس به نور باشد. بخش هی Rx و Tx درو ن یک محفظه ایزوله مشترک و بسیار نزدیک به هم قرار گرفته اند.
بیشتر ابزار تزویج کننده نوری جدید برای بخش Rx از یک ترانزیستور نوری استفاده می کنند. چنین وسیله ای بطور ساده تزویج کننده نورینامیده می شود. چون ورودی (LED) و خروجی (ترانزیستور نوری) بوسیله نور به یکدیگر تزویج شده اند، این وسیله، تزویج کننده نوری نامیده می شود.
در نوع به خصوصی از تزویج کننده های نوری معروف به تزویج کننده های شیاری، تزویج کننده، شیاری دارد که درون محفظه مابین منبع نور LED و حسگر نوری ترانزیستوری قرار گرفته است.
در این نوع تزویج کننده ها در حالت عادی نور می تواند به ترانزیستور نوری برسد. بدون آنکه شیار تاثیر زیادی بر تضعیف شدت نور داشته باشد. تزویج کننده نوری با قرار دادن یک جسم تیره در درون شیار، کاملا از بین می رود. بنابراین تزویج کننده های نوری شیار دار می تواند در بسیاری از موارد مانند آشکارسازی حضور، مانند آشکارسازی پایان نوار مغناطیسی، کلیدهای محدود کننده و آشکارسازی سطح مایعات مورد استفاده قرار گیرد.
مدل ها دیگری همچون تزویج کننده های انعکاسی نیز وجود دارند که از توضیح آنها صرف نظر می گردد.
در زیر تعدادی از پارامترهای تزویج کننده های نوری به اختصار بیان می شود:
o نسبت تبدیل تزویج کننده نوری:
یکی از مهم ترین پارامترها در یک ابزار تزویج کننده نوری، بازده تزویج کنندگی آن است و برای آنکه این پارامتر به حداکثر مقدار خود برسد، LED و ترانزیستور نوری (که معمولا در محدوده مادون قرمز عمل می کند) از نظر طیفی بسیار نزدیک به هم قرار می گیرند.
بهترین راه برای تعیین بهره تزویج کننده، بیان نسبت تبدیل جریان خروجی به ورودی (CTR) در این وسیله است. یعنی نسبت جریان کلکتور خروجی (Ic) در ترانزیستور نوری به جریان مستقیم (If) در LED است. بنابراین CTR=Ic/If . در عمل، CTR ممکن است با یک عدد ساده مانند 0.5 یا (با ضرب کردن عدد در 100) به عنوان عددی درصدی مانند 50% بیان شود.
در تزویج کننده های نوری جداساز که یک طبقه خروجی ترانزیستوری دارند مقدار CTR در محدوده 20% تا 100% است. معمولا مقدار CTR (علاوه بر عوامل دیگر) به مقادیر جریان های ورودی و خروجی وسیله و ولتاژ تغذیه (Vc) ترانزیستور نوری بستگی دارد.
همچنین باید به این نکته توجه کرد که به دلیل وجود تغییرات در بهره جریان ترانزیستور نوری و بازده نوری LEDمقادیر معمول CTR در یک تزویج کننده نوری ممکن است نسبت به مقدار معمول، تفاوت فاحشی داشته باشند. مقدار CTR واقعی برای یک تزویج کننده نوری که مقدار CTR معمولی آن 60% است در محدوده 30% تا 90% متغیر خواهد بود.
o ولتاژ جداسازی:
این پارامتر، حداکثر پتانسیل DC مجاز است که می تواند بین مدارهای ورودی و خروجی وجود داشته باشد. مقادیر معمول این پارامتر از 500V تا 4kV، تغییر می کنند.
o Vce(MAX): این پارامتر، حداکثر ولتاز DC مجازی است که می تواند به دو سر ترانزیستور خروجی اعمال گردد. مقادیر معمول در محدوده 20V تا 80V هستند.
o If(MAX):این پارامتر، حداکثر جریان قابل قبولی است که می تواند در ورودی LED وجود داشته باشد. مقادیر معمول از 40mA تا 100mA متغیرند.
o پهنای باند: این پارامتر، حداکثر فرکانس سیگنال معمول است که وقتی این ابزار در حالت معمول مورد استفاده قرار می گیرد، می تواند از تزویج کننده نوری عبور کند. مقادیر معمول این پارامتر در محدوده 20kHz تا 500kHz قرار دارند و بستگی به نوع ساختار وسیله دارد.
توضیحات بالا مختصری درباره تزویج کننده های نوری بود. تزویج کننده نوری مورد استفاده در این پروژه، یک تزویج کننده نوری خاص است. ساختار آن به اینگونه است که در فرستنده از دیود LED و در گیرنده از یک ترانزیستور نوری استفاده شده. قسمت فرستنده و گیرنده آن بطور موازی با هم قرار دارند و از یک شیشه که بین آن فضای خالی وجود دارد، بعنوان شکاف استفاده شده. در انتهای شیشه ها منشور کوچکی ایجاد شده که موجب میشود که نور از فرستنده به آن بتابد و سپس 90 درجه تغییر مسیر به سمت منشور گیرنده دهد. نور پس از برخورد به منشور گیرنده مجددا 90 درجه در امتداد گیرنده تغییر مسیر داده و نور به ترانزیستور نوری گیرنده برخود میکند.
حال اگر جسمی فاصله هوایی بین دو منشور را قطع کند حالت تزویج از بین رفته و براحتی میتوانی آن را آشکار و به عنوان سیگنال وجود یک جسم مورد استفاده قرار دهیم.
قابل ذکر است که در این سنسور فقط نوک سنسور و یا همان منشور که از 1 میلیمتر کمتر است نقش اساسی را بازی می کند.
دیود فرستنده با یک مقاومت 100 اهم به ولتاز تغذیه 5 ولت متصل شده با توجه به افت ولتاژ حدودا 1.4 ولت بروی دیود، مقدار جریان عبوری از دیود براحتی بدست می آید و مقدار آن تقریبا 36mA است. لازم به ذکر است که جریان دیود فرستنده در حدود 20 تا 40 میلی آمپر در اونواع مختلف است.
در گیرنده به منظور آشکار سازی سیگنال تنها از یک مقاومت استفاده شده.
لازم به ذکر است که ساختمان داخلی بعضی از گیرنده ها یک فتو ترانزیستور با آرایش دارینگتون برای افزایش جریان خروجی است.
اما در سنسور استفاده شده در این پروژه گیرنده تنها یک ترانزیستور نوری ساده است و جریان خروجی آن در حدود 2mA است. بنابراین مقاوت انتخابی 2.2k است.
کلکتور گیرنده به قسمت Vcc و امیتر آن به مقاومت 2.2k و مقاومت نیز به زمین وصل شده است. سیگنال خروجی نیز از پایه امیتر ترانزیستور دریافت می شود.
طرز کار به این نحو است که پس از عبور جریان از دیود فرستنده در صورتی که شکاف سنسور باز باشد تمام نور از طریق منشور به گیرنده می تابد و کلکتور- امیتر گیرنده اتصال کوتاه میگردد.
بنابراین تمامی ولتاژ منبع تغذیه روی مقاومت خروجی می افتد و سیگنال خروجی یک سطح ولتاژ یک منطقی است.
اگر به هر نحو جریان دیود فرستنده قطع کردد و یا شکاف سنسور مسدود گردد ترانزیستور نوری گیرنده به حالت قطع می رود و در خروجی ولتاژی نخواهیم داشت و یا صفر منطقی در خروجی داریم.
پس هر گاه در خروجی صفر منطقی وجود داشت یعنی این که یک جسم شکاف را مسدود کرده و در این پروژه منظور همان رسیدن آسانسور به طبقه مورد نظر است.
* نمایشگرها:
نمایشگر ها از 6 عدد دیود LED نماینده باز و بسته شدن دربها، سه عدددیود LED دیگر نماینده کلید فشار داده شده و یا طبقه درخواست شده و یک نمایشگر 7-Seg برای نمایش طبقه جاری را می توان نام برد.
با توجه به محدودیت قطعات مکانیکی امکان ساخت درب برای اسانسور امکان پذیر نبود. اما با استفاده از 6 عدد LED این کار را انجام دادم. این LED ها در پانل بالایی آسانسور قابل روئیت هستند. در حالت عادی و هنگامی که درب آسانسورها بسته است به منظور مصرف کمتر جریان خاموش بودن LED ها نماینده بسته بودن درب در نظر گرفته شد. همچنین هنگامی که تمامی LED روشن است نماینده این است که درب ها کاملا باز شده است.
طرز کار به این صورت است که پس از توقف آسانسور در طبقه مورد درخواست ابتدا 2 عدد از LED های داخلی روشن شده و پی از وقفه ای کوتاه 2 تای دیگر و در نهایت وتای بیرونی روشم میشوند. در این همنگام درب تا آخر باز شده است. پس از باز شدن درب مدار مقداری مکث می کند و پس از مدتی LED ها از بیرون 2 تا 2 تا شروع به خاموش شدن می کنند و این نماینده بسته شده درب ها می باشد.
در مورد نشاندهنده های طبقات مورد درخواست. این نشان دهنده ها شامل 3 دیود LED است که هر کدام نماینده طبقه خاصی است. این LED ها بروی برد اصلی و بالای هر کلید قرار گرفته است و عملکرد آنها به این صورت است که پس از فشردن هر کلید،LED مقابل به نمایندگی از درخواست همان طبقه روشن می شود.آسانسور به سمت طبقه مورد نظر شروع به حرکت میکند و پس از رسیدن به طبقه مورد نظر و توقف در جلو درب آن،LED مربوطه خاموش می گردد.
نمایشگر 7-Seg که نیازی به توضیح خاصی ندارد و شماره طبقه جاری که آسانسور در آن قرار دارد را نمایش میدهد.
ضمنا مقاومت های قرار داده شده در مسیر 7-SEG ، 560 اهم و مقامت های قرار داده شده در مسیر LED ها 330 اهم انتخاب شده اند. این مقاومت ها به منظور محدود کردن جریان دیودها بکار می روند. جریان دیودهای نوری عموما از چند میلی آمپر تا حدود 25mA میر سد.
* قسمت میکروکنترولر برای انجام محاسبات و تصمیم گیری و همچنین کنترل اجزای دیگر:
در ای پروژه از میکروکنترولر AVR محصول شرکت Atmel بعنوان مغز تصمیم گیرنده آسانسور استفاده گردیده.
شرکت اتمل در ابتدا یک کمپانی بود که بیشتر به خاطر تولیدات حافظه فلش او را میشناختند. پس از اینکه این شرکت ساخت میکروکنترولرهایی با هسته 8051 اینتل را شروع کرد به فکر ساختن یک هسته جدید با طراحی خود اتمل افتاد. نهایتا AVR محصول اتمل گردید.
AVR یک میکروکنترولر RISC با تعداد دستورالعمل بالا و همچنین تعداد زیاد رجیستر است.
از ویژگی های این نوع میکروکنترولر بهینه سازی دستورات برای برنامه های سطح بالا همچون C، تعداد بالای رجیسترهای همه منظوره، معماری Risc با تعداد دستورالعمل بالا و قدرت انجام محاسبات 16 بیتی در حالی که قیمت قابل رقابتی با میکروکنترولرهای 8 بیتی دارد.AVR همچنین از هیچ تقسیم کلاکی استفاده نمی کند. همچنین ساختار AVR به گونه ای طراحی گشته که در محیط های پر نویز آن را انتخاب خوبی قرار داده است.
صحبت درباره ویژگی های AVR و مزیت های آن بسیار است و از آنها به همین حد اکتفا می شود.
یکی از دلایل مهم استفاده از میکروکنترولر AVR در این پروژه، جدید بودن آن هست که با توجه به مدت کم حضور آن، طرفداران زیادی را به خود اختصاص داده است.
ضمنا در پایان گزیده ای از برگه اطلاعاتی میکرو ATMega16 آورده شده. شما می توانید جهت مطالعه بیشتر در مورد میکروکنترولرهای AVR به سایت Atmel به آدرس www.atmel.com مراجعه فرمائید.
*
* موتور و مدارات مربوط به آن:
در این پروژه از استپ موتور بعنوان تامین گننده گشتاور لازم برای جابجا کردن آسانسور استفاده شده است. همچنین بدلیل استفاده از استپ موتور با قطع نکردن جریان موتور در حالت ایستادن میتوان از آن به عنوان ترمز استفاده کرد.
استپ موتورها بدلیل ساختاری که دارند عموما در تعیین موقعیت و جابجایی به اندازه معین کاربرد دارند. در این پروژه نیز می توانستیم از این خاصیت استپ موتور استفاده کنیم. ولی بدلیل اینکه می خواستیم طرح شبیه تر به نمونه های معمولی باشد، از موتور تنها بعنوان یک تولید کننده گشتاور استفاده نمودیم. و برای تعیین موقیت نیز از سنسورهای نوری استفاده گردید.
مختصری راجع به استپ موتور:
استپ موتورها به موتورهای پله ای نیز معروفند. موتورهای پله ای اغلب همراه با میکروکنترولر برای ایجاد نیروی محرکه قابل کنترل مورد استفاده قرار می گیرند. این موتورها حاوی سیم پیچ هایی می باشند، و در هر مرحله پالس های خروجی به صورت الکتریکی به سیم پیچ مناسب اعمال می شوند. به این ترتیب در هر مرحله، موتور به اندازه زاویه تعیین شده می چرخد. محور آن را می توان به میزان دقیق در جهت مستقیم یا معکوس چرخاند. همچنین می توان آن را طوری برنامه ریزی کرد، که در جهت دلخواه با سرعت مشخص بچرخد.
موتورهای پله ای دستگاه هایی هستند که به ازاء هر پالس پله مقدار دقیقی بر حسب درجه گردش می کند و از این رو موتورها با موتورهای عادی که هنگام اعمال نیرو به صورت پیوسته می چرخند متفاوتند. موتورهای پله ای در هر حرکت تعداد صحیحی پله را طی کرده و سپس می ایستند و مانند موتورهای DC و AC نیاز به زمانی برای رسیدن به لحظه توقف ندارند. بطور معمول موتورهای پله ای در هر پله 1.8 درجه یا 7.5 درجه می چرخند. این موتورها معمولا با تعداد پله هایی که برای کامل کردن یک چرخش 360 درجه طی می کنند مشخص می شوند.
موتور مورد استفاده در این پروژه در هر پله 0.9 درجه را طی می کند. یعنی 360 درجه را در 400 استپ می پیماید که دقت خوبی برای کارهای دقیق به شمار میرود.
به آسانی می توان موتورهای پله ای را توسط میکروکنترولرها و یا آی سی های اختصاصی برای راه اندازی موتورهای پله ای راه اندازی کرد. این آی سی ها، مانند SSA1027 یا SSA1024 در مدارهایی که حرکت با زاویه دقیق ضروری می باشد، به میزان زیاد مورد استفاده قرار می گیرد. از موارد مصرف آن می توان حرکت بازوی ربات، انتخاب کاراکتر در چاپگرهای آفتابگردانی، کنترل حرکت هد چاپگر، بار گذاری کاغذ در ماشین تایپ الکترونیکی، و غیره نام برد.
برای راه اندازی یک موتور پله ای باید یک تعداد پالس به چهار سیم پیچ موتور اعمال شود. یک و یا دو سیم پیچ در هر لحظه تحریک شده و موتور را به اندازه یک پله می چرخاند. الگویی که طبق آن باید سیم پیچ ها تحریک شوند، باید به دقت تعقیب شود تا موتور درست کار کند. این الگو با توجه به حالتی که موتور مورد استفاده قرار می گیرد تغییر می کند. حالت عادی برای کاربردهای گشتاور پائین، حالت نیم پله ای (half step) است که در آن یک موتور 200 پله ای برای چرخش کامل در واقع 400 نیم پله را طی می کند.
موتورهای پله ای به دو صورت اصلی ارائه شده اند، که عبارتند از: نوع ترکیبی (Hybrid) و نوع مبتنی بر مقاومت مغناطیسی متغییر (Variable-Reluctance).
چون در این پروژه از موتور پله ای ترکیبی استفاده شده، مختصری را راجع به آن ذکر میکنم.
متداولترین نوع موتورهای پله ای از نوع ترکیبی هستند. در این نوع موتورها بخش چرخان حاوی آهنربای دائم می باشد و فلوی مغناطیسی انرژی دار شده با محور مرزی آن موازی است. معمولا این موتورها چهار فاز (یا سیم پیچ) دارند که یا مانند شکل 7 با استفاده از هشت پایه مستقل و یا مانند شکل 8 به صورت 2 مجموعه پایه های سه تایی در دسترس قرار می گیرند. این فازها معمولا به صورت یک قطبی طراحی می شوند و باید با قطبیت صحیح متصل شوند.
شکل 8
شکل 7
برای چرخش موتور میکروکنترولر باید الگوی راه اندازی را به خروجی بفرستد. الگوی راه اندازی نیم پله در جدول 1 ارائه شده است. برای کاربردهای با گشتاور بالاتر، از الگوی پله ای معمولی (Full step) استفاده می شود. این الگو در جدول 2 آمده است. برای کنترل موتور پله ای میکروکنترولر باید مقادیر نشان داده شده در این جدول را با همان ترتیب ارائه شده به خروجی ارسال نماید.
جدول 1 و 2 مشابه یک حلقه هستند. یعنی پس از پله آخر خروجی باید پله اول باشد. این مقادیر اگر بترتیب نشان داده شده ارسال شوند موتور در یک جهت میچرخد و اگر ترتیب ارسال آن ها بر عکس شود جهت چرخش موتور نیز عکس خواهد شد. رعایت این ترتیب، حتی اگر موتور برای یک لحظه متوقف باشد، ضروری است. پله بعدی برای راه اندازی مجدد موتور باید دنباله الگو باشد. با توجه به اینرسی مکانیکی موتور و برای اینکه هیچ پله ای از دست نرود باید بین هر دو پله متوالی یک تاخیر زمانی کوتاه معمولا حدود 5 تا 15 میلی ثانیه اعمال شود.
Bit 0
Bit 1
Bit 2
Bit 3
Step
0
1
0
1
0
0
0
0
1
1
1
0
0
1
2
1
0
0
0
3
1
0
1
0
4
0
0
1
0
5
0
1
1
0
6
0
1
0
0
7
جدول 1 – الگوی راه اندازی نیم پله (half step)
Bit 0
Bit 1
Bit 2
Bit 3
Step
0
1
0
1
0
1
0
0
1
1
1
0
1
0
2
0
1
1
0
3
جدول 2 – الگوی راه اندازی پله کامل (full step)
ضمنا در موتورهای پله ای موقع ایستادن اگر الگوی موقعیت موجود همچنان به موتور اعمال گردد موتور به عنوان ترمز عمل خواهد کرد. و نسبت به جابجایی مقاومت نشان خواهد داد.
در این پروژه به جای ترمز از این خاصیت استپ موتور استفاده گردیده و مدار را نسبت به افزودن سخت افزار اضافی جهت انجام ترمز و همچنین نگه داشتن آسانسور در موقعیت خود بی نیاز کرده است.
مختصری راجع به آی سی درایور ULN2003A :
این آی به منظور تامین جریان مورد نیاز برای موتورهای پله ای به کار برده می شود.
مشخصات این آی سی:
o هفت ترانزیستور دارینگتون در هر پکیج
o جریان خروجی هر درایور 500mA (جریان پیک 600mA)
o ولتاژ خروجی تا حد 50 ولت
o دیود خفه کننده برای بارهای سلفی
o امکان موازی کردن خروجی ها به منظور افزایش جریان خروجی
o ورودی سازگار با منطق های TTL/PMOS/DTL
o قرار گرفتن پین های ورودی و خروجی متناظر به هم رو بروی یکدیگر بمنظور ساده کردن سیم کشی در فیبر مدار چاپی
در این پروژه به علت بالا بودن جریان مصرفی موتور پله ای مجبور بودیم که هر 2 خروجی را به منظور افزایش جریان دهی آی سی به هم متصل کنیم که نهایتا 2 آی سی مصرف می شد.
در ضمن آی سی بصورت داخل دارای دیودهای حذف اثات القایی است که جهت استفاده از آن باید پایه 9 آی سی به ولتاژ تغذیه وصل شود.
همچنین آی سی فاقد تغذیه است. زیرا آی سی تنها شامل هفت ترانزیستور دارلینگتون کلکتور باز است که فقط پایه های امیتر آن به هم وصل شده و از پایه 8 قابل دسترس هستند و باید به زمین متصل گردد.
1.
3. قسمت نرم افزار و برنامه نویسی میکروکنترولر :
همانطور که ذکر شد در این پروژه از میکروکنترولر Atmega16 محصول شرکت Atmel استفاده شده.
این میکروکنترولر بخاطر ویژگی های خاص خو طرفداران زیادی دارد و روز به روز به شمار استفاده کنندگان آن افزوده میشود.
با توجه به اینکه زبان های سطح بالا از انعطاف پذیری بالایی برخوردارند و همچنین سرعت برنامه نویسی را به طور چشمگیری افزایش می دهند در میکروکنترولرها نیز زبان های سطح بالا نفوذ کرد و در حال حاظر کامپایلرهای متعددی از زبان سطح بالا مثل C ، Basic ، Pascal و … برای انواع میکروکنترولر تولید شده و همچنین هر روز به تعداد آن ها اضافه میشود.
لازم به ذکر است که دستورات اسمبلی AVR به گونه ای طراحی شده تا سازگاری بسیار زیادی با زبانهای سطح بالا داشته باشد. در اصل دستورات اسمبلی AVR برای برنامه نویسی به زبان اسمبلی و C بهینه شده است. و با داشتن رجیسترهای همه منظوره زیاد (32 عدد) هم باعث بالا رفتن سرعت برنامه و افزایش کارایی در زبانهای سطح بالا مانند C می شود و هم نوشتن کدهای اسمبلی را به دلیل نیاز کمتر به حافظه RAM و جابجایی های متعدد متغییرها، بیش از پیش آسان می کند.
بهر حال AVR هم مانند میکروکنترولرهای دیگر کامپایلرهای زبان سطح بالا متعددی دارد.
از بهترین کامپایلرهای زبان C، AVR میتوان از IAR ، CodeVisin AVR ، AVR GCC و … نام برد.
کامپایلر AVR GCC محصول خود Atmel است که بطور رایگان در اختیار کاربران AVR قرار دارد.
از بهترین کامپایلرهای زبان بیسیک نیز می توان Bascom AVR را نام برد.
این کامپایلر همچنین حاوی تعداد زیادی لایبرری آماده برای کارهای متعدد و به منظور کار با تجهیزات داخلی AVR و یا راه اندازی سخت افزارهای خارجی مرسوم می باشد. که همین امر کاربران زیادی را به خود جذب کرده.
همانطور که ذکر شد، این کامپایلر به زبان بیسیک است. زبان بیسیک به دلیل سادگی و آسانی که دارد کار برنامه نویسی را خیلی آسان کرده است.
در این پروژه برنامه به زبان بیسیک Bascom AVR نوشته شده و توسط کامپایلر آن ترجمه و در میکرو ذخیره شده است.
در پایان، برنامه پروژه به همراه الگوریتم آن و مختصری توضیحات ارائه خواهد شد. همچنین تعدادی از برگه های اطلاعاتی نیز به عنوان ضمیمه در پایان ارائه شده است.
شماتیک و پشت فیبر مدار نیز بعد از پایان قسمت نرم افزار آورده شده است.
برنامه به زبان بیسیک
کامپایلر :
Bascom AVR 1.11.7.4
$crystal = 8000000
$regfile = "m16def.dat"
Config Pinc.0 = Input 'Sensor Port
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinb.1 = Input 'Keyboard Port
Config Pinb.2 = Input
Config Pinb.3 = Input
Config Pinb.5 = Output 'LED key Port
Config Pinb.6 = Output
Config Pinb.7 = Output
Config Pinc.5 = Output 'LED-Door Port
Config Pinc.6 = Output
Config Pinc.7 = Output
Portc.5 = 1
Portc.6 = 1
Portc.7 = 1
Config Pind.0 = Output 'Step Motor Port
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Portd.0 = 1
Portd.1 = 1
Portd.2 = 0
Portd.3 = 0
Config Pina.0 = Output '7-Seg Port
Config Pina.1 = Output
Config Pina.2 = Output
Config Pina.3 = Output
Config Pina.4 = Output
Config Pina.5 = Output
Config Pina.6 = Output
Dim Direction As Bit
Dim K As Byte , I As Byte , E As Byte , C As Byte
Dim Temp As Byte , Temp_1 As Byte
Dim A(3) As Byte
Dim T As Long
A(1) = 0
A(2) = 0
A(3) = 0
E = 1
C = 0
Gosub Position
'**********************************************************
Main:
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
If A(1) = 0 Then Goto Main
If C = 0 Then
Select Case E
Case 1 : Portb.5 = 0
Case 2 : Portb.6 = 0
Case 3 : Portb.7 = 0
End Select
If A(1) = E Then
Gosub Door
A(1) = A(2)
A(2) = A(3)
A(3) = 0
C = 0
Goto Main
End If
If A(2) = E Then
Gosub Door
A(2) = A(3)
A(3) = 0
End If
If A(3) = E Then
Gosub Door
A(3) = 0
End If
End If
Gosub Motion
Gosub Position
Goto Main
End 'end program
'***************************************************************************
Key_scan:
K = 0
If Pinb.1 = 0 Then
K = 1
Gosub Insert
End If
If Pinb.2 = 0 Then
K = 2
Gosub Insert
End If
If Pinb.3 = 0 Then
K = 3
Gosub Insert
End If
Return
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Insert:
I = 1
Do
If A(i) = 0 Then
A(i) = K
Select Case K
Case 1 : Portb.5 = 1
Case 2 : Portb.6 = 1
Case 3 : Portb.7 = 1
End Select
End If
If A(i) = K Then Exit Do
Incr I
Loop
Return
'####################################################
Motion:
Gosub Direction
Temp_1 = Portd And &B11110000
Temp = Portd And &B1111
For I = 1 To 10
Select Case Direction
Case 1
Select Case Temp
Case &B1100 : Portd = Temp_1 Or &B1001
Case &B0110 : Portd = Temp_1 Or &B1100
Case &B0011 : Portd = Temp_1 Or &B0110
Case &B1001 : Portd = Temp_1 Or &B0011
End Select
Case 0
Select Case Temp
Case &B0011 : Portd = Temp_1 Or &B1001
Case &B1001 : Portd = Temp_1 Or &B1100
Case &B0110 : Portd = Temp_1 Or &B0011
Case &B1100 : Portd = Temp_1 Or &B0110
End Select
End Select
Waitus 800
Next I
Return
'####################################################
Direction:
Select Case E
Case Is < A(1) : Direction = 1
Case Is > A(1) : Direction = 0
End Select
Return
'####################################################
Position:
C = 0
Temp = Pinc And &B111
Select Case Temp
Case &B110 : E = 1
Case &B101 : E = 2
Case &B011 : E = 3
Case Else : C = 1
End Select
Porta = Lookup(e , 7seg)
Return
'####################################################
Door:
Portc.5 = 0
For T = 1 To 80000
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
Next T
Portc.6 = 0
For T = 1 To 80000
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
Next T
Portc.7 = 0
For T = 1 To 80000
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
Next T
For T = 1 To 400000
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
Next
Portc.7 = 1
For T = 1 To 80000
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
Next T
Portc.6 = 1
For T = 1 To 80000
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
Next T
Portc.5 = 1
For T = 1 To 80000
Temp = Pinb And &B1110
If Temp < 14 Then Gosub Key_scan
Next T
Return
'####################################################
7seg:
Data 0 , &B110 , &B1011011 , &B1001111
الگوریتم
مختصری در مورد برنامه مدار :
برنامه موجود شامل چند بخش می باشد:
* مقداردهی اولیه متغیرها و پیکربندی پورت ها و سخت افزار.
* اسکن صفحه کلید و ذخیره شماره طبقات درخواست شده. همچنین نمایش شماره طبقه درخواست شده.
* زیر برنامه اصلی یا Main.
* زیر برنامه باز و بسته شدن درب ها.
* زیر برنامه نمایش شماره طبقه جاری.
* زیر برنامه تعیین جهت حرکت آسانسور.
* زیر برنامه کنترل کننده استپ موتور.
* برنامه حذف شماره طبقات توقف شده.
بخش های از برنامه های بالا در یک زیر برنامه بوده، ولی ممکن است کارهای متفاوتی را انجام دهند.
مانند برنامه اسکن صفحه کلید که در اکثر زیر برنامه ها وجود دارد.
در قسمت Main یا اصلی برنامه، ابتدا برنامه به اسکن صفحه کلید میپردازد. برنامه اسکن صفحه کلید به این صورت است که ابتدا تمامی کلیدها را به طور یک جا خوانده و اگر ارزش عدد خوانده شده از کلیدها از یک مقدار معیین کمتر باشد معلوم می شود که کلیدی فشرده شده و برنامه برای پیدا کردن کلید فشرده شده به زیر برنامه Key_scan می رود. در این زیر برنامه پس از تشخیص کلید فشرده شده ابتدا شماره طبقه مورد نظر را در حافظه ذخیره کرده و سپس چراغ زیر کلید را روشن می کند.
بنابراین روشن بودن یک LED نمایانگر درخواست طبقه مورد نظر آن است.
پس از ثبت کلید فشرده شده برنامه به بعد از برنامه اسکن صفحه کلید می رود. سپس برنامه به زیر برنامه Motion برای به حرکت در آوردن آسانسور می رود. در آنجا برنامه به زیر برنامه Direction پرش کرده و جهت حرکت را با توجه به موقعیت و کلید فشرده شده تعیین میکند. رجیستر Direction حاوی جهت حرکت آسانسور است.
در صورتی که آن 0 باشد جهت حرکت رو به پائین و در صورتی که 1 باشد جهت حرکت رو به بالا است.
پس از بازگشت برنامه به Motion ، موتور روشن شده و شروع به حرکت در جهت تعئین شده می نماید. در این زیر برنامه موتور 10 استپ معادل 9 درجه را طی میکند.
ضمنا قبل از انجام مراحل فوق پس از پرش برنامه به این بخش، به منظور از دست ندادن کلیدها، صفحه کلید به روش گفته شده اسکن می گردد.
برنامه پس از حرکت دادن موتور، به زیر برنامه اصلی بازگشت پیدا می کند.
پس از بازگشت برنامه به زیر برنامه Position پرش کرده و سنسورها را اسکن میکند.
در صورتی که یک سنسور تحریک شده باشد، شماره طبقه مورد نظر را در متغیر E ذخیره کرده همچنین مقدار 7-SEG را نیز اصلاح می کند.
برنامه به سپس به اول برنامه Main باز می گردد و مرال فوق مجددا تکرار می گردد.
نکته ای که در آسانسورها مطرح است این است که هر کلید تنها یک بار باید در حافظه ثبت شود (دو عدد مساوی در حافظه قرار نگیرد). در اینصورت ما به تعداد طبقات آسانسور رجیستر لازم خواهیم داشت. این کار با چک کردن حافظه هنگام ورود شماره طبقات صورت می گیرد.
همچنین برنامه باید قادر باشد در مسیر اگر طبقه ای در خواست شده بود توقف نماید. مثلا فرض کنید که آسانسور در طبقه 1 قرار داشته باشد. حال دکمه طبقه 3 و سپس دکمه طبقه 2 را فشار می دهیم.
آسانسور مقصد را طبقه ای که اول درخواست شده قرار میدهد که در این مثال همان طبقه 3 است. سپس شروع به حرکت به طرف آن می کند. در حین مسیر هنگامی که به یک طبقه رسید عدد آن طبقه را با مقادیر موجود در حافظه چک می کند و اگر طبقه ای در مسیر و جود داشته باشد که درخواست شده، جلو آن توقف خواهد کرد. بعنوان مثال در مورد بالا آسانسور در حین حرکت به سمت طبقه 3، در بین مسیر سنسور طبقه 2 را تحریک میکند. برنامه شماره سنسور را را مقادیر موجود در حافظه مقایسه کرده و در صورتی که مساوی بود توقف خواهد کرد. در این مورد حافظه شماره 2 با شماره سنسور برابر است. پس آسانسور جلو درب آن توقف کرده و سپس شماره طبقه مورد نظر را از حافظه خذف خواهد کرد. پس از انجام این مراحل به راه خود ادامه خواهد داد.
با کمی دقت در برنامه میتوانید محل انجام اعمال زیر را بیابید.
مورد دیگر روشن کردن 7-SEG است که در اینجا از جدول Look up استفاده شده.
به اینصورت که مقادیر متناظر با عدد 1 روی نمایشگر در محل 1 جدول قرار دارد.
نکته دیگر این برنامه استفاده از اسکن کردن صفحه کلید به مقدار زیاد به جای استفاده از دستور تاخیر است. در بعضی مواقع ما نیاز به تاخیر داریم. ولی برنامه ساختاری دارد که اگر از تاخیر در آن استفاد شود برخی رویدادها مانند دکمه های صفحه کلید را از دست می دهد. نمونه آن در این برنامه استفاده از اسکن صفحه کلید به جای تاخیر در زیر برنامه Door است.
با توجه به اینکه برنامه نکته خاص دیگری ندارد از توضیح آن به همین مقدار اکتفا می شود. بقیه موارد را می توان از روی برنامه و با کمک الگوریتم به راحتی درک کرد.
شماتیک مدار :
پشت فیبر مدار :
نمای قطعات
نمای پشت فیبر
1