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

STM32 - Silniki krokowe równoległe sterowanie - STM32

15 Wrz 2016 16:19 1377 11
  • Poziom 3  
    Witam,

    za pomocą STM32 F072RB steruje silnikami krokowymi.
    Problem polega na tym iż nie mogę w tym samym czasie mieć włączonych dwóch silników. Włączanie kolejnego silnika następuje po wyłączeniu aktualnie działającego silnika.

    Tu nasuwa się pytanie, jak to zmienić? Tak, aby silniki mogły pracować równolegle niezależnie od siebie tzn. jeden silnik obraca się w prawo, drugi w tym samym czasie w lewo.

    Dziękuję :)

    Program wykonuje się linijka po linijce czyli jego działanie jest prawidłowe. Co należy zmienić alby uruchamiać silniki niezależnie (dwa równocześnie)?

    Kod programu:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Moderator Mikrokontrolery Projektowanie
    @natrov Musisz zacząć od skasowania tego co masz i napisania tego programu od nowa :) Przede wszystkim podbdź się wszelkich opóźnień, od tego są timery. Ustal sobie co ile ma być przerwanie i w jego handlerze steruj silnikami, w sposb nieblokujący. Tzn. jeśli masz odczekać jakiś czas to użyj wielokrotności okresu przerwań timera i co odpowiednie przerwanie steruj konretnym silnikiem. Pozbędziesz się programowych opóźnień to nagleda radę sterować równocześnie wieloma silnikami.
  • Poziom 12  
    natrov napisał:
    Witam,

    za pomocą STM32 F072RB steruje silnikami krokowymi.
    Problem polega na tym iż nie mogę w tym samym czasie mieć włączonych dwóch silników. Włączanie kolejnego silnika następuje po wyłączeniu aktualnie działającego silnika.

    Tu nasuwa się pytanie, jak to zmienić? Tak, aby silniki mogły pracować równolegle niezależnie od siebie tzn. jeden silnik obraca się w prawo, drugi w tym samym czasie w lewo.


    Witam
    Aby silniki pracowały niezależnie od siebie, nieważne czy jeden w lewo a drugi w prawo lub oba w prawo lub lewo w tym samym czasie, musisz napisać sobie funkcję. Mowa o silnikach krokowych, więc w czasie T, jeden musi wykonać x kroków, drugi y kroków.
    Nigdy oba silniki sterowane mikrokontrolerem nie zrobią kroku "w tym samym czasie"(mam na myśli krok), chyba, że silniki są podłączone równolegle lub szeregowo.
    Funkcja jest prosta. Jeżeli silnik A ma wykonać 100 kroków a silnik B 50 kroków, to w przerwaniu wywołujesz step dla A i co drugi step A wywołujesz step dla B.
    Kierunek wybierasz w sterownikach silnika A i B. Oczywiście Timery.
  • Specjalista - Mikrokontrolery
    tobiasz54 napisał:
    Nigdy oba silniki sterowane mikrokontrolerem nie zrobią kroku "w tym samym czasie"(mam na myśli krok)

    Może w jakimś prehistorycznym wynalazku z ery krzemu łupanego jest to prawdą, niemniej jednak na każdym "normalnym" mikrokontrolerze jest to jak najbardziej możliwe, wystarczy użyć kilku timerów z PWM albo zrobic to na jednym timerze ręcznie - w każdym układzie można zmienić na raz stan całego portu, a nie tylko poszczególnych pinów.
  • Poziom 3  
    Mógłbym prosić o przykładowy fragment kodu realizujące w/w zadania? :)

    Dziękuję
  • Użytkownik usunął konto  
  • Poziom 26  
    Dedykowany timer do każdego z silników (o ile masz dużo timerów). Programujesz timer na czas kroku, w przerwaniu wykonujesz krok. Zmiana prędkości - zmieniasz czas timera. Tak jest najprościej, a dodatkowo każdy silnik jest niezależnie rozpędzany i hamowany.
  • Użytkownik usunął konto  
  • Moderator Mikrokontrolery Projektowanie
    Wystarczy jeden na kilka, lecz jeśli mamy wolne timery, to można zrobić dedykowany timer do każdego silnika. A czy timery w ARM są bardziej wyrafinowane do można by się sprzeczać. Niemniej tu żadne wyrafinowanie nie jest potrzebne. Chyba, że autor bezpośrednio steruje mostkiem H.
  • Poziom 26  
    Sterowanie silnikami krokowymi robiłem na ARM-ach, AVR jest trochę za cienki, szczególnie do szybkich obliczeń zmiennoprzecinkowych, które są niezbędne do wyznaczenia drogi hamowania.
    Jak każdy silnik ma dedykowany timer, to łatwiej robić obsługę rozpędzania/hamowania. Mo to szczególnie znaczenie, gdy silniki mocno się różnią parametrami. A poza tym skoro timery i tak są..... to po co kombinować na jednym :D
  • Użytkownik usunął konto