اتصال موتور درایور DRV8825 به آردوینو و کنترل استپر موتور

محتویات
- آیا می دانید استپر موتور چگونه کار می کنند؟
- موتور درایور DRV8825
- مشخصات فنی
- پین اوت درایور موتور DRV8825
- پین های پاور
- پین های انتخاب میکرو استپ
- کنترل پین های ورودی
- پین های کنترل وضعیت تغذیه
- پین های خروجی
- سیستم خنک کننده – هیت سینک
- سیم کشی درایور استپر موتور DRV8825 به آردوینو
- کد آردوینو برای موتور درایور DRV8825 بدون کتابخانه
- کنترل استپر موتور با کتابخانه AccelStepper
- نصب کتابخانه AccelStepper
در پروژه هایی که فقط یک موتور دارید، موتور درایور معمولی مثل L298N به خوبی جوابگو است. اما اگر میخواهید یک دستگاه CNC یا چاپگر سه بعدی بسازید، به یک درایور موتور پله ای اختصاصی مانند DRV8825 نیاز دارید. با توجه به سادگی کنترل استپر موتور و تنوع حالت های ارائه شده توسط درایور DRV8825، این ماژول یک راه حل ایده آل برای کاربردهایی است که نیاز به کنترل دقیق و مطمئن استپر موتور دارند. این درایور برای کنترل سرعت و جهت یک موتور پله ای دوقطبی مانند NEMA 17 فقط به دو پین نیاز دارد.
آیا می دانید استپر موتور چگونه کار می کنند؟
موتور های پله ای از چرخ دنده و آهنربا الکتریکی برای چرخش استفاده میکنند. هر پالس HIGH ارسال شده به سیم پیچ انرژی می دهد و دندان های نزدیک به چرخ دنده را جذب می کند و موتور را یک قدم به جلو می برد.
روشی که شما این سیم پیچ ها را تغذیه میکنید بر رفتار موتور تاثیر می گذارد.
- توالی پالس ها جهت چرخش موتور را تعیین می کند.
- فرکانس پالس ها سرعت موتور را تعیین می کند.
- تعداد پالس ها تعیین می کند که موتور تا چه اندازه بچرخد.
موتور درایور DRV8825
در قلب این ماژول یک درایور میکرو استپینگ از Texas Instruments – DRV8825 قرار دارد. علیرغم اندازه کوچکش (0.8 اینچ در 0.6 اینچ)، بسیار قدرتمند است.
درایور استپر موتور DRV8825 دارای ظرفیت درایو خروجی تا 45 ولت است. این به شما امکان می دهد یک موتور پله ای دوقطبی مانند NEMA 17 را با جریان خروجی 2.5 آمپر در هر سیم پیچ کنترل کنید.
علاوه بر این، جریان خروجی قابل تنظیم است و امکان عملکرد بدون نویز موتور پلهای را فراهم میکند و رزونانس اضافی را حذف میکند. درایور دارای یک مبدل داخلی برای کارکرد آسان است. با این کار تعداد پین های کنترلی به دو عدد کاهش می یابد، یکی برای کنترل مراحل و دیگری برای کنترل جهت چرخش.
این درایور شش وضوح گام مختلف ارائه می دهد: مرحله کامل، نیم گام، ربع گام، یک هشتم، یک شانزدهم، و یک سی و دوم.
مشخصات فنی
در اینجا مشخصات آمده است:
ولتاژ خروجی موتور | 8.2V – 45V |
ولتاژ منطقی | 3.3V |
جریان پیوسته در فاز | 1A |
حداکثر جریان در هر فاز | 2.5A |
دقت | کامل , 1/2, 1/4, 1/8, 1/16, و 1/32 |
پین اوت درایور موتور DRV8825
درایور DRV8825 در مجموع دارای 16 پین است که آن را به دنیای خارج متصل می کند. پین اوت به شرح زیر است:
بیایید همه پین ها را یکی یکی بشناسیم.
پین های پاور
برخلاف اکثر درایورهای موتور پله ای، DRV8825 تنها یک اتصال منبع تغذیه دارد.
VMOT و GND MOT برق موتور را تامین می کنند. هر ولتاژی بین 8.2 تا 45 ولت را می توان به این پین وصل کرد.
این ماژول یک پایه منبع تغذیه منطقی ندارد زیرا DRV8825 با استفاده از یک تنظیم کننده ولتاژ داخلی 3V3، برق خود را از منبع تغذیه موتور می گیرد. با این حال، باید GND میکروکنترلر خود را به پایه GND LOGIC متصل کنید.
با توجه به دیتاشیت، برای حفظ 4A، منبع تغذیه موتور نیاز به یک خازن جداکننده مناسب نزدیک به برد دارد.
پین های انتخاب میکرو استپ
درایور DRV8825 با تقسیم یک مرحله به مراحل کوچکتر از میکرواستپینگ پشتیبانی می کند. این با انرژی دادن به سیم پیچ ها با سطوح جریان متوسط به دست می آید.
برای مثال، اگر NEMA 17 را انتخاب کنید (با زاویه گام 1.8 درجه یا 200 گام/دور) در حالت ربع گام، موتور 800 میکروگام در هر دور تولید می کند.
درایور DRV8825 دارای سه ورودی انتخابگر اندازه گام (رزولوشن) است: M0، M1 و M2. با تنظیم سطوح منطقی مناسب برای این پین ها، میتوانیم موتور را روی یکی از وضوح ها تنظیم کنیم.
M0 | M1 | M2 | رزولوشن |
Low | Low | Low | کامل |
High | Low | Low | نیم |
Low | High | Low | 1/4 |
High | High | Low | 1/8 |
Low | Low | High | 1/16 |
High | Low | High | 1/32 |
Low | High | High | 1/32 |
High | High | High | 1/32 |
این سه پایه انتخاب میکرو استپ توسط مقاومتهای پول دان روی برد LOW میشوند، بنابراین اگر آنها را بدون اتصال رها کنید، موتور در حالت تمام گام کار میکند.
کنترل پین های ورودی
DRV8825 دارای دو ورودی کنترل است: STEP و DIR
- ورودی STEP ریز پله های موتور را کنترل می کند. هر پالس HIGH که به این پین ارسال می شود، موتور را بر اساس تعداد ریز استپ های تعیین شده توسط پین های انتخاب میکرواستپ به حرکت در می آورد. هرچه فرکانس پالس بیشتر باشد، موتور سریعتر می چرخد.
- ورودی DIR جهت چرخش موتور را کنترل می کند. با HIGH کردن آن، موتور در جهت عقربههای ساعت میچرخد، در حالی که با LOW کردن آن، آن را در خلاف جهت عقربههای ساعت میچرخاند.
اگر می خواهید موتور فقط در یک جهت بچرخد، می توانید DIR را مستقیماً به VCC یا GND وصل کنید.
پین های کنترل وضعیت تغذیه
DRV8825 دارای سه ورودی مجزا برای کنترل حالت های توان خود است: EN، RST و SLP.
- EN یک پین ورودی Active-Low است. وقتی این پین LOW می شود، درایور DRV8825 فعال می شود. به طور پیش فرض، این پین LOW می شود، بنابراین درایور همیشه فعال است، مگر اینکه آن را HIGH کنید. این پین مخصوصاً هنگام اجرای سیستم توقف یا خاموش کردن اضطراری مفید است.
- SLP یک پین با ورودی Active-Low است. وقتی این پین LOW می شود، درایور را در حالت خواب قرار می دهد و مصرف برق را به حداقل می رساند. شما می توانید از این برای صرفه جویی در مصرف برق استفاده کنید، به خصوص زمانی که موتور در حال استفاده نیست.
- RST نیز یک ورودی Active-Low است. وقتی این پین LOW می شود، تمام ورودی های STEP نادیده گرفته می شوند.
پین های خروجی
کانال های خروجی درایور موتور DRV8825 با پین های B2، B1، A1 و A2 به کنار ماژول باز می شوند.
شما می توانید هر استپر موتور دوقطبی کوچک تا متوسط مانند NEMA 17 را به این پین ها متصل کنید.
هر پایه خروجی می تواند تا 2.5 آمپر را به موتور برساند. مقدار جریانی که به موتور عرضه می شود، به منبع تغذیه، سیستم خنک کننده و تنظیم محدود کننده جریان سیستم بستگی دارد.
سیستم خنک کننده – هیت سینک
اتلاف بیش از حد انرژی آی سی درایور DRV8825 باعث افزایش دما می شود که در صورت بیشتر شدن از ظرفیت آی سی، ممکن است به IC آسیب برساند.
با وجود داشتن حداکثر جریان 2.5 آمپر در هر سیم پیچ، آی سی درایور DRV8825 تنها می تواند حدود 1.5 آمپر در هر سیم پیچ را بدون گرم شدن بیش از حد تامین کند. برای دستیابی به بیش از 1.5 آمپر در هر کویل، یک هیت سینک یا سایر روش های خنک کننده مورد نیاز است.
درایور DRV8825 معمولاً همراه با هیت سینک ارائه می شود. توصیه می شود قبل از استفاده از درایور، هیت سینک را نصب کنید.
سیم کشی درایور استپر موتور DRV8825 به آردوینو
اکنون که همه چیز را در مورد درایور می دانیم، بیایید آن را به آردوینو خود متصل کنیم.
اتصالات ساده هستند. با اتصال پایه RST به پایه SLP/SLEEP مجاور و 5 ولت در آردوینو شروع کنید تا درایور را فعال نگه دارید.
پایه GND LOGIC را به پایه GND آردوینو وصل کنید. پایه های ورودی DIR و STEP را به پایه های خروجی دیجیتال #2 و #3 آردوینو وصل کنید.
استپر موتور را به پایه های B2، B1، A1 و A2 وصل کنید. در واقع، ماژول DRV8825 به راحتی برای مطابقت با کانکتور 4 پین در موتورهای پله ای دوقطبی طراحی شده است، بنابراین نباید مشکلی ایجاد کند.
هشدار: هنگامی که درایور در حال کار است سعی نکنید استپر موتور را وصل یا جدا کنید. انجام این کار می تواند به موتور درایور آسیب برساند.
اگر می خواهید موتور را در حالت فول استپ راه اندازی کنید، پین های انتخاب میکرو استپ را غیر متصل نگه دارید.
در نهایت منبع تغذیه موتور را به پایه های VMOT و GND MOT وصل کنید. به خاطر داشته باشید که برای جلوگیری از افزایش ناگهانی ولتاژ، یک خازن الکترولیتی جداکننده بزرگ 100μF را روی پایه های منبع تغذیه موتور قرار دهید.
کد آردوینو برای موتور درایور DRV8825 بدون کتابخانه
کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مختلف این کد را توضیح میدهیم. کد زیر به شما نشان می دهد که چگونه سرعت و جهت چرخش یک موتور پله ای دوقطبی را با استفاده از درایور موتور پله ای DRV8825 کنترل کنید.
کد با تعیین پایه های آردوینو که پایه های STEP و DIR DRV8825 به آنها متصل هستند، آغاز میشود. متغیری به نام stepPerRevolution نیز تعریف شده است. می توانید آن را مطابق با مشخصات موتور پله ای خود تنظیم کنید.
const int dirPin = 2; const int stepPin = 3; const int stepsPerRevolution
در بخش Setup، تمام پین های کنترل موتور به عنوان OUTPUT دیجیتال پیکربندی شده اند.
pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT);
در بخش loop، موتور به آرامی در جهت عقربه های ساعت و سپس به سرعت در جهت خلاف جهت عقربه های ساعت با فواصل یک ثانیه می چرخد.
کنترل جهت چرخش: برای کنترل جهت چرخش موتور، پایه DIR باید روی LOW یا HIGH تنظیم شود. ورودی HIGH موتور را در جهت عقربههای ساعت میچرخاند، در حالی که ورودی LOW آن را در خلاف جهت عقربههای ساعت میچرخاند.
digitalWrite(dirPin, HIGH);
کنترل سرعت: فرکانس پالس های ارسال شده به پایه STEP سرعت موتور را تعیین می کند. هرچه فرکانس پالس بیشتر باشد، موتور سریعتر کار می کند. با تنظیم تاخیر بین دو پالس، می توانید فرکانس پالس ها و در نتیجه سرعت موتور را تغییر دهید.
for(int x = 0; x < stepsPerRevolution; x++) { digitalWrite(stepPin, HIGH); delayMicroseconds(1000); digitalWrite(stepPin, LOW); delayMicroseconds(1000); }
کنترل استپر موتور با کتابخانه AccelStepper
کنترل یک استپر بدون کتابخانه برای پروژه های ساده و تک موتوری کاملاً مناسب است. با این حال، اگر می خواهید چندین اسپر موتور را کنترل کنید، باید از یک کتابخانه استفاده کنید.
بنابراین، برای آزمایش بعدی خود، از یک کتابخانه موتور پله ای پیشرفته به نام کتابخانه AccelStepper استفاده خواهیم کرد.
نصب کتابخانه AccelStepper
برای نصب کتابخانه به Sketch > Include Libraries > Manage Libraries بروید. سپس accelstepper را در فیلد جستجو وارد کنید و اینتر بزنید. سپس روی اولین مورد کلیک کنید و install را بزنید.
کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مختلف این کد را توضیح میدهیم. این کد استپر موتور را در یک جهت شتاب میدهد و سپس سرعت آن را کاهش میدهد. پس از یک دور چرخش موتور جهت را برعکس میکند و روند را تکرار میکند.
کد با گنجاندن کتابخانه AccelStepper تازه نصب شده آغاز می شود.
#include <AccelStepper.h>
ابتدا پین های آردوینو تعریف می شوند که پایه های STEP و DIR DRV8825 به آن ها متصل می شوند.
const int dirPin = 2; const int stepPin = 3; #define motorInterfaceType 1
به دنبال آن، نمونه ای از کتابخانه به نام myStepper ایجاد می شود.
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
در تابع setup، حداکثر سرعت مجاز موتور روی 1000 تنظیم شده است (وقتی آن را اجرا کنیم، موتور تا این سرعت شتاب می گیرد). سرعت ثابت مورد نظر روی 200 تنظیم شده است. و چون NEMA 17 تعداد 200 قدم در هر دور برمی دارد، موقعیت هدف نیز روی 200 تنظیم می شود.
void setup() { myStepper.setMaxSpeed(1000); myStepper.setAcceleration(50); myStepper.setSpeed(200); myStepper.moveTo(200); }
در تابع loop، دستور if برای تعیین مسافتی که موتور باید طی کند (با خواندن ویژگی distanceToGo) قبل از رسیدن به موقعیت هدف (تنظیم شده توسط moveTo) استفاده می شود. هنگامی که فاصله ToGo به صفر می رسد، موتور در جهت مخالف با تنظیم موقعیت moveTo بر روی منفی موقعیت فعلی خود می چرخد.
در ادامه، متوجه خواهید شد که تابع run() فراخوانی شده است. این مهم ترین تابع است زیرا استپر حرکت نمی کند مگر اینکه این تابع اجرا شود.
void loop() { if (myStepper.distanceToGo() == 0) myStepper.moveTo(-myStepper.currentPosition()); myStepper.run(); }
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود