اطلاعیه

Collapse
No announcement yet.

مشکل در کنترل سروو موتور

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

    مشکل در کنترل سروو موتور


    سلام
    من یک سروو موتور GWS مدل S03N D 2BB را با atmega16 راه اندازی کرده ام .(با برنامه ی codevision) دو کلید به میکرو متصل کرده ام که برای یک کلید به یک زاویه ی مشخص مثلا 90 درجه برود و با کلید دوم به صفر درجه برگردد . مشکل اینجاست که بعد از رفتن به زاویه ی 90 درجه دیگر با زدن کلید به صفر درجه برنمی گردد و مثلا به 50 درجه بر میگردد . به نظرتان مشکل از کجاست ؟
    این هم کد برنامه :
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 8/26/2014
    Author : PerTic@n
    Company : if you like this software,Buy it
    Comments:


    Chip type : ATmega16A
    Program type : Application
    AVR Core Clock frequency: 1.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    ************************************************** ***/

    #include <mega16a.h>

    #include <delay.h>

    #define ADC_VREF_TYPE 0x00

    int temp;
    float vol;
    char a;

    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    // Declare your global variables here

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x08;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 0.977 kHz
    // Mode: Fast PWM top=0xFF
    // OC0 output: Non-Inverted PWM
    TCCR0=0x6B;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // 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=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // USART initialization
    // USART disabled
    UCSRB=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC Clock frequency: 7.813 kHz
    // ADC Voltage Reference: AREF pin
    // ADC Auto Trigger Source: Free Running
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0xA7;
    SFIOR&=0x1F;

    // SPI initialization
    // SPI disabled
    SPCR=0x00;

    // TWI initialization
    // TWI disabled
    TWCR=0x00;

    PINA.0=1;
    PINA.1=1;

    while (1)
    {



    if (PINA.0==0)
    {
    OCR0=23;
    delay_ms(1000);
    }
    if (PINA.1==0)
    {
    OCR0=8;
    delay_ms(1000);
    //}
    }

    }
    }

    ممنون می شم اگه کمکم کنید . چند روزه که درگیرم با این قضیه .

    #2
    پاسخ : مشکل در کنترل سروو موتور

    معمولا مدار فیدبک این سروو ها دقیق نیست -من هم مشکلات مشابه رو داشتم قبلا -
    دو مورد در این امر تاثیر گذار هستن- اگر میخواهید دقیق تر اندازه گیری کنید مورد 1 رو اجرا کنید و اگر براتون دقت خیلی مهم نیست مورد 2 بیشترین تاثیر رو داره!
    1-مقدار تنظیمات موج PWM! تنظیمات موج PWM رو طوری تنظیم و مقدار دهی کنید که از 500 تا 1000 یا 1000 تا 2000 باشه! در این صورت مقدار 90 درحه در حالت اول حدودا 750 و در حالت دوم 1500 میشه!
    2-توابع دیلی بعد از دستورات خیلی تاثیر گذار هستند با اونا بازی کنید(کمشون کنید) و بهترین مقدار رو بدست اورید لزوما نباید هر دو تا دیلی یکی باشن!

    دیدگاه


      #3
      پاسخ : مشکل در کنترل سروو موتور

      حداقل بفرمایید مشکلت حل شد یا نشد! لااقل ما بدونیم همین بوده!

      دیدگاه


        #4
        پاسخ : مشکل در کنترل سروو موتور

        نوشته اصلی توسط elham!!
        سلام
        من یک سروو موتور GWS مدل S03N D 2BB را با atmega16 راه اندازی کرده ام .(با برنامه ی codevision) دو کلید به میکرو متصل کرده ام که برای یک کلید به یک زاویه ی مشخص مثلا 90 درجه برود و با کلید دوم به صفر درجه برگردد . مشکل اینجاست که بعد از رفتن به زاویه ی 90 درجه دیگر با زدن کلید به صفر درجه برنمی گردد و مثلا به 50 درجه بر میگردد . به نظرتان مشکل از کجاست ؟
        این هم کد برنامه :
        /************************************************** ***
        This program was produced by the
        CodeWizardAVR V2.05.3 Standard
        Automatic Program Generator
        © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
        http://www.hpinfotech.com

        Project :
        Version :
        Date : 8/26/2014
        Author : PerTic@n
        Company : if you like this software,Buy it
        Comments:


        Chip type : ATmega16A
        Program type : Application
        AVR Core Clock frequency: 1.000000 MHz
        Memory model : Small
        External RAM size : 0
        Data Stack size : 256
        ************************************************** ***/

        #include <mega16a.h>

        #include <delay.h>

        #define ADC_VREF_TYPE 0x00

        int temp;
        float vol;
        char a;

        // Read the AD conversion result
        unsigned int read_adc(unsigned char adc_input)
        {
        ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
        // Delay needed for the stabilization of the ADC input voltage
        delay_us(10);
        // Start the AD conversion
        ADCSRA|=0x40;
        // Wait for the AD conversion to complete
        while ((ADCSRA & 0x10)==0);
        ADCSRA|=0x10;
        return ADCW;
        }

        // Declare your global variables here

        void main(void)
        {
        // Declare your local variables here

        // Input/Output Ports initialization
        // Port A initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTA=0x00;
        DDRA=0x00;

        // Port B initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
        PORTB=0x00;
        DDRB=0x08;

        // Port C initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTC=0x00;
        DDRC=0x00;

        // Port D initialization
        // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTD=0x00;
        DDRD=0x00;

        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: 0.977 kHz
        // Mode: Fast PWM top=0xFF
        // OC0 output: Non-Inverted PWM
        TCCR0=0x6B;
        TCNT0=0x00;
        OCR0=0x00;

        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: Timer1 Stopped
        // Mode: Normal top=0xFFFF
        // OC1A output: Discon.
        // OC1B output: Discon.
        // 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=0x00;
        TCCR1B=0x00;
        TCNT1H=0x00;
        TCNT1L=0x00;
        ICR1H=0x00;
        ICR1L=0x00;
        OCR1AH=0x00;
        OCR1AL=0x00;
        OCR1BH=0x00;
        OCR1BL=0x00;

        // Timer/Counter 2 initialization
        // Clock source: System Clock
        // Clock value: Timer2 Stopped
        // Mode: Normal top=0xFF
        // OC2 output: Disconnected
        ASSR=0x00;
        TCCR2=0x00;
        TCNT2=0x00;
        OCR2=0x00;

        // External Interrupt(s) initialization
        // INT0: Off
        // INT1: Off
        // INT2: Off
        MCUCR=0x00;
        MCUCSR=0x00;

        // Timer(s)/Counter(s) Interrupt(s) initialization
        TIMSK=0x00;

        // USART initialization
        // USART disabled
        UCSRB=0x00;

        // Analog Comparator initialization
        // Analog Comparator: Off
        // Analog Comparator Input Capture by Timer/Counter 1: Off
        ACSR=0x80;
        SFIOR=0x00;

        // ADC initialization
        // ADC Clock frequency: 7.813 kHz
        // ADC Voltage Reference: AREF pin
        // ADC Auto Trigger Source: Free Running
        ADMUX=ADC_VREF_TYPE & 0xff;
        ADCSRA=0xA7;
        SFIOR&=0x1F;

        // SPI initialization
        // SPI disabled
        SPCR=0x00;

        // TWI initialization
        // TWI disabled
        TWCR=0x00;

        PINA.0=1;
        PINA.1=1;

        while (1)
        {



        if (PINA.0==0)
        {
        OCR0=23;
        delay_ms(1000);
        }
        if (PINA.1==0)
        {
        OCR0=8;
        delay_ms(1000);
        //}
        }

        }
        }

        ممنون می شم اگه کمکم کنید . چند روزه که درگیرم با این قضیه .
        سلام.
        دوست عزیز به نظربنده شما اول به دیتا شیت موتور رجوع کنید و ببینید که موتور با چه فرکانس و مشخصاتی کار می کنه و در چه زمان هایی حر کت می کند و بازه فر کانسی را در ست محاسبه کنید.همچنین برق موتور را از برق میکرو جدا کنید.و در آخر سعی کنید فرکانس مورد نظر را با تایمر 1 بسازید تا توانایی بیشتری در تغییر فرکانس داشته باشد.

        دیدگاه

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