مقدمه ای بر الگوریتم کنترل آسانسور و میکرو کنترلر AVR (بخش پنجم)

27 جولای

در کلاس آموزش آسانسور به ادامه الگوریتم کنترل آسانسور توسط میکروکنترلر AVR می پردازیم.

 بخش پنجم مطالب آموزش نصب آسانسور به روش سوم چک کردن ورودی های تابلو فرمان که وقفه دوراندازهاست می پردازیم:

3- وقفه دورانداز آسانسور:

1-3- روش اول:

متغیر cf3 نشان دهنده دور انداز اول یا دوم بین طبقات است. با دیده شدن سنسور تراز آسانسور مقدار آن صفر می شود و هر بار که یک سنسور دور انداز آسانسور دیده می شود مقدار آن ++ می شود. اگر قرار باشد با سنسور اول دوراندازی کند هنگامی که مقدار این سنسور عدد 1 را نشان می دهد متغیر شاسی را با متغیر تراز AND می کند و در صورتی که نتیجه بزرگتر از 1 بود بیت دور تند را از ماکروی Motor  صفر و بیت دور کند را یک می کند.

2-3- روش دوم:

متغیر cf3 در جهت بالا ++ و در جهت پایین – می شود. شماره دورانداز هر توقف و جهتی که باید در آن دوراندازی شود در آرایه ای مثلا به نام [Cf3-level[64 نگهداری می شود. هر بار با دیده شدن سنسور دورانداز آسانسور با توجه به اطلاعاتی که در [Cf3-level[Cf3 وجود دارد موقعیت کابین و بیت های دورکند و تند ماکروی motor تغییر داده می شود. از آنجا که هر توقف دو سنسور دورانداز دارد پس متغیر Cf3-level  برای 32 توقف 64 عضو دارد.

3-3- روش سوم:

روش سوم تقریبا شبیه به روش دوم است با این تفاوت که در آرایه های Cf3-level مقدار پالس های انکودر برای هر توقف نگهداری می شود. از این روش در سیستم های Close Loop جهت حذف سنسورهای دورانداز و ترازکردن دقیق کابین استفاده می شود.

Interrupt[ext-int1-isr(void)//1cf  وقفه ای

{if(jehat==0x20) {tabage++;level<<=1;}

If(jehat==0x40) {tabage--;level>>=1;}

If(rvzion-swich==1){}else{if((motor&4)>0)motor=0;}

Tim-travel=1;};

Interrupt[EXT-INT7] voidext-int7-isr(void)//cf3  وقفه ای

{if(jehat==0x20){dorandaz++;};

If(jehat==0x40){dorandaz--;};

If(rvzion-swich==1) {} else {if

((ss&dorandaz-level[dorandaz])>0)

{motor=(motor&0xf7)0x04;};}; tim-travel=1;};