آموزش آردوینوآموزش الکترونیک

آموزش کامل کنترل سرعت موتور DC با Arduino ، پتانسیومتر و PWM (آموزش آردوینو #5)

سلام. آموزش کامل کنترل سرعت موتور DC با Arduino و پتانسیومتر و PWM (آموزش آردوینو #5) را آماده کردیم.

چگونه سرعت موتور DC را با آردوینو کنترل کنیم ؟

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

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

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

PWM چیست ؟

PWM روشی است که با استفاده از آن می توانیم ولتاژ یا توان را کنترل کنیم. برای درک ساده تر آن ، اگر از 5 ولت برای تغذیه موتور استفاده کنید موتور با سرعت میچرخد، حالا ما ولتاژ را 2 ولت کم کنیم ، یعنی موتور با تغذیه 3 ولت با سرعت کمتری میچرخد. اما چگونه با آردوینو این سرعت را کم کنیم ؟ ما مبحث PWM را در مورد میکروکنترلر های AVR به طور کامل بررسی کردیم. در جزئیات تفاوت هست اما در کل مفهوم PWM یکی است. در اینجا گریزی میزنیم به آن مطلب :

مدولاسیون عرض پالس (PWM) یک سیگنال دیجیتالی است که بیشتر در مدارهای کنترل مورد استفاده قرار می گیرد. زمان بالا ماندن سیگنال “on time” است و زمان سیگنال کم ماند “off time” نامیده می شود. دو پارامتر مهم برای PWM وجود دارد که در زیر آن ها را مورد بحث میدهیم.

Duty Cycle (چرخه وظیفه) PWM

درصد زمانی که سیگنال PWM بالا باقی می ماند به عنوان چرخه وظیفه شناخته می شود.

مثلا سیگنال پالس 100ms است، اگر سیگنال برای 50ms بالا  و برای 50ms پایین باشد ، می توان گفت که چرخه وظیفه 50٪ است. به طور مشابه اگر پالس به مدت 25ms بالا و 75ms در حالت پایین باشد ، چرخه وظیفه 25٪ خواهد بود. توجه کنید که ما فقط طول حالت HIGH را محاسبه می کنیم. برای درک کامل PWM می توانید از عکس و فرمول زیر استفاده کنید.

Duty Cycle (چرخه وظیفه) PWM 

Duty Cycle (%) = On Time/(On Time + Off Time)

بنابراین ، با تغییر چرخه وظیفه می توانیم مقدار PWM را تغییر دهیم و این کار در نتیجه باعث تغییر در روشنایی LED شود. ما در کنترل روشنایی LED از چرخه وظیفه با درصد های مختلف استفاده خواهیم کرد.

مشاهده مطلب کامل : آموزش کامل استفاده از PWM برای میکروکنترلر AVR در اتمل استودیو (PWM چیست ؟)

متوجه شدید ؟ در مطلب بالا به جای LED ، موتور DC را فرض کنید.

ما آموزش تغییر سرعت موتور DC با آردوینو را توسط یک پروژه به طور کامل شرح میدهیم.

پروژه کنترل سرعت موتور DC با پتانسیومتر

شماتیک مدار این پروژه را در تصویر زیر میبینید.

پروژه کنترل سرعت موتور DC با پتانسیومتر

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

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

  1. برد آردوینو Uno
  2. موتور DC
  3. ترانزیستور 2N2222
  4. پتانسیومتر 100 کیلو اهم
  5. خازن 0.1uf
حتما ببینید :  پروژه آردوینو تغییر سرعت فن وابسته دما (آموزش کامل کنترل سرعت Fan)

توضیحات کد آردوینو کنترل سرعت موتور

بحث اصلی ما در نوشتن کد برای کنترل سرعت موتور است. در اینجا ما به صورت خط به خط این مسئله را توضیح میدهیم.

در قسمت اول کد ما ابتدا پین PWM که به ترانزیستور متصل میشود را تعریف میکنیم. به شماتیک مدار در بالا دقت کنید. پین PWM را به عنوان 12 در نظر گرفته ایم و به ترانزیستور متصل شده است. و خروجی ترانزیستور به موتور DC متصل شده است.

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

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

خب ممکن است برایتان سوال پیش بیاید که c1 و c2 چه هستند ؟ C1 و C2 دو متغیر هستند که آن ها را تعریف کردیم کمی بعد به آن ها به طور کامل میپردازیم.

حالا باید نوع پین های PWM و pot را تنظیم کنیم. در اینجا PWM به عنوان خروجی و pot به عنوان ورودی تنظیم میشود.

void setup()  {
  pinMode(pwmPin, OUTPUT); // تنظیم پین PWM به عنوان خروجی
  pinMode(pot, INPUT);  // تنظیم پین pot به عنوان ورودی
}

قسمت اصلی کد

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

دلیل کم کردن مقدار آنالوگ از 1024 این است که آنالوگ به دیجیتال برد Arduino Uno با دقت 10 بیتی است (بنابراین مقدار آن بین 0 تا 1024 است). به این معنی که ولتاژهای ورودی بین 0 تا 5 ولت را به یک عدد صحیح بین 0 تا 1024 تبدیل میکند. بنابراین اگر مقدار ورودی anlogValue را در 5/1024 ضرب کنیم ، مقدار دیجیتال ولتاژ ورودی را بدست می آوریم. در قسمت قبلی به طور کامل آنالوگ به دیجیتال را در آردوینو آموزش دادیم.

void loop()
{
  c2= analogRead(pot); // دستور خواندن مقدار آنالوگ پتانسیومتر
  c1= 1024-c2; // کم کردن مقدار پتانسیومتر از 1024          
  digitalWrite(pwmPin, HIGH); // روشن کردن پین pwm
  delayMicroseconds(c1);   // به مدت c1 روشن بماند
  digitalWrite(pwmPin, LOW);  // خاموش کردن پین pwm
  delayMicroseconds(c2);   // به مدت c2 خاموش بماند
}

متوجه شدید ؟ دوباره به این تصویر دقت کنید :

Duty Cycle (چرخه وظیفه) PWM اگر بخواهیم کد نوشته شده و این تصویر را با هم مرتبط کنیم. مقدار C2 میشود زمان Off Time و مقدار C1 میشود زمان On time. و به همین ترتیب با استفاده از PWM  و آنالوگ به دیجیتال سرعت موتور DC را کنترل میکنیم. یعنی با استفاده از پتانسیومتر مقدار Duty Cycle یا همان چرخه وظیفه را تغییر میدهیم.

فیلم عملکرد پروژه

کد کامل پروژه

int pwmPin = 12; 
int pot = A0; 
int c1 = 0;   
int c2 = 0;   
void setup() 
{
  pinMode(pwmPin, OUTPUT); 
  pinMode(pot, INPUT);  
}
void loop()
{
  c2= analogRead(pot); 
  c1= 1024-c2;         
  digitalWrite(pwmPin, HIGH); 
  delayMicroseconds(c1);   
  digitalWrite(pwmPin, LOW);  
  delayMicroseconds(c2);  
}

در قسمت بعدی به طور کامل با اتصال برد آردوینو به ال سی دی کاراکتری آشنا میشویم.

قسمت بعد : آموزش جامع اتصال LCD کاراکتری به برد آردوینو و ایجاد متن متحرک(آموزش آردوینو #6)

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

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

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

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

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