نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه

آموزش راه اندازی سروو SG 5010 با Atmel Studio

به نام خدا : آموزش راه اندازی سروو موتور SG5010 ؛ در این آموزش ابتدا  در مورد سروو موتورها توضیحات مختصری آمده و سپس مشخصات سروو موتور SG 5010  و سپس نحوه راه اندازی آن با میکرو کنترلر Atmega32  با استفاده از کامپایلر Atmel Studio 6.2 صحبت کرده ایم. و در پایان سورس کد و شماتیک پروژه نیز قرار داده شده است.
سروو موتور چیست؟
سروو برگرفته از یک کلمه یونانی به نام  servus که به معنی خدمتکار است.این سیستم نیز که تحت این نام کار می کند را سیستم سروو می گویند.بدین دلیل که مستقیما به فرامین پاسخ می دهد.

سروموتور به انگلیسی: Servomotor یا موتور کنترل به انگلیسی: Control motor  نوعی از موتورهای الکتریکی است که با هدف بکارگیری در سیستم‌های کنترل فیدبک طراحی می‌شود. لختی (اینرسی) در این موتورها پایین بوده و در نتیجه تغییر سرعت در این موتورها بسیار سریع است. معمولا قطر این موتورها کم اما درازای آنها زیاد می‌باشد.
در کاربردهای مـدرن ، واژه سرو یا مکانیــسم سرو به یک سیستم کنـترلی فیدبک که متغیر کنترل شونده ، موقعیت یا مشتق موقعیت مکانیکی به عنوان سرعت و شتاب است، محدود می شود.
یک سیستم کنترلی فیدبک ، سیـستم کنـترلی است که به نگهـداشتن یک رابطه مفروض بین یک کمیت کنـترل شده و یک کمیـت مرجع ، با مقایسه توابع آنها و اسـتفاده از اختلاف به عنوان وسیله کنترل منجر می شود.
سیستم کنـترلی فیدبک الکتریکی ، عموما برای کار به انرژی الکتـریکی تکیه می کند . مشخصـات مهمی که معمولا برای چنین کنترلی مورد نیاز است ، عبارتند از :
1- پاسخ سریع ،
2- دقت بالا ،
3- کنترل بدون مراقبت و
4- کارکرد از راه دور .
تعریف عمومی سرو موتور بدین شکل است: سرو موتور یک دستگاه کوچکی است که یک محور (shaft) خروجی دارد. این محور قادر است تا در یک موقعیت و زاویه ای خاص با ارسال سیگنال رمزی قرار گیرد. در واقع چگونگی حرکت وموقعیت های زاویه ای این محور خروجی توسط دسته ای از سیگنالهای رمزی که برای سیم کنترل آن تعریف می شودکنترل می شود. برای طول مدت زمانیکه یک سیگنال فعال بوده و یک پالس برروی خط ورودی آن قرار دارد این محور خروجی در موقعیت خاص زاویه ای که مختص آن سیگنال است قرار می گیرد و با تغییر سیگنال رمزی موقعیت زاویه ای تغییر می کند. در عمل سرو موتورها در صنایع رباتیک وتولیدات صنعتی مانند موتورهای کنترل کننده هواپیماها کنترل موقعیت سطوح ( مانند آسانسورها و … ) و… کاربرد وسیعی دارند .
مقایسه سرو موتور با استپر موتور:
در واقع یک استپر موتور از طریق پالسی که دریافت می کند به موتور دستور میدهد که طبق یک درجه خاص بچرخد اما ممکن است این چرخش به مقدار کافی دقیق نباشد که این اختلاف چرخش در پروژه های حساس مشکل آفرین است.اما سروو موتور یک نوع استپر موتوراست که از یک طرف به انکودر متصل می باشد و در هر لحظه میزان چرخش موتور توسط انکودر اندازه گیری می شود(احتمالا از طریق یک پالس در جهت معکوس ) و یک فیدبک از درجه موجود به موتور ارسال می گردد و موتور با دقت مناسب در درجه مشخص شده متوقف می گردد.
SG5010
 
مشخصات سرو SG5010::
SG-5010 یک سرو موتور محصول شرکت Tower Pro است که مناسب برای ساخت روباتهای پیشرفته و دقیق ،استفاده در هواپیماهای مدل و انواع بازوهای صنعتی می باشد.این سرو موتور دارای قابلیت چرخش 180 درجه می باشد. این موتور دارای سه پین برای تغذیه و کنترل است. مشخصات کلی این سرو به شرح ذیل است:

توضیحات سرو

