کنترل موتور سرو: راهنمای کامل
نکات اصلی:
تعریف کنترل موتور سرو: کنترل موتور سرو اجازه میدهد تا موقعیت، سرعت و شتاب موتور با استفاده از سیگنالهای الکترونیکی به طور دقیق کنترل شود.
مکانیسم بازخورد: سیستم بازخورد، که معمولاً یک پتانسیومتر یا انکودر است، اطمینان میدهد که خروجی موتور دقیقاً با ورودی کنترل همخوانی دارد.
سیگنال PWM: مدولاسیون عرض پالس (PWM) برای تنظیم موقعیت سرو با تغییر مدت زمان پالسهای الکتریکی ضروری است.
آردوینو و موتورهای سرو: استفاده از برد آردوینو یک روش محبوب و موثر برای برنامهنویسی و کنترل موتورهای سرو با حداقل سختافزار است.
کاربردهای موتورهای سرو: موتورهای سرو برای پروژههایی که نیاز به کنترل موقعیت دقیق دارند، مانند رباتیک و سیستمهای خودکار، ضروری هستند.
موتور سرو یک موتور طراحی شده برای دقت بالا در چرخش است. این موتور با یک موتور DC معمولی متفاوت است زیرا قادر به حفظ موقعیت خاصی است به جای چرخش مداوم. این ویژگی موتورهای سرو را برای رباتیک، خودکارسازی و پروژههای هابی مناسب میکند.
این مقاله توضیح میدهد که چگونه کنترل موتور سرو عمل میکند، انواع مختلف موتورهای سرو و روشها و دستگاههای مختلف کنترل. همچنین نمونههایی از کاربردها و پروژههای موتور سرو ارائه میشود.
موتور سرو چیست؟
موتور سرو به عنوان یک اکتوئیتور تعریف میشود که اجازه میدهد کنترل دقیق موقعیت (زاویه)، سرعت و شتاب صورت گیرد. یک موتور سرو معمولی شامل سه مولفه اصلی است: یک موتور DC، یک مدار کنترل و یک دستگاه بازخورد.
موتور DC موتور سرو را تغذیه میکند و به چرخدندههایی متصل است که سرعت را کاهش میدهند و گشتاور را روی محور خروجی افزایش میدهند.

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

دستگاه بازخورد دادههای موقعیت را به مدار کنترل بازمیگرداند که سپس توان موتور DC را تنظیم میکند تا موقعیت واقعی با موقعیت مورد نظر از سیگنال ورودی هماهنگ شود.
حلقه بازخورد بین مدار کنترل و دستگاه بازخورد اطمینان میدهد که موتور سرو بتواند به هر موقعیتی در محدوده حرکت خود حرکت کند و آن را حفظ کند.
چگونه میتوان یک موتور سرو را کنترل کرد؟
موتورهای سرو با ارسال یک سیگنال PWM (مدولاسیون عرض پالس) به خط سیگنال موتور کنترل میشوند. PWM یک تکنیک است که یک سیگنال را به طور سریع روشن و خاموش میکند تا پالسهایی با عرضهای متفاوت ایجاد کند. عرض پالسها موقعیت محور خروجی را تعیین میکند.
به عنوان مثال، وقتی یک سیگنال PWM با عرض پالس ۱.۵ میلی ثانیه (ms) ارسال میکنید، موتور سرو به موقعیت متعادل (۹۰ درجه) حرکت میکند.

