کال

تجربیات کامپیوتر، الکترونیک و لینوکس عبد

درایور موتور پله‌ای برای CNC (قسمت سوم)

۲۷ مرداد ۱۳۸۷ در دسته CNC٬ الکترونیک

سیگنال‌های دریافتی از پورت پارالل به شکل پله/جهت (step/direction) هستند. این سیگنال‌ها باید به صورت چهار پالس برای پایه‌های موتور پله‌ای دربیاید.

مقدمه

در پست‌های قبلی توضیح مختصری درباره روش راه‌اندازی موتور پله‌ای نوشته‌ام. برای بهتر مشخص شدن عملکرد کنترلر موتور پله‌ای شکل‌ موج سیگنال‌های کنترل موتور را به صورت شکل زیر کشیده‌ام. (دقت کنید که این شکل موج بر اساس روش full-step است نه half-step  البته اصول کلی تفاوت خاصی ندارد):


در این شکل دو ورودی پله (step) و جهت (direction) از پورت پارالل می‌آید. پین‌های a تا d نیز خروجی‌های ایجاد شده برای بخش توان (یا همان پایه‌های موتور) است. همان طور که مشخص است چرخش موتور در لبه‌ی بالارونده (و یا پایین‌رونده) پینِ پله صورت می‌گیرد. جهت حرکت نیز با پین جهت مشخص می‌شود. در شکل فوق موتور ۱۲ واحد چرخیده‌ است که در ۵ پله اول به سمت راست (و یا چپ)، و در ۶ پله بعدی به سمت چپ و در پله‌ آخر نیز به سمت راست چرخیده است. سیگنال‌های خروجی نیز به این صورت هستند که، در هر لحظه فقط یکی از آنها (خروجی‌های a تا d) فعال است. فعال بودن در این شکل موج مقدار مثبت در نظر گرفته شده‌ است ولی ممکن است در پیاده‌سازی معکس در نظر گرفته شود (راه‌انداز ماسفت که خروجی به آن متصل می‌شود با سطح منفی ترانزیستور را روشن می‌کند). در هر لبه بالا‌رونده‌ی سیگنال پله، خروجی فعال یک واحد به چپ و یا راست شیفت پیدا می‌کند.  این چپ و یا راست بودن از روی پین جهت مشخص می‌شود.

یک سعی ناموفق با CPLD

کار اصلی کنترلر موتور ایجاد سیگنال‌های a تا d است. به همین علت به این مدار توالی دهنده (sequencer) نیز گفته می‌شود زیرا توالی مورد نیاز موتور را بر اساس سیگنال دریافتی ایجاد می‌کند. برای ساخت این توالی‌دهنده شاید بتوان دها راه پیدا کرد. ساده‌ترین روش استفاده از چیپ‌های TTL و COMS است. ولی من چون می‌خواستم لقمه را دور سرم بگردانم اولین طراحی را با یک CPLD انجام دادم. انصافا پیاده‌سازی این مدار در CPLD  با یک زبان توصیف سخت‌افزاری (Hardware description language)  مانند Verilog خیلی ساده و لذت بخش است، ولی مشکلات فراوان سخت‌افزاری و نرم‌افزاری برای این مدار وجود داشت. در مجموع این مشکلات باعث شد نمونه‌ای که برای این کار طراحی کرده‌ بودم به درستی کار نکند  و حسابی خستگی چندین روز کار مداوم را بر تن من بگذارد (البته چندین اشتباه تأثیر گذار نیز در طراحی و ساخت بورد نیز وجود داشت). عکس این بورد ناموفق را به عنوان آینه عبرت اینجا قرار می‌دهم!

پیاده‌سازی با AVR

روش بعدی استفاده از AVR است (البته همین روش را به شکلی متفاوت چند سال قبل در کارگاه عمومی دانشگاه برای ساخت CNC  به کار برده بودم که تقریباً جواب هم گرفتم).

اکثر چیپ‌های AVR معمولا دو پین (INT0 و INT1) اینتراپت خارجی یا External Interupt دارند. این پین‌ها می‌توانند حساس به لبه باشند و در صورت دریافت لبه پایین‌رونده (و یا بالا‌رونده) یک اینتراپت ایجاد کنند. این دقیقا چیزی  است که برای موتور پله‌ای به آن نیاز داریم. فقط باید در هر اینتراپت به مقدار پین جهت نیز دقت کنیم چون این پین جهت چرخش را مشخص می‌کند. میکرویی که در این مدار استفاده کردم ATTiny2313 است. این میکرو به نسبت پکیج کوچکی دارد (۲۰ پین) و هم سریع است (۲۰ مگ). هر کدام از این میکرو‌ها دو پین ورودی اینتراپت دارند. پس در مجموع برای کنترل ۴ موتور پله‌ای باید از دو عدد ATTiny2313 استفاده کرد.

برای ایزوله‌ کردن پروت پارالل از مدار دوتا اپتوکوپلر (Optocoupler) چهارتایی (tlp521-4) در مدار قرار دادم که در مجموع ۸ پین از پورت پارالل را شامل می‌شود. پین‌های ورودی پورت موازی نیازی به اپتوکوپلر ندارند چون معمولا دکمه‌های ابتدا و انتهای هر محور به آنها متصل می‌شوند و این دکمه‌ها را می‌توان بین زمین و پین پورت متصل کرد (من حدس می‌زنم پورت pull-up داخلی داشته باشد و در حالت معمول مقدار آن ۱ باشد). برای مشخص شدن فعالیت هر کدام از موتور‌ها یک LED هم در مدار قرار دارد. این LED با هر پالس موتور تقریبا چند لحظه چشمک می‌زند.

کد‌های AVR را با زبان C و کامپایلر محبوب gcc نوشته‌ام و با برنامه avrdude نیز بر روی میکرو پروگرم کرده‌ام.

ساخت بورد

نکته‌ی مهمی که در پیاده‌سازی این مدار وجود دارد، لحیم کردن قطعات بر روی سطح است چون یکی از قسمت‌های پر زحمت در ساخت بورد مدار چاپی در خانه، سوراخ‌کاری است. به همین علت من معمولا قطعات بورد را از نوع SMD تهیه می‌کنم (مانند مقاومت‌ها، خازن‌ها و LEDها). ولی خوب خیلی از قطعات به شکل SMD در دسترس من نیست به همین علت هم از تکنولوژی STS (*) استفاده می‌کنم. STS مخفف Solder Through-hole as SMD است به این معنی که قطعات معمول را با کمی تغییر بر روی سطح لحیم کنیم. مثلا در این مدار تنها قطعاتی که به صورت SMD نیستند کانکتور‌های ترمینال، کریستال و دو جامپر است. این روش بیشتر مناسب ساخت بورد به صورت دستی و در خانه است، نه بوردی که PCB آن به صورت حرفه‌ای و صنعتی ایجاد می‌شود. پس دقت کنید اگر می‌خواهید از این بورد استفاده جدی کنید شاید بد نباشد که PCB را از ابتدا و به شکل معمول طراحی کنید.

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

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

بورد مدار با برنامه gEDA و PCB طراحی شده است.

(+) فایل شماتیک مدار به فرمت پی‌دی‌اف.

(+) فایل بورد مدار چاپی به فرمت پی‌دی‌اف.

(+) فایل فشرده به فرمت tar.bz2 شامل فایل‌های طراحی بورد و پی‌دی‌اف‌های تولید شده.

(+) فایل فشرده به فرمت tar.bz2 شامل firmware میکروکنترلر و همچنین فایل hex تولید شده.

(*) روش STS یک روش من ‌درآوردی و از شیرین‌کاری‌های خودم است! گول اسمش را نخورید!

