Optymalizacja prędkości jazdy silnika krokowego dla maksymalnego przyspieszenia metodą prób i błędów

4

Piszę kod dla mikrokontrolera, który przyspieszy prędkość silnika krokowego tak szybko, jak to możliwe, dla przyrządu, który buduję, który przesuwa obrabiany przedmiot z jednej pozycji do drugiej wzdłuż liniowej szyny.

To pytanie nie dotyczy modyfikowania układu mechanicznego lub elektrycznego wokół silnika krokowego, ale po prostu szybkości, z jaką silnik krokowy jest przesuwany.

Biorąc pod uwagę żądaną prędkość, zwiększy prędkość silnika krokowego (a więc i prędkości przedmiotu obrabianego) ze stacjonarnego. (Silnik krokowy nie będzie miał żadnego sprzężenia zwrotnego do sterownika innego niż przełącznik na każdym końcu, aby mógł okresowo ustalać swoją pozycję i zatrzymać się, jeśli zostanie utracony / uzyska zbyt wiele kroków w jednym kierunku).

Dlatego będę musiał zaimplementować / napisać funkcję, która daje optymalną prędkość $ s $ (obroty na sekundę) w czasie $ t $ dla maksymalnego przyspieszenia. (Gdzie $ s (t = 0) = 0 $), który mikrokontroler użyje do określenia, jak szybko przyspieszyć obrabiany przedmiot / silnik krokowy.

Funkcja może wyglądać następująco:

$$ s = kt $$

Gdzie $ k $ jest zoptymalizowaną stałą, $ t $ jest w sekundach, $ s $ to obroty na sekundę.

Maksymalne maksymalne przyspieszenie zostanie określone przez wybranie wartości $ k $. Zostanie to określone przez eksperyment, a nie obliczenia.


Chcę wiedzieć:

  • Jeden (lub więcej) wzorów, których mogę użyć. Próbowałem wtedy różnych rywali, zmieniając je, więc znajduję wartości, które powodują dobre przyspieszenie.
  • Strategia określania tych stałych.

Na przykład. używając powyższego wzoru:

  1. zacznij od pewnej wartości $ k = k_0 $
  2. Próba # 1: Uruchom silnik z wartością $ k $, zaczynając od $ t = 0 $. Zapisz prędkość, z jaką silnik nie przyspieszył.
  3. Próba # 2: Podwójne $ k_0 $, nazwij to $ k_1 $. Powtórz krok 2.
  4. Próba # 3: Użyj połowy $ k_0 $ jako $ k _ {- 1} $. Powtórz krok 2.
  5. Jeśli $ k_1 $ daje najwyższą prędkość, podwoj ją jako $ k_2 $.
  6. Jeśli $ k _ {- 1} $ daje najwyższą prędkość, połowa to $ k _ {- 2} $.
  7. Jeśli $ k_0 $ daje najwyższą prędkość, a następnie $ k_1 $, weź średnią jako $ k_ {0,5} $
  8. Jeśli $ k_0 $ daje najwyższą prędkość, a następnie $ k _ {- 1} $, weź średnią jako $ k _ {- 0,5} $
  9. Powtórz krok 2.
  10. I tak dalej

Dalsze myśli

Myślę, że powyższa formuła może działać dobrze, zakładając, że istnieje odpowiednik koła zamachowego przymocowanego do silnika i:

  • nie ma tarcia
  • silnik wywiera stały moment obrotowy przy dowolnej prędkości

Czy to jest poprawne?

Podobnie zakładając:

  • silnik i układ mają zerową masę / bezwładność
  • silnik wywiera stały moment obrotowy przy dowolnej prędkości
  • jedynym oporem wobec ruchu jest tarcie

Następnie silnik może natychmiast przyspieszyć do pełnej prędkości. (Więc $ k $ może być nieskończone). A jeśli jest bezwładność, zakładając, że siły tarcia są stałe (tj. Niezależne od prędkości), zakładając, że jak dotąd mam rację, to formuła jest nadal dobra; $ k $ będzie po prostu niższą wartością.

