Skocz do zawartości
tomek242

Beagle Bone Black + Python + pytanie laika

Pomocna odpowiedź

Witam.

Pomimo podeszłego wieku nie rozumiem pewnych rzeczy.

Jakoś nie idzie mi analiza a przykładów "z książki" nie potrafię przełożyć na hmmm moje potrzeby, zatem znalazłem konkretny przykład na podstawie którego chcę coś "dłubnąć".

Cóż wychowałem się na technice analogowej, a szczytem marzeń było w moich czasach skonstruowanie solidnego zasilacza regulowanego i posiadanie HiFi UNITRA, ale do rzeczy - mam taki wzór programu w Python - Kod dotyczy obracania silnikiem wyposażonym w enkoder o takich parametrach: 1000 zmian stanów / 3 obroty koła:

#!/usr/bin/my_python

import Adafruit_BBIO.PWM as PWM
import time

pin = "P8_13"

PWM.start(pin,0)
for i in range(0, 100):
             PWM.set_duty_cycle(pin,75)
             time.sleep(.1)

PWM.stop(pin)
PWM.cleanup()

Rozumiem że linijka import

Adafruit_BBIO.PWM as PWM

to import biblioteki ADFRIUT_BBIO i ustawienie jako obsługującej we/wy mocy dla obsługi złącz jako zmiennej PWM - czy tak? Rozumiem też, że to napisany jakby przez kogoś gotowiec przez kogoś do obsługi we/wy mocy dla naszych komputerków?

1/ Co to znaczy import time? Czy to biblioteka do obsługi czasu, znalazłem co prawda opisy - ale po angielsku i niestety nie wszystko rozumiem.

2/ Przypisanie

pin=P8_13

to jest zrozumiałe - przypisuję zmiennej pin numeru fizycznego pinu urządzenia (komputera).

3/

PWM.start(pin,0)

- rozumiem zainicjowanie zmiennej PWM a co za tem idzie obsługi biblioteki, o której mowa wyżej dla zadanego wcześniej pinu przypisanego do zmiennej pin? Nie rozumiem natomiast tego 0 - zera w nawiasie???

4/

for i in range(0, 100):
        PWM.set_duty_cycle(pin,75)
        time.sleep(.1)

- nie bardzo rozumiem konstrukcję takiej pętli w Pythonie, czy może mi ktoś wytłumaczyć krok po kroku co się tutaj dzieje?

To

i in range(0, 100):

oznacza zadeklarowanie "for" - dla zmiennej "i" w zakresie 0 do 100ms - jak rozumiem określony tu jest czas, wykonaj

set_duty_cycle(pin,75)

- tylko co oznacza ten duty_cycle??

time.sleep(.1)

- rozumiem, że to jest instrukcja zawieszenia wykonania bieżącego hmmm cyklu zegara inicjowanego na początku biblioteką time?

Wybaczcie, że... że może tak infantylnie i sztubacko ale mam nadzieję, że precyzyjnie zarzuciłem, nakreśliłem zagadnienie.

Udostępnij ten post


Link to post
Share on other sites

@tomek242: a jak to serwo jest sterowane? Tzn. czy masz jakieś konkretne dane niż tylko ilość kroków na obrót? Bo skoro piszesz o 3 obrotach to nie jest serwo ze skrajnymi pozycjami tylko tzw. serwo 360 stopni?

Dlaczego o to pytam? Już mówię: serwa są sterowane sygnałem PWM - tj. sygnałem prostokątnym o konkretnej częstotliwości (czas trwania jednego okresu), o konkretnej polaryzacji i konkretnym WSPÓŁCZYNNIKU WYPEŁNIENIA (to jest ten duty_cycle). No i tu się zaczyna zabawa.

Dla serw o ustalonych pozycjach krańcowych lewo-prawo sterowanie PWM polega na wygenerowaniu sygnału PWM o odpowiednim wypełnieniu (duty_cycle_min odpowiada jednej ze skrajnych pozycji, a duty_cycle_max skrajnej przeciwnej) - sygnał może być generowany przez cały czas, a pozycja serwa jest USTALONA w takim kącie wychylenia jaki jest aktualnie duty_cycle.

