آموزش الکترونیکآموزش رزبری پایپروژه های رزبری پای

کنترل سرعت و جهت استپر موتور با رزبری پای و پایتون (آموزش Raspberry Pi #8)

ولت ازسلام. آموزش کنترل استپر موتور با Raspberry Pi (آموزش رزبری پای #8) را آماده کردیم.

چگونه موتور پله ای را با رزبری پای کنترل کنیم؟

استپر موتور ها همیشه بخش جالبی برای من بوده اند. ما در قسمت قبلی آموزش رزبری پای، به طور کامل با نحوه کنترل موتور DC آشنا شدیم. پیشنهاد میشود قبل از خواندن این آموزش، قسمت قبلی را بخوانید.

قسمت قبل : چطور سرعت موتور DC را با Raspberry Pi کنترل کنیم؟ (آموزش رزبری پای #7)

در این قسمت ، ما سرعت یک موتور پله ای را با استفاده از Raspberry Pi کنترل میکنیم. در استپر موتور ها همانطور که از نام آن ها مشخص است، حرکت موتور به صورت پله به پله است. انواع مختلفی از استپر موتور ها موجود است. در اینجا ما از محبوب ترین استپر موتور یعنی Unipolar Stepper Motor استفاده میکنیم. برخلاف موتور DC، ما میتوانیم استپر موتور را با دادن دستور العمل های مناسب، موتور پله ای را به هر زاویه ای که بخواهیم بچرخانیم.

این یک موتور چهار پله ای است و باید پالس های قدرت را با استفاده از مدار درایور موتور استپر به آن بدهیم. در مورد پین های GPIO در برد رزبری پای قبلا به طور کامل صحبت کرده ایم پس حتما قسمت های قبل را بخوانید. ترمینال های برق برد Raspberry Pi برای رانندگی استپ موتور ها کافی نیستندو برای چرخاندن استپر موتور ها به جریان بیشتری احتیاج داریم. این جریان را میتوانیم از منبع انرژی دیگری بگیریم. منبع انرژی دیگر میتواند باتری باشد. موتور پله ای ما دارای ولتاژ 9 ولت است بنابراین باتری 9 ولت به عنوان منبع تغذیه دوم استفاده میشود. ممکن است استپر موتور شما دارای ولتاژ دیگری باشد پس با دقت باتری را انتخاب کنید.

در صورتی که میخواهید به طور کامل با استپر موتور ها آشنا شوید مطلب زیر را بخوانید :

مانند قبل این آموزش را نیز با طراحی یک پروژه ادامه میدهیم.

توضیحات شماتیک راه اندازی استپر موتور

در اینجا ما از رزبری پای 2 Model B با سیستم عامل Raspbian Jessie استفاده می کنیم. در قسمت های قبل، در مورد کلیه نیازهای اولیه سخت افزار و نرم افزار بحث کرده ایم. تصویر زیر شماتیک مدار پروژه کنترل سرعت استپر موتور  با رزبری پای را نشان میدهد.

موتور استپر از 200 مرحله برای انجام چرخش 360 درجه استفاده می کند پس یعنی هر چرخش 1.8 درجه است. همانطور که گفته شد ما در حال برنامه ریزی و رانندگی یک موتور چهار مرحله ای هستیم. بنابراین برای تکمیل چرخه باید چهار پالس ارائه دهیم. هر مرحله از این موتور 1.8 درجه از چرخش را تکمیل میکند. بنابراین برای تکیل چرخه به 200 پالس نیاز داریم. با یک تقسیم ساده متوجه میشویم 200/4=50 چرخه برای تکیل یک چرخش کامل مورد نیاز است.

حتما ببینید :  پروژه ساعت هشدار با رزبری پای و پایتون Alarm Clock Raspberry Pi

توضیحات شماتیک راه اندازی استپر موتور

ما هر یک از این چهار سیم را با ترانزیستور NPN 2N2222 متصل میکنیم. این ترانزیستور NPN، پالس منطقی را از رزبری پای میگیرد و سیم پیچ مربوطه را هدایت میکند. پس چهار ترانزیستور در حال دریافت چهار منطق از رزبری پای برای راندن چهار مرحله از موتور هستند. در اینجا باید توجه کنیم که اتصال نادرست ترانزیستور ممکن است تخته را به شدت تحت شعاع قرار داده و به آن آسیب برساند.

ما از دیود (1N4007) برای محافظت از ترانزیستور در برابر القاء Spiking استفاده خواهیم کرد. برای کاهش نوسانات ولتاژ، همانطور که در نمودار مدار نشان داده شده است، یک خازن 1000uF را به منبع تغذیه متصل خواهیم کرد.

قطعات مورد نیاز

  1. مقاومت 220 اهم یا 1 کیلو اهم – سه عدد
  2. استپر موتور
  3. دکمه – دو عدد
  4. ترانزیستور 2N2222 – چهار عدد
  5. دیود 1N4007 – چهار عدد
  6. خازن 1000uF

توضیحات کد پروژه

وقتی همه چیز را مانند شماتیک مدار متصل کردید، می توانیم Raspberry Pi را روشن کنیم تا برنامه را در پایتون (PYHTON) بنویسیم. کد کامل در انتهای صفحه قرار داده شده است. در اینجا در مورد قسمت های مهم کد صحبت میکنیم.

ما میخواهیم پرونده GPIO را از کتابخانه وارد کنیم. کد زیر باعث میشود بتوانیم پین های GPIO برد رزبری پای را برنامه ریزی کنیم. همچنین مانند قسمت قبلی آموزش، نام GPIO را به IO تغییر میدهیم. و هر بار بخواهیم به پین های GPIO مراجعه کنیم از کلمه IO استفاده میکنیم.

import RPi.GPIO as IO

بعضی اوقات، پین ​​های GPIO که سعی در استفاده از آنها داریم، ممکن است عملکردهای دیگری را انجام دهند. در این حالت، هنگام اجرای برنامه، هشدارهایی دریافت خواهیم کرد. دستور زیر به PI می گوید هشدارها را نادیده گرفته و به برنامه ادامه دهد.

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.
IO.setwarnings(False)

ما می توانیم پین های GPIO رزبری پای یا شماره پین آن یا شماره GPIO آن ها وارد کنیم. به طور مثال پین 35 روی برد Raspberry pi، همان پین GPIO 19 است. بنابراین ما میتوانیم آن را با 19 یا 35 معرفی کنیم.

IO.setmode (IO.BCM)

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

​IO.setup(5,IO.OUT) // تنظیم پین 5 به عنوان خروجی
IO.setup(17,IO.OUT) // تنظیم پین 17 به عنوان خروجی
IO.setup(27,IO.OUT) // تنظیم پین 27 به عنوان خروجی
IO.setup(22,IO.OUT) // تنظیم پین 22 به عنوان خروجی

ما GPIO26 و GPIO19 را به عنوان پین ورودی تنظیم می کنیم. ما وضعیت دکمه  ها را توسط این پین ها را تشخیص خواهیم داد.

IO.setup(19,IO.IN) // تنظیم پین 19 به عنوان ورودی
IO.setup(26,IO.IN) // تنظیم پین 26 به عنوان ورودی

سپس یک شرط تعیین میکنیم. که اگر پین 26 که همان دکمه ما بود فعال شود (یعنی دکمه اول فعال شود) دستورات زیر یکبار اجرا میشوند.

if(IO.input(26) == False): // اگر دکمه فشرده شود

این دستور حلقه را 100 بار اجرا می کند و x از 0 به 99 افزایش می یابد.

for x in range (100):

while 1: برای حلقه بی نهایت استفاده می شود. در کد کامل ببینید در حلقه بی نهایت خود موتور ها را به حرکت در می آوریم. یعنی هر بار یکی از چهار پین خروجی خود را فعال میکنیم که باعث فعال شدن کویل های استپر موتور و به همین ترتیب حرکت آن میشوند.

حتما ببینید :  آموزش کامل آنالوگ به دیجیتال در آردوینو - ADC Arduino (آموزش آردوینو #4)

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

    for y in range(x):
        time.sleep(0.01)           # تاخیر به مدت  x*100msec  
        if(IO.input(26) == False): #اگر دکمه 1 فشرده شده بود
            if(x<100):             # و اگر ایکس زیر 100 بود
            x=x+1                  #مقدار ایکس را یک عدد افزایش بده
            time.sleep(0.5)        #تاخیر به مدت 500 میلی ثانیه
        if(IO.input(19) == False): #اگر دکمه 2 فشرده شده بود
            if(x>1):               # و اگر ایکس بالای 1 بود
            x=x-1                  #مقدار ایکس را یک عدد کاهش بده
            time.sleep(0.5)        #تاخیر به مدت 500 میلی ثانیه

همه دستورات لازم برای دستیابی به کنترل استپ موتور را کار داریم. کد کامل در باکس زیر آورده شده است اگر سوالی دارید در نظرات اعلام بفرمایید.

کد کامل :

import RPi.GPIO as IO       
import time                           
IO.setwarnings(False)          
x=1                              
IO.setmode (IO.BCM)
IO.setup(5,IO.OUT)       
IO.setup(17,IO.OUT)
IO.setup(27,IO.OUT)
IO.setup(22,IO.OUT)
IO.setup(19,IO.IN)          
IO.setup(26,IO.IN) 
while 1:                       
    IO.output(5,1)        
    IO.output(22,0)
    for y in range(x):        
        time.sleep(0.01)
    IO.output(17,1)         
    IO.output(5,0)
    for y in range(x):
        time.sleep(0.01)     
    IO.output(27,1)          
    IO.output(17,0)
    for y in range(x):
        time.sleep(0.01)      
    IO.output(22,1)            
    IO.output(27,0)
    for y in range(x):
        time.sleep(0.01)                    
        if(IO.input(26) == False):    
            if(x<100):
            x=x+1              
            time.sleep(0.5)         
        if(IO.input(19) == False):   
            if(x>1):
            x=x-1              
            time.sleep(0.5)

فیلم عملکرد

دو دکمه به رزبری پای متصل کرده ایم. یکی برای افزایش تاخیر بین چهار پالس و دیگری برای کاهش تأخیر بین چهار پالس. تأخیر سرعت را کنترل میکند. اگر تاخیر بیشتر باشد موتور بین هر مرحله ترمز می گیرد و چرخش آن کند است. اگر تأخیر نزدیک به صفر باشد، موتور با حداکثر سرعت می چرخد.

در اینجا باید به خاطر داشته باشیم که باید بین پالس ها تاخیر وجود داشته باشد. پس از دادن پالس ، موتور پله ای برای رسیدن به مرحله نهایی خود چند میلی ثانیه زمان را صرف می کند. اگر تاخیری بین پالس ها وجود نداشته باشد، استپر موتور به هیچ وجه حرکت نمی کند. به طور معمول تاخیر 50ms بین پالس ها خوب است. برای اطلاعات دقیق تر ، به دیتاشیت موتور خود نگاه کنید. بنابراین با دو دکمه می توان تأخیر را کنترل کرد که به نوبه خود سرعت موتور استپ را کنترل می کند.

قسمت بعد : آموزش راه اندازی شیفت رجیستر 74HC595 با Raspberry Pi (آموزش رزبری پای #9)

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
برچسب ها

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم.

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

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

دکمه بازگشت به بالا
بستن
بستن