4.8 – 6 ولتاژ (V) SG5010 مدل
0.16sec @ 4.8v 0.2sec @ 6v سرعت (Deg/sec) 5.2kg.cm@ 4.8v 6kg.cm@ 6v گشتاور (kg.cm)
4 پهنای باند (usec) تایوان کشور سازنده
coreless motor تیپ موتور پلاستیکی جنس گیربکس
180 زاویه چرخش(درجه) 0 – 50 محدوده دمای کاری(C)
40 طول (mm) دارد سخت افزار جانبی
36.5 ارتفاع (mm) 20 عرض (mm)

 
ست کردن رجیسترهای ATtmega32 برای راه اندازی سرو SG5010 :
با استفاده از خاصیت PWM در میکروکنترلرها می توان با ارسال پالس مناسب به سروو، آنها را کنترل کرد. مقدار پالس مناسب در دیتاشیت هر سروو موتورآمده است. برای تولید پالس مناسب در ATtmega32 می توان از تایمر استفاده کرد. بنابراین با استفاده از تایمر 16 بیتی شماره یک میکروکنترلر ATtmega32 و مقدار دهی رجیستر OCR1A می توان پالس دلخواه را ایجاد کرد.
مثلا اگر بخواهیم سرو در درجه 70 درجه منوقف شود باید محاسبات انجام گیرد و سپس بر اساس این محاسبات رجیستر OCR1A مقدار دهی شود.
برای انجام این محاسبات تایمر یک به صورت زیر مقدار دهی می شود.
فرکانس کاری میکروکنترلر 8 مگاهرتز و clock value تایمر1 را برابر 1000 کیلوهرتز قرار میدهیم. مابقی رجیسترهای تایمر یک را به صورت زیر انجام می دهیم:

 
برای مقدار دهی رجیستر ICR1 به صورت زیر عمل می کنیم:

ابتدا با استفاده از رابطه بالا مقدار TOP را محاسبه کرده و سپس رجیستر را با مقدار TOP مقدار دهی می کنیم.توجه داشته باشید رجیستر ICR1 ، 16 بیتی است پس برای مقدار دهی 8 بیت پرارزش ICR1 از رجیستر 8 بیتی ICR1H و برای مقدار دهی 8 بیت کم ارزش از رجیستر ICR1L استفاده می کنیم.
Fpwm فرکانس سرو موتور و برابر 50 هرتز است.
Fcpu فرکانس کاری میکروکنترلر و برابر 8 مگاهرتز است.
N مقدار تقسیم کلاک است و برابر است با 8
بنابر این :

 
نحوه کنترل سروو موتورها با AVR : (به دست آوردن عدد مناسب برای مقدار دهی رجیستر OCR1A)
همانطور که در دیتاشیت سروو SG 5010 آمده، حداقل پالس برای چرخش سروو به ترتیب برابر 600 میکروثانیه و حداکثر 2400 میکروثانیه می باشد. SG 5010 می تواند از صفر تا 180 درجه بچرخد لذا 600 میکرو ثانیه برای تنظیم روی صفر درجه و 2400 میکروثانیه برای تنظیم روی 180 درجه می باشد.
پس 600 تقسیم بر 2 برابر 300 میکروثانیه برای 0 درجه و 2400 تقسیم بر 2 برابر 1200 میکروثانیه برای 180 درجه.
پالس لازم برای اختلاف یک درجه از رایطه زیر محاسبه می شود:

به عنوان مثال برای تنظیم روی یک درجه مقدار پالس لازم برابر 5 + 300 = 305 میکروثانیه می باشد. پس رجیستر OCR1A را با عدد 305 مقدار دهی می کنیم.
برای تنظیم روی n درجه مقدار پالس لازم برابر  300 + (n * 5)  می باشد.
 
کدهای پروژه در اتمل استودیو (Atmel Studio6.2) :

شماتیک مدار نیز به صورت زیر است:
 میکروکنترلر AVR
دقت کنید در تنظیمات مدل سروو باید مقادیر به شکل بالا باشند تا شبیه سازی درستی از سروو SG 5010 در پروتئوس داشته باشید.
فایل های اصلی پروژه به همراه شماتیک و سورس کد :

دانلود پروژه این مطلب

موفق باشید؛ نظر یادتون نره smile

پسورد فایل های سایت :
www.dmf313.ir
دانشجوی ارشد نرم افزار فارغ التحصیل مهندسی کامپیوتر دانشگاه شیراز علاقه مندی ها:برنامه نویسی،AVR، نجوم،رویت هلال،عکاسی،Game Design، 3D Modeling Image Processing برنامه های ما در کافه بازار: https://cafebazaar.ir/developer/astronomer/?l=fa
ارسال دیدگاه
19