Z reguły duty_cycle_min to 0%, a duty_cycle_max to 100% trwania jednego okresu, tzn. jest to czas trwania stanu wysokiego sygnału prostokątnego do czasu trwania jego całego okresu (czas stanu H + czas stanu L dla danej częstotliwości PWM)... Nie wiem czy to załapałeś...🙂

Dla przykładu:

- PWM o częstotliwości 1Hz - czas trwania pełnego okresu = 1s.

- Wypełnienie (duty cycle) 50% - stan wysoki = 0,5s, stan niski = 0,5s

- Wypełnienie 10% - stan wysoki = 0,1s, stan niski = 0,9s

- Wypełnienie 75% - stan wysoki = 0,75s, stan niski = 0,25s.

Odwrotna polaryzacja PWM oznacza zamianę stanu niskiego z wysokim z zachowaniem czasów 🙂

Dla serw ciągłych 360 stopni (działają trochę jak silniki) wygląda to inaczej: jest sobie jakiś duty_cycle dla danego serwa, w którym "silnik" stoi w miejscu (z reguły jest to wypełnienie 50%), a każda odchyłka wypełnienia poniżej 50% powoduje obrót silnika np. w lewo, a odchyłka powyżej 50% powoduje, że silnik kręci się w prawo. Dodatkowo różnica tej odchyłki od "środka" określa prędkość obrotu serwa w jedną lub drugą stronę... Czyli, że np. duty_cycle=75 będzie kręcił silnikiem w prawo ale znacznie szybciej niż duty_cycle=60. I tak samo w lewą stronę: duty_cycle=20 będzie szybciej kręcił niż duty_cycle=40...

Ufff...

Koniec teorii spiskowej 🙂

Wracając do programu:

#!/usr/bin/my_python 

import Adafruit_BBIO.PWM as PWM 
import time 

importowane są dwa moduły: Adafruit_BBIO.PWM (jako struktura PWM) oraz time.

Każda z nich ma swoje metody i funkcje wewnętrzne.

PWM.start(pin,0)

