راه‌اندازی و کنترل استپر موتور توسط رزبری پای و درایور

الکترونیک و رباتیک -> انواع موتور و درایور صنعتی 1795 2 کاربر آکادمی پارتینه

استپر موتور چیست ؟
استپر موتور یا موتور پله ای ، موتوهای بدون ذغال یا براشلس و سنکرونی هستند که با داشتن قطب‌های دندانه‌ای در روتور خود در هر گردش کامل استپ ها یا پله‌هایی با زاویه مشخص طی می‌کنند. به عبارت دیگر یک استپ موتور وسیله ای الکتریکی است که چرخش زاویه‌ای گسسته یا پله‌ای دارد و هر پالس فرستاده شده به موتور سبب حرکت محور موتور تا زاویه‌ای معین می‌شود. یکی از ویژگی‌های مهم استپر عدم نیاز به فیدبک سنسورهای موقعیت یا سرعت برای کنترل موقعیت و یا سرعت موتور است. 

مواد اولیه :
# عنوان تعداد لینک
0 بورد رزبری پای ( Raspberry Pi ) 1 لینک خرید
1 استپر موتور نما 17 1 لینک خرید
2 درایور استپر موتور DRV8825 1 لینک خرید
3   برد بورد  1 لینک خرید
4 منبع تغذیه 1 لینک خرید

مرحله 1 : اتصالات و دیاگرام مداری

اتصال درایور استپر DRV8825 بسیار ساده بوده و حداقل به دو سیم برای اتصال به 2 پورت GPIO نیاز است. پین step درایور و پین DIR به GPIO 21 و GPIO 20 متصل شده‌اند. البته بسته به کدی که تنظیم‌ کرده‌اید، از هر پورت GPIO نیز می‌توانید استفاده کنید. پین GND درایور به زمین رزبری پای متصل شده است. پین های RST  و SLP  درایور را  با اتصال به 3.3 ولت رزبری HIGH کنید؛ زیرا به طور پیش فرض LOW هستند. برای تنظیم تعداد میکرواستپ‌ها پین‌های M0 ، M1 و M2  را به ترتیب به GPIO 14 ، GPIO 15 و GPIO 18 متصل کنید. در صورتیکه تمایل داشته باشید استپر در حالت گام کامل کامل حرکت کند نیازی به اتصال این پایه‌ها نیست.

درایور DRV8825 به یک منبع تغذیه بین 8.2 تا 45 ولت نیاز دارد. دقت داشته باشید که درایور هیچ گونه مدار محافظ ولتاژ معکوس ندارد. بنابراین برای اطمینان اتصالات خود را قبل از روشن کردن منبع تغذیه مجددا چک کنید. 

به منظور حفاظت درایور در مقابل اسپایک ولتاژ (اضافه توان ولتاژ) از یک خازن الکترولیتی با ظرفیت حداقل 47μF استفاده کنید.

مرحله 2 : کدنویسی و تنظیمات نرم‌افزاری

آخرین نسخه‌ی به روز شده‌ی نرم‌افزار کیت‌های آموزشی Raspbian JESSIE را توسط دستور زیر نصب کنید.

sudo apt-get update && sudo apt-get upgrade

 در این برنامه با استفاده از کتابخانه RPi.GPIO  استپر یک مرتبه ساعتگرد و مرتبه دیگر در پادساعتگرد می‌چرخد. پین‌های DIR و STEP به عنوان خروجی تنظیم می‌شوند. پین DIR به منظور چرخش در جهت ساعتگرد High و به منظور چرخش در جهت پادساعتگرد Low می‌شود. این روند 48 مرتبه تکرار می‌شود. در هر سیکل به مدت 0.028ثانیه پین step خاموش و سپس روشن می‌شود.

from time import sleep
import RPi.GPIO as GPIO
 
DIR = 20   # Direction GPIO Pin
STEP = 21  # Step GPIO Pin
CW = 1     # Clockwise Rotation
CCW = 0    # Counterclockwise Rotation
SPR = 48   # Steps per Revolution (360 / 7.5)
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(DIR, GPIO.OUT)
GPIO.setup(STEP, GPIO.OUT)
GPIO.output(DIR, CW)
 
step_count = SPR
delay = .0208
 
for x in range(step_count):
    GPIO.output(STEP, GPIO.HIGH)
    sleep(delay)
    GPIO.output(STEP, GPIO.LOW)
    sleep(delay)
 
sleep(.5)
GPIO.output(DIR, CCW)
for x in range(step_count):
    GPIO.output(STEP, GPIO.HIGH)
    sleep(delay)
    GPIO.output(STEP, GPIO.LOW)
    sleep(delay)
 
GPIO.cleanup()

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

MODE = (14, 15, 18)   # Microstep Resolution GPIO Pins

GPIO.setup(MODE, GPIO.OUT)

RESOLUTION = {'Full': (0, 0, 0),

              'Half': (1, 0, 0),

              '1/4': (0, 1, 0),

              '1/8': (1, 1, 0),

              '1/16': (0, 0, 1),

              '1/32': (1, 0, 1)}

GPIO.output(MODE, RESOLUTION['1/32'])

step_count = SPR * 32

delay = .0208 / 32

توجه داشته باشید که در این حالت تعداد گام ها 32 برابر می‌شود؛ زیرا در حال حاضر هر سیکل چرخش موتور 32 برابر بیشتر از حالت گام کامل طول کشیده که منجر به حرکت بیشتر می‌شود. تأخیر برای جبران میزان گام‌های اضافی بر 32 تقسیم شده است. لازم به ذکر است که حرکت در حالت میکرواستپ ضعف‌هایی از جمله  نرسیدن به گشتاور حداکثر را منجر می‌شود.