Skocz do zawartości
DiJo

Sterowanie Silnikiem Krokowym

Rekomendowane odpowiedzi

cześć,

potrzebuje zrobić sterowanie silnikiem krokowym z portu lpt. Silnik ma 2 uzwojenia (wychodzą z niego 2 kabelki). Wymyśliłem coś takiego:

Dołączona grafika

a, b to są piny z portu LPT (na rysunku a jest właczony). Tam gdzie jest xmm1 powinno być podłączone jedno uzwojenie z silnika. Będzie takie coś działać? Gdy na a jest +5V, na b 0 to przez cewke popłynie +12V. Gdy jest na odwrót, to na cewke popłynie -12V. Gdy a i b są na 0, to przez cewke nie popłynie żaden prąd

 

ps. znalazłem układ uln2003 :) problem już nie aktualny

Edytowane przez DiJo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

swoją drogą, to na pewno jest silnik krokowy? z 2 kabelkami? Może mało widziałem i mało wiem ale na mój gust to krokowy powinien mieć trochę więcej kabelków

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

sa trzy rodzaje silnikow krokowych :) Silnik o zmiennej reluktancji VR prawdopodobnie kolega o nim pisal ma dwa przewody.

Jest jeszcze silnik z magnesem trwalym PM i i silnik hybrydowy HB z 4 kabelkami :P

 

e nie doczytalem... dwa uzwojenia to cztery kabelki :D

Edytowane przez atento

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

DiJo:

1. Jakieś dane na temat silnika? czy próbujesz "projektować" na pałę - uda się albo nie uda - oto jest pytanie :lol:

2. Jako że silników VR nie produkuje się od lat (chociaż tego nie jestem do końca pewny), prawdopodobnie jest to zabytek lub wogóle jakiś inny typ silnika.

3. Układ w pierwszej wersji nie ma szans działać, chyba że masz silnik pracujący przy ~2-3V, z symboliczbym momentem obrotowym.

4. Jeśli możesz, to wyjaśnij (albo zapodaj sch) w jaki sposób sprawę ma uratować ULN2003, bo jest to dość ciekawe...

Edytowane przez tomazzi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

sorki, źle napisałem, on ma 4 kabelki :] Do uln podłaczyłem mostek H (podobno tak to sie nazywa) i działa :) Teraz pojawił sie problem z uzyskaniem wyższych obrotów. Ze sterownika z drukarki kręci sie bardzo szybko, z lpt ma max. 10obr/sek, przy wyższych się zatrzymuje

 

ps. mam 2 silniczki em-234 i em-235. Oba steruje sie chyba tak samo, ale pewności nie mam :]

Tu jest troche o nich: http://www.elektroda.pl/rtvforum/topic543006.html

Edytowane przez DiJo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Mostek H to klasyka i zarazem podstawa w sterowaniu takich silników.

Silnik się zatrzymuje bo:

1. Źle napisałeś soft - brak odpowiedniego przesunięcia fazy przy wyższych częstotliwościach

2. Soft napisałeś dobrze, ale źle zbudowałeś układ - sch please...

3. Driver drukarki działa trochę inaczej niż się wydaje - silnik się kręci, ale czy naprawdę masz kontrolę nad obrotami?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

O ile czegoś nie przekręciłem, to schemat wygląda tak: http://phobos.kni.pk.edu.pl/~dijo/schemat1.png

 

Tam gdzie jest żaróweczka, są wpięte 2 kabelki z silnika. Do wyjścia out2 w uln2003 jest wpięty drugi mostek H, całość zasilana +12V. Co do softu, to chyba jest ok. Przy wolnych obrotach za każdym razem przesuwa się odrobinkę do przodu. Może przy szybszych obrotach powinien omijać co któryś kok?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

To "coś", co podlinkowałeś jest mocno niekompletne, żeby nie powiedzieć "bezsensowne" (np. bez sygnału na IN1 ULN2003 nie będzie działać, brak zabezpieczenia przed prądami cross-shoot, itp, itd. Poza tym elementy typu "virtual" są dobre do symulacji układów w wersji pre-alpha.

 

Mam pytanko: czy Ty wogóle rozumiesz jak działa silnik krokowy oraz komponenty z których zbudowałeś układ sterowania? Przedstaw kompletny schemat z konkretnymi typami zastosowanych elementów, z oznaczeniami gdzie są wejścia/wyjścia i z jakich pinów LPT korzystasz. Inaczej możemy sobie tylko pogdybać. btw, skąd bierzesz zasilanie układu? (mam nadzieję że nie z LPT...)

Edytowane przez tomazzi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie podłączyłem tego do lpt, bo go nie znalazłem w multisimie :] Pozatym niezbyt przeparam za nim. in1 i in2 i oba "luźno wiszące" oporniki podłączone są do portu lpt. Zasilanie jest podłączone tam gdzie vcc, tylko nie 5 a 12V. out2 jest podpięty do drugiego takiego układu (który zasila drugie uzwojenie silnika).

 

Do tego dołożyłem troche kodu...