ustawia start sygnału PWM o wypełnieniu 0% (to jest to zero w nawiasie) na nóżce pin o częstotliwości 2000Hz i polaryzacji 0 (dwie wartości domyślne, można je pominąć lub ustawić po swojemu zgodnie ze składnią:

#PWM.start(channel=pin, duty=0%, freq=2000, polarity=0)

PWM.start(pin, 0)

#optionally, you can set the frequency as well as the polarity from their defaults:

PWM.start("P9_14", 50, 1000, 1)

Teraz zasadnicza pętla programu:

for i in range(0, 100): 
             PWM.set_duty_cycle(pin,75) 
             time.sleep(.1) 

nie za bardzo wiem jaki miałby być efekt działania tej części programu, bo w tym momencie to według mnie ona realizuje następujące funkcje:

- pętla for w stu krokach (in range) ustawia współczynnik wypełnienia na 75% i czeka 0.1 sekundy (metoda sleep) zanim przejdzie do następnego kroku (zmienna i jest zwiększana od 0 do 100 co 0,1s).

Silnik będzie prawdopodobnie kręcić się w jedną ze stron przez 10 sekund i tyle (o ile w ogóle po załączeniu PWM 0% na początku nie zacznie się szybko kręcić). Nie wiem czy o to chodziło ale według mnie to zbyt dużego efektu w obracaniu silnika nie będzie... Dlatego pytałem jak jest on sterowany.... Ja bym spróbował zamiast tego "75" wpisać "i" wtedy ta linijka by wyglądała jak poniżej:

for i in range(0, 100): 
             PWM.set_duty_cycle(pin,i)
             time.sleep(.1) 

czyli co 0,1s byłby ustawiany inny współczynnik wypełnienia PWM w zakresie od 0 do 100.

Wtedy jest szansa, że najpierw po starcie silnik będzie się kręcił szybko w lewo zwalniając co 0,1s (wartości i od 0 do 49), następnie by stanął na 0,1s (i=50) i potem zacząłby co 0,1s coraz szybciej obracać się w prawo (i w zakresie 51 do 100).... no ale mogę się mylić....

dwie ostatnie linijki wykonują się po zakończeniu pętli for: zatrzymują generator PWM i ustawiają pin w trybie INPUT, no_pullup, no_pulldown...

Jakby co, to przykłady zastosowań biblioteki PWM Adafruit masz tutaj: https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/pwm

a tu szeroko rozumiany opis modułów pythona (w linku masz metody dla modułu time ale nawigacja po pozostałych jest prosta):

https://docs.python.org/3/library/time.html

Udostępnij ten post


Link to post
Share on other sites

Kol hbieganowski - załapałem o co chodzi w tej "mechanice" to moje serwo to silnik z enkoderem - konkretnie to:

Rover

Tam jest specyfikacja:

Motor rated voltage: 7.2V

Motor stall current: 2.5A

Output shaft stall torque: 10Kg/cm

Gearbox ratio: 86.8:1

Encoder type: Quadrature

Encoder resolution: 1000 state changes per 3 wheel rotations

Speed: 1Km/hr

Four motors

Four encoders

Encoder interface:

Red = +5V

Black = 0V

Yellow and White = Quadrature encoder outputs

Rover PDF

Przykład, który zaprezentowałem dotyczył właśnie obrócenia kółka tego pojazdu przez 10 sekund i nic więcej, czyli tak jak myślałem.

Ale:

Napisałeś, że dla takiej składni:

#PWM.start(channel=pin, duty=0%, freq=2000, polarity=0) jest równoważne PWM.start(pin, 0) - czy tak?

Po prostu w drugim przypadku nie deklaruję częstotliwości i polaryzacji (ustawiane są domyślne wartości: 2000Hz i 0% - dobrze to rozumiem?).

Rozumiem, że w tym konkretnym przypadku o kierunku obrotu decyduje % wypełnienia cycle_duty a nie polaryzacja?

I teraz pytanie do tej częstotliwości 2000Hz: jeśli jej nie zadeklaruje to mam standardowe 2000Hz jak pisałem wcześniej czy inna wartość?

Czy w tym konkretnym zastosowaniu są jakieś stałe te Herce czy to zależy od enkodera, od sterownika? Jak to jest?

Proszę mnie nie rugać w gniewie, że może nie załapałem, ja naprawdę nie mam żadnego doświadczenia w projektowaniu czegokolwiek z robotyki - jestem tu z powodu, takiego hobby na odskocznię od pracy fizycznej.

Przerobiłem również niektóre z tych kursów, które drugi z kolegów mi proponuje ale - no właśnie mam problem z przełożeniem teorii na zastosowanie praktyczne - czyli po prostu jak zrobić, żeby tym kołem "je - no" zakręcić - zadaję sobie sprawę że to nic nie wnosi no ale jak uda mi się nim zakręć i będę wiedział jak to działa to będę myślał co z tym dalej zrobić.

No i kolejna zmora - wszystko, większość po angielsku... Ufff.

Udostępnij ten post


Link to post
Share on other sites

Być może warto by było jednak zacząć od prostszych przykładów. Samo przeczytanie tutoriali niewiele da -- z doświadczenia wiem, że szczególnie jeśli jest to nowy materiał, to niewiele zostaje w głowie. Warto byłoby do takiego tutoriala jednak usiąść i przerobić go, rzeczywiście przepisując (nie przeklejając) przykłady do komputera i uruchamiając je, być może nawet próbując je trochę modyfikować, żeby zobaczyć co się stanie.

Pytania, które zadajesz, są naprawdę podstawowe i naprawdę ciężko ci będzie tak od razu iść na głęboką wodę i pisać program sterujący peryferiami kiedy nie rozumiesz podstaw samego języka. Zacznij od "hello world" i od składni Pythona. Naucz się czym są biblioteki i moduły, jak się deklaruje i wywołuje funkcję, jak działają warunki i pętle -- gwarantuję, że nie będzie to wysiłek zmarnowany. Dopiero wtedy można się zabrać za bardziej zaawansowane zastosowania. Zapewniam, że będzie dużo łatwiej.

Wiekiem się nie ma co przejmować, to jest wszystko dla ludzi i da się to opanować. Tylko jest to niestety sporo materiału i dość dużo pracy i nie za bardzo da się "na skróty", niestety.

Udostępnij ten post


Link to post
Share on other sites
Być może warto by było jednak zacząć od prostszych przykładów. Samo przeczytanie tutoriali niewiele da -- z doświadczenia wiem, że szczególnie jeśli jest to nowy materiał, to niewiele zostaje w głowie. Warto byłoby do takiego tutoriala jednak usiąść i przerobić go, rzeczywiście przepisując (nie przeklejając) przykłady do komputera i uruchamiając je, być może nawet próbując je trochę modyfikować, żeby zobaczyć co się stanie.

Dlatego podałem ten konkretny przykład.

Ja już migałem diodami, jedną diodą trzema diodami i diodami z przyciskiem, (stany LOW i HIGH) na tym Beaglu ale ileż można robić to "Hello World" w kółko.

Wybrałem taki przykład ponieważ on steruje tym silniczkiem (czymś namacalnym) a jego konstrukcja (tego kawałka kodu) jest podobna do tego co już jako tako znałem dlatego zadałem te podstawowe pytania (chciałem się upewnić co wiem a czego nie) i do tego w tym dziale. Początkujący to początkujący...

Pytania, które zadajesz, są naprawdę podstawowe i naprawdę ciężko ci będzie tak od razu iść na głęboką wodę i pisać program sterujący peryferiami kiedy nie rozumiesz podstaw samego języka. Zacznij od "hello world" i od składni Pythona. Naucz się czym są biblioteki i moduły, jak się deklaruje i wywołuje funkcję, jak działają warunki i pętle -- gwarantuję, że nie będzie to wysiłek zmarnowany. Dopiero wtedy można się zabrać za bardziej zaawansowane zastosowania. Zapewniam, że będzie dużo łatwiej.

Primo. Nie mam zamiaru iść na głęboką wodę. Nawet nie wiem czy z tego coś będzie - to po prostu tylko hobby...

Secundo. No i właśnie to jest mój problem - otóż takie wytłumaczenie jak powyżej zrobił mi Kol. hbieganowski - dało mi więcej niż analizowanie składni i "kopanie" po opisach składni i zastanawianie się "zadziała?" a tak mam kawę na ławę to czego oczekiwałem i jak widzę jest tego cała masa, samych poleceń plus ich funkcje.

I tak jestem zadowolony z rezultatu bo to kółko udało się obrócić (TO ŻYJE!). Obraca się tyle ile chcę i zadaję różne parametry do programu oraz wypróbowałem to samo dla innych pinów PWM.

Udostępnij ten post


Link to post
Share on other sites

Primo, idziesz na głęboką wodę, bo zabierasz się za rzeczy bardziej skomplikowane, niż ci się wydaje.

Secondo, czyli co, mamy ci tu przepisywać ten tutorial specjalnie dla ciebie? Ja nie mówię, żebyś analizował składnie i "kopał" po dokumuentacji. To wszystko jest krok po kroku w każdym tutorialu. Wystarczy go przerobić. A do tego są tam też te wszystkie rzeczy, o które zapytasz za chwilę. Co z tego, że ci się udało kółko obrócić, skoro za chwilę będziesz mieć kolejny problem przez to, że lecisz po łebkach?

Udostępnij ten post


Link to post
Share on other sites
Primo, idziesz na głęboką wodę, bo zabierasz się za rzeczy bardziej skomplikowane, niż ci się wydaje.

Jeśli Pozwolisz: To co mi się wydaje, to już mój problem 🙂

Secondo, czyli co, mamy ci tu przepisywać ten tutorial specjalnie dla ciebie? Ja nie mówię, żebyś analizował składnie i "kopał" po dokumuentacji. To wszystko jest krok po kroku w każdym tutorialu. Wystarczy go przerobić.

Napisałem wyraźnie, że przerabiam - nie oczekuję opisywania tu wszystkiego.

A do tego są tam też te wszystkie rzeczy, o które zapytasz za chwilę.
Gdyby tak było i wszystko byłoby jasne dla mnie nie zakładałbym tu konta. 🙂
Co z tego, że ci się udało kółko obrócić, skoro za chwilę będziesz mieć kolejny problem przez to, że lecisz po łebkach?

Czyli na Polskim forum nie można zadawać pytań, wątpliwości bo "leci się po łebkach"?

Jak sam Widzisz nie otrzymuję od Ciebie konkretnej informacji zwrotnej tylko linki, które już znam (co do rzeczy, które tam są, właśnie chciałem dopytać) i dyskusję zmierzającą w innym kierunku, niż tego oczekiwałem.

Zapytałem o konkretny fragment kodu (problem) - otrzymałem konkretną odpowiedź z wyjaśnieniem - jestem usatysfakcjonowany, resztę doczytam w wolnej chwili. 🙂

Udostępnij ten post


Link to post
Share on other sites

To byłby twój problem, gdybyś mierzył się z nim sam. Ale w momencie, kiedy przychodzisz do nas po pomoc, nie oczekuj od nas, że będziemy bez sensu ciągać cię po bezdrożach i marnować swój i twój czas, kiedy istnieje wygodniejsza i szybsza droga do tego samego celu.

Bardzo dobrze, że przerabiasz. Jestem pewien, że jak już przerobisz, to wiele pytań, które teraz masz znajdzie swoje odpowiedzi. Wystarczy trochę cierpliwości. Zapewniam cię, że to wszystko jest tam opisane, bo sam się z bardzo podobnych tutoriali uczyłem. Przykro mi, że założyłeś tu konto wyłącznie po to, żeby nas wykorzystać jako podręczny indeks do tutoriali, Mam nadzieję, że z czasem jednak zmienisz podejście i jednak przyłączysz się do naszej społeczności, będziesz z nami dyskutował, pomagał innym i być może opiszesz tu swojego robota. Jeśli jednak planujesz zniknąć stąd jak tylko otrzymasz swoje odpowiedzi, to jakoś niezbyt chce mi się tobie pomagać.

Pytania oczywiście zadawać można, niezależnie od języka, w którym jest dane forum, ale trzeba się liczyć z tym, że rozmawia się z żywymi ludźmi, a nie białkowym interfejsem do wyszukiwarki internetowej. Ma to swoje wady i zalety. Jedną z wad jest to, że istnieją pewne oczekiwania co do zachowania. Za to bardzo dużą zaletą jest to, że nie dostaje się bezmyślnych odpowiedzi z puszki, tylko rady dotyczące problemu który się ma, nawet jeśli zadane pytania nie dotyczyły go bezpośrednio. To może zaoszczędzić bardzo dużo czasu, szczególnie jeśli odpowiadający sami zmagali się z podobnym problemem i są w stanie wskazać łatwiejszą drogę.

Zastanów się przez chwilę dlaczego my tu odpowiadamy na takie pytania. Przecież nie po to, żeby zbierać internetowe punkty. My po prostu lubimy rozwiązywać problemy i czerpiemy dużą satysfakcję z rozwiązywania ich dobrze. Dlatego boli nas, kiedy ktoś przychodzi po rady, a jednocześnie się upiera przy swoim rozwiązaniu, "bo to już jego problem".

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
Mam nadzieję, że z czasem jednak zmienisz podejście i jednak przyłączysz się do naszej społeczności, będziesz z nami dyskutował, pomagał innym i być może opiszesz tu swojego robota.

Chyba po to się tu spotkaliśmy wszyscy?

Zastanów się przez chwilę dlaczego my tu odpowiadamy na takie pytania. Przecież nie po to, żeby zbierać internetowe punkty. My po prostu lubimy rozwiązywać problemy i czerpiemy dużą satysfakcję z rozwiązywania ich dobrze. Dlatego boli nas, kiedy ktoś przychodzi po rady, a jednocześnie się upiera przy swoim rozwiązaniu, "bo to już jego problem".

Mnie nie boli... Jeśli pomagam to tylko dlatego, że chcę inaczej bym nic nie pisał.... I cieszę się, że coś komuś zadziała 🙂 Dlatego piszę zawsze sam za siebie, nie za "nas" czy "was" 🙂

Udostępnij ten post


Link to post
Share on other sites

To byłby twój problem, gdybyś mierzył się z nim sam. Ale w momencie, kiedy przychodzisz do nas po pomoc, nie oczekuj od nas, że będziemy bez sensu ciągać cię po bezdrożach i marnować swój i twój czas, kiedy istnieje wygodniejsza i szybsza droga do tego samego celu.

Ja właśnie dlatego przyszedłem tutaj żeby potwierdzić/ zanegować swoje przemyślenia.

No przecież zadałem konkretny fragment kodu i pytanie czy to działa tak czy może jestem w błędzie. Otrzymałem satysfakcjonującą odpowiedź dalej idę na miarę moich możliwości sam. Ja tu żadnych bezdroży nie widzę🙂

Bardzo dobrze, że przerabiasz. Jestem pewien, że jak już przerobisz, to wiele pytań, które teraz masz znajdzie swoje odpowiedzi. Wystarczy trochę cierpliwości. Zapewniam cię, że to wszystko jest tam opisane, bo sam się z bardzo podobnych tutoriali uczyłem.

Zapewniam Cię, że nie wszystko jest jasne i proste w tutorialach, poradnikach a nawet książkach o programowaniu - gdyby tak było nie zakładałbym tu konta, niestety geniuszem nie jestem - raczej przeciętniakiem.

Dla przykładu - deklaracja tego sterowania PWM, nigdzie nie pisało, o co chodzi z tą częstotliwością i parametrami - kolega wyjaśnił mi i już to wiem mogę pisać sobie dalej. Dowiedziałem się jak to wpływa na "układ" sterowany i o to mi chodziło:)

