Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Taktowanie silnika krokowego w maszynie CNC

majmaaaaa 19 Cze 2007 11:48 10002 65
  • #1 19 Cze 2007 11:48
    majmaaaaa
    Poziom 10  

    Witam,
    Moje pytanie dotyczy możliwości taktowania silnika krokowego z częstotliwością dochodzącą do 7000 kroków na sekundę.
    Programuję w C# i obecnie stosuje następujące rozwiązanie:
    1. sygnał kroku na LPT
    2. threat.sleep(1) //1 milisekunda uśpienia
    3. zerowanie sygnału na LPT
    4. threat. sleep(1) //1 milisekunda uśpienia

    Uśpienie zastosowałem aby zapewnić wypełnienie sygnału 50%.
    Daje to w efekcie max 500 kroków/sec. co jest wartością bardzo małą jak na moje potrzeby.
    nie mogę zastosować niższej wartości niż 1 ms uśpienia bo w poleceniu sleep mogą występować tylko wartości całkowite (int). Próbowalem już zastosowania innej zmiennej (nie przyjmuje) oraz matematycznego podziału wartości tak aby nadać liczbę <1 (gubi kroki i szarpie).

    Pytanie brzmi, jak to zrobić aby podnieść częstotliwosć taktowania ?
    może inna metoda rozwiązania zadawania sygnałów, może inna metoda zachowania poprawnego wypełnienia przy krótszym uśpieniu? czy jest inne polecenie pelniące tę funkcję poza sleep ?

    0 29
  • SterControl
  • #2 19 Cze 2007 15:47
    MirekCz
    Poziom 35  

    Masz kilka możliwości:

    1.Zamiast wyjścia LPT zastosuj jakiś układ scalony, który będzie wykonywał zadany rozkaz typu "przesuń silnik x o 100 kroków do przodu"

    2.Użyć sleep(0)... :)

    3.Wykonuj przez np. 10ms. tyle kroków ile dasz radę/ile trzeba, a potem rób Sleep(0) - żeby dopuścić inne programy/obsługę zdarzeń do głosu

    Windows nie jest tzw. RTOS i u niego Sleep(1) może trwać nawet 1 sekundę :) Wszystko zależy od twojego procesora i co windows robi.

    0
  • #3 19 Cze 2007 19:09
    majmaaaaa
    Poziom 10  

    1. wolałbym uniknąć, program ma być uniwersalny i nie wymagać dodatkowego hardware'u.
    2. eheheh... próbowałem :) niestety nie chce wspołpracować, bo silnik trzeba jeszcze rozpędzić, czyli przerwę zmniejszać stopniowo, a nie na hurra.
    3. sprobuję, choć obawiam się że będzie znów "czkawka", dam znać o efektach,

    a puki co, może ktoś jeszcze ma złotą myśl, albo robił coś takiego i wie jak sie zabrać za temat ?

    0
  • #4 20 Cze 2007 08:36
    MirekCz
    Poziom 35  

    Efektu "czkawki" raczej nie unikniesz. Zawsze się zdarzy, że przez przynajmniej kilkadziesiąt ms system przestanie wykonywać twój program (doczytanie czegokolwiek z dysku) i w tym momencie silnik krokowy "wypadnie" z rytmu.

    0
  • #5 20 Cze 2007 08:53
    ZlyDotyk
    Poziom 19  

    Po pierwsze w praktyce sleep(1) wcale nie trwa 1 ms tylko znacznie dłużej. Najlepszym wyjściem jest tak jak pisał MirekCz zastosowanie dodatkowego sterownika pomiędzy LPT a silnikiem. Jeżeli bardzo tego nie chcesz to masz dwa wyjścia: bardziej eleganckie: napisać sterownik, drugie znacznie mniej eleganckie: rozkazem RDTSC pobrać licznik cykli procesora w konkretnym odstępie czasu, policzyć jego prędkość i na tej podstawie dobrać parametr dla pustej pętli opóźniającej. Oczywiście zapomnij że w tym wypadku silnik będzie się kręcił równomiernie.

    0
  • #6 20 Cze 2007 13:32
    majmaaaaa
    Poziom 10  

    czyli sleep odpada,
    układ z którego korzystam składa się karty optoizolującej AP3.8.4, trzech sterowników SMC64 (mikrokrok 1/8 daje 1600 kroków/obrót) i trzech silników 57BYGH804 (1,2 Nm, 1,8 stopnia/ktok).

    Obecnie sygnał wysoki i następnie niski nadawany przez PC na port LPT na odpowiedni pin oznacza impuls kroku. Więc czestotliwość zmiany stanu na wysoki na pinie portu LPT daje czestotliwość kroków silnika.
    I tak analogicznie dla trzech osi, oczywiście inne trzy piny obsługują kierunek. Celem jest danie możliwości wyboru prędkości maksymalnej przejazdu do zakresu powiedzmy 7200 kroków/sec, gdy przestawiamy głowicę a nie frezujemy (tak by to nie trwało wieki). Oczywiście potrzebne jest w pewnym momencie rozpędzanie i wtedy trzeba stopniowo zwiększać częstotliwość impulsów aż do osiągnięcia zadanej wartości, więc sztywno zaprogramowany układ zadawania impulsów (np. 7200 razy/sec) pośredniczący między LPT a silnikami nie wchodzi w grę.

    Możesz dokladniej opisać jak i co zastosować (konstruować) w rozwiązaniu "eleganckim", nie mam doświadczenia w konstruowaniu takich "dodatkowych sterowników"?

    0
  • #7 22 Cze 2007 01:20
    marek_Łódź
    Poziom 36  

    Mówimy o windowsach? Pisanie w tym systemie sterowań silnie (nawet niezbyt silnie) uwarunkowanych czasowo jest bezcelowe. W PC zdecydowanie lepiej wypada DOS, w którym można bezproblemowo opanować przerwania, a najlepiej wrzucić jakiś system RT.

    Ja osobiście załatwiam takie sterowania małym mikrokontrolerem, który steruje impulsowaniem, regulacją prądu, rozruchem i zatrzymaniem.
    Można też wrzucić specjalizowany scalak, ale i tak trzeba go będzie skądś wysterować i kółeczko się zamyka.

    0
  • #8 22 Cze 2007 10:55
    favo_78
    Poziom 10  

    Właśnie mam ten sam dylemat - tyle że ja potrzebuje wysterować 1 osią
    Mój program robię w Delphi pod Win XP i na lpt + sterownik smc

    1.Zastosowanie sleep odpada - za długa przerwa między impulsami.
    kombinowałem z pętlą opóźniającą jednocześnie ustawiając priorytet wątku na najwyższy. Efekt był taki, że komputer zamierał włącznie z obsługą kursora myszy, a czkawki i tak były.

    2. Może zamiast lpt uzyć coma? Da się za pomocą coma wygnerować zadaną ilość impulsów w odpowiednim czasie pod Win XP?

    3. Dos odpada bo przydałaby się obsługa sieci LAN Windows no i graficzny interface

    4.Jeśli już mikrokontroler to jaki najlepszy do tego zadania?Nie umiem programować ale może byłby to pretekst żeby się nauczyć? Może orientujecie się czy może istnieje gdzieś taki gotowy projekt - mniemam że musiałby być to programowany licznik w dół. Google milczą w tej sprawie - albo źle konstruowałem zapytanie...

    0
  • SterControl
  • #9 22 Cze 2007 12:24
    marek_Łódź
    Poziom 36  

    W przypadku częstotliwości od kilkudziesięciu Hz w górę, stosowanie biurowego windowsa może być bolesne. Oczywiście można zastosować RS jeśli chcesz, żeby silnik dostał np. 2400 impulsów na sekundę, ale jak chcesz tam regulować prędkość?
    DOS jest dobrą namiastką systemu RT i czasem, zamiast sterownika mikroprocesorowego taniej i prościej jest zastosować starą płytę główną PC z dostawionym na przykład kawałkiem karty compact flash i sieciówką do komunikacji z komputerem głównym (jeśli jest konieczny).
    Jeśli chodzi o generowanie przebiegu wielofazowego na sterowanie silnika, to praktycznie dowolny mikrokontroler sobie z tym poradzi (używałem do tego celu 87C51, a parę lat później ATMega8), przy czym z pecetem chyba lepiej go łączyć przez RS, bo jest on bardziej deterministyczny od LPT.
    Program musi uwzględniać wygenerowanie odpowiedniej liczby impulsów ze zmienną prędkością (rozruch, hamowanie), a w przypadku bezpośredniego sterowania driverów na fazach silnika, dodatkowo generować stosowny przebieg wielofazowy (no i oczywiście komunikację z pecetem). Jak znajdę stare źródła, to tu dorzucę.

    Problem rozruchu-hamowania był już kiedyś dyskutowany na elektroda.pl, więc tylko zasygnalizuję, że krzywa (prosta) narastania/opadania prędkości musi być dobrana do właściwości silnika (moment napędowy) oraz dynamiki napędzanego układu (moment bezwładności i opory na osi silnika). Bez uwzględnienia tych parametrów możemy wprowadzić silnik w poślizg, tym samym pozbawiając go właściwości krokowości (tzw czkawka ;-) ). Oddzielnym problemem jest praca mikrokrokowa, niemniej i tu daje się zastosować realizację programową.

    0
  • #10 24 Cze 2007 17:31
    majmaaaaa
    Poziom 10  

    a jak tego temat rozwiązują pragramy tupu Mach 3 ?
    przeciez one jakoś po tym LPT radzą sobie z tematem, to dlaczego my nie możemy ?

    0
  • #11 24 Cze 2007 18:54
    marek_Łódź
    Poziom 36  

    Cytat:
    a jak tego temat rozwiązują pragramy typu Mach 3 ?

    Obsługę kanału CNC realizują drivery pracujące niejako poza czy ponad windowsem. GUI komunikuje się z tymi driverami przesyłając dane w obie strony, natomiast operacje silnie uwarunkowane czasowo wykonywane są w priorytecie wyższym od samych windowsów.
    Jeśli by się bardzo uprzeć , można by pogrzebać w tym sofcie i wykorzystać te drivery do napisania własnej aplikacji (z pobieżnego przejrzenia dokumentacji wydaje mi się, że producent daje taką możliwość). Natomiast realizacja całej aplikacji cnc jako czystej aplikacji windows jest nie do zrobienia z przyczyn opisanych powyżej, o czym również expressis verbis napisano w dokumentacji programów Mach.

    Reasumując - jest to do zrobienia, ale najpierw trzeba napisać windowsowy driver RT, a potem dopiero do tego sterowanie i GUI. Robota na kilkaset godzin pracy (programowanie+uruchomienie). Oczywiście cały czas mówimy o windowsie biurowym (98, XP, 2000 itp).

    0
  • #12 26 Cze 2007 20:43
    Anonymous
    Użytkownik usunął konto  
  • #13 26 Cze 2007 21:18
    marek_Łódź
    Poziom 36  

    kazaaski napisał:
    Napisz program wątkowo, unikniesz w ten sposób zajmowania zasobów windows. Jako pętle opóżniającą zastosuj instrukcję for.
    A jak jakiś driver się podwiesi na swoim urządzeniu, w tym czasie twój program rozwali maszynę. Wątki nie czynią z windowsów systemu RT i determinizm działania tego systemu jest powiedzmy taki sobie, w dużym stopniu zależny od zainstalowanych driverów urządzeń, które jak wcześniej napisano mogą pracować na priorytecie wyższym od windowsa.

    0
  • #14 27 Cze 2007 13:00
    majmaaaaa
    Poziom 10  

    stosuję programowanie wątkowe, do tego doszedlem już dawno, poprawa jest zauważalna, ale nie wnosi to do tematu za wiele, jak ktoś jest zainteresowany to mogę trochę kodu wkleić, żeby pokazać jak to rozwiązałem.

    co do com'a to może i bym o tym pomyślał, ale podłączam pod niego dalmierz ktory ma pełnić funkcję skanera powierzchni. czyli zostaje LPT :)

    0
  • #15 29 Cze 2007 16:58
    favo_78
    Poziom 10  

    wątkowy sposób jest jak najbardziej ok. Może macie sposoba jak zmusić sleep żeby się generowało zdarzenie częściej niż 50ms (200 kroków na sekunde to mało)???

    0
  • #16 16 Lip 2007 14:42
    lukaszzk
    Poziom 13  

    Na początku witam wszystkich, a po drugie chciałbym pogratulować majmaaaaa zapału do pracy nad tym programem.

    Nie jestem specjalista od cnc ani od silników krokowych ale trochę sie niegdyś tym interesowałem, porobiłem sobie nawet jakieś tam proste sterowniki do silników krokowych wszystko było ładnie i pięknie ale to wszystko było bardzo amatorskie trzeba się było wiec zagłębić dalej w temacie. Utknąłem dokładnie na tym samym etapie co majmaaaaa - wiadomo jeżeli chce się sterować korkowcem w sposób profesjonalny to trzeba użyć sterowanie impulsowego i sterownika bo dopiero wtedy możemy wykorzystać pełne możliwości naszego sprzętu.
    Niektórzy z Was proponowali zastosowanie jakiejś oddzielnej elektroniki do taktowania korkowca rozwiązanie niby słuszne ale długo na nim nie pociągniemy ponieważ profesjonalne sterowniki tez są taktowane sygnałem z zewnątrz.
    Po drugie żeby napisać profesjonalny program do sterowania cnc to musielibyśmy być albo bardzo zdolni albo mieć dużo pieniędzy i sztab osób które znają się na programowaniu i nie mówię tutaj o napisaniu programu w delphi do obliczania miejsc zerowych funkcji kwadratowej.

    Podsumowując moja wypowiedz chciałbym dodać jeszcze że taki program jest do zrobienia oczywiście nie będzie on korzystał z zewnętrznych sterowników bo napisanie sterownika wymaga dużo czasu i wysiłku no i przede wszystkim wiedzy (co oczywiście jest do zrobienia). Na początku nie ma sie co porywać na sterownia trzech osi, wystarczy skupić się na 2 wyjściach z lpt do obsługi jednego silnika. (Pierwsze wyjście to częstotliwość taktująca sterownik, a drugie to kierunek obrotu) ten warunek musi być spełniony aby nasz program był kompatybilny ze sterownikami dostępnymi na rynku.
    Sam przerobiłem kilka takich programów i widziałem naprawdę ciekawe rozwiązania które dawały dość dobre efekty. Chętnie podzieliłbym się moim zbiorem prac na ten temat ale wszystko gdzieś zagubiłem, poniżej dołanczam ciekawy program do analizy (nie jest on mojego autorstwa). Ale dość dobrze pokazuje że niektóre rozwiązania są możliwe do zastosowania.

    mnie się nie udało napisać programu sterującego ale mam nadzieje ze majmaaaaa - pociągnie ten temat dalej i za jakiś czas pochwali się swoimi rozwiązaniami.

    0
  • #17 16 Lip 2007 15:44
    majmaaaaa
    Poziom 10  

    program zaczyna nabierać formy :)
    cały czas jednak nie mogę przebić tematu taktowania, zastosowałem takie rozwiązanie:

    // 10000 to ilość taktów na 1 milisekundę, 500 to liczba milisekund w sekundzie podzielona przez 2 bo stosujemy 2 przerwania na 1 krok

    int czestotliwosc_0 = 10000 * 500 / Convert.ToInt32(czestotliwosc.Text);
    TimeSpan czestotliwosc_1 = new TimeSpan( czestotliwosc_0 );

    i to obsługuje prostą sekwencję komend dla kroku:

    PortAccess.Output(LPT_adress, 3);
    Thread.Sleep(czestotliwosc_1);
    PortAccess.Output(LPT_adress, 0);
    Thread.Sleep(czestotliwosc_1);

    problem polega na tym że ta metoda zasuwa w takim tempie że hoho i nie mogę jej zwolnić :D
    z deszczu pod rynnę, teraz niezależnie jak zdefiniuje parametr ilosci kroków / sekundę (czestotliwosc.Text) to i tak jest porażająca i na oko utrzymuje się na poziomie 8-10tys kroków/sec :)

    ktoś ma pomysł dlaczego nie reaguje na zmiany?
    ustawię 1 krok na sec, wyświetlam sobie parametr czestotliwosc_1 i jest idealnie 0,5 sec. i co z tego skoro program i tak leci ile ma sił.

    0
  • #18 17 Lip 2007 13:44
    majmaaaaa
    Poziom 10  

    Wyczytałem gdzieś że zliczanie taktów działa do 1 ms czyli do 10000 taktów co by się zgadzało z moimi obserwacjami na temat wysokich prędkości.
    kontaktowałem się z autorem programu podesłanego przez lukaszzk i oto odpowiedź jaką uzyskałem:
    "Pod windowsem robiłem osobny Thread który w pętli odczytywał szybki
    timer przez QueryPerformanceCounter."

    znalazłem w nawiązaniu do tematu stronę:
    http://www.codeproject.com/csharp/highperformancetimercshar.asp

    0
  • #19 17 Lip 2007 22:55
    lukaszzk
    Poziom 13  

    QueryPerformanceFrequency(adres zmiennej 64-bitowej) - funkcja umieszcza w podanej zmiennej całkowitej 64-bitowej ilość taktów procesora na 1 sekundę - zanim wrzucisz tę funkcje do swojego programu najpierw pasowało by ją uniezależnić od konkretnego komputera bo sczytywanie czasów pomiędzy poszczególnymi taktami będzie uzależnione od konkretnego sprzętu na którym pracujemy a jak sam powiedziałeś program ma być uniwersalny a więc po określeniu minimalnych wymagań sprzętowych funkcja nie powinna sie zdestabilizować gdy przesiadziemy się z procka 1GHz i 128 MB Ram-u na 3GHz i 1GB Ram-u.

    Byłbym wdzięczny jeślibyś udostępnił kod źródłowy programu oraz obecną z kompilowaną wersję pliku exe (no chyba ze piszesz softa pod linuxem) - ponieważ jeśli chcesz napisać program open source to kiedyś będziesz musiał go udostępnić najlepiej za każdym razem wrzucać aktualną wersję kodu wtedy może więcej osób zainteresuje sie twoim problemem a to tylko może pomoc w udoskonalaniu twojego programu.

    Pozdrawiam

    0
  • #20 18 Lip 2007 10:12
    majmaaaaa
    Poziom 10  

    Postaram się na początek wrzucić plik exe żeby można było obejrzeć jak to działa.

    0
  • #21 21 Lip 2007 13:46
    Anonymous
    Użytkownik usunął konto  
  • #22 21 Lip 2007 22:32
    lukaszzk
    Poziom 13  

    majmaaaaa napisał:
    [...]układ z którego korzystam składa się karty optoizolującej AP3.8.4, trzech sterowników SMC64 (mikrokrok 1/8 daje 1600 kroków/obrót) i trzech silników 57BYGH804 (1,2 Nm, 1,8 stopnia/ktok).


    Po części masz racje, przy sterowaniu 1/8 kroku, skoku wirnika o 1,8 stopnia ,oraz sygnale taktującym na poziomie 7000Hz mamy 262,5 obrotów/minute lub jak kto woli 4,375 obrotów/sekundę.


    kazaaski napisał:
    [...]no chyba że zastosujsz programowe rozpędzanie i hamowanie silnika, ale tego nie uda ci się zrobić pod windows sterując bezpośrednio silnikiem przez LPT. Maksymalnie na co możesz liczyć to 3-4 obr. na sekundę.


    1. Sterowanie silnikiem bezpośrednio z lpt - to dość ryzykowna sprawa, nie polecam.
    2. Kolega pisze uniwersalny program, więc chodzi ty tylko i wyłącznie o współprace ze sterownikami silników.
    3. Windows - to najpopularniejszy system na kuli ziemskiej i może nawet na marsie, nasz kolega musi porostu napisać to pod Windowsa jeśli chce żeby jego program był powszechnie stosowany.
    4. Co do rozpędzania i hamowania silnika to nie jest takie trudne w gruncie rzeczy, można to zrobić w bardzo prostej pętli np. co jedną mikrosekundę zwiększać sygnał taktujący o 25Hz, z hamowaniem jest odwrotnie.
    5. Cała trudność polega jedynie na tym aby znaleźć jakiś super precyzyjny stoper i nie mieszać pracy kompa do sygnałów na wyjściu lpt, tzw przerwania systemowe. Jak zaczniemy podawać częstotliwość taktującą to musi być ciągła od początku do końca. Dochodzi jeszcze problem narastania prądu w uzwojeniach silnika ale to inna bajka.

    Ps: A ja czekam na program do testów i nie mogę sie doczekać :cry:

    Pozdrawiam :D

    0
  • #23 23 Lip 2007 10:59
    marek_Łódź
    Poziom 36  

    lukaszzk napisał:
    4. Co do rozpędzania i hamowania silnika to nie jest takie trudne w gruncie rzeczy, można to zrobić w bardzo prostej pętli np. co jedną mikrosekundę zwiększać sygnał taktujący o 25Hz, z hamowaniem jest odwrotnie.
    Ciekawe :!: Według Ciebie prędkość rozruchu i hamowania nie zależy od dynamiki napędzanego układu. Przydałaby się elementarna wiedza o dynamice procesów fizycznych, bo bez tego może się okazać,że pędzony silnik już nie jest silnikiem krokowym i pracuje z poślizgiem.
    No chyba,że chcesz kręcić samym silnikiemi nie interesuje Cię napędzanie czegokolwiek. Ale również w tej sytuacji silnik ma swój moment bezwładności (jeśli pominiemy niewielki oporowy).

    0
  • #24 23 Lip 2007 14:52
    lukaszzk
    Poziom 13  

    Wiadomo że każde ciało posiadające masę wprawione w ruch obrotowy, musi posiadać moment bezwładności. Co prawda fizykiem nie jestem.
    Dziękuje za trafne spostrzeżenia marek_Łódź i jednocześnie proszę o odpowiedź jak wobec tego jest realizowane programowe rozpędzanie i hamowanie silnika krokowego jeśli nie przez zmienne częstotliwości taktowania silnika - sadze że Twoje cenne uwagi przydadzą się majmaaaaa przy pisaniu programu bo taki jest nas cel.

    0
  • #25 23 Lip 2007 15:27
    marek_Łódź
    Poziom 36  

    Dokładnie tak, jak piszesz, tyle, że najpierw trzeba wyliczyć, czy oszacować moment bezwładności i moment oporowy na osi silnika i na podstawie tych dwóch wartości oraz wartości momentu napędowego wyznaczyć przyspieszenie w układzie.
    Dodatkowym problemem może być zmienny charakter oporów, co wymagałoby korekty przyspieszenia w czasie. Tego typu wskaźniki wyznacza się na ogół przez symulację.

    Oczywiście cały proces dobierania parametrów rozruchu można przeprowadzić eksperymentalnie, znajdując przyspieszenie, przy którym silnik jeszcze się nie ślizga i następnie wprowadzając dodatkowo współczynnik bezpieczeństwa.

    Zatem dobrze by było, żeby program uniwersalny dawał użytkownikowi możliwość wprowadzenia fazy rozruchu/hamowania i ustawienia parametrów tych faz.

    0
  • #26 23 Lip 2007 22:36
    lukaszzk
    Poziom 13  

    Czyli bardzo istotnym elementem jest określenie minimalnego czasu potrzebnego na rozruch silnika, oraz sposobu narastania sygnału taktującego (liniowo lub nieliniowo).

    Może mój przedmówca zna wzory wiążące: moment bezwładności, moment oporowy oraz moment napędowy potrzebne do wyznaczenia czasu oraz charakterystyki sygnału sterującego.

    0
  • #27 24 Lip 2007 02:18
    marek_Łódź
    Poziom 36  

    lukaszzk napisał:
    Może mój przedmówca zna wzory wiążące: moment bezwładności, moment oporowy oraz moment napędowy potrzebne do wyznaczenia czasu oraz charakterystyki sygnału sterującego.


    Cytat:
    J dω/dt = Mn-Mop

    J - moment bezwładności na osi silnika
    Mn - moment napędowy
    Mop - moment oporowy
    ω - prędkość obrotowa


    Przy czym J i Mop niekoniecznie muszą być stałe, natomiast Mn zależy od naszego sterowania silnika (pradu).
    Jeśli znasz przebieg tych parametrów w funkcji czasu, czy prędkości obrotowej (opór może nieliniowo rosnąć z prędkością, ale może również maleć), możesz sobie zasymulować przebieg rozruchu i hamowania używając języka symulacyjnego np. www.sl2000.prv.pl

    Natomiast do wyznaczenia algorytmu minimalnego czasu rozruchu w danych warunkach, przy zmiennym obciążeniu lub/i momencie bezwładności trzeba zastosować metody optymalizacji dynamicznej (rachunek wariacyjny itp).

    Ze względu na złożoność tej problematyki, prościej dobrać te parametry eksperymentalnie, co niestety wymaga przewymiarowania silnika i nie gwarantuje uzyskania optymalnego czasu rozruchu/hamowania.

    0
  • #29 02 Sie 2007 12:44
    majmaaaaa
    Poziom 10  

    Witam ponownie,
    byłem na urlopie stąd chwila milczenia,
    tak korzystam z tego sterownika, jednak nie chcę ograniczać programu tylko do niego bo ograniczeń jest i tak sporo.
    jak zrobić trajektorię rozpędzania wiem, nawet zakładam możliwość regulacji prędkości narastania zbocza, aby umożliwić pracę na mniej dynamicznych układach, przy czym rozpędzanie zapewne byłoby liniowe.

    tak jak kolega wspomniał:
    pytanie brzmi jak sensownie skonstruować w programie timer do tego zadania ?

    zapraszam do zapoznania się z programem,
    przypominam że jest to w zamyśle program do skanowania za pomocą skanera ILD1401 firmy Micro Epsilon więc część opcji bez podłączonego urządzenia będzie niedostępna, ale przecież rozmawiamy o zwykłym poruszaniu głowicy, a to program realizuje.

    wolałbym nie upubliczniać całego kodu ponieważ jest to praca magisterska więc puki jej nie obronię wolę się zabezpieczać, chyba że fragmenty do omówienia, to nie ma problemu.

    plik rar zawiera plik wykonawczy i niezbędną bibliotekę dll.
    program będę aktualizował w tym poście więc proszę o zaglądanie na ostatnią datę modyfikacji.

    6 sierpnia 2007:
    dodalem nową wersję,
    w zakładce "opcje" na samym dole pojawił się podprogramik do odtwarzania obiektów na podstawie wczytanych trzech plików zawierających kolejne pozycje dla osi x, y i z.
    załączam też pliki wynikowe z wykonanych przeze mnie prostych pomiarów, które można wykorzystać do testów.
    jeśli uruchomisz odtwarzanie bez wczytania tablic to wyskoczy błąd (wiem, ale nie zdążyłem już dziś tetgo rozsądnie pokonać)
    poza tym po wykonaniu odtwarzania (zmiana pozycji głowicy), należy po powrocie do głównego okna kliknąć przycisk "aktualizuj pozycję" w celu zapisania właściwego położenia głowicy (względy bezpieczeństwa i poprawności wskazań w okienkach).

    ktoś wie jak mogę to wymusić z jednego form'a w drugim, bez potrzeby manualnej aktualizacji?

    0
  • #30 02 Sie 2007 15:22
    lukaszzk
    Poziom 13  

    Witam
    No to po urlopie to pewno masz więcej energii na działanie, a myślałem że już zrezygnowałeś z tego wyzwania :wink:

    Mam pewien problem z uruchomienie pliku .exe (próbowałem wklejać bibliotekę do katalogu Windows i system32, oczywiście na początku uruchamiałem wszystko w jednym katalogu no ale sam widzisz) :?:
    Wiesz może co to za błąd? (na moje oko jest to nieprawidłowe odwołanie do pamięci ale nie wiem na 100%)

    Widzę że nadal masz problem z odmierzaniem czasu, swego czasu tez potrzebowałem taki programik i stosując sleep() czy timer z Delphi wychodziło na to że 60 sekund trwało około 75, poniżej podpinam program stoper z góry przepraszam z chaotyczną budowę (bo wersja finalna tego projektu niestety nie powstała) program oblicza czas na podstawie taktów procesora na 1 sek, oraz na podstawie rejestrów procesora o ile dobrze pamiętam min czas jaki można osiągnąć to 1 mikrosekunda (0,000001s) a więc można by to zastosować do generowania częstotliwość na poziomie 10 kHz. Program wykonuje proste dodawanie(jednak można tu wstawić inna dowolną instrukcję) w pętli co jakiś czas, przerwę ustawiany suwakiem okienko "dodawaj co" jest wo gule nieaktywne przyciski start, pause wiadomo. Nigdy nie testowałem też tego programu pod lpt, bo jakoś nie miałem ochoty do zabaw z lpt a pyzatym mój przyrząd pomiarowy uległ uszkodzeniu więc defakto nie miałbym jak sprawdzić częstotliwości na wyjściu lpt. Program ma chyba jedną wadę jeśli bardzo obciążysz system to interwały przerwań też nie będą takie idealne, jednak przy małym obciążeniu systemy chyba nie jest tak źle Jak chcesz to rzuć na niego okiem a może znajdzie sie plik ze źródłem.

    Pozdrawiam

    0