آموزش نحوه ی راه اندازی درایور MDC20 با نرم افزار متلب

مقدمه

یکی از توانایی­ های منحصر به فرد  درایور MDC20  که آن را از سایر محصولات موجود در بازار متمایز می­ کند پلتفرم بودن این درایور می­ باشد، به این معنی که در این درایور دسترسی به سطوح سخت افزاری کاهش یافته و کاربر ناآشنا با الکترونیک  به راحتی می ­تواند با آن ارتباط برقرار کند.  درایور  MDC20  به تمامی نرم افزارهایی که از پروتکل سریال پشتیبانی می کنند متصل می­ شود از جمله  اتصال به نرم افزارهایی هم چون MATLAB ، VISUAL STUDIO و LABVIEW و بدین وسیله می توانید دو دسته از موتورهای پرکاربرد DC و Stepper را راه اندازی و کنترل کنید. این توانایی می ­تواند کاربردهای متعددی در زمینه­ های مختلف از جمله روباتیک، سیستم های اتوماسیون، سیستم­های CNC ، پرینترهای سه بعدی، کنترل روشنایی LED ، کنترل شیرهای مغناطیسی، راه اندازی جک­ های مغناطیسی ، سیستم­ های کنترل تردد، ویلچرهای برقی، نوار نقاله، درب­ های اتوماتیک، تجهیزات جوشکاری، تجهیزات پمپاژ و … داشته باشد.در این مقاله به آموزش نحوه­ ی راه اندازی درایور MDC20 با استفاده از نرم افزار متلب خواهیم پرداخت.

اتصال درایور MDC20 به نرم افزار متلب

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

۱- درایور را با ولتاژی از ۵٫۵ تا ۳۶ ولت تغذیه کنید.(در صورتی که تغذیه درایور را به درستی متصل کرده باشید چراغ قرمز رنگ Power’s LED موجود در وسط بورد روشن خواهد شد).

۲- درایور را از طریق کابل USB به کامپیوتر وصل کنید و سوئیچ­ های ۱ و ۲ را در حالت ON قرار دهید.

۳- به قسمت Device Manager کامپیوتر خود رفته و شماره درگاه USB را استخراج کنید.

۴- سوئیچ های ۳ و ۴ را در حالت OFF قرار داده و دکمه ریست را به مدت یک ثانیه فشار دهید(با انجام این مرحله آدرس بورد، نرخ ارسال اطلاعات و مد انکودر به ترتیب صفر، ۹۶۰۰ و مد شمارش معمولی تنظیم می گردند).

بعد از انجام مراحل چهارگانه­ ی فوق درایور آماده­ ی کنترل موتور DC یا پله­ ای می­ شود.

انجام تنظیمات درگاه USB در نرم افزار متلب

برای شروع کار و کنترل درایور از طریق نرم افزار متلب ابتدا باید تنظیمات درگاده USB را در نرم افزار متلب انجام دهید که برای این منظور می­ توانید از قطعه کد زیر استفاد کنید:

clear
delete(instrfind)
s=serial('COM13');
set(s,'BaudRate',9600);
fopen(s);

با اجرای قطعه کد فوق درگاه سریال s با شماره درگاه ۱۳(شماره درگاه مطابق با شماره ی آن در قسمت Device Manager کامپبوتر تنظیم می گردد) و نرخ ارسال اطلاعات به میزان ۹۶۰۰ بیت در ثانیه ایجاد و باز می­ گردد.

کنترل موتورهای DC

در مرحله بعد چنانچه قصد دارید تا از درایور MDC20 برای کنترل موتور DC استفاده کنید سوئیچ های ۳ و ۴ را در حالت ON قرار داده و دکمه ریست را به مدت یک ثانیه فشار دهید تا وارد مد کنترل موتور DC شوید.

تنظیم سرعت موتورها

در درایور MDC20  برای کنترل سرعت موتورها با توجه به جدول۳ موجود در  User’s Manual درایور MDC20 برای کنترل سرعت موتور یک از دستورات ۰X64  و ۰X66 به ترتیب برای چرخش در جهت ساعت گرد و پاد ساعت گرد و  برای کنترل سرعت موتور دو از دستورات ۰X65 و ۰X67 به ترتیب برای چرخش  در جهت ساعت گرد و پاد ساعت گرد استفاده می­ شود.

