استپرموتورها در دستهای بین موتورهای DC معمولی و سرووموتورها قرار میگیرند . آنها مزیت قرارگیری در موقعیتهای مختلف به طور دقیق و حرکت به عقب یا جلو به صورت پله پله و همچنین چرخش مداوم را دارند. در این قسمت از آموزش نحوه کنترل یک استپرموتور را با RaspberryPi و همان چیپ L293D که در قسمت قبلی آموزش از آن استفاده کردیم فرا میگیرید.
این قسمت همچنین نحوه استفاده از یک چیپ درایور جایگزین، ULN2803، را نیز به شما میآموزد. برای این پروژه استفاده از L293D یا ULN2803 تفاوتی ندارد. قیمت کمتر ULN2803 و 4 خروجی اضافی آن که میتوانید برای کارهای دیگری از آنها استفاده کنید آن را به گزینهی بهتری تبدیل میکند.
قطعات مورد نیاز برای اتصال استپر موتور به رزبری پای
برای ساخت این پروژه به قطعات زیر نیاز دارید:
- استپر موتور 5ولت
- آیسی L293D
- آیسی ULN2803
- مینی بردبرد
- سیم جامپر نری به نری
استپر موتور 5ولت
این موتور بسیار کم مصرف است و از مشکل جریان کشی لحظهای بر خلاف موتورهای DC و سرووموتورها (که از موتور DC استفاده میکنند ) کمتر رنج میبرد. بنابراین این پروژه با تغذیه از خروجی 5 ولت RaspberryPi نیز کار میکند به شرطی که RaspberryPi به یک تغذیه با خروجی حداقل 1 آمپر تغذیه شود.
آیسی L293D
آیسی ULN2803
مینی بردبرد
سیم جامپر نری به نری
در این پروژه از یک برد واسط برای انتقال پایههای رزبری پای روی برد برد استفاده شده ولی شما میتوانید هر طوری که میخواهید پایهها را روی برد بورد منتقل کنید. همچنین عکسهای این پروژه برای رزبری پای ورژن یک هست ولی شما میتوانید در ورژن 2/3 و یا ورژنهای بعدی هم استفاده کنید. فقط پینهای استفاده شده را شناسایی و روی برد رزبری خود به برد بورد منتقل کنید.
سخت افزار (L293D)
استپر موتور 5 سیم دارد و این بار ما از هر دو نیمهی L293D استفاده میکنیم. این به این معنی است که اتصالات زیادی روی بردبرد وجود خواهد داشت.
موتور یک کانکتور 5پایه دارد که باید سیمهای جامپر داخل آن کنید و به بردبرد متصل کنید.
توجه کنید که سیم قرمز استپر موتور به چیزی وصل نمیشود.
از رنگهای سیمها برای شناسایی استفاده کنید و نه از مکانی که از موتور خارج میشوند.
سخت افزار (ULN2803)
اگر از ULN2803 استفاده میکنید از تمامی 5 سیم استپر موتور استفاده خواهد شد.
موتور یک کانکتور 5پایه دارد که باید سیمهای جامپر داخل آن کنید و به بردبرد متصل کنید.
این شیوه اتصال تنها با استپر موتورهای 5 پایه (تک قطب ) قابل اجراست.
اگر چه کد زیر از پایه 18 GPIO به عنوان پین Enable استفاده میکند اما این پین فقط برای L293D استفاده میشود.
استپر موتورها
استپر موتورها از یک چرخ دندانه دار و اکترومگنتها برای چرخاندن روتور یک پله در هر مرحله استفاده میکنند.
با تحریک سیم پیچها به ترتیب مناسب، موتور شروع به چرخیدن میکند. تعداد پلههایی که یک استپر موتور در یک چرخش 360 درجه دارد در واقع تعداد دندانههای روی چرخ آن است.
موتوری که ما از آن استفاده میکنیم 8 پله دارد، اما سپس یک گیربکس کاهنده 1:64 وجود دارد که تعداد پلهها را به 8*64=512 عدد افزایش میدهد.
در این آموزش ما از اتصال مشترک قرمز رنگ استفاده نمیکنیم. این سیم تنها زمانی مفید است که از یک مدار راه انداز متفاوت که امکان تغییر جهت جریان در هر سیم پیچ را ندارد استفاده شود.
وجود یک اتصال مرکزی در هر سیم پیچ به این معناست که میتوان با تحریک کردن نیمهی راست یا چپ سیم پیچ جهت جریان را بدون استفاده از یک مدار که آن را برعکس کند تغییر داد.
از آنجایی که ما از L293D استفاده میکنیم که کار تغییر جهت جریان را به خوبی انجام میدهد این اتصال مشترک را نیاز نداریم. با این آیسی میتوان جریان را در هر جهتی به کل یک سیم پیچ اعمال کرد.
پایههای ULN2803
در قسمت کنترل موتور DC با رزبری پای آموزش L293D را دیدیم که چیپ بسیار کاربردی است.
L293D 4 خروجی دارد که جهت آنها میتواند عوض شود و ULN2803 8 خروجی دارد که سیگنالهای ضعیف RaspberryPi را تقویت میکنند تا قادر باشند جریانهای بیشتری را کلید بزنند.
اما برخلاف L293D خروجیهای ULN2803 تنها میتوانند جریان بکشند. بنابراین سیم قرمز مثبت استپر موتور استفاده میشود. بنابراین، مثلا به جای استفاده از تمام سیم پیچ بین سیمهای نارنجی و صورتی تنها نیمی از سیم پیچ که بین سیمهای قرمز و صورتی قرار دارد تحریک میشود.
نرم افزار و بر نامه نویسی مورد نیاز برای اتصال استپر موتور به رزبری پای
بخش نرم افزاری این پروژه برای هر دو آیسی L293D و ULN2803 یکسان است. این پروژه از کتابخانه Rpi.GPIO استفاده میکند.
برای نصب کد، میتوانید از طریق SSH به RaspberryPi متصل شوید و یک پنجره ویرایشگر را با دستور زیر باز کنید:
$nano stepper.py
سپس کد زیر را در پنجره ویرایشگر جای گذاری کنید و با CTRL-X و Y آن را ذخیره کنید.
کد:
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) enable_pin = 18 coil_A_1_pin = 4 coil_A_2_pin = 17 coil_B_1_pin = 23 coil_B_2_pin = 24 GPIO.setup(enable_pin, GPIO.OUT) GPIO.setup(coil_A_1_pin, GPIO.OUT) GPIO.setup(coil_A_2_pin, GPIO.OUT) GPIO.setup(coil_B_1_pin, GPIO.OUT) GPIO.setup(coil_B_2_pin, GPIO.OUT) GPIO.output(enable_pin, 1) def forward(delay, steps): for i in range(0, steps): setStep(1, 0, 1, 0) time.sleep(delay) setStep(0, 1, 1, 0) time.sleep(delay) setStep(0, 1, 0, 1) time.sleep(delay) setStep(1, 0, 0, 1) time.sleep(delay) def backwards(delay, steps): for i in range(0, steps): setStep(1, 0, 0, 1) time.sleep(delay) setStep(0, 1, 0, 1) time.sleep(delay) setStep(0, 1, 1, 0) time.sleep(delay) setStep(1, 0, 1, 0) time.sleep(delay) def setStep(w1, w2, w3, w4): GPIO.output(coil_A_1_pin, w1) GPIO.output(coil_A_2_pin, w2) GPIO.output(coil_B_1_pin, w3) GPIO.output(coil_B_2_pin, w4) while True: delay = raw_input("Delay between steps (milliseconds)?") steps = raw_input("How many steps forward? ") forward(int(delay) / 1000.0, int(steps)) steps = raw_input("How many steps backwards? ") backwards(int(delay) / 1000.0, int(steps))
هنگامی که استپر موتورها حرکت نمیکنند نیز همچنان فعال اند و موقعیت خود را حفظ میکنند که این کار جریان میکشد. اگر به نگه نداشتن موقعیت توسط استپر نیاز ندارید میتوانید دستور (setStep(0,0,0,0 را فراخوانی کنید تا سیم پیچها آزاد شوند. اکنون موتور آزادانه میچرخد و جریانی نمیکشد.
تست و راه اندازی
این برنامه باید به عنوان کاربر super-user اجرا شود، بنابراین دستور زیر را وارد پنجره SSH کنید:
$sudo python stepper.py
یک زمان تاخیر وارد کنید ( 5 مقدار مناسبی است ) و سپس یک عدد برای تعداد پلهها (512 یک دور چرخش کامل است).
با تغییر مقادیر تاخیر و کاهش آن حداکثر سرعت موتور را میتوانید پیدا کنید.
Source : Adafruit.com
امیدوارم این نوشته برایتان مفید باشد.
منبع: میکرودیزاینرالکترونیک