Skocz do zawartości
BTL00

Micromouse - prośba o sprawdzenie schematu.

Pomocna odpowiedź

Witam!

Jestem w trakcie tworzenia robota typu micromouse. Chciałbym Was prosić o sprawdzenie tego schematu i ew. uwagi.

Z góry odpowiem, że jestem świadom niepodpiętych ścieżek do złącza JP7 - będzie tam znajdował się moduł BT, a nie jestem pewien kolejności wyprowadzeń. Drugi aspekt to moduł z sterownikiem silników: LINK. Będzie on wpięty na goldpiny. Co do programowania układu, to będzie tam bootloader Arduino, więc będę musiał go zaprogramować tylko raz (wszystkie piny są wyprowadzone) przez ISP, a potem będę programował po UARTcie.

No tak... Edytuję 2 raz. Mam jeszcze pytanie. W związku z brakiem pinów w atmedze, miałem pomysł, żeby dodać jakąś diodę równolegle do przycisku SW1. Zadziała takie coś?

552910525_dosprawdzenia.thumb.png.2def3622fdc1ab3488a655ce5ea86307.png

Udostępnij ten post


Link to post
Share on other sites

Masz kondensator C4 podpięty do 5V, powinien być podpięty do GND, chyba że to tak specjalnie i o czymś nie wiem. Zasilanie mikrokontrolera można by było trochę lepiej zaprojektować (np dodać dławik i kondensator do pinu AVCC, google: prawidłowe zasilanie mikrokontrolera).

Spojrzałem do datasheeta ATmegi328 i nie widzę, aby pin PB4 miał możliwość sprzętowego generowania sygnału PWM, kanał OC2B jest na pinie PD4

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Dzięki wielkie, poczekam jeszcze, może jakiś myszozapaleniec wypowie się co do schematu.

Poprawilem już schemat. I dodałem tą nieszczęsną diodę.

Udostępnij ten post


Link to post
Share on other sites

Wszystkie diody masz na odwrót swoją drogą 🙂 W kilku miejscach brakuje połączeń w Eaglu. Te, które dostrzegłem zaznaczyłem czerwonym okręgiem:

PS. złącza dla programatora nie przewidujesz?

Udostępnij ten post


Link to post
Share on other sites

Kurcze, ale wiocha z tymi diodami... Rzeczywiście na odwrót.

Złącza nie będzie. Paradoksalnie wszystko mam wyprowadzone. Złącza od sonaru i modulu z tb6612 wystarczą żeby na uC wgrać bootloader. A potem to już przez UART będę programował, a to mam wyprowadzone w złączu od bluetooth'a.

Udostępnij ten post


Link to post
Share on other sites

Pisałem tego posta trochę za długo i teraz już nie będę zmieniał, choć kilka rzeczy zostało dostrzeżone. Trudno, będzie jeszcze raz:

1. Tak jak napisał Kolega, przejrzyj funkcje specjalne pinów procesora i zastanów się raz jeszcze nad ich wykorzystaniem. Dwa sprzętowe PWM do silników dostajesz na OC1A i OC1B, kolejne wyjście z generacją przebiegów to OC2 - mogłoby przydać się do wyzwalania czujnika TRIG a ECHO aż prosi się podłączyć przynajmniej do jakiegoś przerwania bo ICP które byłoby tu idealne niestety będzie trudno wykorzystać.

2. LED5 jest podłączona odwrotnie. Nawet jeśli dasz katodę na masę to i tak funkcja wczytywania przycisku będzie upośledzona. Pullup konieczny do zapodania na wejście stanu wysokiego będzie delikatnie "świecił" a i tak na pinie procesora może nie być więcej jak 2V z hakiem (tyle ma dioda LED) co nie wystarczy do wczytania jedynki. Diodę daj od plusa przez opornik 2kΩ do wejścia procesora a to wejście zwieraj bezpośrednio przyciskiem do masy. Niestety to będzie powodować, że przycisk zapala diodkę - trudno, jeden pin to i funkcje się nakładają.

3. Drivery diod oświetlających są zupełnie skopane. Pomijając to, że LEDy są odwrotnie to zdecyduj się albo na wtórniki emiterowe npn (baza przez opornik do procka, kolektor bezpośrednio do plusa, diody w emiterze do masy) albo na układ npn OE (baza przez opornik do procka, emiter na masie, diody w kolektorze do plusa) albo na układ pnp OE (baza przez opornik do procka, emiter na plusie, diody w kolektorze do masy). Nie możesz łączyć diod równolegle w ten sposób. Albo dajesz każdej osobny opornik albo łączysz je szeregowo i jeden opornik wspólny.

