خدمات وبسایت آی‌سی‌تی نیـــک

طراحی و ساخت انواع پروژه‌های الکترونیکی با: میکروکنترلرavr - میکروکنترلرarm - میکروکنترلرpic و آردوینو

مقالات و آموزش‌های رایگان در سطوح پایه و حرفه‌ای برای الکترونیک و آی سی تی - ICT

کنترل سروو موتور با AVR

منتشر شده در میکروکنترلر avr

futaba s3003 side 800x609سروو موتور ها نمونه ای از عملگرهای الکترومکانیکی هستند که به طور پیوسته مانند موتورهای dcیاac گردش نمیکنند، از این رو ، آنها برای تغییر مکان و نگهداشتن برخی اشیا به کار میروند. یعنی از آنها در کاربرد هایی که نیازی به چرخش پیوسته نیست استفاده می کنند. بنابراین از آنها برای چرخاندن چرخ استفاده نمیکنند بلکه در کاربردهایی استفاده می کنند که نیاز به جابه جایی مقطعی و سپس باقی ماندن در آنجاست. بیشتر کاربرد سروو موتور ها در رادارها می باشد چراکه رادار ها نیازی به حرکت 360درجه ای مانند یک چرخ را ندارند. سروو موتور ها توانایی چرخش یک زاویه خاص مثلا 30درجه ای و سپس نگهداشتن رادار درآن موقعیت را دارند. سروو موتور ها همچنین دارای یک مکانیسم فیدبک هستند که باعث حس کردن خطا و تصحیح آن میشود و به آن سروومکانیسم (servomechanism)می گویند. بنابراین چنانچه جریان هوا فشاری به رادار وارد کند و باعث حرکت آن شود سروو موتور نیرویی در جهت مخالف به آن وارد کرده و خطا را اصلاح می کند. بعنوان مثالی دیگر اگر بخواهید سروو موتوری را که مثلا 30درجه حرکت کرده و در موقعیت خود قفل شده است را با دست حرکت دهید سروو موتور از تمام قدرت خود استفاده می کند تا خود را در موقعیتش نگه دارد.

سروو موتور ها همچنین در بازو ها و پاهای ربات استفاده می شوند.

انواع متفاوتی از سروو موتور ها نیز موجودست که ما در اینجا بر روی hobby servo ها متمرکزیم.

Hobby servo ها دارای موتور و مکانیسم کنترلی در یک واحد هستند. آنها دارای 3 سیم بوده که یکی از آنها مثبت تغذیه دیگری زمین و آخرین سیم هم سیم کنترلی میباشد. عکس زیر یک Hobby servo مدل Futaba s3003 را نشان می دهد.

futaba s3003 servo standard

نحوه کنترل یک سروو موتور

