Skocz do zawartości

Skrypt w pythonie, sterowanie silnikiem za pomocą DRV8835


Foxs

Pomocna odpowiedź

Witam, nie znam się za bardzo na pythonie a potrzebuję skryptu do sterowania silniczkiem za pomocą sterownika DRV8835 podłączonego do raspberry.

Wszystko zaczerpnąłem stąd: https://github.com/pololu/drv8835-motor-driver-rpi

from __future__ import print_function
import time
from pololu_drv8835_rpi import motors, MAX_SPEED

# Set up sequences of motor speeds.
test_forward_speeds = list(range(0, MAX_SPEED, 1)) + \
  [MAX_SPEED] * 200 + list(range(MAX_SPEED, 0, -1)) + [0]  

test_reverse_speeds = list(range(0, -MAX_SPEED, -1)) + \
  [-MAX_SPEED] * 200 + list(range(-MAX_SPEED, 0, 1)) + [0]  

try:
    motors.setSpeeds(0, 0)

    print("Motor 1 forward")
    for s in test_forward_speeds:
        motors.motor1.setSpeed(s)
        time.sleep(0.005)

    print("Motor 1 reverse")
    for s in test_reverse_speeds:
        motors.motor1.setSpeed(s)
        time.sleep(0.005)

    print("Motor 2 forward")
    for s in test_forward_speeds:
        motors.motor2.setSpeed(s)
        time.sleep(0.005)

    print("Motor 2 reverse")
    for s in test_reverse_speeds:
        motors.motor2.setSpeed(s)
        time.sleep(0.005)

finally:
  # Stop the motors, even if there is an exception
  # or the user presses Ctrl+C to kill the process.
  motors.setSpeeds(0, 0)

Powyższy skrypt działa dobrze.

Potrzebuję teraz zrobić taki skrypt w którym silniczek będzie obracał się ustaloną ilość obrotów lub czasu jeśli się nie da z obrotami po czym zatrzymywał. I drugi taki sam na wstecznym.

Skrypty te chciałbym wrzucić do automatycznego uruchamiania o danych porach co zapewne mogę zrobić w crontab (działam na ubuntu)

Ma to ogólnie posłużyć do przesuwania małych drzwiczek w lewo i w prawo o ustalonych porach.

Problem jest tylko taki, że przy zamykaniu drzwiczek opierają się one o ścianę i jeśli nie ustawię dokładnych obrotów to silniczek jak niemam może się spalić gdy ustawię ich za dużo. Więc zamykanie musi być dokładnie ustawione, chyba że mogę to jakoś inaczej zabezpieczyć? Przy otwieraniu już nie ma tego problemu, jest względny luz.

Link do komentarza
Share on other sites

Jeśli to jest zwykły silnik DC to nie masz możliwości, aby programowo wymusić obracanie się wału o XX obrotów. Ustawianie czasu pracy silnika "na sztywno" nie przyniesie dobrych rezultatów. Wystarczy, że ktoś/coś zablokuje drzwiczki i wszystko się rozsynchronizuje. Masz dwa wyjścia - enkodery (czujniki zliczające obroty silnika) lub czujniki w drzwiach. Możesz założyć krańcówki po obu stronach przeszkody. Wtedy np. przy zamykaniu drzwi będziesz musiał kręcić silnikiem do momentu, aż dotkną one fizycznie czujnika znajdującego się w ramie drzwi. Sytuacja analogiczna do tego jak steruje się automatycznymi roletami antywłamaniowymi.

Link do komentarza
Share on other sites

Ok rozumiem. Dam radę taki enkoder podłączyć pod obecny setup raspberry + sterownik drv8835?

A silnik to Pololu HP 1000:1, także zakładam że jest zwykły 😛

Mam też wyłączniki krańcowe, da się je podłączyć pod ten sterownik?

I ostatnie pytanie, czy taki silniczek (lub jakiś inny) nie posiadają żadnego zabezpieczenia w razie gdyby coś się zacięło? Czy momentalnie po dojściu drzwiczek do ściany i dalszemu kręceniu się silniczka odrazu silniczek padnie/połamią się trybiki itp. Tak jak Pan stwierdził, poza wyeliminowaniem problemu ściany pozostaje jeszcze kwestia że "coś lub ktoś" niechcąco zablokuje działanie silniczka i co wtedy?

Link do komentarza
Share on other sites

Przed chwilą, Foxs napisał:

I ostatnie pytanie, czy taki silniczek (lub jakiś inny) nie posiadają żadnego zabezpieczenia w razie gdyby coś się zacięło? Czy momentalnie po dojściu drzwiczek do ściany i dalszemu kręceniu się silniczka odrazu silniczek padnie/połamią się trybiki itp. Tak jak Pan stwierdził, poza wyeliminowaniem problemu ściany pozostaje jeszcze kwestia że "coś lub ktoś" niechcąco zablokuje działanie silniczka i co wtedy?

To jest zwykły silnik - płynie prąd to on się kręci (lub chociaż próbuje). To konstruktor musi niestety zadbać o zabezpieczenie. Gdyby to był słabszy silnik to można byłoby jeszcze liczyć, że silnik się zatrzyma i może nic mu się nie stanie. Jednak w przypadku silnika Pololu HP 1000:1 sam producent ostrzega, że: "The recommended upper limit for instantaneous torque is 35 oz-in (2.5 kg-cm) for the 1000:1 gearboxes and 25 oz-in (2 kg*cm) for all the other gear ratios; we strongly advise keeping applied loads well under this limit. Stalls can also result in rapid (potentially on the order of seconds) thermal damage to the motor windings and brushes, especially for the versions that use high-power (HP and HPCB) motors; a general recommendation for brushed DC motor operation is 25% or less of the stall current". Streszczając: mocno obciążony silnik się uszkodzi.