4. Kondensator min 100nF równolegle do R6.

5. Dlaczego nie załączasz LEDów wspólnym sygnałem? Miałbyś jeden wolny pin.

6. Na 5V wystarczy Ci spokojnie 22-100uF.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

1. Tak, już zauważyłem.

Zamierzałem wykorzystać czujnik w sposób czysto software'owy i nawet nie jestem pewien czy przyda się w MM.

2. Już poprawione, a zapalanie diody to nie problem.

3. Hmm... To zadanie na jutro (jak poprawie to dorzucę schemat).

4. Poprawione.

5. Miałem taki genialny plan, żeby nie odpalać wszystkich LED'ów naraz... Tzn. lewy boczny tylko z prawym górnym i prawy boczny tylko z lewym górnym, żeby uniknąć jakichś tam błędów.

6. Ok, takie miałem po prostu pod ręką, ale skoro i tam zamierzam robić SMD, to mogę mniejsze zamówić.

[ Dodano: 02-11-2014, 10:54 ]

Poprawiony schemacik część˙3:

Udostępnij ten post


Link to post
Share on other sites

1. Dioda LED5 znów odwrotnie 🙂 A jak już ją poprawisz to musisz przepiąć linię SW1 na inny port bo ADC7 jest tu tylko wejściem analogowym, nie jest to żaden port cyfrowy i nie możesz zrobić go wyjściem. A gdy będzie już a porcie I/O to już tylko pamiętaj, że jedynymi dopuszczalnymi w tym rozwiązaniu konfiguracjami pinu będzie "wyjście w stanie 0" (dioda LED świeci, ale nie widzisz przycisku) i "wejście z pullupem" (dioda LED nie świeci chyba że wciśniesz przycisk, ale za to możesz wczytać jego stan). Stan "wyjście w stanie 1" jest zabroniony ze względu na możliwość zwarcia wyjścia przez przycisk do masy. Jeżeli dopuszczasz wystawienie twardego stanu 1 na skutek np. błędów w programie, daj na wszelki wypadek 100Ω szeregowo z przyciskiem.

2. W myszy procesor ma wiele do zrobienia i jeśli już teraz możesz mu ulżyć, rób to bez wahania. Całkowicie programowa obsługa czujnika ultradźwiękowego zamula procesor na wiele milisekund i ma kiepską rozdzielczość - jeszcze raz przemyśl przepięcie sygnałów TRIG/ECHO na wyjście timera i wejście przerwania, przecież i tak masz te zasoby w procku. Na tym etapie takie zmiany jeszcze nic nie kosztują.

3. Wybrałeś wtórniki npn, OK. Diody oświetlające możesz połączyć po dwie szeregowo - zawsze to jakaś oszczędność energii (i regulacja prądu jednym opornikiem), ale połączenie równoległe może być łatwiejsze do zrobienia na PCB. Przy okazji - prąd diody 3mA to może być mało na czujnik IR, choć jeśli zastosujesz prawidłową modulację, może wystarczyć na przeszkody do 20cm.

EDIT: Jaką modulację? Głupoty piszę, przecież czujnikami są zwykłe fototranzystory a nie TSOPy - koniecznie daj większy prąd diodek.

4. Podczas prób bardzo użyteczny jest zwykły przycisk RESET np. podpięty równolegle do złącza JP9.

Udostępnij ten post


Link to post
Share on other sites

Dzieki za kolejne rady dotyczące schematu. Dziś w nocy, albo jutro wstawie kolejne poprawki. Mam jeszcze jedną prośbę. Podpowiedzcie mi jak to wszystko upakowac na PCB 10 na 10 centymetrow ze scietymi rogami (trójkąty prostokątne rownoramienne, przyprostokątna 2cm) i wcięciami na kola. Kształt ma być podobny do nieukonczonej "Cegły". Od czego zacząć?

[ Dodano: 02-11-2014, 19:13 ]

A tą modulacją się serio przestraszylem.

Udostępnij ten post


Link to post
Share on other sites

