Wątek przeniesiony 2023-10-18 15:05 z Java przez MarekR22.

Sterowanie silnikiem krokowym NEMA-17

0

Witam jestem początkującym i potrzebuję kodu który opiera się na sterowaniu silnikiem krokowym NEMA 17 z sterownikiem A4988.
Program ma polegać na tym iż od samego startu programu silnik ma poruszać się w jedną stronę aż do momentu kiedy trafi na ogranicznik czyli w moim przypadku przycisk. gdy en przycisk zostanie kliknięty motor ma przesunąć się powiedzmy o 2000 kroków w drugą stronę i się zatrzymać. Jeśli toś jest w stanie napisać dla mnie ten kod, byłbym bardzo wdzięczny. Wydaje mi się że nie jest on jakoś bardzo skomplikowany jednakże nie potrafię sobie z nim poradzić. Z góry dziękuję.

1

Jaki ma Pan budżet? Jeśli chce Pan pomocy to proszę pokazać co jest już zrobione, a nie szukać jelenia.

0

Mogę ci dać jakiś stary mój plik z arduino, kiedyś jakiś gcode parser pisałem po serial komunikacji do sterowania 6 silnikami.

Sterowanie silnikiem krokowym jest mega prosto.
Z driverem jak zmienisz napięcie z 0 na 5V to wykonuje jeden krok, jak zmienisz direction z wyoskiego na niski to zmieniasz kierunek kręcenia, a on off to żeby wyłączyć/włączyć silnik.
Bez drivera, musisz na przemian zmieniać napięcie na cewkach, ale akurat masz sterownik.
Oczywiście są libki, które dają prosty sposób, żeby sterować prędkością i przyspieszeniem obrotów silnika.
Interface jest mega przyjemny w użyciu.

0
tumor napisał(a):

Mogę ci dać jakiś stary mój plik z arduino, kiedyś jakiś gcode parser pisałem po serial komunikacji do sterowania 6 silnikami.

Sterowanie silnikiem krokowym jest mega prosto.
Z driverem jak zmienisz napięcie z 0 na 5V to wykonuje jeden krok, jak zmienisz direction z wyoskiego na niski to zmieniasz kierunek kręcenia, a on off to żeby wyłączyć/włączyć silnik.
Bez drivera, musisz na przemian zmieniać napięcie na cewkach, ale akurat masz sterownik.
Oczywiście są libki, które dają prosty sposób, żeby sterować prędkością i przyspieszeniem obrotów silnika.
Interface jest mega przyjemny w użyciu.

Chętnie przyjmę taki plik. Lecz pomoc od innych również mile widziana. A z tym on off to jak się dokładnie tym poslugiwać. chodzi mi o polecenie

0
IceBreaker napisał(a):

Jaki ma Pan budżet? Jeśli chce Pan pomocy to proszę pokazać co jest już zrobione, a nie szukać jelenia.

Ale jak to co juz jest zrobione. Wyraznie przeciez napisalem że nic i prosze o pomoc. Glownie chodzi mi o to jak napsac komendę aby motor poruszył sie o ileś kroków a następnie się zatrzymał. Np 500 krokow w prawo i stop. Tak aby tego nie zapetlac, a zeby wykonalo sie to tylko raz i koniec

0

A ogólnie to wyregulowałeś potencjometrem natężenia prądu płynącego z drivera?
Będziesz do tego potrzebować multimetr + najlepiej podpięty pod śrubokręt i ustawić natężenie wymagane dla silnika.

A pin enable to jak dasz napięcie wysokie, to sterownika zacznie działać i puści prąd do silnika.

0
tumor napisał(a):

A ogólnie to wyregulowałeś potencjometrem natężenia prądu płynącego z drivera?
Będziesz do tego potrzebować multimetr + najlepiej podpięty pod śrubokręt i ustawić natężenie wymagane dla silnika.

A pin enable to jak dasz napięcie wysokie, to sterownika zacznie działać i puści prąd do silnika.

To znaczy tak. Silnikiem juz umiem sterowac w taki sensie ze kreci sie w nieskońvzonksć poprzez petle for

DigitalWrite(dir,HIGH)

For( int x =0: x< 200; x++)
DigitalWrite(Step,high)
DelayMicroseconds(200)
DigitalWrite(Step,low)
DelayMicroseconds(200)

I to juz dzialalo tak samo zrobilem z przyciskiem jesli klikniety to sie kreci ale zaetanawia mnie jak zrobic by zakrecil sie iles stopni raz i koniec.

1

Czego oczekujesz? Chcesz pomocy, czy gotowego przetestowanego kodu?
Jeśli nie chcesz sam pisać, jest dział ogłoszenia drobne.
Jeśli oczekujesz pomocy, to pierwsze co to dlaczego wybrałeś dział Java? Kod sterowania silnikiem ma być w Java?
Jeśli mowa o innym języku programowania i np. Arduino jako platformie, poproś o przeniesienie postu do właściwego działu.

0

Musisz tam sprawdzać czy przycisk jest naciśnięty jak tak to kończysz pętle.

czyli pod koniec pętli sprawdzaj czy jest naciśnięty klawisz jak tak to wychodź.
Czyli jakieś

if (digitalRead(button))
  break;

Zależy jak masz ten przycisk zrobiony.

Tylko program musisz mieć w void setup, a nie void loop bo chcesz jednorazowo na początku ustawić pozycję x.

0

@jurek1980:

jurek1980 napisał(a):

Czego oczekujesz? Chcesz pomocy, czy gotowego przetestowanego kodu?
Jeśli nie chcesz sam pisać, jest dział ogłoszenia drobne.
Jeśli oczekujesz pomocy, to pierwsze co to dlaczego wybrałeś dział Java? Kod sterowania silnikiem ma być w Java?
Jeśli mowa o innym języku programowania i np. Arduino jako platformie, poproś o przeniesienie postu do właściwego działu.