۱۱ نظر به “درایور موتور پله‌ای برای CNC (قسمت سوم)”

  • حمید رستمی
    ۲۸ مرداد ۱۳۸۷ at ۷:۲۰ ب.ظ

    به این میگن یه فعالیت openHardware^n
    :-D

    واقعا دستت درست

  • ELECH_TECH
    ۲ شهریور ۱۳۸۷ at ۱:۱۴ ق.ظ

    سلام
    خسته نباشید و دستتون درد نکنه
    راستش من چند سال پیش به فکر کپی کردن یه نمونه از BUNGARD ای که داشتیم افتادم ولی چون کسی رو برای کمک پیدا نکردم با این که اطلاعات زیادی در مورد سی ان سی داشتم و خیلی دنبالش دویده بودم کنار گذاشتم اگر مایل به همکاری باشید می تونیم چند تا پروژه با هم انجام بدیم.
    راستی از کدوم نرم افزار استفاده میکنید؟!
    با تشکر
    عبد
    با تشکر از توجه شما.
    من از نرم‌افزار EMC2 که یک برنامه لینوکسی و بلادرنگ هست استفاده می‌کنم. انشاالله درباه این نرم‌افزار عالی یک پست جداگانه خواهم داشت.

  • امیر محمدی
    ۵ شهریور ۱۳۸۷ at ۲:۳۸ ب.ظ

    سلام
    مقدار u2 چقدر است وسرعت چرخش استپ موتور 1.8 با این درایور چقدر است.
    با تشکر.
    عبد
    من هنوز دقیق این درایور را تست نکرده‌ام ولی فکر کنم حداقل ۱۵۰ دور بر دقیقه باشد. البته باید دقیق امتحان کنم.
    مقدار u2 و u5 که کریستال‌های مدار هستند در مدار من 20MHz است البته مقدار آن خیلی اهمیت ندارد (هر چقدر سرعت کار میکرو بالاتر باشد سرعت اجرای اینتراپت بالا می‌رود).

  • عباس
    ۴ دی ۱۳۸۷ at ۶:۱۷ ب.ظ

    سلام من یک برنامه باید بنویسم تا بشه به استپ مختصات x, y,z داد برای بازوی رباط لطفا راهنماییم کنید
    عبد
    با سلام
    اگر خودتان می‌خواهید این برنامه را بنویسید، احتمالا در اولین مرحله باید مختصات کارتزین را به مختصات قابل فهم برای بازو تبدیل کنید. بقیه مراحل هم راه‌اندازی استپر موتور و تولید پالس‌های مورد نیاز آن است.
    ولی اگر لزوما نمی‌خواهید برنامه را خودتان بنویسید، احتمالا می‌توانید از برنامه EMC استفاده کنید چون می‌توان مختصات‌های غیر کارتزین را نیز پیشتیبانی کند. من یک مطلب کوتاه درباره این برنامه نوشته‌ام. [اینجا]
    موفق باشید.

  • علی زمانی
    ۲۴ بهمن ۱۳۸۷ at ۹:۴۳ ب.ظ

    خیلی ممنونم مطالب علی است من میخواهم دستگاه برش cnc بسازم کمکم کردی
    عبد
    خواهش می‌کنم
    ما را هم از پیشرفت و نتایج کارتان بی‌خبر نگذارید :)

  • امید
    ۲ اسفند ۱۳۸۷ at ۱۲:۴۷ ب.ظ

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

  • omid
    ۲۰ اسفند ۱۳۸۷ at ۹:۴۴ ب.ظ

    سلام خسته نباشی
    من میخواستم مثل شما 1 کنترل cnc بسازم ولی میخوام با نرم افزار دیگه ای کار کنه میتونید کمکم کنید؟
    عبد
    خوب شما باید در ابتدا برنامه‌ مورد نظر خودتون رو انتخاب کنید و خیلی ساده با آن کار کنید به خصوص که خیلی از این برنامه‌ها با پورت پارالل کار می‌کنند و کار با آنها خیلی شبیه به هم هست.

  • omid
    ۲۴ اسفند ۱۳۸۷ at ۱۲:۳۲ ق.ظ

    سلام
    ممنون که جواب دادی من ایمیل زدم ولی جواب ندادی اگه لطف کنی 1 تماس با من بگیری ممنون میشم…

  • Cy
    ۲۸ تیر ۱۳۸۸ at ۱:۵۳ ق.ظ

    همیشه موفق باشی‌ و بعنوان یک ایرانی به شما افتخار می‌کنیم که‌این چنین سخاوتمندانه ماها را شریک در پروژه خود نموده اید.

  • سامان
    ۱۴ شهریور ۱۳۸۸ at ۶:۴۴ ب.ظ

    می خواستم بدونم اگر خروجی های پین را برای برنامهemc عوض کنم دیگه خروجی نمده ممنون

  • محمد
    ۲۴ شهریور ۱۳۸۸ at ۲:۱۶ ب.ظ

    سلام. من دارم این مدار رو می سازم. آیا می شود فقط 2 تا استپ موتور استفاده کرد؟ من می خواهم X و Y رو کنترل کنم. می خواهم foam (اسفنج که در مبل استفاده شده رو قعط کند.
    با تشکر

نوشتن نظر