Skocz do zawartości

Silnik krokowy i Arduino


Pomocna odpowiedź

Napisano (edytowany)

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++

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ć.

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

(edytowany)

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

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