Ale to pozostawia pytania:

  • Jaki jest typowy związek między prędkością silnika krokowego a momentem obrotowym? Wyraźnie odpada, gdy prędkość wzrasta, w przeciwnym razie nie byłoby ograniczenia prędkości. Tak więc wyraźnie nie będzie brany pod uwagę przez powyższy wzór. Badam ten link co idzie w wiele szczegółów, ale być może istnieją czynniki, które są bardziej znaczące niż inne, lub są bardziej podstawowe modele, które dają dobre przybliżenia.
  • Jakie inne czynniki mogą być istotne, które nie mogłyby być modelowane w powyższym wzorze?
CL22
źródło

Odpowiedzi:

3

Jednym ze sposobów może być próba modelowania i rozumienia problemu fizycznego. W swoim pytaniu jesteś jednak pewien, że wolałbyś podejście empiryczne, w którym stałe są dostrojone, aby doświadczać danych.

Sugerowałbym, że najłatwiejszym i najogólniejszym sposobem jest zastosowanie fragmentarycznego przybliżenia krzywej prędkości. Genetycznie można to zrobić za pomocą podstawa funkcje $ b_i (t) $ takie, że prędkość $ s $ w dowolnym momencie jest podana przez

$$ s (t) = suma {i = 0} ^ {N} b_i (t) $$

Prostym, a w tym przypadku prawdopodobnie wystarczającym, podejściem może być użycie zręcznej prędkości liniowej (odpowiadającej stałemu przyspieszeniu w przedziale czasu). To znaczy, podziel czas na skończoną liczbę kroków w krokach $ t_0, t_1, ..., t_N $ iw każdym takim czasie zdefiniuj parametr $ v_i $ która jest prędkością, która powinna być używana w tym czasie.

Twój algorytm dla silnika mógłby wtedy, na przykład, w dowolnym momencie $ t $ zrobić wyszukiwanie dwusieczne w tablicy $ t_i $ i wykonaj interpolacja liniowa pomiędzy $ (t_j, v_j) $ i $ (t_ {j + 1}, v_ {j + i}) $, aby obliczyć wynik $ s (t) $ w dowolnym momencie.

Prawdopodobnie odkryjesz, że nie musisz dzielić osi czasu na więcej niż kilka (kolejność 10 kroków, a więc kolejność 10 parametrów), aby uzyskać rozwiązanie, które jest akceptowalnie zbliżone do optymalnego. Możesz również eksperymentować z nieciągłymi krokami czasowymi, tak że na przykład krok czasu wzrasta, gdy czas się zwiększa, a zmiana przyspieszenia, którą system może osiągnąć, jest mniejsza.

Możesz także zobaczyć ten przykładowy przykład dla ilustracji, jak blisko optymalnego rozwiązania może być możliwe uzyskanie tylko kilku (10) kroków czasowych.

Dodatkową zaletą takiego podejścia jest to, że można łatwo dostroić prędkość w jednej części procesu bez konieczności dostosowywania parametrów, aby utrzymać odpowiedź w innym czasie. Prowadzi nas to do sugerowanego podejścia do dostrajania parametrów:

  1. Użyj stałego przyspieszenia całego zakresu ($ v_i $ wzrost liniowo) i dostrój go tak, abyś mógł zbliżyć się do prędkości końcowej (patrz próbka).
  2. Dostosuj każdy parametr $ v_i $ indywidualnie, to znaczy najpierw dostosuj $ v_1 $ tak, abyś ty po prostu o może wytrzymać to przyspieszenie w przedziale czasu $ [t_0, v_1) $.
  3. Następnie możesz wykonać ten sam proces dla $ v_2 $ itd. Itd. (I zauważ, że po skonfigurowaniu $ v_i $ możesz przejść do dostrajania $ v_ {i + 1} $ bez konieczności cofania się i dostosowania $
  4. Skonstruowałeś teraz liniowe przybliżenie prędkości optymalnej.
  5. Jeśli masz obszary, w których występują duże zmiany lub dana prędkość jest dobra na początku bloku, ale w końcu się nie powiedzie, zawsze możesz zawęzić „rozmiar siatki” w tym obszarze, wprowadzając jedną dodatkową $ (t, v) $ para.

Strojenie każdego parametru na podstawie eksperymentu może opierać się na procedurze, jak sugerujesz, tj. Podwojeniu $ v_i $, jeśli nie wystąpi żadna awaria, w przeciwnym razie podzielenie między najwyższe wiem dobrze i najniższy znany nie ok .

Calcopedia
źródło