• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Odtwarzanie trasy przejazdu robota - poprawność programu
#6
(06-01-2019, 22:07)BourbonKid napisał(a): Dziękuję bardzo za miłe słowa Smile

Wprowadziłem znów kilka zmian według wskazówek.
Częstotliwość występowania przerwań zewnętrznych zależy od wartości PWM podawanej na sterownik silników, a więc od prędkości obrotowej. Próbowałem na większych i mniejszych wartościach. Zauważyłem, że przy wartościach większych, występował jedynie błąd wynikający z pędu pojazdu. (...)
Pozostaje mi dojść do tego, z jakiego powodu podczas jazdy na wprost pojazd najpierw zaczyna kręcić prawym kołem, a po chwili (milisekundy) dopiero dołącza drugie koło. Podczas jazdy do tyłu problem ten nie występuje. 
Próbowałem z nastawami regulatora PD, ale jeśli to byłoby przyczyną, to problem występował by także podczas jazdy do tyłu. 

(...)

Zastosowałem Watchdog'a, jednak proszę ocenić, czy zrobiłem to prawidłowo. Przyznaję się, że stosuję tę funkcję po raz pierwszy Smile Podczas odtwarzania trasy (pętla, której wcześniej program nie chciał opuszczać) za każdym razem kasuję licznik WDG, ponieważ może to być długa trasa w danym kierunku, co może trwać nawet ponad 10 sekund.
Co do problemów z enkoderem, podłącz oscyloskop lub ostatecznie analizator logiczny, miernik czestotliwości i zobacz jakie to są czestotliwości. Używając GPIO (ustawiając w przerwaniu) i oscyloskopu, możesz w przybliżeniu zmierzyć czas przerwań, zobaczyć zależności pomiędzy sygnałami.


Zanim o WDT. Zmień "volt" na "int" lub "long" (zależy jaką chcesz uzyskać rozdzielczość" i odpowiednio przeskaluj. Nawet na ARM unikam liczb zmiennoprzecinkowych. Pierwiastków tu nie liczysz, zakres duży nie jest, więc float jest zbędny.

Nadużywanie liczb zmiennoprzecinkowych to drugi po delay najczęstszy błąd Arduinowców!

Co do WDT. Ideałem jest, gdy w jednym miejscu pętli głównej WDT jest resetowany. Wymaga to pisania funkcji nieblokujących. Zysk jest oczywisty, WDT można resetować np 10 czy 100razy na sekundę i tak, można ustawić czas zadziałania WDG (w AVR nie jest zbyt elastyczny ten czas, więc np 125ms dla 10razy czy 16ms dla 100razy).
Nawet WDG w ARM jest zdecydowanie lepszy niż w AVR.
Można oczywiście resetowanie WDT umieszczać w długo wykonujących się funkcjach, ale takich, w dobrym programie, nie powinno być. Bo nicy co ma się długo wykonywać w takim robocie? Jazda prosto 10minut? Zlecam jazdę prosto przez 10 minut i wychodzę w funkcji. Przerwania po 10 minutach zatrzymają robota. Proste?
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Odtwarzanie trasy przejazdu robota - poprawność programu - przez es2 - 06-01-2019, 23:48

Skocz do:


Przeglądający: 1 gości