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

اتصال استپر موتور به رزبری‌پای

مقدمه

ارتباط بین استپر موتور و رزبری‌پای

  • استپر موتور یک موتور DC بدون جاروبک (براشلس) می‌باشد که زاویه‌ی چرخش کامل ۳۶۰ درجه را به تعدادی گام مساوی تقسیم می‌کند.
  • موتور با اعمال دنباله مشخصی از سیگنال‌های کنترلی می‌چرخد. با تغییر نرخ سیگنال کنترلی اعمال شونده، می‌توان سرعت چرخش را تغییر داد.
  • برای کسب اطلاعات بیشتر درباره استپر موتور، چرخه کنترلی و نحوه‌ی استفاده از آن، به مطلب استپر موتور در بخش موتورهای الکتریکی و راه اندازی موتورها رجوع کنید.
  • می‌توان از GPIOهای رزبری‌پای برای کنترل چرخش استپر موتور بهره گرفت. می‌توان دنباله‌ای از سیگنال‌های کنترلی را روی پین‌های GPIO رزبری‌پای ایجاد کرد. برای راهنمایی بیشتر درباره GPIO رزبری‌پای، به مطلب دسترسی به GPIO رزبری‌پای رجوع کنید.

دیاگرام اتصالات

ارتباط بین استپر موتور و رزبری‌پای

مثال

می‌خواهیم یک استپر موتور را متناوباً در جهت عقربه‌های ساعت و عکس عقربه‌های ساعت بچرخانیم.

  • در اینجا، از یک استپر موتور شش سیمه تک قطبی استفاده می‌کنیم. تنها چهارسیم برای کنترل این استپر موتور نیاز است. دو سیم تپ وسط استپر موتور به تغذیه ۵ ولت وصل می‌شوند.
  • درایور ULN2003 برای درایو کردن استپر موتور تک قطبه استفاده می‌شود.
  • ارتباط بین استپر موتور و رزبری‌پای را با زبان پایتون برقرار می‌کنیم. در این برنامه برای انتخاب جهت چرخش موتور (در جهت عقربه‌های ساعت یا در خلاف جهت آن)، از کیبورد به عنوان ورودی استفاده کرده‌ایم.
مطلب پیشنهادی:  پروژه زاویه سنج با انکودر ( کنترل حرکت استپ موتور )

نکته: برای پیدا کردن هسته سیم پیچی و سر تپ‌ها، مقاومت بین دو سر را اندازه‌گیری کنید. از سر وسط، باید مقاومتی برابر با نصف مقاومت بین دو انتهای سیم پیچ داشته باشیم.

برنامه پایتون

'''
    Stepper Motor interfacing with Raspberry Pi
    http:///www.electronicwings.com
'''
import RPi.GPIO as GPIO
from time import sleep
import sys

#assign GPIO pins for motor
motor_channel = (29,31,33,35) 
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
#for defining more than 1 GPIO channel as input/output use
GPIO.setup(motor_channel, GPIO.OUT)

motor_direction = input('select motor direction a=anticlockwise, c=clockwise: ')
while True:
    try:
        if(motor_direction == 'c'):
            print('motor running clockwise\n')
            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.LOW,GPIO.LOW,GPIO.HIGH))
            sleep(0.02)
            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.HIGH,GPIO.LOW,GPIO.LOW))
            sleep(0.02)
            GPIO.output(motor_channel, (GPIO.LOW,GPIO.HIGH,GPIO.HIGH,GPIO.LOW))
            sleep(0.02)
            GPIO.output(motor_channel, (GPIO.LOW,GPIO.LOW,GPIO.HIGH,GPIO.HIGH))
            sleep(0.02)

        elif(motor_direction == 'a'):
            print('motor running anti-clockwise\n')
            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.LOW,GPIO.LOW,GPIO.HIGH))
            sleep(0.02)
            GPIO.output(motor_channel, (GPIO.LOW,GPIO.LOW,GPIO.HIGH,GPIO.HIGH))
            sleep(0.02)
            GPIO.output(motor_channel, (GPIO.LOW,GPIO.HIGH,GPIO.HIGH,GPIO.LOW))
            sleep(0.02)
            GPIO.output(motor_channel, (GPIO.HIGH,GPIO.HIGH,GPIO.LOW,GPIO.LOW))
            sleep(0.02)


     #press ctrl+c for keyboard interrupt
     except KeyboardInterrupt:
         #query for setting motor direction or exit
         motor_direction = input('select motor direction a=anticlockwise, c=clockwise or q=exit: ')
         #check for exit
         if(motor_direction == 'q'):
             print('motor stopped')
             sys.exit(0)

اگر علاقمند هستین توصیه می‌کنیم آموزش‌ پایتون برای مبتدیان: فراگیری برنامه‌نویسی پایتون با مثال را هم مطالعه کنید. همچنین نظر خودتان را در کامنت‌ها ⇓ بنویسید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

دیدگاهتان را بنویسید

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