Spisu treści:

Napęd silnika krokowego za pomocą mikroprocesora AVR: 8 kroków
Napęd silnika krokowego za pomocą mikroprocesora AVR: 8 kroków

Wideo: Napęd silnika krokowego za pomocą mikroprocesora AVR: 8 kroków

Wideo: Napęd silnika krokowego za pomocą mikroprocesora AVR: 8 kroków
Wideo: Sterownik silnika krokowego Aliexpres - jak podłączyć oraz testy 2024, Lipiec
Anonim
Napęd silnika krokowego za pomocą mikroprocesora AVR
Napęd silnika krokowego za pomocą mikroprocesora AVR

Masz jakieś oczyszczone silniki krokowe z drukarek/napędów dysków/itp. leżące w pobliżu?

Trochę sondowania omomierzem, a następnie prosty kod sterownika na mikroprocesorze i będziesz wkraczać z klasą.

Krok 1: Poznaj steppery

Poznaj Steppery
Poznaj Steppery
Poznaj Steppery
Poznaj Steppery

Zasadniczo będziesz musiał dowiedzieć się, gdzie idą wszystkie małe przewody.

Pierwszym krokiem jest ustalenie, czy jest to silnik jednobiegunowy, czy dwubiegunowy. Zajrzyj do Jonesa na temat Steppers, aby uzyskać więcej informacji, a następnie do witryny Iana Harriesa, aby uzyskać prosty sposób na znalezienie nieznanego silnika. Przeczytaj trochę, a następnie dołącz do mnie w przewodniku po tym silniku, który dostałem za tanio. (W tej chwili są w sprzedaży za 0,99 USD. Są małe, stosunkowo lekkie, ale nie mają dużego momentu obrotowego. Nie wiem jeszcze, do czego to będzie dobre.)

Krok 2: Znajdź wspólny grunt

Znajdź wspólny grunt
Znajdź wspólny grunt
Znajdź wspólny grunt
Znajdź wspólny grunt

Więc masz pięć (lub cztery, lub sześć) przewodów. Twój silnik będzie miał dwie połówki i prawdopodobnie możesz nawet powiedzieć, po prostu patrząc, do której strony należy każdy przewód.

Jeśli patrzysz tylko na cztery przewody, masz szczęście - to dwubiegunowy silnik. Wszystko, co musisz zrobić, to dowiedzieć się, które dwie pary przewodów łączą się ze sobą. Jeśli masz silnik jednobiegunowy lub więcej niż 4 przewody, będziesz musiał wyłamać omomierz. To, czego szukasz, to wspólny przewód (uziemiający) dla każdej połówki. Można powiedzieć, który z nich jest uziemiony w dwubiegunowym silniku, ponieważ ma o połowę mniejszy opór w stosunku do jednego z biegunów niż same bieguny. Na zdjęciu moje notatki z podłączania przewodów do przewodów i odnotowania oporu (lub jeśli w ogóle są połączone). Widać, że biały jest podłożem dla dolnego trio b/c, ma połowę oporu względem czerwonego lub niebieskiego, który mają do siebie. (Ten silnik jest dziwny i nie ma środkowego zaczepu na górnej cewce magnesu. To tak, jakby był w połowie dwubiegunowy, w połowie jednobiegunowy. Może mógłbyś użyć tego do wykrycia rotacji w cewce czerwono-biało-niebieskiej, gdy czarno-żółta cewka jest napędzana.)

Krok 3: Ustal kolejność kroków

Ustal kolejność kroków
Ustal kolejność kroków

Zamierzałem napędzać ten silnik jako dwubiegunowy, więc ignoruję biały przewód uziemiający. Mam tylko cztery przewody do zmartwienia.