Można podłączyć zarówno enkoder, jak i krańcówki. Jednak obsługa enkoderów nie jest prostym zadaniem i narobisz sobie wielu problemów. Znacznie prościej będzie wykorzystać krańcówki - to są zwykłe przełączniki, które można podpiąć pod GPIO i obsłużyć w Pythonie bardzo łatwo (pokazywaliśmy do w kursie RPi). Niestety nadal nie wyeliminuje to problemu, w którym coś zatrzyma drzwi "po środku". Ciężko tutaj doradzić konkretne rozwiązanie bez ogólnej wiedzy jak te drzwi są zbudowane i napędzane. Jakieś zdjęcia/rysunki techniczne byłyby pomocne.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Całość jest bardzo podobna do przesuwanych drzwi od szafy, drzwiczki tylko jeżdżą na rolkach w lewo i w prawo, w prawo mamy ścianę do której drzwiczki mają się domknąć a w lewo jest już sporo miejsca, bez ścianki zatrzymującej drzwiczki. Niemniej po mojemu jakby tego nie zabezpieczyć to i tak trzeba założyć, że do takowego zacięcia się może kiedyś dojść. Postaram się zminimalizować szansę na to i ewentualnie jakoś przeboleć kupno nowego silniczka raz na jakiś czas o ile nie będzie to zbyt często.

 

Po mojemu powinien być jakiś czujnik w silniku który przy zwiększonym natężeniu siły (czyli zatrzymaniu drzwiczek) powoduje odcięcie prądu. Nie znam się ogólnie na tym ale tak dywaguje. Takie coś byłoby dość pomocne bo inaczej nie widzę możliwości zabezpieczenia się przed ewentualną dość losową sytuacją zatrzymania drzwiczek. Innymi słowy nawet jakbym specjalnie zatrzymał kręcący się silnik to powinien on być w stanie to przetrwać, zatrzymać się lub zacząć kręcić w drugą stronę lub coś w tym stylu. Takie coś jest zdaje się w windach, nawet palca sobie nie można uciąć bo drzwi są automatycznie cofane, nie można czegoś podobnego zastosować tutaj?

Link do komentarza
Share on other sites

Do podłączenia krańcówek nie trzeba żadnych pinów tylko dwie diody.

Co do "czujnika w silniku" - po prostu mierzysz prąd pobierany przez silnik i jego wzrost oznacza, że silnik został zatrzymany. Mam coś takiego w domu (napęd zasłon) na L298N, działa bezbłędnie, co więcej w przypadku jakiegokolwiek zacięcia wyłącza silnik.

Link do komentarza
Share on other sites

4 minuty temu, ethanak napisał:

Do podłączenia krańcówek nie trzeba żadnych pinów tylko dwie diody.

Co do "czujnika w silniku" - po prostu mierzysz prąd pobierany przez silnik i jego wzrost oznacza, że silnik został zatrzymany. Mam coś takiego w domu (napęd zasłon) na L298N, działa bezbłędnie, co więcej w przypadku jakiegokolwiek zacięcia wyłącza silnik.

o świetne, powiesz mi względnie łopatologicznie jak to zrobić, najlepiej na tym sterowniku co ja mam DRV8835 jeśli się da?

W takim wypadku chyba nawet nie trzeba robić krańcówek, po prostu silnik doszedłby do ściany, byłby wzrost napięcia i momentalnie powinien silnik zostać odcięty czyż tak?

Link do komentarza
Share on other sites

19 godzin temu, Jamik napisał:

Jeśli obawiasz się zablokowania drzwi w położeniu, w którym nie zareagują krańcówki, to wstaw sprzęgło, które rozsprzęgli/zerwie się w przypadku blokady. Wtedy nawet zawieszenie się elektroniki nie spali silnika.

Czyli takie coś: https://botland.com.pl/chwytaki-uchwyty-gimbale/2574-magnetyczne-sprzeglo-micro-serwo.html

To by chyba byłoby łatwiejsze do ogarnięcia niż nowy sterownik i sprawdzanie natężenia prądu, tego nie umiałbym zrobić.

Link do komentarza
Share on other sites

Nie znam sił działających w takim układzie, ale chyba takie sprzęgło będzie dla Ciebie za słabe.

19 godzin temu, Foxs napisał:

To by chyba byłoby łatwiejsze do ogarnięcia niż nowy sterownik i sprawdzanie natężenia prądu, tego nie umiałbym zrobić.

Niby tak, ale z drugiej strony nie będziesz znał faktycznego położenia drzwi. Będziesz mógł kręcić ciągle silnikiem, a nie będziesz wiedział czy przesuwasz drzwi, czy są one zablokowane, a Ty tylko kręcisz sprzęgłem.

Link do komentarza
Share on other sites

(edytowany)

No to nie wiem już co będzie lepsze... generalnie najlepiej by było zrobić to bez żadnych zabezpieczeń w sposób który nic i nikt nie zablokuje tych drzwi, tyle że to jest awykonalne :<

Ktoś mi może pokazać taki przykładowy sterownik który mierzy natężenie prądu i który mógłbym podłączyć pod raspberry? Taki o którym pisał kolega @ethanak

Edytowano przez Foxs
Link do komentarza
Share on other sites

Ja akurat żadnego takiego nie używałem, więc nie będą w ciemno doradzał. Akurat do takiego zastosowania zacznie szybciej dobrałbyś podzespoły pod Arduino (które ma ADC). Jednak jeśli dobrze pamiętam chcesz móc zdalnie sterować tym wszystkim przez SSH i stąd głównie wybór RPi?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.