Strona 1 z 3

Silnik krokowy, płynne obroty

: 31 sty 2017, 08:27
autor: slawek7
Cześć,
Mam problem ii nie mogę sobie z nm poradzić.
Mam silnik krokowy bipolarny, który ma dość małą liczbę kroków. Jest to silniczek od takiego prędkościomierza samochodowego. Wewnątrz ma przekładnie ślimakową.

Próbuję go zmusić do płynnej pracy, czyli wolnych obrotów, bo chcę go wykorzystać właśnie w roli jakiegoś obrotomierza.
Próbuję sterować nim metodą półkrokową i nie mogę uzyskać płynnych wolnych obrotów.
Widać ewidentnie skakanie wskazówki którą założyłem na ośkę.
Jak zwiększam obroty to jest fajnie, ładnie się kręci.

Macie pomysł co z tym zrobić.
Stosowałem nawet specjalny układ A4988 i pracę mikrokrokową, ale jest tak samo, skacze.

: 31 sty 2017, 09:27
autor: noel20
Praca mikrokrokowa to jedyne co można zrobić. Może zobacz z innym sterownikiem. A może mechanicznie się coś zacina w środku.

: 31 sty 2017, 10:13
autor: zacharius
raczej zwykły niedobór ilości biegunów - jak silnik ma małą ilość kroków na obrót to musi przeskakiwać bo nie ma wystarczająco ząbków w środku i nic tu się nie da zrobić

: 31 sty 2017, 10:19
autor: steff.k
Ja bym jednak obstawiał niewłaściwe sterowanie, bo skoro był wykorzystywany w prędkościomierzu to raczej jest do tego przystosowany ;-).

: 31 sty 2017, 12:06
autor: slawek7
W prędkościomierzu chodziło bardzo płynnie.

W takim razie jak wysterować? Oryginalnie we wskaźniku w którym był montowany na desce rozdzielczej siedzi zwykły uC NEC. Więc chyba się da jakoś, tylko jak?

Udało się komuś zmusić silnik krokowy do bardzo wolnej płynnej pracy?

PS. Jaki sterownik można jeszcze zastosować?

: 31 sty 2017, 12:33
autor: ajt
W prędkościomierzu, z tego co pisałeś, była przekładnia ślimakowa, a teraz ma być bezpośrednio. Na A4988 przy podziale 1/16 też za bardzo skacze? Pojawiły się stepsticki na TMC2100, z podziałem 1/256, ale nie miałem jeszcze okazji wypróbować, a nie chcę polecać w ciemno, bo na razie drogie. Może ktoś inny je testował.

Kiedyś widziałem płynnie chodzący zegar, z sekundnikiem osadzonym bezpośrednio na osi silniczka z jakiejś drukarki, mającego 48 kroków. Z tego co pamiętam, fazy były sterowane przy wykorzystaniu przebiegu generowanego przez procek z wykorzystaniem przetworników D/A. Jak chcesz rzeźbić w tę stronę, dla satysfakcji, że się da, to czemu nie spróbować :)

: 31 sty 2017, 12:37
autor: slawek7
Pisałem że przekładnia jest w silniku. Ona tam pozostała bo to taka konstrukcja silnika.

Jesteś w stanie sobie przypomnieć gdzie to znalazłeś?

: 31 sty 2017, 12:57
autor: ajt
Nie bardzo, ale jeszcze poszukam. Parę lat temu miałem fazę na zegar z wirującymi ledami. Przeglądałem rozmaite linki do stron DIY z całego świata, no i między innymi był właśnie taki wskazówkowy zegar. Pamiętam tylko, że do wyjścia D/A z procka był podpięty wzmacniacz operacyjny. Do jego wyjścia początek fazy, a koniec do masy. Tak samo druga faza.

Jednak skoro jest przekładnia, to trudno mi sobie wyobrazić, że przy poprawnym sterowaniu mikrokrokowym skacze. Może tak jak pisali poprzednicy, coś skopane w sterowaniu lub jakieś problemy mechaniczne.
Jakie jest przełożenie, tzn. ile obrotów silnika przypada na pełny obrót wskazówki?

: 31 sty 2017, 13:12
autor: slawek7
Naliczyłem 180 kroków na obrót, więc przed przekładnią duzo mniej.
Pomyślałem jeszcze o tym aby jakoś PWM do tego zaprzęgnąć, ale tu może być być problem bo sterowanie jest mostkowe i nie za bardzo wiem jak to ugryźć.
Kod testowy wygląda tak, może faktycznie cos z nim jest nie w porządku

Kod: Zaznacz cały


    //ATmega8, kwarc wewn 8MHz
    #include <avr/io.h>
    #include <util/delay.h>
     
    unsigned char stany[]={ 0b00000001,0b00000101,0b00000100,0b00000110,0b00000010,0b00001010,0b00001000,0b00001001};
     
    //unsigned char stany_2[] = {0x9, 0x1, 0x7, 0x6, 0xE, 0x8};
     
     
    unsigned char krok;
     
     
     
    //=================== main =======================
     
    int main(void)
    {
     
                   
            DDRD=0x0F;   //PD0 i PD1 -COIL1, PD2 i PD3-COIL2
           
           
            krok=0;
     
           
            while(1)
            {
                    if(krok==8) krok=0;
                   
                    PORTD = stany[krok];
                   
                    _delay_ms(10);
     
                    krok++;
     
            }
     
           
    return 0;      
    }


: 31 sty 2017, 13:16
autor: pukury
hej.
a może takie coś?
http://www.piclist.com/techref/io/stepp ... x.htm?ref=
poczytaj sobie i sprawdź linki z tekstu.
pzd.