Skocz do zawartości

Silnik krokowy i Arduino


Grzegorz1397

Pomocna odpowiedź

Cześć, mam problem z silnikiem, dokładnie takim:
https://botland.com.pl/pl/silniki-krokowe/3610-silnik-krokowy-jk42hs40-0504-200-krokowobr-12v-05a-043nm.html
do tego użyłem takiego sterownika:

https://botland.com.pl/pl/sterowniki-silnikow-krokowych/1324-drv8825-sterownik-silnika-krokowego-45v22a-pololu-2133.html

Chciałem, żeby obracał się 4 razy na sekundę, użyłem do tego funkcji tone.
 

#define DIR 13
#define STEP 12
void setup(){
  pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);

pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
  digitalWrite(DIR, LOW);
  
}
void loop() {
 tone(STEP, 800);

Niestety silnik obraca się zbyt wolno, około jeden obrót na 4 sekundy. Co może być przyczyną?

Edytowano przez Gieneq
kolorowanie C++
Link do komentarza
Share on other sites

Problemem może być to, że w kółko bardzo szybko wywołujesz funkcję tone(). Funkcję tę powinno się wywołać raz, a działa ona do momentu wywołania funkcji noTone(). Dopiero później można ponownie wywołać funkcję tone().

Spróbuj  może czegoś takiego:

void loop() {
  tone(STEP, 800);
  delay(5000);
  noTone();
  delay(5000);
}
  

Silnik powinien się kręcić przez 5 sekund, po czym przez 5 sekund powinie być zatrzymany i tak na zmianę.

Nie znam zbytnio Arduino, ale wydaje mi się, że ta funkcja to nie najlepszy sposób  sterowania silnikiem krokowym (zależy oczywiście, jaki efekt chcesz uzyskać). Tak czy inaczej, na próbę powinno zadziałać.

Link do komentarza
Share on other sites

5 minut temu, andrews napisał:

 


void loop() {
  tone(STEP, 800);
  delay(5000);
  noTone();
  delay(5000);
}
  

Silnik powinien się kręcić przez 5 sekund, po czym przez 5 sekund powinie być zatrzymany i tak na zmianę.

 

Tak działa, natomiast prędkość silnika się nie zmieniła, przez te 5 sekund pokonuje na oko jakieś 420 stopni

Link do komentarza
Share on other sites

Pokaż może jakiś schemat, jak to masz połączone. Jakie napięcie zasilania silnika? Wejścia M0, M1 i M2 masz gdzieś podłączone? Możesz zmierzyć, jakie są na nich napięcia?

Dobrze byłoby też, gdybyś mógł zmierzyć faktyczną częstotliwość na wejściu STEP (miernikiem/oscyloskopem), bo może problem jest w taktowaniu mikrokontrolera i generowana przez niego częstotliwość jest niższa od zamierzonej. Możesz mieć np. nieprawidłowo ustawione fusebity i mikrokontroler jest taktowany częstotliwością 1 MHz zamiast 16MHz, co będzie skutkować również 16-krotnie niższą częstotliwością na pinie STEP. Z drugiej strony wtedy funkcja delay() raczej nie działałaby prawidłowo, a z tego co napisałeś te 5 sekund jest odmierzane dobrze?

Edytowano przez andrews
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.