» Naciśnij, żeby pokazać/ukryć tekst oznaczony jako spoiler... «
#include "parapin.h"#include <cstdio>#include <cstdlib>#include <unistd.h>int INTV = 400000;int DELAY = 2000;inline void set(int obw, int m) {		//clear_pin(LP_DATA_PINS | LP_PIN01 | LP_PIN14 | LP_PIN16 | LP_PIN17);		if (obw == 1) {				clear_pin(LP_PIN09);				set_pin(LP_PIN07);				if (m == 1) {						clear_pin(LP_PIN04);						set_pin(LP_PIN03);				} else {						clear_pin(LP_PIN03);						set_pin(LP_PIN04);				}		} else {				clear_pin(LP_PIN07);				set_pin(LP_PIN09);				if (m == 1) {						clear_pin(LP_PIN06);						set_pin(LP_PIN05);				} else {						clear_pin(LP_PIN05);						set_pin(LP_PIN06);				}		}}int main(int argc, char *argv[]) {		pin_init_user(LPT1);		pin_output_mode(LP_DATA_PINS | LP_PIN01 | LP_PIN14 | LP_PIN16 | LP_PIN17);		clear_pin(LP_DATA_PINS | LP_PIN01 | LP_PIN14 | LP_PIN16 | LP_PIN17);		if (argc == 2) {				INTV=atoi(argv[1]);				printf("Opoznienie: %d\n", INTV);		}		int itv=40000;		if (argc == 2) {				while (1) {						if (itv > INTV) {								itv -= ((double)(itv-INTV) / 20);								printf("itv: %d\n", itv);						}						set(2, 1);						usleep(itv);						set(1, 1);						usleep(itv);						set(2, 2);						usleep(itv);						set(1, 2);						usleep(itv);				}		} else if (argc == 3) {				while (1) {						set(1, 2);						usleep(INTV);						set(2, 2);						usleep(INTV);						set(1, 1);						usleep(INTV);						set(2, 1);						usleep(INTV);				}		} else {						clear_pin(LP_DATA_PINS | LP_PIN01 | LP_PIN14 | LP_PIN16 | LP_PIN17);		}}

i tak jak pisałem wcześniej działa, tylko troche wolno ;) Później będe próbował to uruchomić z niższym nice, może to pomoże, zobaczymy

 

 

ps. dość dużo można zdziałać kodem ;) Troche go jeszcze dopracuje i nie powinno być chyba problemów. Wcześniej silnik nie chciał pracować z krokiem trwającym ok. 6ms, po przeróbce działa z 4ms i to dużo mocniej :)

Edytowane przez DiJo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Ehh... widzę że nie czytasz ze zrozumieniem, układ którego schemat podlinkowałeś nie może działać - oprócz tego co wcześniej napisłem źle są podłączone Q2, Q4, oraz samo wyjście mostka na silnik. Jeśli nie masz schematu tego co zrobiłeś w rzeczywistości, to o czym tu gadać? Typy zastosowanych tranzystorów mają kluczowe znaczenie, ponieważ LPT ma niewielką wydajność prądową a tranzystory różne h21e (wzmocnienie prądowe). ULN2003 jest tu całkowicie zbędny, wręcz przeszkadza. Od tego jak na prawdę wygląda układ zależy prąd i napięcie uzwojeń silnika oraz czasy przełączania, czyli błąd fazy i max częstotliwość impulsów.

 

Co do softu:

1. Po co nazwałeś piny numerami rzeczywistymi? Skąd mam wiedzieć który pin czym steruje, skoro nie masz schematu?

2. Jaki to OS? bo chyba nie winda?

3. Jako że przy czasach rzędu ms usleep() jeszcze nie powinien sprawiać problemów, stawiam na to że skopałeś HW.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

sterownik robiłem chyba na podstawie tego:

Dołączona grafika

Na 12v działało dobrze, ale potrzebuje teraz zasilić silnik z 42V. Nie spalą się te tranzystorki przy takim napięciu? Można je zamienić na inne, mocniejsze? Jeśli tak, to jakie?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

...jak to chyba? :lol:

 

Ten schemacik, aczkolwiek poprawny w sensie połączeń, jest niestety nadal niekompletny - jest to "uproszczony poglądowy schemat książkowy" xD

Brakuje przede wszystkim diod zabezpieczających tranzystory przed przepięciami; poza tym rezystory są dobrane "na pałę", co widać bez konieczności użycia calc.exe, a taki sposób sterowania tranzystorami wyjściowymi stwarza wiele problemów - głównie z czasem przełączania (efekt nasycenia) i prądami baz.

Przy 42V te tranzystorki nie wytrzymają zbyt długo (choć zależy to od indukcujności i rezystancji uzwojeń).

1. zmierz rezystancję - będzie wiadomo jakiego mniej więcej prądu się spodziewać.

2. podaj jakie chcesz uzyskać impulsy (czas trwania, czas narastania/opadania, mnimalny czas między kolejnymi krokami).

Pozwoli to określić jaki typ tranzystorów i jakie rozwiązanie (konfiguracja drivera) będzie optymalne.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...