logo-site-sefid
Search
Close this search box.
کنترل سرعت موتور dc

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

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

موتور جریان مستقیم (DC) پر استفاده ترین موتور در رباتیک و الکترونیک است. برای کنترل سرعت موتور DC با استفاده از آردوینو ، ما روش های متعددی داریم، برای مثال سرعت می تواند بر حسب دما به صورت خودکار کنترل شود، اما در این پروژه از روش PWM برای کنترل سرعت موتور DC استفاده خواهد شد. اینجا، در این پروژه کنترل سرعت موتور با آردوینو، سرعت می تواند توسط چرخاندن دسته پتانسیومتر کنترل شود.

مدولاسیون عرض پالس:

PWM چیست؟ PWM روشی است که با استفاده از آن می توانیم ولتاژ و یا توان را کنترل کنیم. برای اینکه ساده تر متوجه شویم، اگر شما ولتاژی به اندازه 5 ولت را برای راه اندازی یک موتور تامین کرده اید بدین معنی است که موتور با یک سرعتی در حال حرکت است، حال اگر این ولتاژ تامین شده را به میزان 2 ولت کاهش دهیم، یعنی 3 ولت به موتور ارائه کنیم، سرعت حرکت موتور نیز کاهش می یابد. این ایده در این پروژه برای کنترل ولتاژ با استفاده از PWM استفاده شده است.

% بازه فعالیت = ( TON / ( TON + TOFF ) ) * 100

که در فرمول فوق TON = زمان یک بودن موج مربعی و TOFF = زمان صفر بودن موج مربعی می باشد

نمودار کنترل موتور
نمودار کنترل موتور DC

حال اگر کلید موجود در شکل به طور مداوم در طول یک بازه زمانی بسته باشد، بنابراین موتور نیز به طور مداوم در طول آن بازه زمانی روشن خواهد بود. اگر کلید برای 8 میلی ثانیه بسته و برای 2 میلی ثانیه در طول یک حلقه 10 میلی ثانیه ای باز باشد، بنابراین موتور تنها در بازه 8 میلی ثانیه ای روشن خواهد بود. حال به میانگین نسبت مدت زمان روشن بودن به روی مجموع مدت زمان روشن بودن و خاموش بودن در یک دوره تناوب 10 میلی ثانیه ای، چرخه عملکرد و یا duty cycle می گوییم که در اینجا 80% می باشد (8/ (8+2))، بنابراین، ولتاژ خروجی میانگین 80 درصد ولتاژ باتری خواهد بود. البته، چشم انسان نمی تواند این موضوع که موتور برای 8 میلی  ثانیه روشن بوده و برای 2 میلی ثانیه خاموش است را دیده و یا تشخیص دهد و به همین دلیل به نظر می رسد که موتور با سرعت 80 درصدی در حال چرخیدن است.

در حالت دوم، کلید برای مدت 5 میلی ثانیه باز بوده و برای 5 میلی ثانیه در طول یک دوره تناوب 10 میلی ثانیه ای بسته است، بنابراین ولتاژ میانگین موجود در ترمینال، 50 درصد ولتاژ باتری خواهد بود. اگر بگوییم که باتری ما 5 ولت بوده و چرخه عملکرد ما نیز 50 درصد است، ولتاژ میانگین ترمینال 2.5 ولت خواهد بود.

در حالت سوم چرخه عملکرد 20 درصد بوده و ولتاژ میانگین ترمینال 20 درصد ولتاژ باتری می باشد.

قطعات مورد نیاز برای کنترل سرعت موتور DC با استفاده از آردوینو

برد آردوینو UNO

ترانزیستور 2N2222

پتانسیومتر 100 کیلو اهمی

خازن 0.1 میکرو فارادی

برد بورد

سیم اتصال برد بورد

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

دیاگرام مداری:

دیاگرام مداری برای کنترل سرعت موتور DC با استفاده از آردوینو و روش PWM در زیر آورده شده است:

دیاگرام مداری کنترل سرعت موتور جریان مستقیم
دیاگرام مداری کنترل سرعت موتور جریان مستقیم

کد نویسی و توضیحات:

کد کامل برای کنترل موتور DC با آردوینو و با استفاده از پتانسیومتر در پایان این مقاله آورده شده است.

در قطعه کد زیر، ما متغیر های c1 و c2 را تعریف کرده و پایه آنالوگ A0 را برای خروجی پتانسیومتر و پایه دوازدهم را برای pwm قرار داده ایم.

int pwmPin = 12;
int pot = A0;
int c1 = 0;  
int c2 = 0;  

حال در کد زیر، پایه A0 را به عنوان ورودی و پایه 12 ( که پایه pwm است ) را به عنوان خروجی قرار داده ایم.

void setup()  {
  pinMode(pwmPin, OUTPUT); // declares pin 12 as output
  pinMode(pot, INPUT);  // declares pin A0 as input
}

اینجا در حلقه void loop() ما مقدار آنالوگ ( از پایه A0 ) را با استفاده از analogRead(pot) خوانده و در متغیر c2 آن را ذخیره می کنیم. پس از آن، مقدار c2 را از 1024 کم کرده و نتیجه را در c1 ذخیره می کنیم. سپس پایه دوازدهم pwm از آردوینو را یک کرده و بعد از یک تاخیر به مدت مقدار متغیر c1 آن پایه را صفر می کنیم. و سپس، مجددا بعد از یک تاخیر به میزان مقدار متغیر c2 حلقه ادامه پیدا می کند.