به عنوان مثال برای تنظیم سرعت موتور اول در جهت ساعت گرد به میزان ۲۰۰ و تنظیم سرعت موتور دوم  در جهت پاد ساعت گرد به همان میزان می توان از قطعه کد زیر استفاده کرد:

M1CW = hex2dec({'00','64','C8');
fwrite(s,M1CW);
M2CCW = hex2dec({'00','67','C8');
fwrite(s,M2CCW);

تنظیم شتاب موتورها

یکی از قابلیت های درایور MDC20 امکان تنظیم شتاب موتورها می­ باشد. شتاب موتورها میزان نرم بودن حرکت را مشخص می­ کند. این پارامتر عددی بین ۰ تا ۲۵۵ بوده که برای هر دو موتور DC به یک میزان تنظیم می­ گردد، به طوری  که به ازای عدد ۰ موتور دارای کمترین شتاب ممکن(بیشترین میزان لختی)  و به ازای عدد ۲۵۵ موتور دارای بیشترین شتاب(کمترین میزان لختی) می باشد.

میزان شتاب پیش فرض درایور ۲۵۵ بوده که به معنی کمترین لختی می ­باشد. به عبارتی در این حالت موتور در کمترین زمان ممکن سرعت می گیرد و هر چقدر میزان این عدد را کاهش دهیم(شتاب را کمتر کنیم) حرکت موتور نرم تر شده و دیرتر سرعت می ­گیرد.

برای تنظیم شتاب موتورها مطابق جدول۳ در User’s Manual  درایور MDC20 باید از دستورالعمل ۰X68 استفاده کنیم. به عنوان مثال برای تنظیم شتاب موتورها به میزان ۲۵۰ می توان از قطعه کد زیر در نرم افزار متلب استفاده کرد:

Acceleration = hex2dec({'00','68','FA');
fwrite(s,Acceleration);

دریافت مقادیر انکودرها

انکودر درایور MDC20 در دو مد کاری زیر می تواند عمل نماید:

الف) مد انکودر شمارش ساده: در این حالت درایور پالس­ های خروجی از انکودر را جدا از هم به صورت ساده می ­شمارد ( جهت حرکت در شمارنده بی تاثیر است).

ب) مد انکودر شمارش Quadrature: در این مد هر دو پالس خروجی انکودر به صورت مرکب شمرده خواهد شد. این مد مناسب پیاده سازی الگوریتم های کنترلی است. توجه کنید که انکودر شما بایستی در این حالت دارای دو خروجی پالس  باشد.

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

delete(instrfind);
s = serial('COM5');
set(s,'BaudRate',9600);
fopen(s);
Encoder_Read = hex2dec({'00','6D'});
fwrite(s,Encoder_Read);
Actual = fscanf(s,'%e',14);

شاید این مطالب را هم دوست داشته باشید

15 پاسخ

  1. صدرالدین ناصری می‌گه:

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

  2. رضا می‌گه:

    با عرض سلام و خسته نباشید
    ۱- آیا درایور MDC20 توانایی تغییر جهت حرکت و سرعت یا شتاب موتور در دقت زمانی ۰٫۰۰۵ ثانیه دارد؟
    ۲- آیا می توان مقادیر جهت حرکت و سرعت یا شتاب در محیط متلب بصورت ماتریسی یا با حلقه for تغییر داد؟
    با تشکر

    • سلام بر شما کاربر گرامی،
      در ابتدا به عنوان پاسخ کوتاه، جواب هردو سئوال شما بله است اما چرا؟
      در جواب سوال اول باید به ۲ نکته مهم توجه داشته باشید. اولا اینکه تغییر سرعت یک موتور تابع ۲ مسئله است، اولین مسئله سرعت ارسال و دریافت اطلاعات بین درایور و کنترل کننده که می تواند یک کامپیوتر، یک میکروکنترلر یا یک سیستم میکروکنترلری همانند Arduino یا Rasperi و یا … باشد. در این حالت حداکثر تاخیر ارسال و دریافت در حد چند میکرو ثانیه می باشد، که همان پاسخ درایور به تغییرات سرعت است. دومین مسئله که باید در نظر بگیرید دینامیک موتور شماست. در واقع باید این سوال را از خود بپرسید که موتور می تواند در بازه های ۵ میلی ثانیه ای به تغییرات سرعت پاسخ دهد یا خیر؟ برای یافتن جواب باید پاسخ پله ی موتورتان را بدانید. اگر موتور شما قابلیت دنبال کردن تغییرات سرعت در این بازه زمانی را دارد باید بدانید که در استفاده از MDC20 به مشکلی نخواهید خورد. به طور خلاصه محدود کننده ی تغییرات سرعت موتور شماست نه درایور موتور، به همین دلیل باید روی موتور نیز تمرکز داشته باشید.
      در جواب سوال دوم شما باید بگویم که اصلا هدف اصلی طراحی و ساخت MDC20 چنین چیزی بوده است. در واقع شما قادرید هر برنامه ی کنترلی را از طریق هر نرم افزار یا زبان برنامه نویسی بر روی MDC20 تست کنین. به عنوان جواب دقیق تر شما می توانید همانند مثال های بالا به جای دادن سرعت های ثابت، سرعتهایی از پیش تعیین شده را در یک ماتریس قرار داده و برای موتور در هر لحظه ی دلخواه ارسال کنین.
      به عنوان مثال می توانید به صفحه ی زیر که یک نمونه کنترلر PID پیاده سازی شده بر روی MATLABبرای درایور MDC20 است مراجعه فرمایید.
      در صورت داشتن هرگونه ابهام ، تردیدی در پرسیدن سئوال در اینجا نداشته باشید.
      http://robotmakers.ir/blog/%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%85%D9%88%D8%AA%D9%88%D8%B1-dc-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88%D8%B1-mdc20-%D9%88-%D9%86%D8%B1/

  3. امیر می‌گه:

    سلام
    چند تا موتور dc دارم که می خواهم سرعت هر یک از آنها را به صورت تابعی از زمان (هر موتور با تایع متفاوت) مثلا سینوسی با زمان تغییر کند و با انکودر مکانیکی هم چک کنم. خودم مکانیک خوندم و از الکترونیک اطلاع ندارم ۱- آیا میشه با این درایور این کار رو کرد؟ ۲- من که اصلا الکترونیک نمیدانم می توانم با این درایور کار کنم یا یاز به کمک دارم؟ یعنی جای اتصال سیمه و انکودر مشخص شده است؟ ۳- آیا شرکت چند نمونه از برنامه های آماده متب در اختیار کاربر قرار می دهد تا فقط من تابع را عوض کنم؟ ۴- آیا از این درایور برای تغییر سرعت سینوسی استپ موتور میشه استفاده کرد؟

    • با سلام،
      به طور خلاصه تمام سئوالات شما پاسخشان بله هست، در ادامه به تک تک آنها پاسخ می دهیم:
      ۱- اولا با هریک از درایور های MDC20 شما می توانید ۲ موتور DC به صورت همزمان یا یک موتور Stepper را کنترل کنید. در MDC20 دو درگاه برای انکودر در نظر گرفته شده که شما می توانید در صورت مجهز بودن موتور خود به انکودر از این ویژگی در دو حالت Simple و Quadrature بهره ببرید. همچنین شما می توانید شبکه ای از درایور موتورهای DC و STEPPER را ساخته و همه را با یک کامپیوتر کنترل کنین.
      ۲- جالب است بدانید هدف اصلی و نهایی MDC20 همین بوده که نیاز به دانش فنی در کاربر را به حداقل برساند، MDC20 محصول کار گروهی ۴ نفره ای است که ۲ نفر از این ۴ نفر مهندسین مکانیک هستند، و تمام تلاش بر سادگی و عدم نیاز کاربر به ورود به مسائل تخصصی بوده و هست و خواهد بود.
      ۳- اگر به لینک زیر مراجعه کنین با انواع و اقسام آموزش ها و برنامه های آماده برای MDC20 مواجه می شوید، تمام توابع مورد نیاز شما برای کار با MATLAB از قبیل راه اندازی موتور ها، خواندن انکورد، پیاده سازی روشهای کنترلی مثل PID Controller آورده شده. همچنین MDC20 مجهز به یک رابط کاربری بسیار کاربردی برای تستهای اولیه شماست.
      http://robotmakers.ir/blog/%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88%D8%B1-mdc20/
      ۴- به دلیل اینکه درایور طوری طراحی شده که تمام نیازهای کاربر از بعد سخت افزار به بعد نرم افزار آورده شده، شما قادر به ارسال هر نوع تابع برای سرعت و یا موقعیت موتور خواهید بود. به مثال PID کنترلر مراجعه کرده و خواهید دید که تمامی این کارها در آنجا انجام شده است.
      در نهایت در آینده نزدیک همواره مطالب آموزشی بیشتری برای نحوه کنترل بیشتر و بهتر MDC20 در سایت قرار داده خواهد شد.

  4. امیر می‌گه:

    ممنون از جواب ولی باز هم چند سوال
    ۱- آیا با یک درایور امکان دادن ۲ تابع متفاوت به هر یک از موتورها وجود دارد؟ یعنی یکی سرعتش سینوسی و دیگری کسینوسی با زمان تغییر کند؟
    ۲- سوال قبلی را با عرض پوزش مجددا تکرار می کنم (چون به علت عدم داشتن اطلاعات کافی الکترونیک خیلی وقتم تلف شده) من فقط ۲ موتور دارم و ۲ انکودر چرخ دنده ای خریدم و می خواهم سرعت هرکدام را با زمان به صورت تابع مشخص تغییر بدهم ولی از الکترونیک اطلاع ندارم آیا منبع آموزشی شروع از صفر برای مثل من دارید تا بدون نیاز به کسی کارم را انجام دهم یا چون اطلاع از نحوه کار درایور و یا انکودر ندارم باید از کسی کمک بگیرم؟ مثلا الان می خواهم شروع کنم چطور اقدام کنم و خروجی انکودر را چطور رسم کنم؟ آیا فیلمی در این زمینه دارید؟
    ۳- از انکودر مکانیکی که دارای چرخ دنده و سنسور اپتیکال هستش و روی شفت موتور قرار می گیرد استفاده میکنم ولی بلد نیستم چطور پالسهاش رو بشمورم و خروجی درایور در نرم افزار رو ببینم. یعنی در کل کار با آن را بلد نیستم. چطور می توانم خروجی انکودر را در نرم افزار متلب یا لب ویو ببینم و رسم کنم؟ چون خروجی انکودر بسیار برام مهم هستش و دور موتور حدکاثر ۵ آر پی ام هست برای همین خطا به شدت تاثیر گذار هست.
    نکته آخر: اگز نمونه یک کد که در آن موتورها یکی سینوسی و دیگری کسینوسی می چرخد و انکودر هم کنترل می شود و رسم می گردد را به عنوان نمونه در سایت قرار دهید واقعا سپاسگذار شما خواهم بود و حتما از مشتریان خوب شما می شوم.

    • سلام مجدد به شما کاربر گرامی
      پاسخهایتان را به ترتیب در زیر تقدیم می کنیم:
      ۱- قطعا چنین چیزی ممکن است، برای حرکت MDC20 در هر جهت یکی از فرامینی که برای موتور ارسال می شود میزان سرعت موتور است، شما می توانید یک ماتریس از سرعت های متفاوت یا یک Vector از سرعت های متفاوت که می تواند به صورت سینوسی و … تنظیم شده اند را برای موتور در زمانهای مختلف ارسال کرده و موتور به محض دریافت پیام اقدام به تنظیم سرعت می کند.
      ۲- شما با داشتن MDC20 اصلا نیازی به این ندارید که پالسهای Encoder ها را بشمارید. MDC20 برای شما این کار را انجام می دهد و در هر لحظه برای شما تعداد کل پالسهای ارسالی را با دو دقت ۱X و ۴X ارسال می کند. به عبارت دیگر اگر شما از یک انکودر ۲۰۰ پالس در دور استفاده کنید و این انکودر را به MDC20 متصل کنین، در مد (X1 (Simple پس از یک دور چرخش موتور شما اگر از MDC20 مقدار پالس دریافت شده را بخوانید عدد ۲۰۰ را دریافت خواهید کرد و اگر MDC20 را برای شمارش پالسها بر روی مد X4 یا Quadrature تنظیم کرده باشین به ازای یک دور چرخش عدد ۸۰۰ را دریافت خواهید کرد. مد quadrature دارای دقت شمارش پالس ۴ برابر مد simple است.
      ۳- نحوه ی خواندن انکودر با استفاده از Matlab در همین جا آورده شده است. شمارش انکودر به صورت incremental خواهد بود و در داخل MDC20 انجام می گیرد. مثلا اگر موتور شما با یک انکودر ۲۰۰ پالس در دور ،۵ دور بچرخد شما در مد simple عدد ۱۰۰۰ و دز مد Quadrature عدد ۴۰۰۰ را دریافت می کنین. همچنین شمارش انکودر با تغییر جهت موتور نیز کاهشی ادامه پیدا خواهد کرد، به عنوان مثال اگر با همان انکودر قبلی ۲۰۰ پالسی شما ۵ دور در جهت ساعتگرد و ۲ دور در جهت پادساعت گرد موتور را بچرخوانید و حالا عدد انکودر را در مد Simple بخوانید عدد ۶۰۰ را دریافت خواهید کرد ( ۲*۲۰۰-۲۰۰*۵)
      ۴- MDC20 به جرات یکی از پشتیبانی شده ترین درایورهای موجود در بازار است و همواره روشهای جدیدی برای کنترل آن بر روی سایت قرار می گیرد، بنابراین نگرانی ای از آینده کار با این درایور نداشته باشید. در صورت داشتن هر گونه سوال دیگر تردیدی در مطرح کردن آن در اینجا نداشته باشید.
      ۵- برای رسم خروجی انکودر به سادگی می توانید خروجی پورت سریال را در زمانی که از انکودر مقادیر پالس ها را می خوانید با استفاده از تابع plot در متلب رسم کنین. در صفحه ی زیر در بخش خواندن انکودر کافی است متغییر Actual را برای تابع plot به صورت (plot(Actual ارسال کنین.
      http://robotmakers.ir/blog/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%86%D8%AD%D9%88%D9%87-%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88%D8%B1-mdc20-%D8%A8%D8%A7-%D9%86%D8%B1%D9%85-%D8%A7%D9%81/

  5. پارسا می‌گه:

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

    • محسن ملایجردی می‌گه:

      با سلام خدمت شما
      در جواب سوال اولتون باید عرض کنم، خیر، شما مختار هستید برای درایور دو موتور DC آنها را به صورت حلقه بسته (با انکودر) یا به صورت حلقه باز (بدون انکودر) کنترل نمایید.
      بهتره اینطور بگم که سرعتی که به موتور در این درایور اختصاص داده میشه یک عدد از صفر تا ۲۵۵ هست که به صورت یک پهنای باند برای سیگنال PWM (کنترل کننده سرعت چرخش موتور) به درایور ارسال میشه و رابطه ای با واحد سرعت مکانیکی که متر بر ثانیه هست نداره چرا که دینامیک هر موتور با دیگری متفاوت هست و از اونجا که درایور ما جنرال می باشد و بایستی تمامی موتورها را پوشش دهد، ما این تغییر واحد را به عهده خود کاربر گذاشته ایم.
      بسیار خوب، حال که شما خودتان یک سنسور در اختیار دارید می توانید به راحتی با فیدبک گرفتن از آن سنسور برنامه ای بنویسید که سرعت موتور را متناسبا با بازخوردی که از سنسور شتاب سنج میگیرد کنترل نماید. یک PID ساده همانطور که در مستندات آموزشی درایور موجود است را می توانید بر روی آن پیاده کنید و به جای اینکه از واحد انکودر بازخورد بگیرید اطلاعات سنسور خود را در سیگنال کنترل وارد نمایید.
      ولی اگر منظور شما اتصال سنسور شتاب سنج به سوکت انکودر این درایور هست با توجه به تفاوت در پروتکل این نوع سنسورها با انکودر، این قابلیت وجود ندارد.

  6. پارسا می‌گه:

    با سلام دوباره
    ما روش حلقه باز گفته شده رو با توجه به مطالب آموزشی انجام دادیم، همچنین تنظیمات اولیه رو هم همونطور که گفته شده بود انجام دادیم، ولی باز هم شفت موتور هیچ تغییری نکرد، با تغییر ولتاژ نیز اتفاقی نیفتاد، میشه گفت که مشکل از کجاست؟ چون همون مراحل این سایت رو اجرا کردیم

  7. میلاد می‌گه:

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

  8. bahman می‌گه:

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

CLOSE
CLOSE