Przykro mi, że założyłeś tu konto wyłącznie po to, żeby nas wykorzystać jako podręczny indeks do tutoriali, Mam nadzieję, że z czasem jednak zmienisz podejście i jednak przyłączysz się do naszej społeczności, będziesz z nami dyskutował, pomagał innym i być może opiszesz tu swojego robota. Jeśli jednak planujesz zniknąć stąd jak tylko otrzymasz swoje odpowiedzi, to jakoś niezbyt chce mi się tobie pomagać.

Nie ma żadnego powodu Żebyś smucił się i było Ci przykro, zapewniam Cię, że będę się starał nie marnować Waszego cennego czasu bo ja też nie mam go zbyt wiele na to hobby.

Nie jest moim celem indeksowanie wami tutoriali bo jak pisałem wyżej, odczucie, że zadałem konkretne precyzyjne pytanie - wiem to i to - tego i tego się domyślam - nie wiem (mam wątpliwości co do działania tego i tego fragmentu kodu).

Przykro mi, że Odbierasz to jako traktowanie Ciebie i innych jako Indeksy i zapewniam że nie taki był cel mojego pytania.

Dwa: Nie mam i nie miałem zamiaru stąd znikać zaraz jak tylko się dowiem co mi potrzebne. A to dlatego, że już po dyskusji z Tobą i paroma osobami tutaj wiem, ze panuje tu atmosfera o wiele przyjaźniejsza niż np. na osławionej elektrodzie gdzie dołują każdego kto w ogóle śmie o coś zapytać tym bardziej, że robotyka i droniarstwo to dyscypliny raczej dla multiinstrumentalistów:).

