پایه تئوری راه اندازی سروو موتور با میکرو کنترلر avr

saalek110

Well-Known Member
پایه تئوری راه اندازی سروو موتور با میکرو کنترلر avr
 
آخرین ویرایش:

saalek110

Well-Known Member
سروو موتورها نوعی از موتورهای الکتریکی می باشند که دارای یک محور (شفت) می باشند و این محور قادر است تا در یک موقعیت و زاویه ای خاص با توجه به سیگنال دریافتی قرار گیرد. سروو موتورها کاربردهای زیادی دارند و در صنایع و کارخانجات مختلف از انها استفاده می شود. از سروو موتورها در رباتیک نیز استفاده می شود بخصوص در هواپیماهای مدل استفاده زیادی دارند.

سروو موتورها دارای تفاوت هایی در ولتاژ کاری, زاویه چرخش, گشتاور, سرعت و… می باشند و به همین دلیل دارای انوع مختلفی هستند و ما باید بسته به نیاز خود یکی از انها را انتخاب کنیم. ولی راه اندازی همه انها تقریبا مشابه است.

منبع فارسی:
 
آخرین ویرایش:

saalek110

Well-Known Member
MG90S-Servo-Motor-emic.jpg


همانطور که مشاهده می کنید, سروو موتور ها دارای 3 سیم می باشند. دو سیم برای اتصال تغذیه سروو موتور می باشد و سیم سوم برای اعمال سیگنال کنترل به سروو موتور است. سیم مثبت تغذیه سروو معمولا قرمز رنگ است و رنگ سیم منفی تغذیه سروو معمولا سیاه یا قهوه ای است. رنگ سیم مربوط به سیگنال کنترل نیز معمولا نارنجی است. البته در برخی از سروو موتورها ممکن است رنگ ها تفاوت داشته باشد و سیم ها دارای رنگ های دیگری باشند که حتما قبل از استفاده از سروو از اینکه سیم های مثبت و منفی و سیگنال کدام یک هستند اطمینان پیدا کنید.

از همان منبع پست قبل.
 
آخرین ویرایش:

saalek110

Well-Known Member
موج PWM:

برای راه اندازی یک سروو موتور و کنترل زاویه محور ان ما باید یک سیگنال PWM به سروو اعمال کنیم. این سیگنال PWM دارای دوره تناوب مشخصی می باشد و ما با تغییر عرض پالس سیگنال PWM می توانیم زاویه محور سروو موتور را تغییر دهیم.
 

saalek110

Well-Known Member
مدل سروو موتور:


همانطور که گفته شد سروو موتورها دارای مدل های مختلفی هستند که ما در این پروژه سروو موتور مدل MG90S را راه اندازی می کنیم. شما توسط همین پروژه می توانید دیگر سروو موتورها را هم راه اندازی کنید و فقط ممکن است نیاز به یک تغییر جزئی در برنامه پروژه باشد که در ادامه بیشتر توضیح خواهم داد.

مهم ترین مشخصه های یک سروو موتور که برای راه اندازی به انها نیاز داریم یکی ولتاژ کاری سروو می باشد که به عنوان مثال برای سروو مدل MG90S ولتاژ کاری 4.8 تا 6 ولت DC است. ما باید سیم های مثبت و منفی تغذیه سروو موتور را به ولتاژی در محدوده 4.8 تا 6 ولت متصل کنیم. همانطور که گفته شد برای دیگر مدل های سروو ممکن است محدوده ولتاژ کاری متفاوت باشد که حتما بررسی کنید.
 

saalek110

Well-Known Member
دوره تناوب و عرض پالس سیگنال PWM مورد نیاز سروو موتور:

دیگر مشخصه سروو موتور که به ان نیاز داریم مشخصات مربوط به سیگنال PWM سروو است. ما نیاز داریم که دوره تناوب و عرض پالس سیگنال PWM مورد نیاز سروو را بدانیم. این مشخصات در دیتاشیت سروو موتور موجود می باشند. برای سروو موتور MG90S ما نیاز به یک سیگنال PWM با دوره تناوب 20 میلی ثانیه و عرض پالس این سیگنال نیز می تواند در محدوده 400 میکرو ثانیه تا 2400 میکرو ثانیه تغییر کند. معمولا دوره تناوب برای اکثر مدل های سروو 20 میلی ثانیه است و فقط ممکن است عرض پالس برای مدل های مختلف سروو متفاوت باشد که نحوه تنظیم عرض پالس برای سروو های مختلف را در ادامه توضیح خواهم داد.
 

saalek110

Well-Known Member
Servo-Motor-Control-Signal-emic.jpg


همانطور که گفته شد برای سروو مدل MG90S ما نیاز به یک سیگنال PWM با دوره تناوب 20 میلی ثانیه و عرض پالس بین 400 تا 2400 میکرو ثانیه (0.4 تا 2.4 میلی ثانیه) داریم. ما با تغییر عرض پالس بین 400 تا 2400 میکرو ثانیه می توانیم زاویه محور سروو موتور را بین 0 تا 180 درجه تغییر دهیم. مثلا وقتی که عرض پالس سیگنال 400 میکرو ثانیه است سروو در زاویه 0 درجه قرار می گیرد. وقتی که عرض پالس سیگنال 1400 میکرو ثانیه باشد سروو در زاویه 90 درجه قرار می گیرد و با عرض پالس 2400 میکرو ثانیه سروو در زاویه 180 درجه قرار می گیرد. برای درک بهتر به تصویر بالا دقت کنید.
 

