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

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

szop_en 06 Lut 2015 22:35 1413 13
  • #1 06 Lut 2015 22:35
    szop_en
    Poziom 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: cpp
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam.
    Szop_en

    0 13
  • Filament
  • #2 07 Lut 2015 08:57
    BlueDraco
    Specjalista - Mikrokontrolery

    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.

    0
  • #3 07 Lut 2015 14:00
    Walentynka
    Poziom 14  

    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.

    0
  • Filament
  • #4 07 Lut 2015 16:53
    tobiasz54
    Poziom 12  

    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.

    0
  • #5 07 Lut 2015 18:07
    Marek_Skalski
    Moderator Projektowanie

    Nie do końca się z tym zgodzę. Arduino jest tylko interpreterem i parserem G-kodów, rozsyłającym polecenia do rzeczywistych sterowników opartych w większości o układy Allegro Micro. A do tego zadania nie trzeba ani mocy obliczeniowej, ani wydajnych peryferiów.
    Poza tym, skoro już wymieniasz te wszystkie opcje, to dodaj jeszcze 6 krańcówek i obsługę karty pamięci z systemem plików FAT.
    Co do Smoothie board, zadanie podobne, ale ma kilka istotnych poprawek i jak dla mnie daje większe możliwości po względem kontroli. Po pierwsze PIDy działają prawidłowo i mam stabilne temperatury, po drugie silniki mogą pracować szybciej, po trzecie mam obsługę sensora poziomu (Levi-Z), więc stół nie musi być idealnie płaski. Jedyna wada, to bardzo delikatna konstrukcja płytki pośredniej dla LCD i konieczność montażu dodatkowego stabilizatora napięcia.
    A co do głównego tematu tego wątku... Najpierw sprawdziłbym wydajność źródła prądu. Jeżeli to jest ok, to sprawdziłbym konfigurację płytki. Może całe zasilanie leci przez jeden jumper widoczny na zdjęciach?

    0
  • #6 08 Lut 2015 17:10
    szop_en
    Poziom 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

    0
  • #7 08 Lut 2015 17:36
    BlueDraco
    Specjalista - Mikrokontrolery

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

    0
  • #8 08 Lut 2015 18:07
    szop_en
    Poziom 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...

    0
  • #9 08 Lut 2015 18:46
    tobiasz54
    Poziom 12  

    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.

    0
  • #11 08 Lut 2015 19:30
    BlueDraco
    Specjalista - Mikrokontrolery

    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.

    0
  • #12 08 Lut 2015 19:46
    tobiasz54
    Poziom 12  

    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.

    0
  • #13 08 Lut 2015 21:39
    szop_en
    Poziom 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 ?

    0
  • #14 09 Lut 2015 07:27
    BlueDraco
    Specjalista - Mikrokontrolery

    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.

    0