A już zrobienie własnego robota - Jeśli pomożecie to myślę, że zaprezentuję go z tym większą przyjemnością.

Pytania oczywiście zadawać można, niezależnie od języka, w którym jest dane forum, ale trzeba się liczyć z tym, że rozmawia się z żywymi ludźmi, a nie białkowym interfejsem do wyszukiwarki internetowej. Ma to swoje wady i zalety. Jedną z wad jest to, że istnieją pewne oczekiwania co do zachowania. Za to bardzo dużą zaletą jest to, że nie dostaje się bezmyślnych odpowiedzi z puszki, tylko rady dotyczące problemu który się ma, nawet jeśli zadane pytania nie dotyczyły go bezpośrednio. To może zaoszczędzić bardzo dużo czasu, szczególnie jeśli odpowiadający sami zmagali się z podobnym problemem i są w stanie wskazać łatwiejszą drogę.

Dlatego pytanie z moim problemem postawiłem tutaj, bo wiem, że są nawet tacy młodzi po 15 lat co tak śmigają w programowaniu, że głowa mała. Dla nich to chleb powszedni dla mnie droga przez ciernie, która jednak jest wartościowa.

Ucieszyła mnie bardzo odpowiedz poprzedniego kolegi bo teraz już mogę pokręcać tymi kółkami i iść sobie dalej - i na pewno opowiem tu o efekcie mojej pracy jak tylko będę mieć czas na pisanie i "pochwalenie się" wynikiem.

