انکودر چیست؟

 

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

حال این پالس ها به چه دردی می خورد؟

از انکودر در بسیاری از قسمت ها استفاده می شود از جمله هیمن قلتک موس ها!

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

انکودر

 

 

انکودر نوری
انکودر

 

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

البته انکودرها مدل های متفاوتی دارند که از جمله آن دو طرفه بودن انکودر ها می باشد!

 

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

 

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

انکودر دو طرفه

 

انکودر دو طرفه

 

 

 

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

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

انکورد در صنعت کاربرد زیادی دارد.

 

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

 

ادومتری

 

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

 

 

 

 

 

 

در این بخش قصد دارم تا کنترل یک ربات که در نرم افزار kiks در بستر متلب را مورد بررسی و آموزش قرار بدم.

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

مقدمه

رباتي که مي خواهيم کنترل کنيم داراي 2 سنسور فاصله در سمت جلو و 4 سنسور در اطراف و 2 سنسور نيز در پشت دارد.

که براي روال کنترلي بدين صورت است که با نزديک شدن هر سنسور به ديوار مقدار متغير اين سنسورها تغيير کرده که با توجه به ميزان تغييرات سنسور ما بايد منحني هاي فازي را جوري تأيين کنيم تا با ديوار برخورد نکرده و همينطور به راه خود ادامه دهد.

در اين بخش ما دو عدد نقشه ي راه داريم که ربات ما بايد بتواند اين 2 نقشه را به صورت کامل دور بزند که البته نبايد به ديوار ها برخورد کند.

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

 

اضافه کردن نرم افزار KIKS در نرم افزار MATLAB  :

براي اين منظور اول وارد پوشه ي KIKS مي شويم و فايل STUP را اجرا مي کنيم و روند نصب را ادامه مي دهيم و در مرحله ي بعدي در محيط MATLAB گزينه ي PATHS را مي زنيم و فايل هايي که در پوشه ي KIKS مي باشد را به متلب اضافه مي کنيم.

نکته : اگر فايل KIKS را در کامپيوتر جا به جا کنيم بايد دوباره فايل هاي را به MATLAB اضافه کنيم.

بعد از اينکه نرم افزار KIKS  در متلب بستر سازي شد حال نوبت به اجراي فايل FIS_navigate_demo مي رسد تا بتوانيم براي کنترل ربات يک کنترل فازي مناسب طراحي کنيم.

 

 

در اين قسمت سعي  بر  اين دارم تا اين فايل را تشريح کنم.

 

 

 

 

مطالب بالا تنظيمات کلي از جمله باز کردن فايل و نقشه را بر عهده دارد.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

در خط 27 به MATLAB دستور باز کردن فايل فازي را مي دهد (که بايد شما اين فايل را درست کنيد) و  در خط 30 مراحل اصلي برنامه و کنترل ربات مي باشد که داخل حلقه تکرار مي شود تا زمان 1 دقيقه به پايان برسد. خطوط 35 تا 39 وظيفه ي کنترل سنسورها را بر عهده دارند.

 

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

 

در خط 40 نيز ما متغيرها که حاوي مقادير خوانده شده از سنسورها بود را به کنترل کننده فازي خود مي دهيم. در اين بخش ما 4 ورودي را به کنترل کننده فازي خود مي دهيم که همان  متغيرهاي سنسور ما هستند.

 

