Skocz do zawartości

Wzór na okres dla każdego impulsami sygnału? Silniki krokowe


Pomocna odpowiedź

Napisano

Witam piszę w C sterownik silnika krokowego z wykorzystaniem rampy. Wykorzystałem wzór na przyspieszenie i obliczyłem prędkość dla danego impulsu(kroku). W jaki sposób mogę obliczyć okres dla każdego impulsu? Wystarczy mi wzór... Z implementacją sobie poradzę.

http://ww1.microchip.com/downloads/en/AppNotes/doc8017.pdf

http://annals.fih.upt.ro/pdf-full/2013/ANNALS-2013-3-06.pdf

Choć wzór jest prosty, dla danego przyspieszenia nie musisz nawet używać wzoru. Jeśli rampa do maksymalnej prędkości ma np. 30 kroków, to wystarczy policzyć w excelu i stablicować 30 czasów a potem jeździć po niej indexem wyznaczającym aktualną prędkość.

http://ww1.microchip.com/downloads/en/AppNotes/doc8017.pdf

http://annals.fih.upt.ro/pdf-full/2013/ANNALS-2013-3-06.pdf

Choć wzór jest prosty, dla danego przyspieszenia nie musisz nawet używać wzoru. Jeśli rampa do maksymalnej prędkości ma np. 30 kroków, to wystarczy policzyć w excelu i stablicować 30 czasów a potem jeździć po niej indexem wyznaczającym aktualną prędkość.

No tak też zrobiłem na podstawie danych obliczyłem sobie w jakim czasie będzie osiągnięta dana prędkość w excelu. ale bez sensu dawać impuls co taki sam okres czasu bo silnik nie będzie przyśpieszał tylko poruszał się ze stałą prędkością. Chodziło mi o obliczenie okresu. Np jeśli aktualny czas ms jest mniejszy niż 50 ms to jest stan wysoki (stałe wypełnienie) reszta okresu to stan niski. Po czym zeruję timer w przerwaniu i od nowa impulsuję. Słyszałem że wzór na okres to podobno 1000 / aktualna prędkość, ale oś mi się tu nie zgadza bo jak zsumowałem wszystkie wyniki okresów, to wynosiły one więcej niż np. czas rozpędzania.

Czegoś nie rozumiem. Na podstawie wzoru wyliczasz sobie czasy pomiędzy poszczególnymi impulsami STEP, np. pomiędzy ich kolejnymi narastającymi zboczami bo to widzi driver silnika jako żądanie komutacji faz. Sama długość impulsów (stanu wysokiego) jest nieważna. Ważny jest okres.

Zawsze w czasie ruchu silnika musisz wiedzieć w jakim miejscu rampy przyspieszania/hamowania jesteś. Okres następnego impulsu możesz albo stablicować albo wyznaczać w czasie rzeczywistym, choć dla konkretnego silnika to drugie jest stratą czasu procesora.

Zakładając że to stablicowałeś i wyszło, że rampa od zatrzymania do maksymalnej prędkości ma 40 kroków. Masz także jakąś zmienną mówiącą jak szybko jedziesz - to jest indeks do tablicy czasów. Żeby w ogóle ruszyć z miejsca musisz ustawić ją na początek tablicy i zmusić timer by wygenerował pierwszy impuls, dalej jest już łatwo. W obsłudze przerwania od tego timera inkrementujesz tą zmienną i odczytujesz pierwszy (lub kolejny) czas z tablicy ładując go do timera. Jazda po rampie to kolejne inkrementacje tej zmiennej wskazującej kolejne coraz krótsze czasy. Gdy w którymś przerwaniu (tutaj nr. 40) dojdziesz do końca tablicy, dalej zmiennej nie zwiększasz bo czas jest minimalny a prędkość silnika największa. Tak możesz jechać dowolnie długo. Gdy uznasz, że za 40 kroków masz się zatrzymać, zaczynasz zmienną dekrementować zwalniając silnik aż do zatrzymania. Rampy są symetryczne i zawsze po takiej samej liczbie kroków osiągasz taką samą zmianę prędkości kątowej. Nie musisz zawsze wykonywać pełnej rampy, możesz zwalniać lub przyspieszać ale zawsze zmienną index zmieniasz tylko o ±1 względem aktualnego położenia aż uzyskasz docelową prędkość.

Jak łatwo zauważyć, im dłuższa rampa tym więcej jest dostępnych prędkości. Dla tablicy 40-czasowej masz 40 różnych prędkości silnika. Tak samo będzie to działało ze wzorem, tylko liczenia więcej.

Co tu jest trudnego?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...