وقتی یک سیگنال PWM با عرض پالس ۱ ms ارسال میکنید، موتور سرو به موقعیت حداقل (۰ درجه) حرکت میکند. وقتی یک سیگنال PWM با عرض پالس ۲ ms ارسال میکنید، موتور سرو به موقعیت حداکثر (۱۸۰ درجه) حرکت میکند.
سیگنال PWM فرکانس ۵۰ Hz دارد که به معنای تکرار هر ۲۰ ms است. عرض پالس میتواند از ۱ ms تا ۲ ms در این دوره متغیر باشد.
راههای زیادی برای تولید و ارسال سیگنالهای PWM به موتورهای سرو وجود دارد. برخی از روشهای معمول عبارتند از:
استفاده از برد آردوینو یا یک میکروکنترلر دیگر
استفاده از یک پتانسیومتر یا یک سنسور آنالوگ دیگر
استفاده از یک جویستیک یا یک دستگاه ورودی دیجیتال دیگر
استفاده از یک کنترلکننده یا درایور مخصوص موتور سرو
در بخشهای بعدی، هر یک از این روشها را به طور دقیقتر بررسی خواهیم کرد و نمونههایی از نحوه عملکرد آنها را مشاهده خواهیم کرد.
کنترل موتور سرو با آردوینو
آردوینو یکی از محبوبترین پلتفرمها برای کنترل موتورهای سرو است. بردهای آردوینو دارای خروجیهای PWM داخلی هستند که میتوانند برای ارسال سیگنالها به موتورهای سرو استفاده شوند. آردوینو همچنین یک کتابخانه Servo دارد که نوشتن کد برای کنترل موتور سرو را آسان میکند.
برای کنترل یک موتور سرو با آردوینو، نیاز به موارد زیر دارید:
یک برد آردوینو (مانند آردوینو UNO)
یک موتور سرو استاندارد (مانند SG90)
سیمهای جامپر
یک برد خواب (اختیاری)
سیم قرمز از موتور سرو به ۵V برد آردوینو متصل میشود. سیم سیاه از موتور سرو به GND برد آردوینو متصل میشود. سیم سفید از موتور سرو به پین ۹ برد آردوینو متصل میشود.
برای برنامهنویسی برد آردوینو، نیاز به استفاده از IDE آردوینو (آنلاین یا آفلاین) دارید. میتوانید از یکی از مثالهای کتابخانه Servo یا کد خودتان استفاده کنید.
کد زیر نشان میدهد چگونه میتوان یک موتور سرو را با استفاده از یک حلقه for از ۰ تا ۱۸۰ درجه حرکت داد:
#include <Servo.h> // کتابخانه Servo را شامل میشود
Servo myservo; // شیء Servo ایجاد میشود
int pos = 0; // متغیر برای موقعیت
void setup() {
myservo.attach(9); // شیء Servo را به پین ۹ متصل میکند
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // حلقه از ۰ تا ۱۸۰ درجه
myservo.write(pos); // موقعیت را به شیء Servo مینویسد
delay(15); // ۱۵ میلی ثانیه صبر میکند
}
for (pos = 180; pos >= 0; pos -= 1) { // حلقه از ۱۸۰ تا ۰ درجه
myservo.write(pos); // موقعیت را به شیء Servo مینویسد
delay(15); // ۱۵ میلی ثانیه صبر میکند
}
}
این کد از دو حلقه برای افزایش و کاهش متغیر موقعیت از ۰ تا ۱۸۰ درجه و بالعکس استفاده میکند. سپس این مقدار را با استفاده از myservo.write(pos) به شیء Servo مینویسد. همچنین یک تأخیر ۱۵ میلی ثانیه بین هر مرحله اضافه میکند تا حرکت کندلتر شود.
این کد را با استفاده از دکمه Upload در IDE به برد آردوینو خود بارگذاری کنید و مشاهده کنید که موتور سرو شما به طور هموار از یک طرف به طرف دیگر حرکت میکند.
کنترل موتور سرو با پتانسیومتر
پتانسیومتر یک سنسور آنالوگ است که میتواند مقاومتش را با توجه به میزان چرخش دستگیره خود تغییر دهد. میتوانید پتانسیومتر را به عنوان یک دستگاه ورودی برای کنترل موتور سرو استفاده کنید.
برای کنترل یک موتور سرو با پتانسیومتر، نیاز به موارد زیر دارید:
یک برد آردوینو (مانند آردوینو UNO)
یک موتور سرو استاندارد (مانند SG90)
یک پتانسیومتر (۱۰k اهم)
سیمهای جامپر
یک برد خواب
نمودار برشی برای اتصال یک پتانسیومتر و یک موتور سرو به یک برد آردوینو در زیر نشان داده شده است:
سیم قرمز از پتانسیومتر به ۵V برد آردوینو متصل میشود. سیم سیاه از پتانسیومتر به GND برد آردوینو متصل میشود. سیم سبز از پتانسیومتر به پین A0 برد آردوینو متصل میشود.
سیم قرمز از موتور سرو به ۵V در یک ردیف دیگر برد خواب متصل میشود. سیم سیاه از موتور سرو به GND در یک ردیف دیگر برد خواب متصل میشود. سیم سفید از موتور سرو به پین D9 در یک ردیف دیگر برد خواب متصل میشود.
برای برنامهنویسی برد آردوینو خود، نیاز به استفاده از همان کد مثال قبلی دارید اما چند خط آن را تغییر دهید:
#include <Servo.h> // کتابخانه Servo را شامل میشود
Servo myservo; // شیء Servo ایجاد میشود
int potpin = A0; // پین متصل به پتانسیومتر
int val = 0; // متغیر برای خواندن مقدار پتانسیومتر
void setup() {
myservo.attach(9); // شیء Servo را به پین D9 متصل میکند
}
void loop() {
val = analogRead(potpin); // مقدار را از پتانسیومتر (۰ - ۱۰۲۳) میخواند
val = map(val, 0, 1023, 0, 180); // محدوده مقدار (۰ - ۱۸۰) را نقشهبرداری میکند
myservo.write(val); // مقدار نقشهبرداری شده را به شیء Servo مینویسد
delay(15); // ۱۵ میلی ثانیه صبر میکند
}
این کد از تابع analogRead(potpin) برای خواندن مقدار از پتانسیومتر متصل به پین A0 استفاده میکند. سپس از تابع map(val, 0, 1023, 0, 180) برای نقشهبرداری محدوده مقدار از ۰ تا ۱۰۲۳ به ۰ تا ۱۸۰ استفاده میکند. سپس مقدار نقشهبرداری شده را با استفاده از تابع myservo.write(val) به شیء Servo مینویسد. همچنین یک تأخیر ۱۵ میلی ثانیه بین هر مرحله اضافه میکند، همانطور که در مثال قبلی.
میتوانید این کد را با استفاده از دکمه Upload در IDE به برد آردوینو خود بارگذاری کنید. باید ببینید که موتور سرو شما با توجه به موقعیت دستگیره پتانسیومتر حرکت میکند.
کنترل موتور سرو با جویستیک
<