logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Potrzebuje pomocy w napisaniu programu (SILNIK UNIPOLARNY)

norahim 06 Mar 2011 22:17 2266 11
  • #1 9244959
    norahim
    Poziom 12  
    Witam,
    od pewnego czasu przeszukuje internet poszukiwaniu pomocy w napisaniu programu do uC, który będzie sterował silnikami do maszyny CNC. Nie znając wogóle tematu w kierunku silników krokowych, do dnia dzisiejszego zrozumiałem sposób sterowania owymi silnikami. Wybrałem sterowanie półkrokami. Również pisze oprogramowanie na system WINDOWS przetwarzający polecenia GCODE na sygnały przesyłane przez LPT to uC, z tym nie będzie problemów. Wracając do sedna, w programowania uC siedze dopiero 2 dzień. Ułożyłem sobie w głowie algorytm programu jaki mam napisać do uC. Więc Atmega8 odczytuje stan z 2 pinów; jeden tj sterowanie prawo lewo, drugi tj. zrób krok a następnie wykonuje krok silnika (w tablice wpisuje stany pinów dla 8 taktów silnika), o takt ++ badz --; Założyłem ze będe pisać w GCC na AVRStudio.

    Moje pytania czy stany z pinów odpowiadającym kolejnym operacjom do wykonania wrzucać na stos czy po wczytaniu odrazu je wykonać. Nie wiem jak to będzie się synchronizować z PORTEM LPT.

    Dalsze pytania będą wychodzić w trakcie tworzenia programu.

    PS. Nie moge ściągnąc gotowców, czytałem już wiele poradników, potrzebuje kogoś kto mnie naprowadzi poprzez tenże problem.
  • Pomocny post
    #2 9245125
    tmf
    VIP Zasłużony dla elektroda
    Jak już pakujesz procesor (po co) to go chociaż wykorzystaj. Czyli wysyłaj mu polecenie np. zrób 10 kroków w lewo. Alternatywnie wywal procesor i zastosuj jakiś gotowy sterownik silnika krokowego.
  • Pomocny post
    #3 9245172
    janbernat
    Poziom 38  
    Z komputera nie uzyskasz stabilnej częstotliwości- chyba że przejdziesz na DOS.
    A jak z windy albo linuksa- gdzie nie masz bezpośredniego dostępu do portów- nie na stos- ale do bufora.
    Bufor musi być dość duży.
    Swoją drogą- jestem operatorem i programuję maszyny CNC.
    Nie chciał bym być na miejscu tego kto to ma obsługiwać.
    p.s.
    Co to jest Qc?
    O Qt- wiem że jest.
  • #4 9246551
    norahim
    Poziom 12  
    Jak duży powinienem zrobić bufor, na ile taktów silnika?

    Dodano po 19 [minuty]:

    
    #include <avr/io.h>
    
    int tab[8];
    int lewo(int x);
    int prawo(int x);
    
    int main()
    {
    	tab[0]=9;
    	tab[1]=8;
    	tab[2]=10;
    	tab[3]=2;
    	tab[4]=6;
    	tab[5]=4;
    	tab[6]=5;
    	tab[7]=1;
    
    	int wsk=0;
    	while(1)
    	{
    		//odczytaj z pinów//
    		//PIN1 = pin 1; - odpowiedzialny za wykonanie kroku
    		//PIN2 = pin 2; - prawo badz lewo
    		
    		/*if(PIN1==0)
    		{
    			if(PIN2==0)
    			{
    				wyslij na piny sekwencje tab[wsk]; nie wiem czy ma być to binarnie w hex..
    				wsk++;
    			}else if(PIN2==1)
    					{
    						wyslij na piny sekwencje tab[wsk]; nie wiem czy ma być to binarnie w hex..
    						wsk--;
    					}
    		}
    		*/
    	}
    }
    


    Mam 18 lat zaczynam przygodę z mikro-kontrolerami. Nie wiem jak wygląda synchronizacja z timerem w atmedze do odczytywania stanów logicznych z pinów.
  • Pomocny post
    #5 9246624
    tmf
    VIP Zasłużony dla elektroda
    W ogóle nie robić, przynajmniej nie w takim sensie o jakim myślisz. Zamień komendy języka sterującego CNC, na coś prostszego, np. polecenie przekręć się o ileś obrotów, które zinterpretuje procesor. Takie polecenia z kolei warto zbuforować. A bufor zastosuj największy na jaki starczy ci pamięci. Nigdy nie wiadomo na jak długo Windows wywłaszczy proces.

    Dodano po 2 [minuty]:

    Co do pokazanego kodu - tam gdzie masz znak = (przypisanie) ma być == (porównanie). Poza ty twój kod będzie błędnie działał - robienie kroku musi być wyzwalane zboczem a nie poziomem. Inaczej będziesz robił kolejne kroki tak długo jak długo będzie utrzymywany dany poziom sygnału (chyba, że tak ma być), co przy sterowaniu z Windowsa może być problemem.
  • #6 9246649
    norahim
    Poziom 12  
    Rozumując procek będzie wykonywał nieprzerwanie kroki dopóki na PIN1 nie pojawi się wartość 1? Po czym kontynuuje gdy zaistnieje wartość 0?
  • Pomocny post
    #7 9246670
    janbernat
    Poziom 38  
    Jak potrawisz napisać program na komputer przeliczający położenie narzędzia na kroki to już dobrze.
    Potem przesłać cały program przez RS do procesora i zapisać w jakiejś pamięci szeregowej np. po SPI.
    Potem przechodzisz z trybu transmisji na tryb wykonywania programu i ciągniesz dane z tej pamięci do procesora który w tym trybie przesyła dane na swoje wyjścia do wykonania.
  • #8 9246700
    norahim
    Poziom 12  
    Moja koncepcja działania jest taka:
    Program na WIN przetwarza polecenia g code na ruchy silników krokowych, po czym te polecenia przesyłam poprzez port LPT. Biorę dwie linie z portu, jak już pisałem jedna odpowiedzialna za ruch prawo lewo druga za zrobienie kroku. Te stany logiczne zapisuje do tablicy w procku. Po czym uC na spokojnie powtarza zbuforowane stany logiczne na ruchy silnika. Ma to być maszyna CNC więc analogiczne będą trzy sterowniki.

    Jest to wyłącznie moja koncepcja, którą wywnioskowałem z pracy silników krokowych.
    Czy jest to odpowiedni tok myślenia?
  • Pomocny post
    #9 9246735
    tmf
    VIP Zasłużony dla elektroda
    Niestety nie, przy takim przesyłaniu danych jakie założyłeś (LPT). Potrzebny jest ci jeszcze jeden sygnał - zegar taktujący transmisję, ew. zegar można zakodować w postaci np. kodu manchester w sygnałach określających kierunek. Ale i tak IMHO koncepcja jest kiepska.
    Po pierwsze zrób to od razu na USB, bo LPT wkrótce ciężko będzie znaleźć, po drugie jak już pisałem przetłumacz te polecenia na coś prostszego, co zrealizuje mikrokontroler. Np. zrób 100 kroków w prawo. Po co wysyłać skomplikowane przebiegi jeśli można to elegancko załatwić małym poleceniem? Nawet jeśli nie na USB to chociaż na RS232 - zawsze to mniej przewodów i łatwiejsze sterowanie z Windowsa.
    A przy okazji - jakie masz silniki? Jakie parametry? Bo w zależności od użytego kontrolera, zrobienie półkroków może nie być takie łatwe.
  • Pomocny post
    #10 9246748
    janbernat
    Poziom 38  
    Prawie.
    Ale usiłujesz odwzorować te ruchy silników jakoś dziwnie.
    Przecież musisz te dane zapisać w jakiejś postaci.
    Najpierw w postaci pliku na PC.
    Normalna postacią są bajty- a nie jakieś odwzorowanie stanu pinów w LPT.
    Potem ten plik przesyłasz przez RS- bo to najbardziej przychodzi mi do głowy- i zapisujesz w jakieś tablicy w procesorze.
    Jak plik jest mały to w RAM procesora.
    Potem odczytujesz i wykonujesz.
    Będziesz miał model prawdziwego sterownika CNC- takiego jak robi Fanuc czy Sinumeric.
  • #11 9246819
    norahim
    Poziom 12  
    Wzorowałem sie komunikacja Równoległą w tym samym czasie moge sterować 3 silnikami uProcki maja tylko upłynnić pracę maszyny ze względu na niestabilna prace LPT.
    tak jak w oprogramowaniu emc2
    Potrzebuje pomocy w napisaniu programu (SILNIK UNIPOLARNY)

    Dodano po 16 [minuty]:

    Co do taktów zegara ma do dyspozycji 8 bitów
    00 00 00 00
    -- XX YY ZZ

    jeden najstarszy bit może posłużyć jak symulacja ZEGARA wysyłająca na przemian 0 i 1
  • #12 9246878
    janbernat
    Poziom 38  
    Podobnie robił to CNCgraf.
    Ale pod DOS-em.
    Odkąd zaczęły królować Windowsy to zrobili sterownik o jakim piszemy.
    Przez USB przesyłane dane do procesora- oni to zrobili na FPGA- i potem wykonywanie programu.
REKLAMA