Z drugiej strony nie wiem, czy chwalenie się takimi podstawami jest dobre, czy niedobre, nie wiem nie mnie to oceniać.

Oczywiście nie wspomnę o tym, że jak będę miał swoje trzy grosze do powiedzenia to pomimo mojej nikłej wiedzy pomogę - co nawet już chyba tam komuś zrobiłem widzę że tu jest system jakichś piw 🙂.

Jeśli jeszcze mam mówić o bywaniu tutaj to jak Widzisz bywam rzadko (niestety czasem nie ma mnie parę dobrych miesięcy) ale staram się bywać. Suma sumarum nie znikam nigdzie:)

Zastanów się przez chwilę dlaczego my tu odpowiadamy na takie pytania. Przecież nie po to, żeby zbierać internetowe punkty. My po prostu lubimy rozwiązywać problemy i czerpiemy dużą satysfakcję z rozwiązywania ich dobrze. Dlatego boli nas, kiedy ktoś przychodzi po rady, a jednocześnie się upiera przy swoim rozwiązaniu, "bo to już jego problem".

Wybacz, że może tak obrazoburczo ale posiadam jak wielu uraz do innych forów. Pisząc "mój problem" i "co ja myślę" mam na myśli, dokładnie to, że przecież nie będę przedstawiał tu całego mojego problemu - nie ma po co. Po prostu zadałem krótki kod celem wyjaśnienia moich wątpliwości i tyle.