saalek110

Well-Known Member
برای تولید این سیگنال PWM ما از واحد تایمر/کانتر میکروکنترلر استفاده می کنیم.
 

saalek110

Well-Known Member
AVR-prj-servo-motor-test-emic.jpg
همانطور که مشاهده می کنید شماتیک این پروژه بسیار ساده است و فقط دارای دو قطعه یعنی میکروکنترلر و سروو موتور می باشد. در این پروژه از میکروکنترلر ATmega16 استفاده شده است.
 

saalek110

Well-Known Member
همانطور که مشاهده می کنید شماتیک این پروژه بسیار ساده است و فقط دارای دو قطعه یعنی میکروکنترلر و سروو موتور می باشد. در این پروژه از میکروکنترلر ATmega16 استفاده شده است.

همانطور که گفته شد ما توسط واحد تایمر/کانتر میکروکنترلر می توانیم یک سیگنال PWM ایجاد کنیم. میکروکنترلر ATmega16 دارای 3 واحد تایمر/کانتر می باشد, که به انها تایمر/کانتر صفر, تایمر/کانتر یک و تایمر/کانتر دو می گویند. تایمر/کانتر صفر و دو 8 بیتی هستند و تایمر/کانتر یک 16 بیتی است. برای راه اندازی سروو موتور ما از تایمر/کانتر یک که 16 بیتی است استفاده می کنیم.

در شماتیک بالا سیم های مثبت و منفی تغذیه سروو (VCC و GND) به تغذیه متصل شده است و سیم سیگنال کنترل نیز به پایه 18 میکرو (پین 4 از پورت D) متصل شده است. این پایه میکرو خروجی تایمر/کانتر یک می باشد که در واقع پایه خروجی سیگنال PWM است. توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را که در شماتیک بالا نیست, فراموش نکنید به تغذیه 5 ولت متصل کنید.

عملکرد پروژه به این صورت است که محور سروو موتور از 0 درجه شروع به چرخش می کند تا به 180 درجه برسد و پس از ان دوباره بصورت برعکس یعنی از 180 درجه شروع به چرخش می کند تا به 0 درجه برسد و این روند ادامه دارد.
 

saalek110

Well-Known Member
برنامه کدویژن:

در این پروژه فرکانس میکروکنترلر 1 مگاهرتز تنظیم شده است. در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:

PHP:
#include <mega16a.h>      //معرفي کتابخانه ميکروکنترلر مگا 16//
#include <delay.h>        //delay معرفي کتابخانه//
void main(void)
{
int i;      //در روبرو يک متغير براي استفاده در برنامه تعريف شده است//
//است را خروجي کرده ايم PWM که در واقع پين خروجي موج D در زير پين 4 از پورت//
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (1<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
//از خط 27 تا 34 تنظيمات واحد تايمر/کانتر 1 ميکرو مي باشند که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند//
//در زير مي توانيد توضيحات مربوط به تنظيمات رجيسترهاي تايمر/کانتر 1 ميکرو را مشاهده کنيد//
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000/000 kHz
// Mode: Fast PWM top=OCR1A
// OC1A output: Disconnected
// OC1B output: Non-Inverted PWM
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 20 ms
// Output Pulse(s):
// OC1B Period: 20 ms Width: 0/400 ms
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=20000;     //دوره تناوب سيگنال ما را مشخص مي کند که براب با 20000 ميکرو ثانيه يا 20 ميلي ثانيه قرار داده شده است OCR1A رجيستر//
OCR1B=400;       //را مشخص مي کند که براي شروع ان را بربر با 400 ميکرو ثانيه يا 0.4 ميلي ثايه قرار داده ايم PWM عرض پالس سيگنال OCR1B رجيستر//
                 //را بين 400 تا 2400 مقدار دهي مي کنيم تا با ايجاد عرض پالس هاي مختلف سروو موتور در زاويه هاي مختلف چرخش کند OCR1B رجيستر for در ادامه ما توسط دو حلقه//
while (1)
      {
      for(i=400;i<=2400;i++) {    //مي ريزد OCR1B تعريف شده که از 400 تا 2400 شمارش مي کند و درون رجيستر for در روبرو يک حلقه//
       OCR1B=i;
       delay_ms(2);
      }
      for(i=2400;i>=400;i--) {    //مي ريزد OCR1B روبرو برعکس قبلي است يعني از 2400 يکي يکي کم مي کند تا به 400 برسد و مقادير شمارش را درون رجيستر for حلقه//
       OCR1B=i;
       delay_ms(2);
      }
  }
}


توضیحات قسمت های مهم برنامه نوشته شده.

سالک: پایان نقل از این سایت.
پستهای اول تا اینجا از این سایت بود.
 

جدیدترین ارسال ها

بالا