Skocz do zawartości

2 silniki krokowe sterowane przez chip 74HC595


DjMalan

Pomocna odpowiedź

Witam.

Robię swój mały projekt z silnikami krokowymi. Niestety wiąże się to z potrzebą większej ilości wyjść digital niż posiada arduino. W takowym wypadku chciałbym użyć chipu 74hc595. Sterowanie jednym silnikiem za pomocą tego chipu to nie problem ale potrzebowałbym sterować dwoma jednocześnie. 2 silniki krokowe czyli 8 potrzebnych wyjść-tyle ile można uzyskać dzięki zastosowaniu chipu.

Tylko jak to zrobić by działały one niezależnie?

Siedzę już dłuższy czas i nie posunąłem się ani krok do przodu, pomóżcie.

Link do komentarza
Share on other sites

A jak sterujesz tymi silnikami teraz? Jakie sygnały generujesz dla jednego? Jakie prędkości chcesz uzyskać ? To ważne, bo może da się to zrobić inaczej.

Niestety, do jednego rejestru wchodzi jedne interfejs szeregowy, zrobienie na tym dwóch niezależnych, asynchronicznie pracujących silników krokowych będzie bardzo trudne o ile w ogóle możliwe.

Link do komentarza
Share on other sites

DjMalan, używanie rejestrów przesuwnych jest dość powolne, więc nie wiem czy to najlepszy wybór do sterowania silnikiem.

Ale pomijając kwestię czasu obsługi, 74hc595 można łączyć w łańcuch. Dzięki temu możesz wysterować właściwie dowolną liczbę wyjść nie dokładając ani jednego pinu.

Przykłady znajdziesz w sieci, jak chociażby tutaj: http://www.electroschematics.com/11230/multiple-shift-registers-arduino-part-1/

Link do komentarza
Share on other sites

Ale to nie jest tutaj rozwiązaniem, bo ograniczeniem nie jest liczba wyjść z jednego rejestru. Wąskim gardłem jest jeden interfejs szeregowy, który musi być używany przez dwa niezależne, asynchroniczne procesy generowania impulsów STEP lub nawet bezpośredniego komutowania faz. Dlatego pytałem o prędkość, bo może rozwiązaniem są np. dwa programowo generowane wyjścia szeregowe (quasi-SPI: SCK, MOSI, CS), co też niestety skonsumuje min. 6 pinów procesora. Wtedy każdy silnik miałby swój własny kawałek kodu, własną prędkość i własny interfejs z rejestrem i by się nie gryzły. Do każdego rejestru nie trzeba wysyłać 8 bitów a tylko tyle i ile potrzeba na silnik, np. 4. Przyspieszy to transfer i zmniejszy obciążenie procesora.

Dopóki jednak nie wiemy co to za silniki, do czego używane i jak sterowane, to tylko domysły.

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

Trochę źle zrozumiałem problem. W każdym razie jeśli jeden układ 74hc595 wystarczy to chyba nie problem napisać program, który będzie sterował dwoma silnikami - takie małe wprowadzenie do systemów wielowątkowych 😉 Oczywiście nie będzie pełnej asynchroniczności, ale jeśli zwłoka kilku us na sterowanie szeregowe jest akceptowalna to da się to zrobić.

Proponuję zacząć od odrobiny obliczeń. Po pierwsze - jaka ma być prędkość tej komutacji, czy ogólnie sterowania silnikiem krokowym. Czy to powiedzmy milisekundy? Dalej wypadałoby napisać i przetestować procedury sterujące 74hc595 - cykl wysterowania powinien zajmować mikrosekundy, ale to trzeba sprawdzić, zanim pójdzie się dalej.

Więc pytanie do DjMalan, jakie czasy odnośnie sterowania tym krokowcem Cię interesują?

Link do komentarza
Share on other sites

Projekt ten zakłada zbudowanie frezarki. Ruch w 3 osiach (3 silniki krokowe) + napęd frezu (silnik dc). Do tego na każdej osi czujnik zerujący położenie przy starcie. (silniki zmierzają ku czujnikowi przy uruchomieniu programu by wyzerować pozycję i przesuwają się na środek czyli o odpowiednią odległość) Nie musi być ona sprawna pod względem realnej pracy, lecz ma po prostu w pełni działać ,,na sucho" według napisanego programu (wycięcie kwadratu, okręgu i jeżeli by się dało czegoś w deseń półkuli-ruch po łuku we wszystkich trzech osiach).

Moment zostanie przełożony poprzez iglicę gwintowaną. Silników szukamy z kolegą, bo nie orientujemy się jakie byłyby odpowiednie. A co do prędkości to musielibyśmy osiągnąć do 1cm/s czyli ok 5 obr/s. Oczywiście im szybciej tym lepiej.

Wiem, że są dwa sposoby programowania tego chipu, jeden ogarniam, a sposób array nie za bardzo. Link do tego co znalazłem:

https://www.arduino.cc/en/Tutorial/ShiftOut

Dopiero się uczymy więc proszę o wyrozumiałość 🙂

P.S. Jeżeli to pomoże to mogę załączyć mój (prosty) program jaki na razie mam.

Link do komentarza
Share on other sites

Jeśli wykorzystasz typowy silnik krokowy o 200 kroków/obrów, to daje 5obr/s * 200 kr/s, czyli 1000 kroków/s. Więc krok jest co 1ms i to brzmi rozsądnie. Teraz wypadałoby sprawdzić ile czasu zajmuje wysterowanie jednego 74hc595 - powinno być 1-2us, ale lepiej się upewnić. W każdym razie jeśli będzie to czas w us, całość ma jak najbardziej szansę powodzenia.

Masz więc trzy "zadania" korzystające z tego samego rejestru lub zmiennej:

1) proces wysyłający dane do fizycznego rejestru

2) sterowanie silnikiem 1

3) sterowanie silnikiem 2

Samą wartość takiego rejestru najprościej chyba przechowywać w globalnej zmiennej (oznaczonej volatile). Wtedy procesy 2 i 3 po prostu modyfikują swoje fragmenty tej zmiennej, a proces 1 wysyła zawartość do 74hc595.

A wracając do bare-metal, gdzie procesów i wielowątkowości nie ma - masz na głowie tylko przerwania, które najprościej będzie wyłączać na czas modyfikacji globalnej zmiennej oraz transmisji. Jeśli to 1us to nie powinno mieć istotnego wpływu na działanie programu, a kod będzie bardzo prosty.

Link do komentarza
Share on other sites

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.