کنترل یک سروو موتور به سادگی با یک میکروکنترلر قابل انجامست. و نیازی به هیچ درایور خارجی (مانند پل H در استپ موتور ها( ندارد و فقط به یک سیگنال کنترلی برای تعیین موقعیت و مشخص کردن زاویه حرکت نیاز دارد. فرکانس سیگنال کنترلی 50هرتز است که عرض پالس آن زاویه حرکت را مشخص میکند.

actuators servocontrol

برای سروو موتور Futaba s3003 مشخصه زمانی زیر را پیدا کردیم. این سروو موتور ها قادر به چرخش بین صفر درجه تا 180درجه هستند.

0.388ms = 0 degree

1.264ms = 90degree

2.14ms = 180degree

کنترل سروو موتور با AVR

بدین منظور میتوان از PWM میکروAVR استفاده کرد بنابراین واحد PWM کار ساخت اتوماتیک سیگنال برای قفل کردن سروو را انجام می دهد و CPU میکرو برای انجام عملیات دیگر آزاد میماند.

برای درک چگونگی تنظیم PWM شما باید اطلاعات پایه ای از واحد سخت افزاری تایمر و ماژول PWM در AVR داشته باشید.

در اینجا ما از تایمر 1 AVR استفاده کردیم که یک تایمر 16بیتی بوده و دو کانال PWM دارد فرکانس CPU میکرو نیز روی 16مگاهرتز خارجی تنظیم شده(این فرکانس حداکثر فرکانس کاری در میکروهای AVR می باشد). مقدار تقسیم کننده تایمر را هم روی 64 میگزاریم بنابراین تایمر پریودی برابر 16MHz/64=250KHZ(=4Us) خواهد داشت. تایمر را هم روی مد Fast PWM و TOP Value =ICR1 تنظیم میکنیم. بنابراین تایمر شمارش را از 0 تا icr1 انجام می دهد.

servo osc

 

برای ایجاد فرکانس 50هرتز (زمان تناوب 20میلی ثانیه) به شکل زیر عمل میکنیم:

بنابراین مقدار ICR1A=4999 قرار می دهیم.خروجی مقایسه کننده را هم برای پایه OC1A فعال کرده و روی حالت NON INVerted میگذاریم.

servo timer

اکنون عرض پالس pwm با فرکانس 50 هرتز می تواند توسط رجیستر OCR1A تنظیم شود. میدانیم پریود تایمر روی 4میکرو ثانیه می باشد بنابراین چنانچه بخواهیم سروو را روی 0 درجه تنظیم کنیم طبق دیتا شیت Futaba s3003 باید 0.388ms یا 388میکروثانیه عرض پالس داشته باشیم. برای اینکار مقدار OCR1A=388us/4us =97 قرار می دهیم.

برای چرخش 90درجه ای مقدار OCR1A=1264us/4us =316 قرار می دهیم.

برای چرخش 180درجه ای مقدار OCR1A=2140us/4us =535 قرار می دهیم.

برای سروو موتور های دیگر با رجوع به دیتاشیت آن به همین روش عمل می کنیم.

برنامه کنترل سروو موتور با atmega8

برنامه بسیار ساده بوده و همانطور که گفته شد درآن نخست تایمر را تنظیم کرده سپس سروو در 0درجه قفل شده و بعد 90درجه حرکت خواهد داشت و پس از توقف 135 درجه و نهایت به زاویه 180 درجه خواهد رفت.این پروسه تکرار خواهد شد.

#include <mega8.h>
#include <delay.h>

void main(void)
{
// Input/Output Ports initialization
// Port B initialization
DDRB=0x02;  //PWM Pins as Output
PORTB=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 250/000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Non-Inverted PWM
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 4 us
// Output Pulse(s):
// OC1A Period: 4 us
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
ICR1=4999; //fPWM=50Hz (Period = 20ms Standard).
while (1)
      {
      OCR1A=97;   //0 degree
      delay_ms(1000);
      OCR1A=316;  //90 degree
      delay_ms(1000);
      OCR1A=425;  //135 degree
      delay_ms(1000);
      OCR1A=535;  //180 degree
      delay_ms(1000);
      }
}

شماتیک مدار:

servo circuit

دانلود سورس برنامه وشبیه ساز codevision ,proteus

منابع:

http://extremeelectronics.co.in/avr-tutorials/servo-motor-control-by-using-avr-atmega32-microcontroller/

http://www.societyofrobots.com/actuators_servos.shtml

 

 مطالب مرتبط :

برچسب ها:

Tags: آموزش برق و الکترونیک مقاله میکروکنترلر میکروکنترلر avr راه اندازی سروو موتور سروو موتور چیست نحوه کار سروو موتور کنترل سروو موتور با AVR کنترل سروو موتور به زبان c کنترل سروو موتور با mega32 کنترل سروو موتور

4

پشتیبانی و مشاوره 24 ساعته

ictnic2

تماس با ما

  • تلگرام : ICTNIC2@

به ما بپیوندید

ما را در صفحات اجتماعی دنبال نمایید...

کاربران ثبت نامی

تا این لحظه تعداد

2415 نفر

در وبسایت تخصصی ictnic

ثبت نام و از خدمات ما استفاده می کنند.

ما را در آپارات دنبال کنید

aparat logo fa color black 275x100