اطلاعیه

Collapse
No announcement yet.

راه اندازی سرو SG-5010

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی سرو SG-5010

    سلام.
    تو راه اندازی این موتور دست دو تا مگا8 از دنیا کوتاه شد (تو این گرونی :cry2
    نمیدونم باید ولتاژ چند ولت بهش بدم اول 5 ولت دادم جیغ میکشید و اصلا نمیچرخید بعد 12 ولت زدم میکرو سوخت :cry2:
    اصلا دیتاشیت یا راهنمایی هیچی در مورد sg-5010 نیست.
    دوستان اگه کسی با این سروو کار کرده لطفا کمک کنه خیلی واجبه.
    در ضمن ولتاژ 12 ولت به سروو دادم امکان سوختنش هست؟

    #2
    پاسخ : راه اندازی سرو SG-5010

    سلام
    اول از همه در راه اندازی موتور از هر نوع بهتره ولتاژ تغذیه جدا باشه
    این سروو رو من با 6 ولت را ه انداختم تا 12 بهتره 9 باشه
    اینم برنامه شاید کمکت کنه
    $regfile = "m32def.dat"
    $crystal = 8000000

    Config Portb = Output
    Config Portc = Input
    Config Timer0 = Timer , Prescale = 1024
    Config timer1 = Timer , Prescale = 8
    Config Debounce = 20

    Dim Motor_time As Word

    Motor_time = 300

    Motor1 Alias Portb.0
    Stop Timer1

    Enable Ovf0
    Enable Interrupts

    Enable Timer0
    On Ovf0 Make_pwm

    Timer0 = 178

    First:
    Do
    Debounce Pinc.0 , 1 , Incc
    Debounce Pinc.1 , 1 , Decc
    Loop

    Incc:
    set PORTB.1
    If Motor_time < 300 Then
    Motor_time = Motor_time + 30
    End If
    Goto First

    Decc:
    reset PORTB.1
    If Motor_time > 150 Then
    Motor_time = Motor_time - 30
    End If
    Goto First

    End

    Make_pwm:

    Timer0 = 178
    Timer1 = 0
    Start Timer1

    set motor1
    Do
    Loop Until Timer1 >= Motor_time
    Reset Motor1

    Return
    خدایا مرا آن ده که آن به

    دیدگاه


      #3
      پاسخ : راه اندازی سرو SG-5010

      سلام.یه سرو SG-5010 دارم میخام راهش بندازم
      توی دیتاشیتش نوشته ead Band Width = 10us و سرعت (Deg/sec) برابر 0.2 ثانیه هست.
      1- اینا یعنی چی؟
      2- چه جوری میتونم با mega32 و زبان C یک درجه یک درجه زاویش رو کم یا زیاد کنم؟
      لطفا اگه مقدورش هست با کد سی برام توضیح بدید. ممنون
      اللهم صل علي محمد و ال محمد و عجل فرجهم
      >>> www.DMF313.ir <<<
      اگر ژرف یابی و پژوهش نباشد; نتیجه اش یک جا ایستادن،
      در جا زدن و با دنیای پیرامون خود به تدریج بیگانه تر شدن
      است.

      دیدگاه


        #4
        پاسخ : راه اندازی سرو SG-5010

        با سلام.
        نحوه راه اندازی سروو به این صورته که شما اول توسط یکی از تایمرهای 16 بیتی (حتما باید 16 بیتی باشه تا بتونی به دقت دلخواه برسی) یه موج pwm با فرکانس 50Hz-60Hz توی خروجی ایجاد میکنی. تا اینجا مشکلی نیست؟ یعنی هر سیکل از pwm حدود 20 میلی ثانیه طول میکشه.
        حالا میریم سراغ duty cycle (یعنی درصد 1 بودن یک موج pwm):
        برای اینکه بتونیم یک سروو موتور رو یک درجه یک درجه حرکت بدیم، باید duty cycle تغییر پیدا کنه. بازه عملیاتی یک سروو موتور عموما بین 1.25 میلی ثانیه تا 1.75 میلی ثانیه هست. یعنی مثلا اگه میخوای سروو روی 0 درجه باشه، باید 1.25 میلی ثانیه از کل اون 20 میلی ثانیه 1 باشه و بقیه یعنی 18.75 میلی ثانیه باقیمونده 0 باشه.
        حالا اگه بخوای سروو 180 درجه بچرخه باید 1.75 میلی ثانیه از کل 20 میلی ثانیه رو 1 کنی و بقیشو (18.25) 0 کنی.
        (منظور از 20 میلی ثانیه همون مدت زمان یک سیکل کامل از pwm هست)
        حالا برای اینکه 1 درجه بچرخه باید زمان بین 1.75 و 1.25 به 180 قسمت تقسیم بشه. یعنی: 0.5/180 که میشه 0.0027 میلی ثانیه.
        تموم شد. حالا شما برای اینکه یک درجه بچرخونی، باید دیوتی سایکلو 0.0027 میلی ثانیه افزایش (یا کاهش) بدی.
        اگه متوجه نشدی بگو تا مثال بزنم
        انسانها 10 دسته اند: دسته اي که باينري ميدانند و دسته اي که باينري نميدانند!

        دیدگاه


          #5
          پاسخ : راه اندازی سرو SG-5010

          نوشته اصلی توسط hamedtaran
          با سلام.
          نحوه راه اندازی سروو به این صورته که شما اول توسط یکی از تایمرهای 16 بیتی (حتما باید 16 بیتی باشه تا بتونی به دقت دلخواه برسی) یه موج pwm با فرکانس 50Hz-60Hz توی خروجی ایجاد میکنی. تا اینجا مشکلی نیست؟ یعنی هر سیکل از pwm حدود 20 میلی ثانیه طول میکشه.
          حالا میریم سراغ duty cycle (یعنی درصد 1 بودن یک موج pwm):
          برای اینکه بتونیم یک سروو موتور رو یک درجه یک درجه حرکت بدیم، باید duty cycle تغییر پیدا کنه. بازه عملیاتی یک سروو موتور عموما بین 1.25 میلی ثانیه تا 1.75 میلی ثانیه هست. یعنی مثلا اگه میخوای سروو روی 0 درجه باشه، باید 1.25 میلی ثانیه از کل اون 20 میلی ثانیه 1 باشه و بقیه یعنی 18.75 میلی ثانیه باقیمونده 0 باشه.
          حالا اگه بخوای سروو 180 درجه بچرخه باید 1.75 میلی ثانیه از کل 20 میلی ثانیه رو 1 کنی و بقیشو (18.25) 0 کنی.
          (منظور از 20 میلی ثانیه همون مدت زمان یک سیکل کامل از pwm هست)
          حالا برای اینکه 1 درجه بچرخه باید زمان بین 1.75 و 1.25 به 180 قسمت تقسیم بشه. یعنی: 0.5/180 که میشه 0.0027 میلی ثانیه.
          تموم شد. حالا شما برای اینکه یک درجه بچرخونی، باید دیوتی سایکلو 0.0027 میلی ثانیه افزایش (یا کاهش) بدی.
          اگه متوجه نشدی بگو تا مثال بزنم
          ممنون از راهنماییتون تقریبا متوجه شدم. خیلی عالی بود :applause: :applause:
          میشه اینجوری بگیم که اگه بخوایم سرو از درجه 70 بره رو درجه 80 باید از فرمول زیر استفاده کنیم؟
          (80-70)*(0.5/180) = 0.027
          حالا سوال اینجاست که چه جوری یه درجه رو کم کنم؟ منظورم اینه که اگه بخوایم برعکس بچرخه چی؟ باید 0.0027 میلی ثانیه D.C رو کم کنم ؟ درسته؟
          چندتا سوال دیگه:
          0- چه جوری باید موج PWM رو کنترل کنم؟ تنظیماتی که انجام دادم اینه:

          کد:
          	TCCR1A=0xA0;
          	TCCR1B=0x12;// Clock value: 1000.000 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;
          آیا این تنظیمات با فرکانس 8MHZ درسته؟ اگه درسته چه جوری مقدار رجیستر OCR1A رو برای یه درجه خاص تنظیم کنم؟ بقیه 18 میلی ثانیه که باید صفر باشه رو خود موج PWM ایجاد میکنه یا باید با خودم delay ایجاد کنم؟
          1- منظور از Dead Band Width = 10us چیه؟
          2- توی دیتاشیتش نوشته Pulse Cycle: 20 ms ،آیا این همون D.C هست؟
          3- همچنین نوشته Pulse Width: 600-2400 µs، این عرض پالس یعنی همون اعداد 1.25 تا 1.75 تو مثال خودتونه؟ یعنی 0 تا 180 رو مشخص کرده؟
          ممنون از راهنماییتون خدا خیرتون بده
          اللهم صل علي محمد و ال محمد و عجل فرجهم
          >>> www.DMF313.ir <<<
          اگر ژرف یابی و پژوهش نباشد; نتیجه اش یک جا ایستادن،
          در جا زدن و با دنیای پیرامون خود به تدریج بیگانه تر شدن
          است.

          دیدگاه


            #6
            پاسخ : راه اندازی سرو SG-5010

            آقای hamedtaran موضوع به نتیجه رسید ممنون از راهنماییتون.
            دوستان فایل پروتئوس هم آماده هست هرکی خواست بگه واسش ایمیل کنم.
            کد سی با AtmelStudio 6:

            کد:
            /*
             * ServoMotor.c
             *
             * Created: 2014-07-25 22:46:54
             * Author: Hamid Zare (Astronomer) 
             */ 
            
            #define F_CPU 8000000UL
            #include <avr/io.h>
            #include <util/delay.h>
            #include <stdio.h>
            #include "alcd.h"
            
            void SetRegisters()
            {
            	PORTD=0x00; DDRD=0x30;
            	// 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.000 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;
            }
            int main(void)
            {
              SetRegisters();
            	lcd_init();
            	lcd_puts("Servo Motor");
            	_delay_ms(200);
            	lcd_clear();
            	while(1)
              {
            		// Time = 8MHZ/(2*8) => 2us
            		// pulse width = 600us-2400us => 0° = 600 , 180° = 2400
            		OCR1A=300; // 0° =>  600us/2us = 300
            		lcd_gotoxy(0,0);lcd_puts(" 0  ");
            		_delay_ms(800);	 
            		
            		OCR1A = 1200; // 180°  2400us/2us = 1200
            		lcd_gotoxy(0,0);lcd_puts(" 180 ");
            		_delay_ms(800);
            		
            		// 1° distance value = (1200-300)/180 = 5		
            		
            		OCR1A= 305;// => 1° => 0° + 5 => 300 + 5 = 305
            		lcd_gotoxy(0,0);lcd_puts(" 1  ");
            		_delay_ms(800);
            		
            		// => 2° => 1° + 10 => 305 + 5 = 310
            		//...		
            		// => x° = x*5 + 300
            		
            				
            		OCR1A= 550; // 50° = 50*5 + 300
            		lcd_gotoxy(0,0);lcd_puts(" 50  ");
            		_delay_ms(800);
            		
            		OCR1A= 915; // 123° = 123*5 + 300
            		lcd_gotoxy(0,0);lcd_puts(" 123  ");
            		_delay_ms(800);
              }
            }
            اللهم صل علي محمد و ال محمد و عجل فرجهم
            >>> www.DMF313.ir <<<
            اگر ژرف یابی و پژوهش نباشد; نتیجه اش یک جا ایستادن،
            در جا زدن و با دنیای پیرامون خود به تدریج بیگانه تر شدن
            است.

            دیدگاه

            لطفا صبر کنید...
            X