آموزش کنترل سرعت موتور DC با برد رزبری پای

سلام. چطور سرعت موتور DC را با Raspberry Pi کنترل کنیم؟ (آموزش رزبری پای #7) را آماده کردیم.
آموزش کنترل سرعت موتور DC با رزبری پای
ما در آموزش های قبلی در مورد ال ای دی چشمک زن، اتصال دکمه به رزبری پای و راه اندازی PWM در Raspberry Pi صحبت کرده ایم. در این آموزش سرعت یک موتور DC را با استفاده از تکنیک PWM کنترل خواهیم کرد. PWM مخفف (Pulse Width Modulation) است. پی وی ام روشی است که برای گرفتن ولتاژ متغیر از یک منبع تغذیه ثابت استفاده میشود. ما سیگنال PWM توسط Raspberry Pi تولید میکنیم و سپس آن را به موتور DC میدهیم.
خواندن قسمت قبلی برای درک کامل این آموزش پیشنهاد میشود : چگونه از PWM در Raspberry Pi استفاده کنیم؟
در Raspberry Pi 2 پین های خروجی GPIO 40 عدد هستند. اما از 40 پین، فقط 26 پین قابل برنامه ریزی هستند. برخی از این پین ها عملکردهای خاصی را انجام می دهند. با کنار گذاشتن GPIO ویژه، ما 17 GPIO داریم که میتوانیم به راحتی آن ها را برنامه ریزی کنیم. برای کسب اطلاعات کامل آموزش های رزبری پای را از ابتدا بخوانید (در مورد پین های GPIO و PWM در قسمت های قبلی به طور کامل بحث کرده ایم). هر یک از این 17 پین GPIO می توانند حداکثر 15 میلی آمپر را تحویل دهند. و مقدار جریان از کلیه پین های GPIO نمی تواند از 50 میلی آمپر فراتر رود. بنابراین می توانیم از هر یک از این پین های GPIO حداکثر 3 میلی آمپر را بکشیم.
برنامه را بنویسید و اجرا کنید. ما دو دکمه به رزبری پای متصل کردیم. یکی چرخه وظیفه را افزایش میدهد و دیگری چرخه وظیفه را کاهش میدهد. با فشار دادن یک دکمه سرعت موتور DC افزایش می یابد و با فشردن دکمه دیگر سرعت موتور دی سی کاهش می یابد. به این ترتیب ما سرعت یک موتور دی سی را کنترل میکنیم. فیلم زیر به شما در درک این آموزش کمک میکند.
برای اتصال ماژول ها و سنسور ها، پین های خروجی با قدرت +5 ولت (پین 4 و 2) و +3.3 (پین 1و 17) وجود دارد. ترمینال برق به موزازات توان پردازنده متصل است. بنابراین جریان از میزان دریافت برق از پین ها بر پردازنده نیز تاثیر میگذارد. به همین دلیل فیوزی در برد رزبری پای وجود دارد که به محض خروج بار زیاد، برق را قطع میکند تا به CPU آسیبی نرسد. شما میتوانید 100 میلی آمپر را با خیال آسوده از ترمینال 3.3 ولت بکشید. ما موتور دی سی را به پین 3.3 ولت متصل میکنیم. با توجه به محدودیت توان خروجی، ما از یک موتور کم مصرف استفاده میکنیم. در صورتی که میخواهید یک موتور پر قدرت را کنترل کنید باید از منبع تغذیه خارجی استفاده کنید.
توضیحات شماتیک مدار
در اینجا ما از رزبری پای 2 Model B با سیستم عامل Raspbian Jessie استفاده می کنیم. در قسمت های قبل، در مورد کلیه نیازهای اولیه سخت افزار و نرم افزار بحث کرده ایم. تصویر زیر شماتیک مدار پروژه کنترل سرعت فن DC با رزبری پای را نشان میدهد.
همانطور که قبلاً گفته شد، ما نمی توانیم بیش از 15mA را از هر پین GPIO استفاده کنیم. و ممکن است موتور DC بیش از 15 میلی آمپر را جذب کند. بنابراین PWM تولید شده توسط Raspberry Pi نمی تواند مستقیماً به موتور DC تغذیه شود. و اگر ما برای کنترل سرعت، موتور را مستقیماً به PI وصل کنیم، ممکن است برد به طور دائمی آسیب ببیند.
با این وجود از ترانزیستور NPN 2N2222 استفاده کنیم. این ترانزیستور در اینجا با گرفتن سیگنال PWM از PI ، موتور DC پرقدرت را هدایت می کند. باید توجه داشت که اتصال نادرست ترانزیستور ممکن است به رزبری پای صدمه زیادی وارد کند.
به منظور کاهش نوسانات ولتاژ ، همانطور که در نمودار مدار نشان داده شده است ، یک خازن 1000uF را به منبع تغذیه متصل میکنیم.
قطعات مورد نیاز
- مقاومت 220Ω یا 1KΩ – سه عدد
- موتور DC کوچک
- دکمه – دو عدد
- ترانزیستور 2N2222
- دیود 1N4007
- خازن 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)
ما GPIO19 (یا PIN35) را به عنوان پین ورودی تنظیم می کنیم. ما فشرده شدن دکمه توسط این پین را تشخیص خواهیم داد.
IO.setup(19,IO.IN)
حالا به قسمت PWM کد میرسیم. کد زیر را وارد میکنیم :
p = IO.PWM(output channel , frequency of PWM signal)
این کد برای تنظیم کانال و فرکانس سیگنال PWM است. p در اینجا متغیر است که میتواند هر چیزی باشد. ما از GPIO19 به عنوان کانال خروجی PWM استفاده می کنیم. فرکانس سیگنال پی وی ام 100 انتخاب شده است. زیرا نمی خواهیم شاهد چشمک زدن LED باشیم.
از دستور زیر برای شروع تولید سیگنال PWM استفاده میشود. ‘DUTYCYCLE’ برای تنظیم نسبت روشن به خاموش است. 0 بدین معنی است که LED برای 0 درصد از زمان روشن می شود، 30 به معنی LED برای 30٪ زمان و 100 یعنی کاملاً روشن.
p.start(DUTYCYCLE)
تا به اینجا همان کار های قسمت های قبلی را انجام دادیم، از این به بعد وارد قسمت کنترل سرعت میشویم.
حالا اینجا یک حلقه ایجاد میکنیم. و به جای مقدار DUTYCYCLE در کد بالا ، یک متغیر تعریف میکنیم با دو شرط.
شرط اول : اگر دکمه اول (پین 26) فشرده شود، به مقدار DUTYCYCLE = x یک عدد اضافه شود و موتور سریع تر بچرخد :
p.ChangeDutyCycle(x) #تغییر چرخه وظیفه if(IO.input(26) == False): #اگر دکمه 1 فشرده شود if(x<50): # و مقدار ایکس زیر 50 باشد x=x+1 #ایکس را 1 عدد افزایش بده time.sleep(0.2) #200 میلی ثانیه صبر کن
شرط دوم: اگر دکمه دوم (پین 19) فشرده شود، از مقدار DUTYCYCLE = x یک عدد کم شود و موتور آرام تر بچرخد :
if(IO.input(19) == False): #اگر دکمه 1 فشرده شود if(x>0): # و مقدار ایکس بالای 0 باشد x=x-1 #ایکس را 1 عدد کاهش بده time.sleep(0.2) #200 میلی ثانیه صبر کن
به همین سادگی به همین خوشمزگی ! قسمت های دیگر کد را توضیح نمیدهیم، قبلا کلی در مورد آن ها صحبت کرده ایم.
کد کامل :
import RPi.GPIO as IO import time IO.setwarnings(False) x=0 IO.setmode (IO.BCM) IO.setup(13,IO.OUT) IO.setup(19,IO.IN) IO.setup(26,IO.IN) p = IO.PWM(13,100) p.start(0) while 1: p.ChangeDutyCycle(x) if(IO.input(26) == False): if(x<50): x=x+1 time.sleep(0.2) if(IO.input(19) == False): if(x>0): x=x-1 time.sleep(0.2)
قسمت بعد : آموزش کنترل سرعت و جهت استپر موتور با رزبری پای