Synchronizacja pracy kilku silników krokowych

Rozmowy na temat układów elektronicznych sterowania obrabiarek CNC

Autor tematu
nile
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 3
Posty: 3
Rejestracja: 13 wrz 2006, 19:24
Lokalizacja: pl

Synchronizacja pracy kilku silników krokowych

#1

Post napisał: nile » 13 wrz 2006, 19:43

Interesuje mnie problem realizacji równoczesnej pracy silników, tak aby jeden nie czekał na drugi. Czy w praktyce używane są przerwania generowane przez timery czy też rozkazy (wymuszenie ruchu i czekania) przesyłane są sekwencyjnie w pętli do poszczególnych silników? (sterowanie przez mikrokontroler)



Tagi:

Awatar użytkownika

Boni
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 1
Posty: 98
Rejestracja: 10 lip 2006, 18:25
Lokalizacja: Grodzisk Maz

#2

Post napisał: Boni » 14 wrz 2006, 11:12

Jeśli np. jednym bajtem rejestru wyjściowego "z czegokolwiek" sterujesz 4 silnikami (4x step i dir) to masz je przecież absolutnie równocześnie. Proponuję postudiować literaturę i aplikacje, zanim zupełnie wyważysz otwarte drzwi.


Autor tematu
nile
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 3
Posty: 3
Rejestracja: 13 wrz 2006, 19:24
Lokalizacja: pl

#3

Post napisał: nile » 14 wrz 2006, 16:49

Dzięki za odpowiedź, ale nie dokładnie o to mi chodziło. Przy użyciu LPT rzeczywiście może tak być, ale w przypadku sterowania przez mikrokontroler sprawa jest bardziej złożona.


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#4

Post napisał: jarekk » 14 wrz 2006, 20:11

Nowiesz, jeżeli masz sygnały na jednym porcie procesora(mikrokontrolera), to sprawa jest taka sama jak na LPT.

Ja w swoim sterowniku silnika krokowego na AVR Mega88 mam w jednym "cyklu" do ustalenia aż 8 sygnałów ( na dwa mostki "H", czyli 8 tranzystorów). Zastosowanie inne ale problem podobny - potrzebny jest tu silny synchronizm.

Zakładając 1 instrukcję na jedno wyjście - 8 cykli, każdy 1/20MHz czyli całość zajmuje 0.4us. W moim zastosowaniu jest to opóźnienie pomijalne.

Podaj konkretne zastosowanie(lub problem)- co potrzebujesz zrobić, bo Twoje pytanie jest zbyt ogólne.


pit202
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 1
Posty: 863
Rejestracja: 02 lip 2004, 23:38
Lokalizacja: --

#5

Post napisał: pit202 » 14 wrz 2006, 20:25

pytanie jest dość zawiłe - ale ja pojmuje je tak :
1) czy da rady sterowac wieloma silnikami niezaleznie
2) czy do tego uzywa sie przerwań

mam pewne obawy, ze kolega uzywa do tego pętli ( do,while,for ) i nie moze uniezaleznic ruchy poszczegolnych sterownikow, rozwiazaniem problemu jest oprogramowanie i wymyslenie algorytmu dzialania timera lub kilku timerow , w ktorych istanialy by algorytmy ktore sterowaly by tymi silnikami ze zmiennych a w petli glownej programu nastepowala by logika.
PiteR


Autor tematu
nile
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 3
Posty: 3
Rejestracja: 13 wrz 2006, 19:24
Lokalizacja: pl

#6

Post napisał: nile » 14 wrz 2006, 21:21

jarekk pisze:Podaj konkretne zastosowanie(lub problem)- co potrzebujesz zrobić, bo Twoje pytanie jest zbyt ogólne.
Pytanie miało na celu utwierdzenie mnie w przekonaniu o konieczności stosowania timerów i generowanych przez nie przerwań w celu wywołania podprogramów powodujących ruch w poszczególnych osiach.
Np. chcemy obsłużyć ploter pracujący w dwóch osiach. Transmitujemy dane z PC do mikrokontrolera w postaci punktów (x,y). Mamy poruszać się z punktu (0,0) do punktu (100,10). Aproksymacją toru ruchu będą "schodki": 10 kroków wzdłuż osi x i 1 wzdłuż osi y, itd. 10 razy. Zakładając pracę z najprostszym sterownikiem silników krokowych - wysyłamy mu impuls "1" (do silnika pracującego w osi x) o określonym czasie trwania . Tu pojawia się problem czy czas ten odliczamy w pętli, czy korzystamy z timera? Następny okres oczekiwania związany jest z prędkością obrotów silnika (przesuwu liniowego) i pojawia się ten sam problem, z tym, że czas oczekiwania jest dużo większy. Zamiast tracić go na wykonywanie pętli odliczającej czas procesor mógłby wtedy realizować inne zagadnienia.
Po wykonaniu kroków w osi x badamy czy wykonać krok w osi y i napotykamy na podobne problemy. Poza tym wyonując krok w osi y opóźniamy wykonanie co 10 kroku w osi x.
pit202 pisze: rozwiazaniem problemu jest oprogramowanie i wymyslenie algorytmu dzialania timera lub kilku timerow , w ktorych istanialy by algorytmy ktore sterowaly by tymi silnikami ze zmiennych a w petli glownej programu nastepowala by logika.
Zasadniczo masz rację. Nie chodzi mi o podanie dokładnego algorytmu, a przykładowe ogólne rozwiązania (zrealizowane w praktyce)