دلیل تفریق کردن مقدار آنالوگ از عدد 1024 این است که مبدل آنالوگ به دیجیتال آردوینو Uno 10 بیتی می باشد( بنابر این مقدار عددی بین مقادیر 0 تا 2^10 = 1024 می باشد ). این به این معنی است که مبدل آنالوگ به دیجیتال آردوینو، ولتاژ های ورودی بین 0 تا 5 ولت را به مقادیر عددی بین 0 تا 1024 نسبت خواهد داد. بنابر این اگر ما ورودی analogValue را در 5/1024 ضرب کنیم، مقدار دیجیتالی ولتاژ ورودی را دریافت خواهیم کرد.

void loop()
{
  c2= analogRead(pot);
  c1= 1024-c2;           
  digitalWrite(pwmPin, HIGH); // sets pin 12 HIGH
  delayMicroseconds(c1);   // waits for c1 uS (high time)
  digitalWrite(pwmPin, LOW);  // sets pin 12 LOW
  delayMicroseconds(c2);   // waits for c2 uS (low time)
}

کنترل سرعت موتور DC با استفاده از آردوینو :

کنترل سرعت موتور dc با آردوینو و پتانسیومتر
کنترل سرعت موتور dc با آردوینو و پتانسیومتر

در این مدار، برای کنترل سرعت موتور DC با استفاده از آردوینو ، ما از یک پتانسیومتر 100 کیلو اهمی برای تغییر دادن چرخه عملکرد سیگنال pwm استفاده کرده ایم. پتانسیومتر 100 کیلو اهمی به ورودی آنالوگ پین A0 از آردوینو UNO متصل بوده و موتور  DC ما به پایه دوازدهم آردوینو ( که پایه pwm است) متصل شده است. عملکرد برنامه آردوینو بسیار ساده است، چرا که ولتاژ را از پایه آنالوگ A0 می خواند. ولتاژ در پایه آنالوگ به با استفاده از پتانسیومتر تغییر می کند. بعد از انجام دادن برخی محاسبات الزامی، چرخه عملکرد بر اساس آن تطبیق پیدا می کند.

برای مثال اگر ما 256 مقدار به ورودی آنالوگ بدهیم، بنابراین زمان یک بودن برابر 768 میلی ثانیه (256-1024) و مدت زمان صفر بودن برابر 256 میلی ثانیه می شود، بر این اساس، به راحتی بیان می شود که چرخه عملکرد ما 75 درصد می باشد. چشمان ما نمی تواند چنین نوسانات بالای فرکانسی را مشاهده کرده و به نظر می رسد که موتور دائما با 75 درصد سرعت خود روشن است. بنابراین، این روشی است که ما می توانیم سرعت موتور را با استفاده از آردوینو کنترل کنیم.

برای یادگیری بهتر میتوانید ویدیوی زیر را تماشا کنید:

 

 

int pwmPin = 12; // assigns pin 12 to variable pwm

//پین شماره ی 12 که یکی از پین های PWM است را برای انجام این پروژه مشخص میکنیم

int pot = A0; // assigns analog input A0 to variable pot

//پین A0 را برای پتانسیومتر مشخص میکنیم


int c1 = 0;   // declares variable c1

//متغیر C1 را برابر 0 قرار میدهیم

int c2 = 0;   // declares variable c2

//متغیر C2 را برابر 0 قرار میدهیم

void setup()  // setup loop

{

  pinMode(pwmPin, OUTPUT); 

//پین Pwm یعنی 12 را از نوع خروجی تعیین میکنیم

  pinMode(pot, INPUT);  
//پین pot  یا  A0 را از نوع ورودی مشخص میکنیم

}

void loop()

{

  c2= analogRead(pot); 

//متغیر c2 را برابربا مقدار ورودی آنالوگ قرار میدهیم

  c1= 1024-c2;         // subtracts c2 from 1000 ans saves the result in c1
//مقدار c1  را برابر با حاصل تفریق 1024 با c2  قرار میدهیم

  digitalWrite(pwmPin, HIGH); 

//پین pwm یا 12 را در حالت بالا قرار میدهیم

  delayMicroseconds(c1);   

 // به اندازه ی مقدار C1 تاخیر قرار میدهیم
 
  digitalWrite(pwmPin, LOW);  

//پین pwm را برابر با مقدار پایین قرار میدهیم

  delayMicroseconds(c2);  
  
  //به اندازه ی مقدار c2 تاخیر قرار میدهیم
  

}

 

رضا قنبری
متخصص آموزش رباتیک

رضا قنبری هستم متخصص آموزش رباتیک با بیش از 10 سال سابقه فعالیت در ایران

این مطلب را به اشتراک بگذارید

دسته بندی نشده

ماژول WIFI

ماژول WIFI قبل از خواندن این مقاله بهتر است در نظر داشته باشید مقالاتی که با عنوان ماژول در سایت قرار گرفته اند از مقالات

ماژول آمپلی فایر

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

ماژول سنسور مجاورت خازنی

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

دیدگاه‌ خود را بنویسید

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