Skocz do zawartości

Serwo - brak AnalogWrite na pinach 9 i 10


Criss92

Pomocna odpowiedź

Witajcie! 🙂

Piszę pracę magisterską. Czasu coraz mniej.. Założenia - omijanie przeszkód z czujników umieszczonych na serwie.Platforma Arexx AAR-04. Napęd silników na piny 9 i 10 (lewy silnik) oraz 3 i 5 (prawy silnik). Tego niestety zmienić nie mogę. Po uruchomieniu biblioteki serwo, lewy silnik przestaje działać. Dowiedziałem się z grupy na Fejsiku że biblioteka Servo wyłącza AnalogWrite na pinach 9 oraz 10 i w tym jest problem (https://www.arduino.cc/en/Reference/Servo) Macie jakiś pomysł jak to ominąć? Myślałem o próbie napisania nowej biblioteki ale natłok obowiązków i goniący czas trochę mnie do tego zniechęca..

Link do komentarza
Share on other sites

Zajmowałem się tym kiedyś, sporo w dokumentacji siedziałem, Timery, biblioteki itp ale teraz praca na etacie i po prostu brak czasu, sporo rzeczy zapomniałem. Nie mogę tego zmienić bo tak sobie producent wymyślił, a ten robot jest na platformie Arexx AAR-04. Musiałbym zepsuć płytkę która należy do uczelni 🙂 Zrobiłem inaczej, drugie Arduino, 3 bitowa komunikacja równoległa i zmiana kąta serwa przez drugie Arduino, właśnie dopieszczam ostatnie poprawki 🙂 Najszybszy i najprostszy chyba sposób 🙂

Link do komentarza
Share on other sites

@Criss92, niestety w Arduino jest sporo wyjątków tego typu. Łatwo się wpędzić w sytuację, w której jedne peryferia blokują wykorzystanie innych. Najłatwiej oczywiście byłoby zamienić piny. Może w Twoim przypadku da się jednak uratować sytuację wykorzystując biblioteki do programowego generowania PWM? Nie korzystałem z tego robota Arexx AAR-04, więc nie wiem co dokładnie musisz tam wygenerować, aby uruchomić konstrukcję. Jest jednak szansa, że uda Ci się wygenerować programowo PWM na pinach sterujących silnikiem lub programowo wygenerować sygnał dla serwa (bez używania biblioteki Servo). Sprawdź ten trop 🙂

1 godzinę temu, Criss92 napisał:

Zrobiłem inaczej, drugie Arduino, 3 bitowa komunikacja równoległa i zmiana kąta serwa przez drugie Arduino, właśnie dopieszczam ostatnie poprawki 🙂 Najszybszy i najprostszy chyba sposób 🙂

Fajnie, że działa, ale mam nadzieję, że sam rozumiesz, że to przerost formy nad treścią? 😉

1 godzinę temu, ethanak napisał:

a jeśli nie rozumiesz dlaczego to wątpię abyś potrafił napisać jakąkolwiek bibliotekę

@ethanak, kolejny raz bardzo proszę o darowanie sobie takich prywatnych zaczepek. Takie teksty to zmora wszystkich for dyskusyjnych. Jest to świetny sposób, aby zniechęcić do aktywności innych czytelników, a chyba nie o to chodzi. Można napisać to samo łagodniej, bez atakowania pytającego. Przecież Twoja wypowiedź bez tego fragmentu miałaby zupełnie inny, pomocny wydźwięk, a tak wprowadza tylko nerwową atmosferę. Po co generować takie sytuacje?

  • Lubię! 1
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

40 minut temu, Treker napisał:

Może w Twoim przypadku da się jednak uratować sytuację wykorzystując biblioteki do programowego generowania PWM?

To odpada, ten procesor ma i tak bardzo dużo pracy (korekcja toru ruchu, wcześniej odczyt danych z czujników na zębatkach i ich analiza, do tego bardzo szybkie pomiary odległości czujnikiem laserowym oraz na podstawie wskazań czujnika albo podążanie do mety albo omijanie przeszkody). Więc raczej soft PWM odpada.

40 minut temu, Treker napisał:

Fajnie, że działa, ale mam nadzieję, że sam rozumiesz, że to przerost formy nad treścią? 😉

Wiem o tym doskonale, ale to najprostszy i skuteczny sposób 😄 muszę tylko popracować nad kabelkami bo czasami oczywiście coś musi nie łączyć... Jak znajdę czas to wyląduje to wszystko na PCB. Zrobił się z tego niezły pająk...

40 minut temu, Treker napisał:

kolejny raz bardzo proszę o darowanie sobie takich prywatnych zaczepek. Takie teksty to zmora wszystkich for dyskusyjnych. Jest to świetny sposób, aby zniechęcić do aktywności innych czytelników, a chyba nie o to chodzi. Można napisać to samo łagodniej, bez atakowania pytającego. Przecież Twoja wypowiedź bez tego fragmentu miałaby zupełnie inny, pomocny wydźwięk, a tak wprowadza tylko nerwową atmosferę. Po co generować takie sytuacje?

Pięknie powiedziane 🙂

Link do komentarza
Share on other sites

@Criss92: Wybacz jeśli Cię uraziłem, ale jeśli twierdzisz (w kolejnym poście) że siedziałeś sporo w dokumentacji, a o jednej z podstawowych rzeczy dowiedziałeś się z mordoksiążki to nie wiem, której wersji wierzyć. Niestety - uwierzyłem w tę z pierwszego posta, a sam chyba przyznasz, że pisanie bibliotek tego typu to nie jest zadanie dla ludzi którzy czytują fejsbuka zamiast dokumentacji. Stąd nie "prywatna zaczepka" (jak to kolega administrator raczył błędnie określić) a po prostu ostrzeżenie - nie bierz się do tego bo to wymaga trochę większej wiedzy.

Wracając do meritum: jeśli już używasz drugiego kontrolera - ja bym to zrobił po prostu serialem w jedną stronę (przecież nie musisz odbierać danych z drugiego Arduino, ma służyć jedynie jako kontroler serwa), a w takim przypadku wystarczy jakiś mały ATtiny, którego jak się uprzesz to zmieścisz we wtyczce do serwa 🙂 Wykorzystujesz pojedynczy pin atmegi...

Poza tym wydaje mi się (no, ale nie znam wszystkiego co tam łączysz, szczególnie tego szybkiego lasera) że można wykorzystać czas oczekiwania na dane z jakiegoś tam czujnika do generowania impulsu dla serwa. Zauważ, że nie podajesz cały czas pozycji dla serwa... może jednak spróbować czegoś takiego? W takiej sytuacji pozostałbyś z narzuconym robotem bez dodatkowych urządzeń.

 

  • Lubię! 1
Link do komentarza
Share on other sites

Kiedyś siedziałem i sporo fajnych projektów zrobiłem, ale jednak ponad 2 lata przerwy swoje robi. Niektóre rzeczy się zapomina i już średnio mam ochotę sobie na nowo to przyswajać. Po prostu nie mam czasu. Tym bardziej że życie mnie pokierowało w całkiem inną gałąź informatyki. Ale nieważne
Z tym Serialem to może faktycznie dobry pomysł 🙂 Chociaż już wykorzystuję Serial i SowftwareSerial. Zobaczę potestuję

Attiny nie dam bo nie mam, kupować nie chcę a mam kilka sztuk Pro Mini 🙂

Co do lasera to może źle powiedziane, jest to po prostu układ VL53L0X. Nie chcę już tego zbytnio komplikować bo zliczając klasę do obsługi robota, czujników oraz główne funkcje programu to wyszło już ponad 1000 linii kodu, a dojdzie do tego jeszcze trochę dlatego chyba jednak zostanę przy drugim układzie.

Link do komentarza
Share on other sites

Praktycznie każdy układ peryferyjny da się zrobić programowo ale ma on szereg wad. Najczęściej (poza zapotrzebowaniem na FLASH/RAM) to:

- mniejsze prędkości,rozdzielczości

- funkcje blokujące

Zależnie od  różnych czynników, powyższe mogą wystąpić razem lub jeden z nich.

Napisz jakie parametry ma mieć PWM (skoro sterowanie serwem, to niby powinno być 500us..1,50ms a może 2ms? Z jakąś rozdzielczością - jaką?). Napisz tez czy używasz funkcji, które czasowo zawieszają przerwania (np atomic_block), jeśli tak, to na jak długo. Jak długo wykonują się funkcje przerwań? Czy można zawieszać przerwania? Mając te informacje, będę w stanie napisać czy i jakie rozwiązanie programowego PWM wybrać.

Link do komentarza
Share on other sites

8 minut temu, Elvis napisał:

A może prościej dać sterownik serw np. po i2c - chociażby PCA9685? Proste, łatwe i sprzętowe rozwiązanie.

Proście na pewno ale czy optymalnie? Po co dodawać sprzęt, zmniejszając niezawodność, zwiększając koszty jak prawdopodobnie da się to zrobić programowo.

Naturalnie, to, że trzeba kombinować programowo, świadczy tylko o tym, ze projekt nie został przemyślany, wystarczyło wybrać inny sprzęt.

Link do komentarza
Share on other sites

2 godziny temu, es2 napisał:

Proście na pewno ale czy optymalnie? Po co dodawać sprzęt, zmniejszając niezawodność, zwiększając koszty jak prawdopodobnie da się to zrobić programowo.

Obecnie autor wykorzystuje osobne Arduino, więc zamiana go na dedykowany układ typu PCA9698 byłoby i tak dużym skokiem w przód 😉 Szczególnie, że @Criss92 pisał już, że aktualny program jest dość rozbudowany i ciężko będzie mu tam coś "wcisnąć". Obsługa i2c będzie na pewno łatwiejsza od programowego generowania PWM, które będzie współgrało z innymi komponentami. Z opisu wynika, że platforma sprzętowa była dostarczona przez uczelnię, więc jej wymiana nie wchodzi pewnie w grę.

Link do komentarza
Share on other sites

33 minuty temu, Treker napisał:

Z opisu wynika, że platforma sprzętowa była dostarczona przez uczelnię, więc jej wymiana nie wchodzi pewnie w grę.

Wiem o tym i albo uczelnia popełniła błąd w doborze sprzętu albo o czymś autor nie napisał.

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.