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

الکترونیک و رباتیک -> ماژول ها و سنسور ها 1401 2 کاربر آکادمی پارتینه

مکانیزم عملکر سروو موتور
سروو موتورها بر خلاف ابعاد کوچکی که دارند دارای قابلیت تامین گشتاور بالا و جابه‌جایی بارهای سنگین هستند. ابعاد کوچک در کنار میزان گشتاور بالا باعث محبوبیت آنها در بین سازندگان اسباب‌بازی شده است. بسیاری از اسباب‌بازی‌های اطراف ما دارای سروو موتور در کنار موتورهای DC هستند.معمولاً سروو موتورهای اسباب بازی می توانند بار از 1 کیلوگرم تا 12 کیلوگرم را حرکت دهند.

کنترل سرو موتورها از طریق مدولاسیون عرض پالس (PWM)انجام می‌شود. میزان عرض پالس موقعیت زاویه‌ای شفت چرخشی را کنترل می‌کند. در مکانیزم سروو یک لوپ بسته‌ی کنترلی وجود دارد که با فیدبکی که از موقعیت یک سنسور حرکتی نظیر شفت انکودر می‌گیرد، به موتور فرمان برای حرکت دقیق مطابق با گشتاور مورد نیاز را می‌دهد.

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

 

 

مواد اولیه :
# عنوان تعداد لینک
0 بورد رزبری پای ( Raspberry Pi ) 1 لینک خرید
1 سروو موتور S3003 1 لینک خرید
2 سیم جامپر 1 لینک خرید

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

سه سیم در هر سرو موتور وجود دارد. دو سیم برای تغذیه مثبت و زمین و سیم سوم عامل انتقال سیگنال کنترلی است. ولتاژ کاری سروو پنج ولت و جریان مصرفی آن حداکثر یک آمپر است. در رزبری پای پین شماره  (GPIO 22) به عنوان پین سیگنال انتخاب شده و پینGND منبع تغذیه به پین زمین سروو موتور و همچنین به زمین رزبری پای جهت مشترک کردن زمین متصل می‌شود.

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

طبق برنامه سروو موتور 180 درجه می‌چرخد. طول پالس اعمال شده موقعیت سروو موتور را مشخص می‌کند. Duty Cycle به عبارت دیگر نرخ روشن بودن سروو موتور، برای هر زاویه محاسبه شده و رزبری پای پالس معادل آن را هر 10میلی‌ثانیه به پین سیگنال سروو موتور ارسال می‌شود.

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

import RPi                                  ## Import GPIO Library.
import time                                 ## Import ‘time’ library for a delay.

توسط دستور زیز با استفاده از شماره‌ی پین روی رزبری پای یا شماره‌ی عملکرد آنها، می توان به پین‌های GPIO رسپبری پای اشاره کرد.

GPIO.setmode(GPIO.BOARD)                    ## Use BOARD pin numbering.

پین GPIO22 (پین 22) را به عنوان پین  خروجی تنظیم  کرده تا از  آن به عنوان پین خروجی PWM استفاده کنیم.

GPIO.setup(22, GPIO.OUT)                    ## set output.

با استفاده دستور زیر کانال و فرکانس سیگنال PWM را در رزبری پای تنظیم کرده و فرکانس 100 هرتز را برای سروو موتور در متغیر pwm ذخیره می‌کنیم.

pwm=GPIO.PWM(22,100)                        ## PWM Frequency

با دستور زیر سروو موتور شروع به کار کرده و مقدار Duty Cycle مشخص می‌شود. 

pwm.start(5)

در نهایت میزان Duty Cycle برای زوایای مورد نظر معادل سازی شده و سروو موتور می‌چرخد.

angle1=10
duty1= float(angle1)/10 + 2.5               ## Angle To Duty cycle  Conversion
 
angle2=160
duty2= float(angle2)/10 + 2.5
 
ck=0
while ck<=5:
     pwm.ChangeDutyCycle(duty1)
     time.sleep(0.8)
     pwm.ChangeDutyCycle(duty2)
     time.sleep(0.8)
     ck=ck+1
time.sleep(1)
GPIO.cleanup()

کد کامل برنامه:

import RPi                                  ## Import GPIO Library.
import time                                 ## Import ‘time’ library for a delay.
 
GPIO.setmode(GPIO.BOARD)                    ## Use BOARD pin numbering.
GPIO.setup(22, GPIO.OUT)                    ## set output.
 
pwm=GPIO.PWM(22,100)                        ## PWM Frequency
pwm.start(5)
 
angle1=10
duty1= float(angle1)/10 + 2.5               ## Angle To Duty cycle  Conversion
 
angle2=160
duty2= float(angle2)/10 + 2.5
 
ck=0
while ck<=5:
     pwm.ChangeDutyCycle(duty1)
     time.sleep(0.8)
     pwm.ChangeDutyCycle(duty2)
     time.sleep(0.8)
     ck=ck+1
time.sleep(1)
GPIO.cleanup()