در خطوط بعدي )42 و 43 ( ما دو متغير که نتيجه ي (خروجي) کنترل فازي ما مي باشد را در دو متغير ديگر قرار مي دهيم که اين دو فرمان سرعت ربات به جلو و عقب و متغير بعدي به چپ و راست ربات را انجام مي دهد.

 

حال براي اينکه به ربات دستور حرکت را بدهيم و همينطور مقادير حرکتي (سرعت و گردش) را قرار دهيم از تابعي که در خط 45 قرار دارد استفاده مي کنيم.

 

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

 

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

ساخت یک کنترل فازی

 

براي ساخت يک کنترل فازي در نرم افزار MATLAB بايد عبارت FUZZY را تايپ کنيم و ENTER کنيم تا برنامه ي کنترل فازي باز شود.

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

همانطور که قبلا گفته شد ربات ما داراي 4 ورودي مي باشد يعني سنسورهاي جلو و چپ و ... که هر کدام از اين سنسورها در اين قسمت يک ورودي به شمار مي آيند پس در نتيجه ربات ما داراي 4 ورودي مي باشد و براي خروجي نيز ما نياز به 2 خروجي داريم که هر کدام از خروجي ها داراي مقادير مثبت و منفي هستند.

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

گام بعدي قرار دادن شرط هاي مناسب مي باشد، براي اين منظور بهتر است ما از شرط هاي کمتري استفاده کنيم چون هرچه اين شرط ها کمتر باشد ربات ما با پردازش کمتري مي تواند به مسير خود ادامه دهد و هر چه اين شرط ها اضافه شود ضمن گنگ تر شدن برنامه براي خواننده بار پردازشي پردازنده نيز افزايش پيدا مي کند پس بهتر است شرط هاي کمتري در برنامه قرار دهيم.

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

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

 

درست کردن نمودار ها فازی (ورودی ها و خروجی ها)

 

بعد از اينکه برنامه ي فازي را در MATLAB باز کرديم براي ربات 4 ورودي را درست مي کنيم در اين قسمت همانطور که در شکل مي بينيد بهتر است نام هاي مناسبي براي هر يک از ورودي ها نام گذاري کنيم تا در ادامه به مشکل برخورد نکنيم. سپس 2 عدد خروجي نيز براي ربات درست مي کنيم و نام هاي مناسبي نيز براي خروجي ها قرار مي دهيم.

سپس بر روي ورودي اول double click مي کنيم تا تنظيمات لازم را انجام دهيم.

تنظيماتي که انجام مي دهيم متفاوت مي باشد از قرار دادن نام مناسب براي هر يک از مقادير تا اينکه بدانيم نوع فازي ما بايد به چه شکلي باشد تا بتوان ربات را بهتر هدايت کرد.

در تصوير زير تنظيماتي که براي ربات انجام دادم را مي توانيد مشاهده کنيد.

 

 

 

همانطور که در شکل بالا مشخص مي باشد بنده 4 ورودي و 2 عدد خروجي را براي کنترل فازي خودم تدارک ديدم حال روي هر کدام از اين ورودي ها double click مي کنم تا براي تنظيمات هر کدام توضيحي بدهم. اما ناگفته نماند که نام ورودي ها را در همين قسمت تنظيم مي کنيم و بعد تنظيمات ديگر را انجام مي دهيم.

تنظیمات بازه ی ورودی و خروجی

 

بازه ي تغيرات سنسور بين 0 تا 12 مي باشد و اين مقدار که عدد مهمي به حساب مي آيد در بخش قبل گفته بوديم که مقدار همان مقدار ورودي سنسورها مي باشد مثلا گفته بوديم که هر طرف ربات داراي دو سنسور مي باشد که هر سنسور نيز مي تواند تا عدد 1024 را به خروجي دهد حال وقتي ما دو سنسور جلويي را با هم جمع کنيم اين مقدار به 2048 مي رسد که وقتي به عدد 12 تقسيم مي کنيم به مقدار 10.24 مي رسيم که 2 عدد آخري يعني 12 نيز مانعي براي تنظيمات ما ندارد و امنيت دستگاه را بالاتر مي برد مثلا اگر ما مقدار 10 را براي ورودي تعريف مي کرديم مقداري از بازه ورودي را از دست مي داديم و اين مقدار نيز براي ربات تعريف نشده به حساب مي آمد که موجب سر در گم شدن ربات مي شد.

 

براي خروجي ها هم بايد تست کنيم که ربات ما با چه سرعتي مي تواند به درستي به کار خود ادامه دهد و با توجه به اين مسئله مي توان بازه ي مناسبي را براي اين محدوده تنظيم کرد. اما بهتر است در اول کار سرعت کمي را براي ربات خود تنظيم کنيم و تا در اول کاري ربات فقط بتواند به نرمي و درستي به حرکت خود ادامه دهد.

 

سنسور جلو:

 

روي باکس front کليک مي کنم تا وارد تنظيمات سنسور جلويي ربات بشويم همان طور که در شکل مي بينيد ما 3 حالت براي اين ورودي تعريف کرديم که هر کدام از اين نمودارهاي براي کاري در ربات تعريف شده  _اند.

 

 

 

سنسور چپ:

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

 

در واقع اين قسمت است که ربات را مي تواند خيلي منظم و دقيق به دور ديوار بچرخواند به طوري که مسير خو را گم نکند و به مسير خود ادامه دهد. 

 

ادامه دارد ...

 

 

مبدل آنالوگ به دیجیتال یا ADC

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

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

از این رو ما برای اینکه بتوانیم سنسور آنالوگ را به یک سیستم دیجیتال تبدیل کنیم باید از مبدل های آنالوگ به دیجیتال استفاده کنیم.

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

اما چطور ممکن است که ما با یک رنج ولتاژ بین مثلا 0 تا 3 ولت را به دیجیتال تبدیل کنیم؟! همانطور که گفته شد در دیجیتال ما فقط صفر و یک داریم اما چطور می توانیم این بازه ی ولتاژ را تحت پوشش قرار بدیم ! در واقع اینجا قسمت کدینگ را داریم سیستم های دیجیتال برای هر مقدار از ولتاژ یک کد در نظر می گیرد که هر کد یعنی یک مقدار خاص!

اما این کدها چطوری به وجود می آیند؟ مثلا شما در یک مبدل آنالوگ به دیجیتال 2 بیتی ما 4 حالت داریم 2 به توان 2 و در یک مبدل دیجیتال 3 بیتی ما 8 حالت داریم یعنی 2 به توان 3.

حال این حالت ها همان کدهای ما هستن یعنی ما مثلا ما 8 تا حالت داریم که هر کدام یک ولتاژ خاص را مد نظر دارند.

برای درک بهتر یک مثال می زنم:

مثلا ما یک سنسور آنالوگ داریم که بازه ی تغیرات آن بین 0 تا 3 ولت می باشد حال با یک مبدل آنالوگ به دیجتال 3 بیتی می خواهیم مقدار آنالوگ را به دیجیتال تبدیل کنیم ، از آنجایی که گفته شد یک مبدل آنالوگ به دیجیتال 3 بیتی دارای 8 حالت بود پس ما اگر این مبدل 3 بیتی را به سنسور وصل کنیم 8 حالت برای سنسور داریم یعنی مثلا 

حالت 0 یعنی ولتاژ 0 ، حالت 1 یعنی 0.375 ولت ، حالت 2 یعنی 0.75 ولت ، حالت 3 یعنی 1/125 و ...

همانطور که مشاهده می کنید یکسری بین حالت 0 و 1 و یا 1 و 2 یکسری از ولتاژ ها را نداریم که به این حالت می گویند گسسته.

در واقع یک سیستم دیجیتال همیشه مقادیر گسسته را می تواند محاسبه کند!

 

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

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

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

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

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

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

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

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

 

 احتمالا برای شما پیش آمده که وقتی مقداری از یک سنسور را می خوانید مطمئن نیستید که آیا این مقدار همان مقداری هست که باید باشد یا نه!؟

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

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

این عدم قطعیت در تمام سنسورها وجود دارد که ممکن است این عدم قطعیت در شرایط خواصی نمایش داده شود.

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

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

حتما برای شما پیش آمده که وقتی یک مقدار آنالوگ را می خوانید، چقدر رنج تغیرات زیاد می باشد و شما نمی توانید یک مقدار ثابتی را داشته باشید.

نکته ای که باید به خاطر داشته باشید این است که این عدم قطیعت با خطای سنسور متفاوت می باشد ، در واقع خطای سنسور یک عددی ثابت می باشد مثلا می گویند 5 درصد خطا دارد اما عدم قطعیت رنج بزرگتری را می تواند شامل شود و نکته ی دیگر این است که خطای سیستم را می شود اصلاح کرد (تا حدودی) اما خطای عدم قطعیت به سادگی قابل تشخیص نمی باشد.