Skocz do zawartości
MarcinTe

Arduino + wozek inwalidzki (sterowanie 2 silnikow)

Pomocna odpowiedź

18 minut temu, InspektorGadzet napisał:

Nie analizuję każdej biblioteki Arduino

aha... to wszysto wyjaśnia.

Na temat wyświetlania grafiki to się nawet nie wypowiem bo to bzdura. Bawiłem się w wyświetlanie na Arduino, problemem nie była obsługa wyświetlacza tylko wczytanie bitmapy. I tu nie mów że biblioteki są do niczego - prawdopodobnie po prostu nie potrafisz ich wykorzystać.

A tak przy okazji... jakie jest zastosowanie bibliotek U8 do sterowania silnikami? 

Bo zawsze wydawało mi się że potrzebny jest sygnał PWM uzyskany właśnie ze sprzętu przez głupią funkcję analogWrite... no ale ja się nie znam, może znasz lepsze rozwiązania...

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
Dnia 8.07.2019 o 15:30, ethanak napisał:

Na temat wyświetlania grafiki to się nawet nie wypowiem bo to bzdura. Bawiłem się w wyświetlanie na Arduino, problemem nie była obsługa wyświetlacza tylko wczytanie bitmapy. I tu nie mów że biblioteki są do niczego - prawdopodobnie po prostu nie potrafisz ich wykorzystać.

Napisz, jak wykorzystać bibliotekę, która zamiast sprzętowo czyścić wyświetlacz wysyła tysiące danych? To samo z prostokątami, liniami. Ten konkretny przypadek miałem w Arduinowskiej bibliotece do SSD1331. Nie spotkałem też biblioteki, która rysując czcionkę, zwłaszcza 32x32, ustawiała okno i wysyłała dane zamiast stawiać piksel po pikselu. Podobne problemy jest opisany Arduino DUE wydajność wyświetlania.

Jeśli w kolejnych wyświetlanych obrazach, nie zmienia się dużych ilości danych, można najpierw skasować poprzednie piksele. To może zadziałać w przypadku oscyloskopu ale już nie  gdy będę chciał wyświetlać na IL9341 wielki  napis z migającym tłem.

 

Dnia 8.07.2019 o 15:30, ethanak napisał:

jakie jest zastosowanie bibliotek U8 do sterowania silnikami? 

Nie ma, ale najwięcej bibliotek jakie przeniosłem z Arduino to obsługa wyświetlaczy. Teraz, na szczęście, w CUbeMX są dobre biblioteki, na których efekty dużo lepsze od tego co można uzyskać na FT801, 811, nie są problemem.

Wracając do bibliotek PWM, które widziałem dla Arduino, nie używały sprzętowego PWM, tylko jakieś programowe kombinacje. Nawet się im nie przyglądałem, bo to strata czasu.

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites

Nie rozumiem w czym problem jest. Jeśli silnik Ci szarpie przy rozruchu to znaczy, że za szybko startuje. Nie ma chyba łatwiejszego sposobu, jak zwiększać prędkość skokowo wstawiając niewielkie opóźnienia pomiędzy skoki - trzeba to dobrać eksperymentalnie aby nie było szarpnięć bez różnicy czy w przerwaniu czy w pętli głównej. Teoretycznie znając typ silnika można nawet obliczyć krzywą przyśpieszenia ale z doświadczenia wiem, że i tak najczęściej trzeba wyliczenia kompensować aby zbliżyć się do optimum dlatego proponuję pokombinować - tak jest i szybciej i łatwiej. Kiedy już określisz zakres opóźnień na poszczególnych etapach nie będzie już trudno przełożyć tego do przerwania od timera. Wg. mnie najlepiej byłoby napisać procedurę od nowa tylko pod kątem sterowania silnikami i jak już wszystko będzie chodzić gładko dopisać resztę programu. Kiedy problem nie jest bardzo skomplikowany nie warto zagłębiać się w analizę cudzego oprogramowania tylko próbować do skutku  napisać własne, dedykowane dla posiadanego sprzętu. Nie jest też konieczne używanie funkcji millis, pisząc w arduino można bez przeszkód (w większości przypadków) korzystać z bibliotek standardowych AVR dokładnie tak jakby frameworka nie było.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
2 godziny temu, atMegaTona napisał:

Nie ma chyba łatwiejszego sposobu, jak zwiększać prędkość skokowo wstawiając niewielkie opóźnienia pomiędzy skoki - trzeba to dobrać eksperymentalnie aby nie było szarpnięć bez różnicy czy w przerwaniu czy w pętli głównej.