Kolejne poprawki wprowadzone. Wyrzuciłem ten nieszczęsny sonar i w miejsce na ADC7 wstawiłem miejsce na analogowego sharpa. Dorzuciłem filtry do fototranzystorów, ale nie jestem pewien co do oporników, jakie powinienem dać. Wiem... Znowu LED'ów nie poprawiłem....

Udostępnij ten post


Link to post
Share on other sites

Ech, lepiej napisz po co te filtry. Może wtedy zrozumiem dlaczego wybrałeś właśnie takie. Dlaczego akurat takie stałe czasowe i dlaczego górnoprzepustowe?

Rezystor przy S1 miał chronić wyjście portu przed zwarciem do masy gdyby kiedyś udało Ci się wystawić tam "twardą" jedynkę - miał być szeregowo z S1. Rysuj wolniej, uważniej i zastanawiaj się nad sensem każdej zmiany. Poprawki wprowadzane na szybko są gorsze od nicnierobienia (a wrzucanie niedokończonych schematów powinno być zabronione). Albo masz czas na dyskusję, albo go nie masz i odłóżmy ją na później.

Czy dobrze widzę, dławik ma 10nH?

Jakich częstotliwości impulsów spodziewasz się z enkoderów? Będą na silnikach czy na kołach? Jak spodziewasz się programowo obsługiwać ciągły proces zliczania kroków, gdy będziesz musiał próbkować cztery zwykłe wejścia portów i robić wiele innych rzeczy na raz?

Udostępnij ten post


Link to post
Share on other sites

Hmm... Szczerze mówiąc, to sam nie mam bladego pojęcia po co te filtry. Przeglądałem ostatnio schematy kilku robotów i zauważyłem, że przynajmniej 2 takowe posiadają.

Na naszym forum robot "Devil" ma takie jak te na schemacie, a użytkownik grabo wyjaśnia to tak: "Światło dzienne eliminowane jest poprzez sprzętowy filtr górnoprzepustowy." Niestety nigdzie nie znalazłem innego wyjaśnienia, ale gdzieś w internecie znalazłem prezentację, w której też użyto czegoś tego typu.

Tak, powinno być 10uH.

Co do enkoderów, to mam 2 opcje.

http://botland.com.pl/kola-pololu/66-zestaw-kol-42x19mm-z-enkoderami.html (zrobić samemu coś podobnego, ponieważ te są dość drogie, a posiadam już takie kółka)

http://botland.com.pl/enkodery/2755-zestaw-enkoderow-optycznych-do-micro-silnikow-pololu-wersja-5v-2-szt.html

Ogólnie mówiąc, to zamierzam zastosować tego gotowca:

https://www.pjrc.com/teensy/td_libs_Encoder.html

I ustawić po jednym z wyjść enkodera na przerwanie, a drugie jako normalny pin.

Udostępnij ten post


Link to post
Share on other sites

Acha.

To zacznijmy od tego po co myszy czujniki - do wykrywania ścian, to jasne.

Jak je wykrywamy?

Przez świecenie w różne strony diodkami podczerwonymi i sprawdzanie czy coś z tego świecenia wróciło do odpowiedniego fototranzystora.

Jak procesor dowiaduje się o oświetleniu czujnika?

Przez pomiar napięcia na (w Twoim przypadku) oporniku podłączonym do emitera fototranzystora. Im więcej promieniowania pada na czujnik tym większe napięcie dostaje przetwornik A/C i tym większa liczba trafia gdzieś do algorytmu detekcji ściany.

Jak ściana jest odróżniana od nie-ściany?

Przez ilość odbitego promieniowania. Im mniej wraca do czujnika tym ściana jest dalej. Dla zadanego rodzaju materiału z jakiego jest wykonana ściana lub dla pewnego rodzaju farby jaką jest ona pomalowana można znaleźć takie napięcie, poniżej którego ściany w danej komórce labiryntu i w danym kierunku nie ma, a powyżej którego jest. W ten sposób mysz rozpoznaje konfigurację ścian i powoli - wędrując z komórki do komórki - uczy się struktury labiryntu.

Czy to rzeczywiście jest takie proste?