@jurek1980:

jurek1980 napisał(a):

Czego oczekujesz? Chcesz pomocy, czy gotowego przetestowanego kodu?
Jeśli nie chcesz sam pisać, jest dział ogłoszenia drobne.
Jeśli oczekujesz pomocy, to pierwsze co to dlaczego wybrałeś dział Java? Kod sterowania silnikiem ma być w Java?
Jeśli mowa o innym języku programowania i np. Arduino jako platformie, poproś o przeniesienie postu do właściwego działu.

Ja poprosic w takim razie?

0

Zaraportuj własny post i poproś o przeniesienie do właściwego działu, bo rozumiem, że o to chodzi ( cytujesz mnie dwukrotnie)

1
Ignacy Grabowski napisał(a):
tumor napisał(a):

A ogólnie to wyregulowałeś potencjometrem natężenia prądu płynącego z drivera?
Będziesz do tego potrzebować multimetr + najlepiej podpięty pod śrubokręt i ustawić natężenie wymagane dla silnika.

A pin enable to jak dasz napięcie wysokie, to sterownika zacznie działać i puści prąd do silnika.

To znaczy tak. Silnikiem juz umiem sterowac w taki sensie ze kreci sie w nieskońvzonksć poprzez petle for
DigitalWrite(dir,HIGH)

For( int x =0: x< 200; x++)
DigitalWrite(Step,high)
DelayMicroseconds(200)
DigitalWrite(Step,low)
DelayMicroseconds(200)

I to juz dzialalo tak samo zrobilem z przyciskiem jesli klikniety to sie kreci ale zaetanawia mnie jak zrobic by zakrecil sie iles stopni raz i koniec.

Jaki ty dzielny jesteś.
Wkleiłeś coś z neta, nawet tego nie rozumiejąc, ale nie masz nawet podstawowego kontaktu z językami programowania, bo brakuje klamer

Powiesz szczerze: programowałeś coś w życiu ? Bo jeśli nie, to pytanie w rodzaju "pomóc w projekcie" nie ma sensu.

1
AnyKtokolwiek napisał(a):
Ignacy Grabowski napisał(a):
tumor napisał(a):

A ogólnie to wyregulowałeś potencjometrem natężenia prądu płynącego z drivera?
Będziesz do tego potrzebować multimetr + najlepiej podpięty pod śrubokręt i ustawić natężenie wymagane dla silnika.

A pin enable to jak dasz napięcie wysokie, to sterownika zacznie działać i puści prąd do silnika.

To znaczy tak. Silnikiem juz umiem sterowac w taki sensie ze kreci sie w nieskońvzonksć poprzez petle for
DigitalWrite(dir,HIGH)

For( int x =0: x< 200; x++)
DigitalWrite(Step,high)
DelayMicroseconds(200)
DigitalWrite(Step,low)
DelayMicroseconds(200)

I to juz dzialalo tak samo zrobilem z przyciskiem jesli klikniety to sie kreci ale zaetanawia mnie jak zrobic by zakrecil sie iles stopni raz i koniec.

Jaki ty dzielny jesteś.
Wkleiłeś coś z neta, nawet tego nie rozumiejąc, ale nie masz nawet podstawowego kontaktu z językami programowania, bo brakuje klamer

Powiesz szczerze: programowałeś coś w życiu ? Bo jeśli nie, to pytanie w rodzaju "pomóc w projekcie" nie ma sensu.

Dzięki za pomoc kolego. Najwazniejsze że znalazleś czas aby napisac jakze potrzebny i przydatny komentarz w tej sprawie. Tak dla twojej wiedzy, napisalem w tym poście kod na szybko przez telefon tylko dla orientacji dla kogoś kto chcialby mi w tym pomoc. Mam nadzieje że nastepnym razem nie bedziesz zatrzymywał się i tracił swojego czasu tylko po to by napisać co najmniej durny wpis.

0

zrob sobie zmienne typu: (uwaga, pseudo kod, a nie arduino):

expectedDirection = 1; // 1 - prawo, 0 - lewo
expectedSteps = 200;

no i w pętli:

if (expectedSteps > 0) {
  // wykonaj ruch w zależności od spodziewanego działania
  expectedSteps = expectedSteps -1;
}
// jak się wykonało to ma stać w miejscu

gdzieś tam między wierszami obsługa przycisków (choć lepiej pewnie przerwaniami), które w razie naciśnięcia ustawią na nowo kierunek i ilość kroków

2
Ignacy Grabowski napisał(a):

To znaczy tak. Silnikiem juz umiem sterowac w taki sensie ze kreci sie w nieskońvzonksć poprzez petle for

DigitalWrite(dir,HIGH)

For( int x =0: x< 200; x++)
DigitalWrite(Step,high)
DelayMicroseconds(200)
DigitalWrite(Step,low)
DelayMicroseconds(200)

I to juz dzialalo tak samo zrobilem z przyciskiem jesli klikniety to sie kreci ale zaetanawia mnie jak zrobic by zakrecil sie iles stopni raz i koniec.

Nie wyważaj otwartych drzwi. Sterowanie ręczne w ten sposób to mordęga, a używanie delay() to przestępstwo - chyba, że Twój uC ma nie robić absolutnie nic innego niż sterować tym silnikiem, co się rzadko zdarza.

Opis problemu jasno mówi, że chcesz zrobić bazowanie, czyli dojazd do krańcówki i cofnięcie.
Tu masz pierwszy z brzegu artykuł o bazowaniu: https://www.brainy-bits.com/post/homing-stepper-motors-using-the-accelstepper-library

1 użytkowników online, w tym zalogowanych: 0, gości: 1