I tak możesz chcieć uruchomić swój jednobiegunowy silnik jako bipolarny, ponieważ używa on całej cewki w obu fazach zamiast naprzemiennie między dwiema połówkami każdej cewki. Więcej cewki = większy moment obrotowy. Przeprowadź prąd przez parę (zwracając uwagę na wybraną polaryzację), a następnie jednocześnie przeprowadź prąd przez drugą parę. Kiedy podłączysz drugą parę, obserwuj, w którą stronę obraca się silnik. Zapisz to. Teraz odwróć polaryzację pierwszej wybranej pary. Następnie ponownie podłącz drugą parę z odwróconą polaryzacją. Zwróć uwagę na kierunek. Na tej podstawie powinieneś być w stanie określić sekwencję obracania silnika w dowolnym kierunku. W moim przykładzie oba obróciły się w kierunku przeciwnym do ruchu wskazówek zegara, więc przejście przez sekwencję w ten sam sposób, który wybrałem, spowoduje przesunięcie silnika w lewo.

Krok 4: Zabranie silnika na jazdę próbną

Zabranie silnika na jazdę próbną
Zabranie silnika na jazdę próbną

Jeśli nie jesteś jeszcze przygotowany do programowania mikroprocesorów, możesz zrobić gorzej niż zestaw Ghetto Development Kit lub którykolwiek z różnych programistów PIC. Podłącz przewody bezpośrednio do microproc i wypal go za pomocą następującego kodu:

/* Zabawa z napędzaniem małych silników krokowych. */

/* Uwzględnij funkcję opóźnienia */ #define F_CPU 1000000UL #include /* Przypnij defs dla ATTiny2313 */ /* Kolejność zgodnie z ruchem wskazówek zegara */ #define BLUE _BV(PB0) #define BLACK _BV(PB1) #define RED _BV(PB2) #define ŻÓŁTY _BV(PB3) #define DELAY 200 /* milisekund między krokami */ int main(void){ DDRB = 0xff; /* Włącz wyjście na wszystkich pinach B */ PORTB = 0x00; /* Ustaw je wszystkie na 0v */ while(1){ /* tutaj główna pętla */ PORTB = BLUE; _delay_ms(OPÓŹNIENIE); PORTB = CZARNY; _delay_ms(OPÓŹNIENIE); PORTB = CZERWONY; _delay_ms(OPÓŹNIENIE); PORTB = ŻÓŁTY; _delay_ms(OPÓŹNIENIE); } } Jak prosty jest ten kod? Naprawdę proste. Wszystko, co robi, to tworzenie ładnych definicji, abym mógł odnosić się do przewodów według koloru, a nie ich nazw pinów, a następnie włącza je po kolei z regulowanym opóźnieniem pomiędzy nimi. Na początek wybrałem półsekundowe opóźnienie między krokami. Zobacz krótki film, aby zobaczyć wyniki. Jeśli naprawdę jesteś w grze, policz liczbę kroków na cykl, aby obliczyć jednokrokową rozdzielczość kątową silnika. (Och tak. PS. Dyski bez obciążenia przy 3,6 V z łatwością. Zobacz baterię na wideo.)

Krok 5: Poruszaj się w przód iw tył

Więc masz to działające zgodnie z ruchem wskazówek zegara. Coś bardziej interesującego? Trochę porządkowania kodu i możemy go uruchamiać tam iz powrotem. Umieściłem sekwencję zgodnie z ruchem wskazówek zegara w tablicy, aby można było przechodzić przez fazy za pomocą prostej pętli for. Teraz możesz uruchomić pętlę w górę lub w dół, aby przejść zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara.

int main(void) { const uint8_t opóźnienie = 50; const uint8_t zgodnie z ruchem wskazówek zegara = {NIEBIESKI, CZARNY, CZERWONY, ŻÓŁTY}; uint8_t ja; DDRB = 0xff; /* Włącz wyjście na wszystkich pinach B */ PORTB = 0x00; /* Ustaw je wszystkie na 0v */ while(1){ /* tutaj główna pętla */ for (i=0; i<=3; i++){ /* przejdź przez kolory zgodnie z ruchem wskazówek zegara */ PORTB = RIGHT; _delay_ms(opóźnienie); } for (i=3; i>=0; i--){ /* przejdź przez kolory ccw */ PORTB = RIGHT; _delay_ms(opóźnienie); } }} Zobacz emocjonujące wideo, aby zobaczyć tę i z powrotem.

Krok 6: Nigdy nie jestem półkrokiem, ponieważ nie jestem półkrokiem…

