Skocz do zawartości

Pomoc Sterowanie silnikiem krokowym stm32f103rb


Pomocna odpowiedź

Napisano

Witam

od razu chciałbym zaznaczyć że jestem zielony jeśli chodzi o programowanie mikrokontrolerów. Jak w temacie "sterowanie silnikiem krokowym" ma się sprowadzać do tego aby generować impuls na jednym z pinów mikrokntrolera. W założeniach mam zadawać prędkość minimalna i prędkość maksymalną(w krokach na sekundę) oraz czas, w którym prędkość ma wzrosnąć z wartości minimalnej do maksymalnej. Tutaj pojawia się problem ponieważ nie wiem w jaki sposób mógłbym ten temat przyspieszenia ugryźć. Prośbo pytanie z mojej strony jest takie czy byłby ktoś w stanie nakierować mnie lub dać kilka porad jak powinno się to zrobić?.

Pozdrawiam

Są na to proste wzory. Podczas rozpędzania i hamowania powinieneś zachować stałe przyspieszenie kątowe więc czasy nie mogą się zmieniać co stały kwant. Jakbyś się chwilę zastanowił, to pewnie byś rozwiązanie sam wymyślił. Na szczęście ktoś to już zrobił i znalazł proste wzory iteracyjne bez jakiejś wypasionej arytmetyki, bo w czasie ruchu silnika szkoda czasu małego procesorka na licznie ułamków.

Zacznij od tej noty ATMELa:

http://www.atmel.com/images/doc8017.pdf

Poczynając od rozdz. 2.2 masz tam podstawy generacji czasów między impulsami/krokami przy rozpędzaniu i hamowaniu. Jest też opisana generacja całego "trapezu", bo ciekawym zadaniem jest wykonanie w całym ruchu łącznie tylu kroków ile potrzebujesz przy zachowaniu zadanego profilu przyspieszeń.

Napisz co robisz i do czego te silniki chcesz wykorzystać.

Generalnie wszystko ma się ograniczać do zadawania prędkości minimalnej, prędkości maksymalnej, liczby kroków do wykonania, przyspieszania i hamowania według tej rampy, lecz żadnego silnika nie mam podłączać jedynie poprawność wykonanego zadania sprawdzić na oscyloskopie

Nie rozumiem Pana wypowiedzi czy gdziekolwiek napisałem, że oczekuje gotowego programu ? spytałem grzecznie czy mógłby ktoś mógłby mnie nakierować lub dać kilka porad. Rozumiem że dla większości osób temat jest łatwy, lecz jak zaznaczyłem wcześniej jestem w tym temacie kompletnie zielony i zwyczajnie mając problem poprosiłem o pomoc w jego rozwiązaniu nie oczekując, że ktoś to rozwiązanie podstawi mi pod nos.

Rozumiemy do czego "wszystko ma się ograniczać", ale czy mógłbyś w jakikolwiek sposób odnieść się do tego co już dostałeś? Czy przeczytałeś notę ATMELa? Czy rozumiesz co tam jest napisane? Czy umiesz to przenieść na algorytm? Czy w ogóle jest jeszcze jakiś problem?

Skoro zapytałeś jak liczyć rampy rozpędzania/hamowania i dostałeś odpowiedź, to wszystko powinno być jasne. Przecież nie trzeba budować drivera i podłączać silnika skoro nie musisz. Napisz kod wg zadanych wzorów - najgorsza praca czyli analiza problemu już została wykonana. Tam nawet jest jakiś przykładowy program, który zdaje się robi (częściowo?) to co chcesz uzyskać. Obejrzyj go, zrozum jak dział, napisz własny, lepszy lub inny. Nawet jeśli ten ATMELowy robi coś zupełnie innego, na pewno ma w sobie jądro liczące czas następnego kroku wg zadanego przyspieszenia. Jak zrozumiałem z tym miałeś problem a nie z liczeniem kroków w ogóle albo jazdą ze stałą prędkością, czyż nie?

Właśnie dlatego, że Twoja odpowiedź jest od czapy to deshipu założył, że nie chcesz żadnej pomocy tylko gotowca. Ja też tak to odebrałem, ale na szczęście wczoraj musiałem wcześniej pójść spać 😉 i piszę dopiero dzisiaj.

Bądź bardziej komunikatywny. Forum nie jest magiczną skrzynką z której wyskakują zawsze pełne i gotowe odpowiedzi.

Za wszelkie nieporozumienia przepraszam po prostu chciałem wyjaśnić wszystko i zwyczajnie odpowiedzieć na to co robię i do czego te silniki są mi potrzebne. Otrzymana pomoc od Pana mi pomogła za co dziękuję. Myślę, że z noty atmela wszystko jest w miarę zrozumiałe i teraz zabieram się za pisanie kodu. Jeszcze raz bardzo dziękuję za pomoc.

Pozdrawiam

Często jest tak, że dla danej mechaniki, typu i obciążeń silnika przyspieszenia są stałe. Nie musisz za każdym razem liczyć wszystkiego od nowa na bieżąco. Ja często robię tak, że prostym arkuszem wyznaczam sobie a priori tablicę długości czasów kolejnych kroków dla zadanej rampy, liczonych w ilości tyknięć timera dla zadanego zegara procesora. Rampy zwykle są krótkie, rzędu kilkunastu/kilkudziesięciu kroków. Ponieważ w tablicy kolejne pozycje to czas coraz szybszego kroku to wystarczy, że masz tylko index do tej tablicy i on wyznacza po prostu aktualną prędkość, bo pokazuje na jak długo zaprogramować timer by zgłosił następne przerwanie w którym dokonasz kolejnej komutacji faz. Startujesz zawsze od indexu=0 i jedziesz w górę (+1 po każdym kroku) aż do zadanej prędkości gdzie index już nie rośnie a potem go dekrementujesz przy hamowaniu. Ponieważ wiesz jak wysoko jest index, wiesz także jak długa była rampa rozpędzania i jak długa będzie (symetryczna) rampa hamowania. Z tym to sobie najmniejszy procesorek poradzi, bo niczego nie trzeba liczyć oprócz kroków.

A nawet jeśli przyspieszenia są zadawane i nieznane z góry (ale stałe w czasie ruchu), możesz sobie tę tablicę wyznaczyć w RAMie zanim zaczniesz kręcić. Wtedy także odpadają wszelkie obliczenia podczas jazdy.

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...