Awatar użytkownika

Piotr Rakowski
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 1
Posty: 2173
Rejestracja: 29 lip 2005, 15:07
Lokalizacja: Warszawa
Kontakt:

#7

Post napisał: Piotr Rakowski » 15 wrz 2006, 14:30

Kolego Nile, tajemnice oprogramowania to tajemnice alkowy. Nikt nie powie Ci tego, jak sam realizuje takie zadanie, bo zwykle jest to jego autorskie rozwiązanie.

Podpowiem Ci tak - nie znam timera, który byłby odpowiednio precyzyjny i częsty. Podobno piszę się jakieś sterowniki tzw. kernelowe do podczepiania się pod timer np. karty dźwiękowej, bo jest superprecyzyjny.

Jest natomiast timer niskopoziomowy, bardzo precyzyjny i nazwijmy to niezależny od prędkości kompa. Niestety nie wywołuje on przerwań. Używasz go w pętli i sprawdzasz, ile czasu upłynęło. Nie powiem Ci jaki to jest, ale w wszystkich językach wysokiego poziomu jest to niego łatwy dostęp. A całą procedurę podpinasz oczywiście pod wątek - tego nie muszę chyba wyjaśniać.

W każdym razie, jeśli piszesz oprogramowanie do sterowania - to długa droga przed Tobą.
Pamiętaj, że ten timer musi obsługiwać nie tylko silniki, ale także krańcówki, wył. awaryjny no i wyświetlanie pozycji na ekranie...
Maszyny i oprogramowanie CNC: eduCAD, STEP2CNC, LynxCUT, Styro3D, Tapper, cncCAD, Image2CAM, Turn3D, TERMCUT, LynxNEST (Nesting)


mag32
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 1
Posty: 391
Rejestracja: 31 paź 2004, 13:34
Lokalizacja: Bytom
Kontakt:

#8

Post napisał: mag32 » 15 wrz 2006, 22:50

Kolego Nile, tajemnice oprogramowania to tajemnice alkowy. Nikt nie powie Ci tego, jak sam realizuje takie zadanie, bo zwykle jest to jego autorskie rozwiązanie.
To logiczne, ale niewątpliwie to forum jest po to by prowadzić tu dywagacje i na takie tematy.
Podpowiem Ci tak - nie znam timera, który byłby odpowiednio precyzyjny i częsty. Podobno piszę się jakieś sterowniki tzw. kernelowe do podczepiania się pod timer np. karty dźwiękowej, bo jest superprecyzyjny.
Nili tu zdaje mi się pisze o procku typu AVR czy ARM, nie zaś o sterowaniu z PCta.
Jest natomiast timer niskopoziomowy, bardzo precyzyjny i nazwijmy to niezależny od prędkości kompa. Niestety nie wywołuje on przerwań. Używasz go w pętli i sprawdzasz, ile czasu upłynęło. Nie powiem Ci jaki to jest, ale w wszystkich językach wysokiego poziomu jest to niego łatwy dostęp. A całą procedurę podpinasz oczywiście pod wątek - tego nie muszę chyba wyjaśniać.
No właśnie, Timer Mikroprocesora jest wystarczająci precyzyjny do takich działań i o ile wiem wywołuje przerwania pod które można podpiąć procedury.
W każdym razie, jeśli piszesz oprogramowanie do sterowania - to długa droga przed Tobą.
Pamiętaj, że ten timer musi obsługiwać nie tylko silniki, ale także krańcówki, wył. awaryjny no i wyświetlanie pozycji na ekranie...
Ekran to drugorzędna sprawa, podstawa to synchroniczne sterowanie silnikami oraz odbieranie sygnałów z zewnętrznych czujników, ale czujniki można podpiąć pod inne przerwania NMI.
Timer jest tu tylko po to, by, jak rozumiem, procesor nie tracił czasu na wykonywanie pętli opóźniających, tylko w międzyczasie - między krokami - wykonywał porzyteczne rzeczy, a do sterowania silników wchodził tylko w tedy gdy to konieczne.

nie wiem jak tozrealizować, ale tak to widzę, a widzę też, że większość wypowiedzi traktuje o PCcie, autorowi jednak najwyraźniej nie o to chodzi.
Mierz co mierzalne,
a niemierzalne uczyń także mierzalnym"
(Galileo Galilei)


jarekk
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1701
Rejestracja: 17 mar 2006, 08:57
Lokalizacja: Gdańsk

#9

Post napisał: jarekk » 16 wrz 2006, 14:53

Proponuję aby kolega poczytał materiały z :
http://www.ucos-ii.com/

Jest to przykładowy system operacyjny zarówno na PC jak i na mikrokontrolery.
Jego budowa, mechanizmy, serwisy oraz przykłady poniekąd odpowiadają na pytania jak uzyskać "wielowątkowść"

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”