logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino - płytka Leonardo + sterownik adafruit + dwa silniki krokowe

szop_en 06 Lut 2015 22:35 2076 13
REKLAMA
  • #1 14412042
    szop_en
    Poziom 9  
    Posty: 5
    Witam,
    Jestem osobą stawiającą pierwsze kroki w programowaniu silników krokowych, usiłuje zaprojektować mechanizm do poruszania manipulatorem 3D (mój własny pomysł) do jego sterowania posłuży dokładnie 6 silników krokowych model to : "sm-42byg011" są to silniki bipolarne sterowane PWM. Oczywiście wraz z silnikami otrzymałem do swojej płytki (Leonardo) odpowiednie sterowniki model to : "adafruit motor shield v2" przy pisaniu programu korzystam z biblioteki dołączonej do płytki. Jeden motor shield obsługuje dwa silniki krokowe i tu pojawia się mój problem... Mianowicie podczas jednoczesnego uruchomienia obu silników ich prędkość spada dwukrotnie - błąd ten powiela się gdy dokładam kolejne silniki. Jeżeli pracuje tylko jeden silnik, działa on poprawnie - adekwatnie do zadanej prędkości. Czy ktoś może mi wytłumaczyć w czym tkwi problem ???

    Poniżej wstawiam kod mojego programu:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam.
    Szop_en
  • REKLAMA
  • #2 14412600
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Zapewne w budowie magicznych procedur napędzających silniki. Zgaduję w ciemno, że nie działają one na przerwaniach timera i w związku z tym w danej chwili zajmują się wykonaniem zleconej operacji na jednym silniku, a kiedy ją zakończą - następuje obsługa drugiego. Witaj w świecie Arduino - klocków dla początkujących... środowisko Arduino średnio nadaje się do jakichkolwiek poważniejszych projektów.
  • #3 14413487
    Walentynka
    Poziom 14  
    Posty: 116
    Pomógł: 11
    Ocena: 21
    BlueDraco nie znasz się to się nie wypowiadaj. Przerwania nie maja nic do rzeczy w tych modułach bo komunikacja miedzy nimi jest po i2c. Wiec częstotliwość odpowiedzialna za prędkość silnika generowana jest już przez układ w motorshield. A arduino wysyła tylko odpowiednie rozkazy po i2c do modułu wykonawczego.

    Zwiększasz obciążenie modułu poprzez dodanie drugiego silnika, dlatego zmienia się prędkość, sprawdź czy twój zasilacz ma odpowiednia obciążalność prądową.

    Arduino nadaje się do bardzo skomplikowanych zastosowań wystarczy programować je w C.
  • REKLAMA
  • #4 14414091
    tobiasz54
    Poziom 13  
    Posty: 89
    Pomógł: 2
    Ocena: 4
    Dodam, że na arduino w w obecnym czasie jest oparte całe sterowanie drukarek 3D. Sterowanie(jednocześnie) 5 silnikami krokowymi, odczyt z 2 ADC temperatury, komunikacja z LCD, sterowanie przez uart z PC itd. Soft który powstał na ARM(Smothie) nie jest jeszcze zbyt popularny.
  • #5 14414391
    Konto nie istnieje
    Poziom 1  
  • #6 14418046
    szop_en
    Poziom 9  
    Posty: 5
    Marek_Skalski sprawdziłem prąd oraz napięcie na wyjściu i są to poprawne wartości. Natomiast przepraszam ale nie za bardzo rozumiem o co chodzi z zasilaniem przez jeden jumper ? - nie widze żadnego zdjęcia
  • #7 14418159
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Jeśli to problem wydajności prądowej (w co ne bardzo wierzę), to odpięcie jednego silnika od płytki seterownika przy zachowaniu bez zmian całej elektronoki i oprogramowania powinno skutkować poprawną pracą drugiego silnika.

    Nie jest ważne, kto i jak generuje same sygnały sterowania silnikiem, ważne jest to, kto i w jaki spodób wydaje mu polecenia. Napisałem"zgaduję w ciemno", bo nie znam Arduino ani "shieldów", ale mam troszkę praktyki w programowaniu. ;)
  • #8 14418292
    szop_en
    Poziom 9  
    Posty: 5
    Jesli pracuje jeden silnik to wszystko jest w porządku - jego prędkość jest poprawna, ale kiedy uruchamiam programowo dwa silniki to ich prędkość spada...
  • REKLAMA
  • #9 14418456
    tobiasz54
    Poziom 13  
    Posty: 89
    Pomógł: 2
    Ocena: 4
    Po pierwsze są to silniki krokowe(1,8st 200kroków na 1 obrót), więc w ogóle nie rozumiem dlaczego sterujesz je z PWM.
    Ten sterownik(nie znam go) ma wyjścia do 2(lub wiecej)silników?
    edit:
    Sterownik ma 2 opcje, silniki DC lub krokowe.
    W FAQ na stronie sterownika coś mi sie obiło o oczy. Możesz podłączyc 4 DC lub 2 krokowe. Krokowych nie sterujesz szerokością impulsu, czyli sprawa Twojego softu lub podłączenia.
  • REKLAMA
  • #11 14418638
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Napisałem: test na to, czy jest to problłem sprzętu, czy oprogramowania, polega na sprawdzeniu, jak zachowuje się całość po odłączeniu jednego silnika, z oprogramowaniem i sterownikami dla dwóch silników. Stawiam na to, że tak samo, jak przy podłączonych obu silnikach, co by wskazywało na defekt oprgramowania.
  • #12 14418691
    tobiasz54
    Poziom 13  
    Posty: 89
    Pomógł: 2
    Ocena: 4
    Cytat:

    .. Mianowicie podczas jednoczesnego uruchomienia obu silników ich prędkość spada dwukrotnie - błąd ten powiela się gdy dokładam kolejne silniki. Jeżeli pracuje tylko jeden silnik, działa on poprawnie - adekwatnie do zadanej prędkości.

    Stawiam na to, że silniki są źle podłączone i ew soft jest napisany na silniki DC.
    PWM to szerokość impulsu -> w wyniku ->napięcie na silnik. Tak zachowa się silnik DC jak podłączy się równolegle drugi(spadają obroty). Prawidłowo podłączony silnik krokowy sterowany impulsami(na dwie cewki) jak podłączy się nawet równolegle drugi silnik nie ma prawa zwolnić. Impuls to jeden krok i koniec.
  • #13 14419183
    szop_en
    Poziom 9  
    Posty: 5
    Silnik jest podłączony prawidłowo - zgodnie ze schematem. Więc wnioskuje że to wina tych funkcji które zbyt długo sie wykonują. Postaram sie nad nimi popracować. A jest możliwe zwiększenie częstotliwości podawania impulsów PWM ? czy takie rozwiązanie pomogło by rozwiązać ten problem ?
  • #14 14419900
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Moim zdaniem (dzika spekulacja) jest to efekt błędu w koncepcji tych funkcji, a nie w ich implementacji. Prawdopodobnie trzeba cały moduł stworzyć od nowa, korzystając z przerwania timera.

Podsumowanie tematu

✨ Użytkownik stara się zaprogramować mechanizm do poruszania manipulatorem 3D z wykorzystaniem 6 silników krokowych SM-42BYG011, sterowanych przez Adafruit Motor Shield v2. Problem polega na tym, że podczas jednoczesnego uruchomienia dwóch silników ich prędkość spada, co nie występuje przy pracy jednego silnika. Uczestnicy dyskusji sugerują, że może to być związane z obciążeniem zasilacza, błędami w oprogramowaniu lub nieprawidłowym podłączeniem silników. Wskazują również na możliwość poprawy wydajności poprzez zastosowanie przerwań timera oraz zwiększenie częstotliwości impulsów PWM. Użytkownik potwierdza, że silniki są podłączone zgodnie z instrukcją, a problem może leżeć w funkcjach programowych.
Wygenerowane przez model językowy.
REKLAMA