1) تعداد حروف فارسی از حروف غیر فارسی بیشتر باشه دیدگاه جفنگ/اسپم محسوب میشه.

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. مهمان

    محسن

    و باز هم دمت گرم

    1396/05/19
    06:21
  2. مهمان

    محسن

    سلام
    آقا دم شما گرم! پدرم درآمد از بس سرچ کردم و مطلب به درد بخور گیر نیاوردم تا اینکه آموزش شما کارم رو راه انداخت

    1396/05/19
    06:16
  3. مهمان

    پرهام

    این را فرمودید که
    لذا 600 میکرو ثانیه برای تنظیم روی صفر درجه و 2400 میکروثانیه برای تنظیم روی 180 درجه می باشد.
    پس چرا 600 تقسیم به دو می کنید واسه صفر درجه؟

    1395/09/05
    04:39
    • مهمان

      سید علی

      محاسبات این شکلیه که فرکانس پالس های دریافتی سروو برابر ۵۰ هرتزه که طول فرکانس میشه ۲۰۰۰۰ میکروثانیه
      از طرفی با این فرکانس TOP باید عدد ۱۰۰۰۰ یا همون ۹۹۹۹ باشه
      خب حالا با یه نسبت میشه فهمید که برا بدست اوردن پهنای پالس ۶۰۰ میکرو ثانیه باید OCR برابر ۳۰۰ بشه
      در واقع این عدد ۲ از تقسیم ۲۰۰۰۰/۱۰۰۰۰ بدست اومده

      1396/04/22
      10:39
  4. مهمان

    ALI

    سلام
    خسته نباشید ببخشید اگه صفحه اسیلوسکوپ رو ضربدر کرده باشیم دیگه نمیاد باید چی کار کنیم

    1395/05/26
    08:47
    • مدیر سایت

      مهدی دمرچیلو

      سلام – اسکپ کار نکردم – تو انجمن Eca مطرح کن.

      1395/05/26
      08:52
  5. مهمان

    مصطفی

    سلام مهندس!
    ممنون برای مطالب خوب و مفیدت!
    من میخوام سروو رو با آردوینو راه اندازی کنم.
    چنتا مشکل دارم،اگه ممکنه از طریق ایمیل یا تلگرام یکم راهنمایی میخوام ازت
    این ایمیلم:mstf.ghasemi@gmail.com
    اینم شماره م : ۰۹۳۸۲۱۰۹۱۸۹
    ممنون میشم واقعا اگه راهنماییم کنی

    1394/07/11
    07:33
  6. مهمان

    korosh

    سرو موتور همون موتور براشلس است ؟

    1394/04/31
    08:20
    • مدیر سایت

      مهدی دمرچیلو

      نه
      براشلس برا ربات پرنده استفاده میشه…..ولی سور موتور برا بازو های ربات….
      ok?

      1394/04/31
      08:31
  7. مهمان

    ali

    سلام
    خیلی ممنون بابت اموزشا
    یه سوال داشتم مهندس
    من یه سروپ دارم که داخلش رو دستکاری کردم که کامل دور بزنه،حالا اگه بخوام این موتور در جهت مخالف دور بزنه باید چیکارش کنم؟
    ممنون

    1394/03/17
    11:53
    • مدیر سایت

      مهدی دمرچیلو

      سلام
      wacko
      تو eca مطرح کنی بهتره

      1394/03/18
      12:09
  8. نویسنده این مطلب

    حمید زارع

    سلام
    تفاوت چندانی نداره. کد زیر رو توی کدویژن کامپایل کنید. یادتون باشه که توی تنظیمات کدویژن فرکانس میکرو رو روی 8 مگاهرتز قرار بدین.

    #include // mega32
    #include // delay.h
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    // Place your code here
    }
    void SetRegisters()
    {
    PORTB = 0x00;DDRB = 0x00;
    PORTD=0x00; DDRD=0x20;
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 1000.000 kHz
    // Mode: Ph. & fr. cor. PWM top=ICR1
    // OC1A output: Non-Inv.
    // OC1B output: Non-Inv.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xA0;
    TCCR1B=0x12;// Clock value: 1000 kHz
    TCNT1H=0x00;
    TCNT1L=0x00;
    // Fpwm = Fcpu/( 2*N * (1+TOP) ) => 50HZ = 8000000HZ/( 2*8 *(1+TOP) )
    // => TOP = 9999 => 0x270F , N = Fcpu/ClockValue = 8MHZ/1000KHZ = 8
    ICR1H=0x27;ICR1L=0x0F;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    }
    void SampleDegree()
    {
    // Time = 8MHZ/(2*8) => 2us
    // pulse width = 600us-2400us => 0° = 600 , 180° = 2400
    OCR1A=300; // 0° => 600us/2us = 300
    delay_ms(800);
    OCR1A = 1200; // 180° 2400us/2us = 1200
    delay_ms(800);
    // 1° distance value = (1200-300)/180 = 5
    OCR1A= 305;// => 1° => 0° + 5 => 300 + 5 = 305
    delay_ms(800);
    // => 2° => 1° + 10 => 305 + 5 = 310
    //...
    // => x° = x*5 + 300
    OCR1A= 550; // 50° = 50*5 + 300
    delay_ms(800);
    OCR1A= 915; // 123° = 123*5 + 300
    delay_ms(800);
    }
    void main(void)
    {
    SetRegisters();
    while(1)
    {
    SampleDegree();
    }
    }

    1394/01/22
    10:27
  9. مهمان

    اصغری

    سلام
    ممنون از توضیحات تون
    ببخشید این پروژه رو اگر بخوام با کد ویژن بنویسم چه تغییراتی تو برنامه داده میشه؟
    ممنون میشم زودتر جواب بدید
    خیلی به این برنامه برای کارم نیاز دارم

    1394/01/22
    12:11
  10. نویسنده این مطلب

    حمید زارع

    سلام دوستان
    ببخشید که دیر جواب میدم:
    منظور از سیگنال رمزی همون مقدار پالسی هست که به ازای درجه خاصی باید ارسال بشه… یعنی باید مقدار پالس تبدیل به درجه بشه! (دیکود بشه)
    قسمت آخر تعریف feedback رو اینجوری نوشتید: “رابطه از پیش تعیین شده میان خروجی و ورودی را حفظ می کند.”
    باید بگم که رابطه بین ورودی و خروجی را نه تنها حفظ میکنه بلکه در بعضی موارد تصحیح هم می کنه که برمیگرده به مباحث هوش مصنوعی و … که در این خارج از بحث ماست.
    تفاوتشون تو سیستم فیدبکی هست که سروو داره. باعث میشه دقت بالا بره ولی استپر این فیدبک رو نداره و ممکنه با ادقیقا روی درجه ای که میخایم توقف نکنه …
    استاد خودتی… ما شاگردیم… laugh
    کتابخونشو خودم نوشتم mail
    سروو رو هم خریدم rofl

    1393/08/07
    09:39
  11. مهمان

    مملی

    سلام استاد
    خوب هستید
    میگم این سروو رو از کجا گیر اوردی تو ISIS ??
    خودت ساختی یا کتابخونشو دانلود کردی
    مرسی از مطالب بینظیرتون

    1393/07/24
    12:02
  12. مهمان

    مهدی

    دمت گرم داش حمید زارع good
    ببین اصطلاحاتی که تو مطلب قرار دادی درست مگم blush و درست تعریف میکنم :
    1) feedback control system : سیستمی است که از راه مقایسه خروجی و ورودی مبنا و با استفاده از اختلاف آنها به عنوان وسیله کنترل ، رابطه از پیش تعیین شده میان خروجی و ورودی را حفظ می کند.
    2) اینرسی، لختی، یا ماند : تمایل جسم است به حفظ وضعیت فعلی. یعنی جسم ساکن تمایل به حفظ سکون دارد و جسم متحرک تمایل به ادامه حرکت بر خط مستقیم، با سرعت ثابت.
    ————————————————————————————————
    3) منظورت از “سیگنال رمزی” چیه؟؟؟؟(تو اوایل مطلب هستش)
    4) اون طوری که فهمیدم باید مثل موتور پله ای باشه….مگه نه؟؟؟؟(آخه بر اساس درجه حرکت میکنه دقیقا مثل موتور پله ای)
    5) میشه بیشتر در مورد فرق بین موتور پله ای و و سروو موتور بیشتر توضیح بدی….من یکم گیج شدم …..فرقشون رو هنوز نفهمیدم
    شرمنده که سوالا زیاد شد sorry

    1393/07/20
    08:42
  13. مهمان

    مهدی دمرچیلو

    من با اتمل کار نکردم ولی این طوری که معلومه زیاد با کدویژن فرقی نداره>>مثلا تو تعریف کتاب خونه یکم فرق داره(که اونم اصلا مهم نیست)>>> با یه _ که اول تابع دیلای اضافه میشه>>>>من چه غولی از اتمل برا خودم ساخته بودم. در کل ممنون. smile

    1393/06/30
    03:26
    • نویسنده این مطلب

      حمید زارع

      خیلی تفاوتی نیست ولی اتمل هم سرعت کامپایلش بیشتره و هم دست برنامه نویس توش بازتره، مثلا متغیر رو همه جای تابع میشه تعریف کرد ولی تو کدویژن فقط اول تابع باید تعریف کنیم.

      1393/06/30
      03:57