Jakby był jeden silnik, to od biedy, można by zrobić zmiany w pętli głównej ale są dwa niezależne. Trzeba to zrobić w przerwaniach.  Sam PWM najlepiej sprzętowy ale ze względu na to, że silniki najczęściej nie pracują z dużymi częstotliwościami może być programowy.

Parę postów wcześniej dałem gotowca co prawda do serwonapędu, trzeba więc tylko zmienić zmianę częstotliwości na zmianę wypełnienia PWM. Co do

2 godziny temu, atMegaTona napisał:

Teoretycznie znając typ silnika można nawet obliczyć krzywą przyśpieszenia ale z doświadczenia wiem, że i tak najczęściej trzeba wyliczenia kompensować

Nie samym PWM silnik żyje. Aby wykorzystać wszystkie jego możliwości trzeba zmieniać nie tylko PWM ale także jego częstotliwość. Temat nie jest taki prosty jak się wydaje. Owszem, do sterowania wiatraczkiem nie trzeba kombinować ale tam gdzie są duże obciążenia już tak. Silnik nie ruszy z dużej częstotliwości więc na start trzeba dać np 100Hz. Wypełnienie od 0% nie ma sensu, najczęściej jest to 20..30%. Jak silnik już się rozpędzi, to zależnie od obciążenia, można zwiększyć częstotliwość. Trzeba sobie zapewnić jakieś sprzężenie zwrotne, najlepiej nie tylko prąd pobierany przez silnik ale także i jego obroty. W kodzie na początku postu żadnego sprzężenia zwrotnego nie ma. Dlatego, podobnie jak

2 godziny temu, atMegaTona napisał:

nie warto zagłębiać się w analizę cudzego oprogramowania tylko próbować do skutku  napisać własne, dedykowane dla posiadanego sprzętu

twierdzę, ze kod należy napisać od zera, tym bardziej, że ten z pierwszego postu, w praktyce do niczego się nie nadaje. Takie demo, że można sterować silnikiem.

 

2 godziny temu, atMegaTona napisał:

Nie jest też konieczne używanie funkcji millis, pisząc w arduino można bez przeszkód (w większości przypadków) korzystać z bibliotek standardowych AVR dokładnie tak jakby frameworka nie było.

Wtedy, nie warto w ogóle korzystać z tego co oferuje arduino, zwłaszcza IDE.

Na początek założenia co ma robić sterownik.  Później wybór mikrokontrolera pamiętając o tym, że gdzieś jakąś diagnostykę trzeba sobie zapewnić (UART?) o debugerze nie wspominam bo to chyba normalna rzecz w dzisiejszych czasach. Przykładowo, w projekcie Wielokostki wybrałem wyświetlacz. On narzucił min 16kB RAM ale to ryzykowne, szukałem więc 20..32kB. Wybrałem nie najlepszy F103 bo można było wybrać coś z L, które pobierają mniej prądu i mają eeprom. Eeprom, zawsze mogę emulować a NUCLEO z L akurat nie miałem aby zrobić testy, więc wybrałem popularnego F103. Wygodniejszy byłby mikrokontroler z trzema SPI ale ze względu na to, że karta SD i datflash nie muszą pracować w tej samej chwili, wystarczyły 2. Można by pomyśleć o interfejsie dedykowanym do karty SD ale super szybko nie musi ona działać. Poza SWD do debugowania zapewniłem sobie UART1 do diagnostyki.

 

W przypadku sterownika wózka, widziałbym to tak: Sprzętowe PWM, pomiar prądu, obrotów, napięcia akumulatora. Diagnostyka na USB lub UART. Poza joyami, wyświetlacz z ekranem dotykowym (a co będę sobie żałował) do diagnostyki. Typ  wyświetlacza narzuci wymaganą wielkość  RAM. Eeprom do nastaw (może być emulowany). Kilka LED w rodzaju tragedia, ok, alarm. Jakiś buzzer a może wyjście DAC do komunikatów audio, tu rośnie zapotrzebowanie na flash a może zewnętrzny dataflash. Jak komunikaty w dataflash to jakoś trzeba je wgrać w praktyce chyba tylko USB. Diagnostyka może przez BT? Łatwo robić logi, bez drutów, a może Wi-FI?

Tak pewnie trzecia wersja PCB byłaby już ok. czas realizacji jakieś 6 miesięcy, chyba, ze praca 24/h 365/rok. Ja poszedłbym na całość i wybrał np F411 na płytce NUCLEO. Wyświetlacz: jakiś moduł z FT81x. Jeśli miałby być inny, to F411 może mieć za mało RAM bo tylko 128k. W każdym razie, jak wydaje się 1000..2000zł na projekt, który realizuje się kilka miesięcy, to różnica pomiędzy podróbką UNO za 30 zł a oryginalną NUCLEO za 55 czy 65zł nie jest zauważalna a jak porównać oryginalne UNO za ok 90zł w stosunku do NUCLEO z debugerem, z którego legalnie można zrobić SEGGERA, to o UNO trzeba zapomnieć.

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
22 godziny temu, InspektorGadzet napisał:

