Skocz do zawartości

Zakłócenia w HC-SR04


Orleander

Pomocna odpowiedź

Witam.

Buduję swojego pierwszego robota z mikrokontrolerem, którego zasada działania sprowadza się do prostej jazdy na wprost, a po wykryciu przeszkody przez HC-SR04, odpowiedniej orientacji i zmiany kierunku.

Niestety, drogą prostego "debugowania"(wycinania kodu, dochodzenia do momentu, kiedy wszystko działało) przy użyciu UARTu, doszedłem do wniosku, że jeżeli układ działa bez silników(silniki i logika odseparowane są stabilizatorem napięcia), to wszystko jest w porządku. Kiedy natomiast dołączę silniki, jedna na kilka próbek sczytanych z HC-SR04 jest błędna. Co ciekawe, błąd zawiera się w przedziale 900-1020(są to liczby naliczonych impulsów - nie przeliczam na sekundy, bo nie jest mi to potrzebne). Procesor jest taktowany kwarcem 11059200 Hz.

Dołączam oczywiście schemat mojego obwodu:

Czy jest ktoś, kto miał podobny problem? Dodam, że płytka jest już wytrawiona, polutowana(robot praktycznie złożony 🙂 ), więc nie jestem w stanie sobie pozwolić na zbyt duże modyfikacje.

Dziękuję z góry za pomoc, pozdrawiam,
Bartek 🙂

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

Sytuacja wygląda teraz tak: jeden kondensator 22uF jest bezpośrednio przy wyprowadzeniu pinów na HC-SR04, zwiększyłem kondensator przed stabilizatorem na 470uF oraz dodałem jeden równolegle na wyjściu stabilizatora 100uF.

Niestety, problem dalej występuje, lecz tym razem nawet zakres nie drgnął. 🙁

Link do komentarza
Share on other sites

Kondensatory elektrolityczne mają dość sporą bezwładność (nie wiem jak to poprawnie się nazywa, wybaczcie), więc nadają się tylko do wygładadznia powolnych ale dużych zakłóceń. Żeby pozbyć się tych mniejszych, potrzebujesz kondensatora o mniejszej bezwładności, na przykład ceramicznego. Na szczęście nie musi być taki duży. Najlepiej więc jest mieć parę kondensatorów, jeden elektrolityczny i jeden ceramiczny, równolegle do siebie.

Dalej, istotne jest gdzie fizycznie te kondensatory są podłączone, ponieważ kable także mają swoją pojemność i indukcyjność i jak dasz kondensator na końcu długiego kabla, to dostaniesz układ drgający LC. Zatem kondesatory dajemy blisko tego, co próbujemy zasilić wygładzonym prądem -- w twoim przypadku będzie to sam sensor oraz płytka z mikrokontrolerem.

Link do komentarza
Share on other sites

deshipu, HC-SR04 jest podłączony z moją płytką główną około 20-centymetrowymi przewodami. Mogę w takim razie tę parę kondensatorów umieścić przy złączu na płytce głównej?

Elvis, wykorzystuję jedno przerwanie: Timer2 ustawiony w tryb CTC, służący do sterowania serwem.

Jeżeli chodzi natomiast o sam HC-SR04, moja funkcja odczytująca odległość jest napisana w najprostszy, sekwencyjny sposób(przy projektowaniu płytki nie pomyślałem o tym, żeby wyjście ECHO podłączyć do wejścia INT, więc jestem tutaj ograniczony do bezprzerwaniowej obsługi tego sensora).

Link do komentarza
Share on other sites

Podczas odczytu odległości nie wyłączam tego przerwania, jednak tak jak mówiłem, po podłączeniu zasilania z programatora do układu(czyli de facto silniki nie dostają zasilania, bo stoją przed stabilizatorem), cały układ zachowuje się poprawnie i nie ma żadnych błędnych wskazań.

Tym nie mniej spróbuję, być może jakiś inny tajemniczy czynnik wpływa na układ 😉

Link do komentarza
Share on other sites

Jeśli ten wgrywasz wtedy ten sam program, to nie ma co męczyć przerwań.

Pozostaje jeszcze jedna opcja, czyli filtrowanie wyników. Możesz zwiększyć częstotliwość pomiarów i odrzucać wyniki które mocno odbiegają od średniej (np. filtrem medianowym).

Link do komentarza
Share on other sites

Niestety, problem dalej występuje.

Jeśli ten wgrywasz wtedy ten sam program, to nie ma co męczyć przerwań.

Przepraszam, ale nie zrozumiałem. 😉

Czy takie filtry są trudne do implementacji? Wiąże się to chyba z całkowitą zmianą rozumowania w kodzie, gdyż - jak się domyślam - pomiary muszę wykonywać z dużą częstotliwością, a z nieco mniejszą filtrować je i wtedy oceniać sytuację. Czy tak jest?

Link do komentarza
Share on other sites

Chodziło mi o to, że jeśli dokładnie ten sam program działa poprawnie, to wycofuję moje pomysły z przerwaniami 🙂

Jak chodzi o filtr medianowy, to jest on bardzo prosty - wybierasz środkową wartość z kilku pomiarów. Załóżmy, że wykonujesz 3 pomiary, a jako wynik wybierasz zawsze wartość środkową. Najlepiej byłoby oczywiście wykonywać pomiar 3 razy częściej.

Algorytm mógłby wyglądać np. tak:

a = pomiar_hcsr04();

b = pomiar_hcrs04();

c = pomiar_hcrs04();

if ((a <= b) && (b <= c)) return b;

if ((c <= b) && (b <= a)) return b;

... // pozostałe kombinacje

Oczywiście można to "ładniej" zaimplementować, ale to chyba najprostsza opcja.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Spróbuję go zastosować i zobaczymy wyniki 🙂

Mam nadzieję tylko, że będzie działał zadowalająco dla małych ilości pomiarów. Dla większej pewnie by działał bardziej prawidłowo, ale byłyby pewnie problemy z algorytmami sortującymi. 😉

Link do komentarza
Share on other sites

deshipu, HC-SR04 jest podłączony z moją płytką główną około 20-centymetrowymi przewodami. Mogę w takim razie tę parę kondensatorów umieścić przy złączu na płytce głównej?

W żadnym wypadku, właśnie o tym pisałem. Przy czujniku, który zasilasz.

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.