Nie umiem, nie wiem jak Ci to lepiej wyjaśnić.

Udostępnij ten post


Link to post
Share on other sites

Tam jest specyfikacja:

Motor rated voltage: 7.2V

Motor stall current: 2.5A

Output shaft stall torque: 10Kg/cm

Gearbox ratio: 86.8:1

Encoder type: Quadrature

Encoder resolution: 1000 state changes per 3 wheel rotations

Speed: 1Km/hr

Four motors

Four encoders

Encoder interface:

Red = +5V

Black = 0V

Yellow and White = Quadrature encoder outputs

Rover PDF

Przykład, który zaprezentowałem dotyczył właśnie obrócenia kółka tego pojazdu przez 10 sekund i nic więcej, czyli tak jak myślałem.

Ale:

Napisałeś, że dla takiej składni:

#PWM.start(channel=pin, duty=0%, freq=2000, polarity=0) jest równoważne PWM.start(pin, 0) - czy tak?

Po prostu w drugim przypadku nie deklaruję częstotliwości i polaryzacji (ustawiane są domyślne wartości: 2000Hz i 0% - dobrze to rozumiem?).

Rozumiem, że w tym konkretnym przypadku o kierunku obrotu decyduje % wypełnienia cycle_duty a nie polaryzacja?

I teraz pytanie do tej częstotliwości 2000Hz: jeśli jej nie zadeklaruje to mam standardowe 2000Hz jak pisałem wcześniej czy inna wartość?

Czy w tym konkretnym zastosowaniu są jakieś stałe te Herce czy to zależy od enkodera, od sterownika? Jak to jest?

Proszę mnie nie rugać w gniewie, że może nie załapałem, ja naprawdę nie mam żadnego doświadczenia w projektowaniu czegokolwiek z robotyki - jestem tu z powodu, takiego hobby na odskocznię od pracy fizycznej.

Przerobiłem również niektóre z tych kursów, które drugi z kolegów mi proponuje ale - no właśnie mam problem z przełożeniem teorii na zastosowanie praktyczne - czyli po prostu jak zrobić, żeby tym kołem "je - no" zakręcić - zadaję sobie sprawę że to nic nie wnosi no ale jak uda mi się nim zakręć i będę wiedział jak to działa to będę myślał co z tym dalej zrobić.

No i kolejna zmora - wszystko, większość po angielsku... Ufff.

@tomek242: patrząc na datasheet od tych silników to wydaje mi się, że nie są to silniki sterowane PWM tylko zwykłym napięciem DC (zresztą jest nawet kierunek obrotu zaznaczony na schemacie, więc nie są to obrotowe serwomechanizmy tylko jednokierunkowe silniki DC). Sterowanie PWM to byłyby raczej trzy przewody do silnika: "+zas", "-zas" i "PWM", a tu wyraźnie są tylko dwa grubsze kable + i - i tyle. Po to pewnie jest ten enkoder kwadraturowy Sygnał z niego podany zwrotnie na kontroler poda w przybliżeniu ile obrotów wykonał silnik (np. żeby móc go zatrzymać w przybliżonej pozycji). Gdybyś miał sterownik z wyjściem PWM wysokoprądowym to mógłbyś zaryzykować podłączenie "-" i sygnału "PWM" zamiast "+" - wtedy sterując wypełniemiem sygnału PWM obniżasz wynikowe napięcie zasilania silnika co może mieć wpływ na jego prędkość obrotową - nie z każdym silnikiem jednak tak się da zrobić - po prostu moment będzie za niski żeby ruszyć silnik i możesz spalić wyjście PWM.... Tak da się sterować np. małymi wiatraczkami do chłodzenia mikrokontrolerów, które mają bardzo małe opory toczenia i kręcą się powolutku dla bardzo małych wartości napięcia zasilania (PWM o małym stopniu wypełnienia).

Wydaje mi się, że to podwozie jeździ tylko w jedną stronę albo z tych 4 silników dwa kręcą się w lewo, a dwa prawo i raz jedna strona ciągnie do przodu pojazd a tylne nie są zasilane albo po zmianie zasilania tylne silniki ciągną do tyłu a przednie są "wleczone" beznapięciowo...

Udostępnij ten post


Link to post
Share on other sites

Cały pomysł z serwami pojawił się chyba w wyniku nieporozumienia. Z tego co widzę kolega tomek242, nigdzie nie pisał że do układ napędzany jest za pomocą serw. Podał tylko informację o enkoderach i to mogło trochę namieszać.

Jak chodzi o podłączanie PWM bezpośrednio do silników, to nie należy nigdy tak robić. To jak z wkładaniem palców do kontaktu - nawet jak ktoś przeżył taką zabawę i opisał w internecie, to nie powód żeby naśladować.

Do sterowania silników należy zawsze używać odpowiedniego sterownika - chociażby klucza tranzystorowego. Stąd moje pytanie do autora wątku: tomek242, mógłbyś napisać jak masz podłączone silniki?

Udostępnij ten post


Link to post
Share on other sites
Cały pomysł z serwami pojawił się chyba w wyniku nieporozumienia. Z tego co widzę kolega tomek242, nigdzie nie pisał że do układ napędzany jest za pomocą serw. Podał tylko informację o enkoderach i to mogło trochę namieszać.

Trochę tak 🙂 Zmyliło mnie sterowanie PWM do napędu - oczywista dla mnie była dwukierunkowość a tylko serwomechanizm wieloobrotowy sterowany PWM przyszedł mi do głowy z taką funkcjonalnością 🙂

Udostępnij ten post


Link to post
Share on other sites

Jak chodzi o podłączanie PWM bezpośrednio do silników, to nie należy nigdy tak robić. To jak z wkładaniem palców do kontaktu - nawet jak ktoś przeżył taką zabawę i opisał w internecie, to nie powód żeby naśladować.

Pełna zgoda co do gniazdka palców i PWM.

Do sterowania silników należy zawsze używać odpowiedniego sterownika - chociażby klucza tranzystorowego. Stąd moje pytanie do autora wątku: tomek242, mógłbyś napisać jak masz podłączone silniki?

Już piszę - chciałem wyprowadzić zasterować sygnałami PWM podwozie, które opisałem powyżej.

Do sterowania chciałem używać tego sterownika nie mam zamiaru łączyć PWM z silnikami 🙂Sterownik

Do podłączenia enkoderów z podwozia chcę użyć pinów Encoder Input dla każdego z kanałów. Na płytce sterownika są też wyprowadzenia dla silników "+" i "-" - cztery silniki, cztery kanały.

Konkretnie - na razie chodzi mi tylko o podłączenie wszystkiego i sprawdzenie połączenia (kontroler - sterownik - silniki) sprawdzenia chcę dokonać tym przykładowym kodem programu o który pytałem na samym początku.

[ Dodano: 25-04-2017, 13:28 ]

Trochę tak 🙂 Zmyliło mnie sterowanie PWM do napędu - oczywista dla mnie była dwukierunkowość a tylko serwomechanizm wieloobrotowy sterowany PWM przyszedł mi do głowy z taką funkcjonalnością 🙂

Ale wiele wyjaśniło:)

Udostępnij ten post


Link to post
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!

Gość
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...