Wtedy, nie warto w ogóle korzystać z tego co oferuje arduino, zwłaszcza IDE.

Pytanie czy w ogóle warto. Napisałem, że korzystanie z bibliotek standardowych na ogół nie przeszkadza w korzystaniu z frameworka arduino więc nie wiem dlaczego wg. Ciebie nie warto kiedy warto. Z tego co ty tu wypisujesz wynika, że chcesz się pochwalić, że wiesz jak zbudować profesjonalny wózek naszpikowany różnymi bajerami a ze zwykłymi silnikami DC sobie nie radzisz.

22 godziny temu, InspektorGadzet napisał:

Jakby był jeden silnik, to od biedy, można by zrobić zmiany w pętli głównej ale są dwa niezależne. Trzeba to zrobić w przerwaniach.

22 godziny temu, InspektorGadzet napisał:

Aby wykorzystać wszystkie jego możliwości trzeba zmieniać nie tylko PWM ale także jego częstotliwość. Temat nie jest taki prosty jak się wydaje. Owszem, do sterowania wiatraczkiem nie trzeba kombinować ale tam gdzie są duże obciążenia już tak. Silnik nie ruszy z dużej częstotliwości więc na start trzeba dać np 100Hz.

Wybacz ale to jakieś brednie. Jak by to @marek1707 określił: coś tam gdzieś czytałeś, coś gdzieś oglądałeś ale niewiele zrozumiałeś. Zamiast się zastanawiać jak wykorzystać wszystkie możliwości skup się raczej na tym jak sensownie wysterować te 2 silniki albo nie wprowadzaj nikogo w błąd. Nie jest konieczna zmiana częstotliwości PWM a im wyższa częstotliwość w tym przypadku tym lepiej bo silnikami steruje się za pomocą wypełnienia. Nie jest też konieczne wykorzystanie sprzętowego PWM aby tymi silnikami sterować choć zapewne będzie przydatne tym bardziej, że arduino posiada co najmniej 2 kanały PWM niezależnie sterowane czyli akurat jak dla Ciebie. Dałem kilka praktycznych wskazówek licząc, że skoro podejmujesz temat to masz przynajmniej podstawowe pojęcie a tym czasem wylewasz z siebie masę jakichś szczątkowych informacji na różne tematy z której nic konkretnego nie wynika. Dla Twojej wiadomości powiem Ci jeszcze, że w pętli głównej można sterować nawet 5 silników bez przerwań tylko trzeba umieć.

Skoro tak się ten temat rozrósł to przydałby się  tu jeszcze chociaż schemat elektryczny tego drivera.

Kolejna odsłona przerostu ambicji nad umiejętnościami z postawą typu "wiem wszystko najlepiej" ze strony @InspektorGadzet . Skoro tak najlepiej wszystko sam wiesz to po co się tu udzielasz? Trzeba było samemu zrealizować projekt w całości i napisać posta do działu DIY autor tematu miałby ułatwione zadanie.

Edytowano przez atMegaTona
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Autorowi wątku proponuję poeksperymentować ze sterowaniem silnikami DC w mniejszej skali, pobaw się jakimiś małymi silniczkami za pomocą PWM będziesz miał punkt wyjścia do budowy wózka.

Udostępnij ten post


Link to post
Share on other sites
46 minut temu, atMegaTona napisał:

Nie jest konieczna zmiana częstotliwości PWM a im wyższa częstotliwość w tym przypadku tym lepiej bo silnikami steruje się za pomocą wypełnienia

Skoro tak piszesz, to z niewieloma silnikami miałeś styczność.

 

47 minut temu, atMegaTona napisał:

Dla Twojej wiadomości powiem Ci jeszcze, że w pętli głównej można sterować nawet 5 silników bez przerwań tylko trzeba umieć.

Chore! Jakakolwiek ingerencja w pętlę główną może spowodować, że wszystko "wysypie" się. Po to są rozwiązania sprzętowe aby z nich korzystać a nie używać programowych protez.

Da się zrobić programowa klasę CDC dla USB na AVR? Da! Jak to działa w stosunku do rozwiązania sprzętowego? Polecam spróbować.

 

51 minut temu, atMegaTona napisał:

Trzeba było samemu zrealizować projekt w całości i napisać posta do działu DIY

Zapłać to opracuję projekt. Cenę wyliczysz sam, 6 miesięcy = 960h * 50..100zł daje 48'000..96'000zł. Chcesz numer konta?