Odłóżmy na bok lirykę, pół-krok silnika jest tam, gdzie jest. Uzyskujesz większy prąd szczytowy, większy moment obrotowy i dwukrotnie większą rozdzielczość kątową. Pół-krok w skrócie: Zamiast niebieskiego, czarnego, czerwonego, żółtego, napędzasz silnik z niebieskim, niebieskim+czarnym, czarnym, czarnym+czerwonym, czerwonym, czerwonym+żółtym, żółtym, żółtym+niebieskim. W rezultacie przez połowę czasu angażujesz oba magnesy jednocześnie. A w czasie, gdy oba zestawy są włączone, silnik jest ustawiony w połowie odległości między nimi, zmniejszając kąt między „krokami” i sprawiając, że silnik obraca się płynniej. Czy możesz to stwierdzić na podstawie filmu? Nie jestem pewien… Teraz część kodu wykonująca pół-krok wygląda tak:

void halfStepping (opóźnienie uint16_t, kierunek uint8_t) { uint8_t i; for (i=0; i<=3; i++){ PORTB = kierunek; /* część z pojedynczą cewką */ _delay_ms(delay); PORTB |= kierunek[i+1]; /* dodaj w pół kroku */ _delay_ms(delay); }} Pierwsze polecenie PORTB ustawia jeden biegun na dodatni, a całą resztę na ujemną. Potem czeka. Następnie drugie polecenie PORTB ustawia drugi biegun (na drugim uzwojeniu) na dodatni, włączając oba uzwojenia dla 1,4x momentu obrotowego (i 2x prądu). Pełna lista programów znajduje się poniżej. Dwie tablice są teraz zdefiniowane (zgodnie z ruchem wskazówek zegara, przeciwnie do ruchu wskazówek zegara) i każda z nich ma po 5 elementów, aby umożliwić wpis i+1 w funkcji halfStepping.

Krok 7: Dodaj sterownik silnika

Dodaj sterownik silnika
Dodaj sterownik silnika
Dodaj sterownik silnika
Dodaj sterownik silnika
Dodaj sterownik silnika
Dodaj sterownik silnika

Jak na razie dobrze.

Jedynym problemem jest to, że silnik nie wydaje się mieć aż tak dużego momentu obrotowego, co może wynikać z faktu, że mikroprocesor wypuszcza tylko ~50mA na pin. Oczywistym następnym krokiem byłoby podłączenie go do sterownika silnika, aby dostarczyć mu więcej soku. Ale potem trochę zastanowienia: jeżdżę tylko z 5V, a rezystancja uzwojenia cewki wynosi ~125 omów. Oznacza to, że silnik pobiera tylko 40 mA na pin i powinien być dobrze napędzany przez (mocny!) układ AVR. Aby uzyskać większe napięcie napędzające silnik, podłączyłem go do układu mostka H SN754410. Obwód jest dość prosty. Każdy pin z AVR trafia do wejścia, a odpowiednie piny wyjściowe do silnika. Układ potrzebuje 5 V dla sekcji logicznej i może przyjmować znacznie większe napięcie w sekcji silnika. Uruchomienie go na 11.25v (trzy baterie 3.6v) trochę pomogło. Zauważalnie większy moment obrotowy na palec, ale to wciąż nie jest potęga. Nieźle jak na silnik, który jest mniejszy niż nikiel. A teraz obwód stał się uniwersalnym sterownikiem dwubiegunowego silnika krokowego. Dodano 29 listopada: Uruchomiłem silnik zeszłej nocy na chwilę przy 12V i zaczął się nagrzewać. Nie jestem pewien, czy był to problem z częstotliwością rezonansową, czy po prostu był to po prostu zbyt duży prąd dla uzwojeń. Tak czy inaczej, bądź ostrożny, jeśli napędzasz ten mały silnik z większymi napięciami.

Krok 8: Koniec

Więc czego się nauczyłem? Prowadzenie silnika krokowego za pomocą AVR (i układu mostka H) jest dość łatwe, nawet w „wymyślnym” trybie półkroku.

Nie jestem jednak pewien, co jeszcze zrobię z małymi silnikami krokowymi. Jakieś sugestie?

Zalecana: