Skocz do zawartości

Silnik krokowy i Arduino


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 to post
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 to post
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 to post
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 to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.