Udostępnij ten post


Link to post
Share on other sites

Na podstawie twoich wynurzeń wnioskuję, że ci hormony buzują. Odpocznij trochę.

29 minut temu, InspektorGadzet napisał:
1 godzinę temu, atMegaTona napisał:

Nie jest konieczna zmiana częstotliwości PWM a im wyższa częstotliwość w tym przypadku tym lepiej bo silnikami steruje się za pomocą wypełnienia

Skoro tak piszesz, to z niewieloma silnikami miałeś styczność.

28 minut temu, InspektorGadzet napisał:

Chore! Jakakolwiek ingerencja w pętlę główną może spowodować, że wszystko "wysypie" się. Po to są rozwiązania sprzętowe aby z nich korzystać a nie używać programowych protez.

Nie trzeba być fachowcem żeby to zweryfikować. Niech sobie każdy sam odpowie gdzie i kto tu rację ma.

28 minut temu, InspektorGadzet napisał:

Zapłać to opracuję projekt. Cenę wyliczysz sam, 6 miesięcy = 960h * 50..100zł daje 48'000..96'000zł. Chcesz numer konta?

Wolał bym raczej dopłacić żeby czasem taki spec jak ty nie dłubał przy moim projekcie hah

Wiele jeszcze nauczyć się musisz młody padawanie.

Udostępnij ten post


Link to post
Share on other sites

Panowie, odpocznijcie, walnijcie sobie po setce (albo jak blisko mieszkacie to po ryju) i sprawdźcie, czego dotyczy wątek. To ma być wózek inwalidzki a nie linefollower czy megasumo. Inne priorytety, inne wymagania, bezpieczeństwo przede wszystkim.

Pisanie kodu od zera w takim przypadku to objaw megalomanii (chyba że ktoś jest super mistrzem od sterowania wózkami inwalidzkimi, a jakoś tego widząc poziom dyskusji nie stwierdziłem). Jeśli ktoś chce pokazać jaki jest mądry, to niech założy sobie nowy wątek na temat Karlssona z Dachu albo innego gościa ze śmigłem na głowie...

Primum non nocere!

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
13 minut temu, atMegaTona napisał:

Wiele jeszcze nauczyć się musisz młody padawanie.

Co to "padawanie"?

Udostępnij ten post


Link to post
Share on other sites

Wikipedia Twoim przewodnikiem jest...

Udostępnij ten post


Link to post
Share on other sites

Jeśli wózek inwalidzki jest sprzętem medycznym to pisanie kodu od zera może nie być przejawem megalomanii, ale koniecznością. No chyba że biblioteki Arduino spełniają wymgania PN-EN 62304, w co akurat wątpię.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Zgodzę się z tym, jest jeden problem: trzeba się na tym znać.

BTW wózek zalicza się chyba do sprzętu rehabilitacyjnego, ale nie jestem pewien.

Edytowano przez ethanak

Udostępnij ten post


Link to post
Share on other sites

Oczywiście się zgadzam, lepiej nie ryzykować niczyim zdrowiem i życiem zdając się na amatorsko programowane arduino. Chyba, że nie ma to być sprzęt medyczny a konstruktor zdaje sobie sprawę z ryzyka. W necie jest sporo filmów dokumentujących skutki nieumiejętnego zaprojektowania np. deskorolek elektrycznych kiedy to jadąca z pełną prędkością deska nagle staje a amator skateboardingu i elektroniki leci dalej.

Gorzej kiedy to wózek inwalidzki nagle stanie a inwalida poleci dalej lub kiedy nie stanie i wjedzie pod tira.

Udostępnij ten post


Link to post
Share on other sites

To moze inaczej, skoro juz sie wszyscy tak znaja i proponuja blyskotliwe rozwiazania technologiczne z wykorzystaniem wielu elementow o skomplikowanych nazwach, moze ktos jest w stanie dopisac do kodu demo z mojego oryginalnego posta cos rownie prostego, co bedzie zwiększać prędkość skokowo, z opoznieniem ktore bede mogl regulowac? Niczego mi wiecej nie trzeba. Zakladam ze dla kogos z tej grupy eksperckiej zmiana prostego kodu powinna byc znacznie nizszym wydatkiem energetycznym niz wypisywanie postow ktore mi nie pomagaja a niepotrzebnie podnosza cisnienie. Rozumiem ze raczej nikomu sie nie chce pomoc komus kto sie nie zn na rzeczy ale po co w takim razie w ogole cokolwiek odpisywac? Jesli ktos jest idiota albo ma odpowiedni nastroj to moze sobie wejsc pod tira rowniez piechota, nie prosze o kompletny soft to lazika marsjanskiego. Ludzie, co z wami? 🙂

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