No niestety nie. Oprócz naszego promieniowania odbitego od ściany, do czujnika dociera cała masa zakłóceń. Najprościej poradzić sobie z tymi stałymi - od Słońca. Takie coś powoduje dodanie stałej wartości do napięcia z czujnika. Np. jeżeli w ciemnym pokoju dostawałeś 2V dla ściany i 0.4V bez niej, to za dnia może być np. 2.3V i 0.7V. Przyrost o 0.3V nie jest groźny, bo przecież próg detekcji ściany był pewnie ustawiony gdzieś na 1.2V i czujnik wciąż będzie działał, ale jeśli Słoneczko poświeci mocniej możesz dostać napięcia np. 3.8/2.2V i po barszczu - układ oślepł. Mimo, że różnica jest wciąż ta sama to podniesiony o 1.8V poziom obu napięć spowodował permanentne przekroczenie progu detekcji ściany i mysz uznała, że stoi w komórce zamkniętej z każdej strony.

Co robić?

Są dwa wyjścia i oba polegają na zmianie sposobu świecenia diodkami IR. Zamiast zapalać je na stałe, trzeba mrugać. Pomiary trzeba teraz będzie wykonywać zarówno gdy świecą jak i gdy są zgaszone. Od teraz różnica a nie wartość bezwzględna napięcia będzie wynikiem. Wracając do poprzedniego przykładu tym razem muszę zrobić małą tabelkę:

                              ciemno               jasno 
ściana:                   jest    nie ma       jest    nie ma
diodki zgaszone:          0.4V     0.4V        2.2V     2.2V
diodki zapalone:          2.0V     0.6V        3.8V     2.4V
różnica pomiarów:         1.6V     0.2V        1.6V     0.2V

Wyniki są oczywiście przykładowe (i może trochę zbyt idealne), ale pokazują, że pomiary różnicowe działają. Wynik jest duży (1.6V) gdy ściana jest blisko i mały (0.2V) gdy jest daleko lub wcale. Porównując wyliczoną różnicę z jakimś progiem masz wynik: obecność ściany. Dodatkowo analizując wielkość różnicy możesz pozycjonować mysz na środku komórki - to bardzo ważny element algorytmu myszy.

Po co w takim razie filtry?

Filtry górnoprzepustowe to alternatywny sposób pozbycia się zakłóceń stałych. Taki filtr nie przepuszcza składowej stałej sygnału a tylko jego zmiany. Tak więc algorytm pracy czujnika z takim filtrem może wyglądać następująco:

1. Diodki wyłączone. Czujnik widzi jakieś promieniowanie i jego napięcie wynosi np. 2.2V bo jest bardzo jasno, ale filtr to zatrzymuje i ADC mierzy 0V.

2. Załączamy diodki.

a. Jest ściana: napięcie na emiterze fototranzystora wzrasta np. do 3.8V. Zmiana przenosi się przez filtr i ADC mierzy 1.6V. Musi to zrobić zaraz po włączeniu diodek, bo filtr długo tego nie utrzyma i za chwilę napięcie mierzone przez ADC zacznie spadać do 0V.

b. Nie ma ściany: napięcie na emiterze fototranzystora wzrasta np. do 2.4V. Zmiana przenosi się przez filtr i ADC mierzy 0.2V. Musi to zrobić zaraz po włączeniu diodek.. itd.

3. Wyłączamy diodki i czekamy dłuższą chwilę by filtr "doszedł do siebie" i był gotowy na następny pomiar.

Co wybrać?

Moim zdaniem liczenie różnic nie jest wielkim wyzwaniem dla procesora a dodatkowo mamy informację o oświetleniu bezwzględnym. Zawsze można podnieść alarm gdy napięcie czujnika zbliża się do 5V przy którym już nic nie pomoże, bo zakłócenia przykryją każdy nasz sygnał i żadnych zmian nie zobaczymy. Filtry trochę upraszczają program, ale kosztują dodatkowe elementy no i momenty pomiarów są uzależnione od ich stałych czasowych. W sumie oba rozwiązania działają.

Enkodery:

Ja bym dał na koła - przy jednym przerwaniu masz tylko jeden impuls na ząbek, czyli rozdzielczość 2.7mm - na mysz wystarczy. Na silnikach, z powodu wysokich obrotów będą zżerały dużo mocy procesora - chyba nie warto.

W opisie "gotowca" piszą o jakichś problemach z przerwaniami (nie znam się na Arduino) i że chyba w końcu używają tylko metody z podczytywaniem programowym - to tutaj nie zadziała. Poczytaj sam, może coś źle zrozumiałem.

  • Lubię! 1

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