Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

silnik krokowy 28BYJ-48 zmiana kierunku obrotów

andrew1231 23 Dec 2015 14:08 5643 13
  • #1
    andrew1231
    Level 10  
    Witam!
    Zakupiłem sobie ostatnio silniczek krokowy 28BYJ-48 ze sterownikiem ULN2003. Korzystam z biblioteki Stepper pod Arduino. Podłączam według rozpiski do pinów 8,9,10,11. Wszystko w miarę działa, jednak silniczek obraca się tylko w jedną stronę (zgodnie ze wskazówkami zegara). Doczytałem, że niby wystarczy zmienić wartość "stepsPerRevolution" na ujemną by zmienić kierunek obrotów, ale u mnie nadal obraca się w tę samą. Jak to zmienić?

    Przykładowy program, z którego korzystałem:
    Code: c
    Log in, to see the code
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • #2
    emarcus
    Level 38  
    andrew1231 wrote:
    Witam!
    Zakupiłem sobie ostatnio silniczek krokowy 28BYJ-48 ze sterownikiem ULN2003. Korzystam z biblioteki Stepper pod Arduino. Podłączam według rozpiski do pinów 8,9,10,11. Wszystko w miarę działa, jednak silniczek obraca się tylko w jedną stronę (zgodnie ze wskazówkami zegara). Doczytałem, że niby wystarczy zmienić wartość "stepsPerRevolution" na ujemną by zmienić kierunek obrotów, ale u mnie nadal obraca się w tę samą. Jak to zmienić?

    Przykładowy program, z którego korzystałem:
    Code: c
    Log in, to see the code


    Twój stepper ma inną liczbę kroków niż deklarujesz w programie na 1 obrót wałka samego silnika, a ponadto masz tam zamontowaną przekładnię o przełożeniu ok 1:64, zatem na pełny obrót wałka wyjściowego przypadałoby ponad 4000 kroków.

    Dla swojego testu spróbuj procedury wyjaśnionej w tym atykule:

    http://42bots.com/tutorials/28byj-48-stepper-motor-with-uln2003-driver-and-arduino-uno/
    Będzie wymagane doinstalowanie do Arduino dodatkowej library.

    e marcus
  • #3
    TvWidget
    Level 37  
    Podłączyłem kiedyś ten silnik do fabrycznego sterownika (takiego z regulacją prądu). Uzyskałem identyczny efekt. Silnik kręcił się tylko w jedną stronę.
  • #4
    andrew1231
    Level 10  
    Jak zmieniłem linijkę:
    Code: c
    Log in, to see the code

    na te 4000 lub 4076 to tylko cicho piszczało i silniczek nie ruszył. Zastosowałem ten przykład ze stronki:
    http://42bots.com/tutorials/28byj-48-stepper-motor-with-uln2003-driver-and-arduino-uno/
    Teraz o wiele lepiej się silniczek obraca i już w obie strony. Jednak przy obrocie w prawo obraca się krótką chwilę po czym zatrzymuje i burczy, za chwilę płynnie rusza dalej.
  • #5
    emarcus
    Level 38  
    andrew1231 wrote:
    Jak zmieniłem linijkę:
    Code: c
    Log in, to see the code

    na te 4000 lub 4076 to tylko cicho piszczało i silniczek nie ruszył. Zastosowałem ten przykład ze stronki:
    http://42bots.com/tutorials/28byj-48-stepper-motor-with-uln2003-driver-and-arduino-uno/
    Teraz o wiele lepiej się silniczek obraca i już w obie strony. Jednak przy obrocie w prawo obraca się krótką chwilę po czym zatrzymuje i burczy, za chwilę płynnie rusza dalej.


    Ta ilość 4096 dotyczyła całkowitej ilości kroków silnika do wykonania pełnego obrotu wałka wyjściowego. Twój silnik ma 64 kroki na obrót własnego wałka, a nie 200 jak zadeklarowałeś w programie. Należało więc dostosować skopiowany program do własnego silnika uwzględniając tą poprawkę ilości kroków na obrót samego steppera, oraz dodatkowo w pętli głównej loop() { } zamiast skrótu:
    myStepper.step(stepsPerRevolution);
    należło w nawiasie wstawić faktycznie zadaną ilość kroków czyli 4096
    i ta sama poprawka w drugiej częsci programu dla powrotu wałka do pozycji poczatkowej. Akurat zbieżnym przypadkiem jest tu liczba przełożenia przekładni i=64, oraz liczba kroków silnika na jeden obrót n=również 64; (64 x 64 = 4096 kroków na pełny obrót wałka zespołu silnika krokowego z rzekładnią).

    e marcus
  • #6
    andrew1231
    Level 10  
    Mniej więcej działanie załapałem, tylko nie rozumiem jednego, którą wartość mam wrzucić w zamiast tego stepsPerRevolution? 64 czy 4096? Bo w sumie żadna nie przynosi żądanego skutku :/
    Czy może w ogóle odpuścić używanie tej biblioteki? Wolałem ją, bo jest nieco prostsza :)
  • #7
    emarcus
    Level 38  
    andrew1231 wrote:
    Mniej więcej działanie załapałem, tylko nie rozumiem jednego, którą wartość mam wrzucić w zamiast tego stepsPerRevolution? 64 czy 4096? Bo w sumie żadna nie przynosi żądanego skutku :/
    Czy może w ogóle odpuścić używanie tej biblioteki? Wolałem ją, bo jest nieco prostsza :)

    Przecież od początku ci pisałem, która wartośc co oznacza.
    Ta bibl. jest prostsza, ale nie uwzględnia stopniowego rozpędzania silnika co przy większych momentach bezwładności napędzanej masy może powodowac gubienie kroków.
    Kod na którym wzorowałeś się, był dla zwyczajnego silnika (bez przekładni) gdzie dla pełnego obrotu wału można było posłużyc się tą sama stała wartościa co ilośc kroków na obrót wykorzystywaną przez library. Natomiast pełny obrót wyjścia z przekładni będzie wymagał innej wartości kroków.
    Ponizej masz skorygowany kod z objaśnieniem tej kwestii, gdzie została wprowadzona zmienna kroki_na_1wyj (mozesz ją nazwac jak chcesz), której wartośc możesz dowolnie zmieniac w innej części programu, a także przy niewielkich zmianach w programie mozesz ją kontrolowac z serial monitora.
    Code: c
    Log in, to see the code


    e marcus
  • #8
    andrew1231
    Level 10  
    To rozumiem, tylko właśnie tak jak wcześniej napisałem, nawet zmiana tej wartości nie pomaga... Wrzuciłem ten programik przerobiony i nadal ten sam efekt co poprzednio...
  • #9
    emarcus
    Level 38  
    andrew1231 wrote:
    To rozumiem, tylko właśnie tak jak wcześniej napisałem, nawet zmiana tej wartości nie pomaga... Wrzuciłem ten programik przerobiony i nadal ten sam efekt co poprzednio...


    To sprawdź jeszcze kolejnośc podłączeń silnika i ULN:
    silnik krokowy 28BYJ-48 zmiana kierunku obrotów


    e marcus
  • #10
    andrew1231
    Level 10  
    Tak, kilka razy sprawdzałem. Z Arduino do sterownika mam dobrze podłączone. Natomiast ze sterownika do silniczka to na wtyczkę jest, że odwrotnie się włożyć nie da, więc raczej musi być prawidłowo.
  • #11
    emarcus
    Level 38  
    andrew1231 wrote:
    Tak, kilka razy sprawdzałem. Z Arduino do sterownika mam dobrze podłączone. Natomiast ze sterownika do silniczka to na wtyczkę jest, że odwrotnie się włożyć nie da, więc raczej musi być prawidłowo.


    W takim razie spróbuj jeszcze zmienic ilośc kroków na obrót dla silnika zamiast 64 wpisz mu 32 oraz dla pełnego obrotu wyjścia zamiast 4096 byłoby 32 x 64 = 2048.

    Niektóre źródła podają że ten silnik jest:
    (Internal Motor alone)5.625° (64 steps per revolution)
    w innym miejscu zaś znajdziesz :
    (Internal Motor alone)11.25° (32 steps per revolution)

    e marcus
  • #12
    andrew1231
    Level 10  
    Po tej zmianie silniczek kręci się tylko wolniej, a tak to nadal bez zmian...
  • Helpful post
    #13
    emarcus
    Level 38  
    andrew1231 wrote:
    Po tej zmianie silniczek kręci się tylko wolniej, a tak to nadal bez zmian...

    "-bez zmian.... czyli błędnie..(?)
    Nie znając dokładnie objawów 'błędnego kręcenia' silnika, nie znając również pod które piny są podłączone początki cewek (płytka drivera - silnik, identyfikacja cewek 1-2-3-4), możesz dalej kontynuowac metodę prób i eliminacji błędów.

    Wychodząc z założenia że w trybie wysterowania 4-sekwencyjnym, kolejnośc zasilania cewek steppera winna byc 1, 3, 2 ,4, 1, 3,.... itd.;
    -na płytce Drivera ULN masz 4 diody i one winny zapalac się w tej samej kolejności. Jeżeli jest inaczej, to możesz odpowiednio zmienic podłączenie pomiędzy arduino i wejścia do płytki drivera, lub też możesz osiągnąc ten sam efekt zmieniając kolejnośc wysterowania w samym programie edytując:
    Stepper mystepper(STEPS_per_Rev, 8,10,9,11)
    Naturalnie ten sam efekt jest możliwy do osiągnięcia, zmieniając podłączenia cewek silnika do wyjśc z płytki, ale tam masz podłączenie na zespolonej wtyczce, więc łatwiej jest dopasowac sekewncję sygnału przed driverem.

    e marcus
  • #14
    andrew1231
    Level 10  
    Wygląda na to, że świecą się w odpowiedniej kolejności. Ale wydaje mi się, że jak zmienia się kierunek obrotów, to powinny świecić się inaczej (w innej kolejności zasilać cewki), a tu jest to samo.. No cóż, chyba po prostu wezmę się za bibliotekę AccelStepper i w wolnej chwili ją rozgryzę.
    Dziękuję za poświęcony czas i pomoc. :)
    Zamykam temat