Synchronizacja pracy kilku silników krokowych
-
Autor tematu - 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
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:
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 2
- Posty: 1701
- Rejestracja: 17 mar 2006, 08:57
- Lokalizacja: Gdańsk
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.
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.
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 1
- Posty: 863
- Rejestracja: 02 lip 2004, 23:38
- Lokalizacja: --
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.
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 - Nowy użytkownik, używaj wyszukiwarki
- Posty w temacie: 3
- Posty: 3
- Rejestracja: 13 wrz 2006, 19:24
- Lokalizacja: pl
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.jarekk pisze:Podaj konkretne zastosowanie(lub problem)- co potrzebujesz zrobić, bo Twoje pytanie jest zbyt ogólne.
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.
Zasadniczo masz rację. Nie chodzi mi o podanie dokładnego algorytmu, a przykładowe ogólne rozwiązania (zrealizowane w praktyce)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.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 1
- Posty: 2173
- Rejestracja: 29 lip 2005, 15:07
- Lokalizacja: Warszawa
- Kontakt:
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...
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)
-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 1
- Posty: 391
- Rejestracja: 31 paź 2004, 13:34
- Lokalizacja: Bytom
- Kontakt:
To logiczne, ale niewątpliwie to forum jest po to by prowadzić tu dywagacje i na takie tematy.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.
Nili tu zdaje mi się pisze o procku typu AVR czy ARM, nie zaś o sterowaniu z PCta.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.
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.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ć.
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.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...
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)
a niemierzalne uczyń także mierzalnym"
(Galileo Galilei)
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 2
- Posty: 1701
- Rejestracja: 17 mar 2006, 08:57
- Lokalizacja: Gdańsk
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ść"
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ść"