logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Silnik krokowy 6-przewodowy, AT90S2313 - nieprawidłowy kąt obrotu 180° zamiast 60°

galsan 30 Maj 2007 21:39 1343 2
REKLAMA
  • #1 3937549
    galsan
    Poziom 12  
    Posty: 94
    Witam..
    Mam silniczek krokowy z 6-cioma przewodami, oporze uzwojeń ok 9 om, prądzie ok 0,3 A oraz podane jest, że posiada 1,875 stopnia na krok. Steruje nim przez uP AT90S2313. A to prosty programik w C:

    
    #include <avr/io.h>
    #include <avr/delay.h>
    
    unsigned char a[4] = {(1<<0), (1<<1), (1<<2), (1<<3)};
    unsigned char i = 0;
     
    void main()
    {
    DDRB = 255;
    PORTB = 0;
    DDRD = 0;
    PORTD = 3;
    unsigned char r = 0;
    for(int t = 0; t<32; t++){ 
    		for(r = 0; r<3; r++){
    			PORTB = a[i];
    			_delay_ms(40);
    			i++;
    			if(i>3) i=0;
    			};
    			PORTB=0;
    			_delay_ms(1000);
    };
    PORTB=0;
    return 0;
    }
    


    (Mikrokontroler taktowany kwarcem 4MHz)

    Wg danych na silniczku, gdy w pętli for(); ustawię t = 32, kąt powinien wynieść 60 st. Bo 32*1,875 = 60. Natomiast w rzeczywistości silniczek robi 180 st, co daje 5,625 i ta stała pojawia się w każdym przypadku.. Dlaczego na silniczku pisze inaczej, a doświadczalnie jest inaczej? Czy stopień/krok jest zależny od prądu uzwojenia?

    Drugie pytanie a w zasadzie problem.. mam wrażenie, że silniczek jakby nawet obracając się płynnie w jedną stronę, posiada jakieś małe drgania w lewo i prawo, drgania te nie są odczuwalne/dostrzegane okiem przy większej częstotliwości. Ale przy większej częstotliwości (max. w programie jest orzy wpisaniu do funkcji _ms_delay() wartości 2). Wówczas jest bardzo płynnie, ale przy samym starcie silniczek drga mocniej w przeciwną stronę do ruchu, którym za chwilę płynnie będzie sie poruszał.. Dlaczego? jak to zniwelować? Czy to wada techniczna? Czy coś źle steruję?
    Z góry dziękuję za wskazówki..
    Pozdrawiam, galsan
  • REKLAMA
  • #2 3937900
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    
    for(r = 0; r<3; r++){
             PORTB = a[i];
             _delay_ms(40);
             i++;
             if(i>3) i=0;
             };
    


    Nigdy z C dobry nie byłem, ale widzę że ta pętla wykonuje się 3 razy (r = 0,1,2) i to ona mnoży Ci liczbę kroków przez 3. Nie wiem po co ona jest, tak samo nie wiem czy _delay_ms(1000) się wykona prawidłowo bo ta funkcja o ile dobrze pamiętam, ma pewne ograniczenia co do maksymalnego czasu - sprawdź to.

    Co do drgania, po prostu zaczynasz od złej cewki i silnik dlatego źle startuje. Musisz zapamiętywać na jakiej pozycji silnik się zatrzymał i zaczynać od następnego kroku, a nie zawsze od tego samego bo niekoniecznie trafisz z kolejnością cewek.
  • #3 3939286
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    najważniejsza sprawa to właściwa kolejność sterownia uzwojeń , najłatwiej sprawdzisz to przy małej częstotliwości sterownia , silnik musi wykonać w każdej sekwencji sterownia ruch w tą samą stronę
    co do sterownia to spróbuj sekwencji pełnego lub półkroku
    1 - 1100
    2 - 0110
    3 - 0011
    4 - 1001
    lub
    1 - 1000
    2 - 1100
    3 - 0100
    4 - 0110
    5 - 0010
    6 - 0011
    7 - 0001
    8 - 1001
    zasadnicze zaznaczenie dla osiągnięcia właściwych parametrów silnika jest zapewnienie odpowiedniego napięcia na cewkach oraz przepływ właściwego prądu , zerknij na forum automatyka jest temat o silnikach krokowych w którym jest wszystko o ich sterowaniu
REKLAMA