Skocz do zawartości

Pomocna odpowiedź

Napisano

Witam !

Jakiś czas temu ukończyłem budowe mojego drugiego (po robocie z "przepisu") line followera konstrukcja jak to zwykle bywa z robotami mojej konstrukcji jest niezmiernie prosta i pozbawiona wodotrysków.

A więc robot powstał w sumie w niecały miesiąc jak tylko sobie uświadomiłem, mój budżet nie pozwoli mi na ukończenie pierwszej wersji robota do której zresztą miałem już płytki. Wygrzebałem więc z szuflady dwa silniczki HL149 20:1 i zacząłem działać. Przy budowie wykorzystałem pomysł kolegi Mirka który podsunął mi pomysł wykorzystania multipleksera i tak oto do ATmega8 udało mi się podłączyć... 16 czujników to całkiem nieźle biorąc pod uwagę że zużyłem tylko 5 nóżek uC. To rozwiązania sprawia również ,że robot to chyba jedyna taka konstrukcja na forbocie!

Na początek może krótka specyfikacja:

Jako że jestem leniwy to nie chciało mi się robić nowej płytki więc płyta główna pochodzi ze Zniszczyciela II link

Reszta elementów to :

Zasilanie: Li-po 1000mAh 3S

Czujniki 16 x KTIR0711S

Multiplexer : HEF4067

Napęd 2x Hl149

Prędkość według obliczeń 0,4 m/s 🤣 (za duże przełożenie silników)

No dobrze ale na czym polega ten bajer z multiplekserem ? Otóż podstawowym problemem ograniczającym liczbę czujników w LF jest niewystarczająca liczba pinów zwłaszcza pinów ADC multiplexer pozwala nam obsłużyć nawet 16 czujników na jednym kanale ADC ! Jak on to robi ? Dosyć prosto to działa trochę tak jak przełącznik 16 pozycyjny za przełączanie go odpowiadają nóżki adresowe układu w przypadku 4067 jest ich 4 (4^2=16) więc jak widać pojawienie się na nich jakieś kombinacji bitów np. 0100 "zwiera" wejście układu do kanału adc ustawiając po kolei wszystkie kobinacje na nóżkach adresowych możemy w łatwy sposób sprawdzić 16 czujników podłączonych do wejść multiplexera.

To chyba tyle z opisu schematu nie ma bo nigdy nie powstał druga płytka zawiera tylko multiplexer i złącze czujników.

To teraz trochę zdjęć :

I filmik :

Program sterujący:

Ponieważ rozwiązanie układowe jest nietypowe to również program wygląda trochę inaczej niż zwykle opiszę więc kawałek kodu.

A3 = 0 : A2 = 1 : A1 = 0 : A0 = 1                           'ustawiamy bity adresowy multipleksera
Gosub Wczytaj_stany_przetwornikow                           'pomiar ADC
If W > Granica Then                                         'sprawdzmy czy jesteśmy na linii
X = 4                                                       'jeśli tak to wartosc czujnika = 4
D = 0 + X                                                   'liczymy pseudo P
Z = Kp * D


 Pwm1b = Tp + Z
 Pwm1a = Tp - Z


End If
Delay                                                       'czekamy na przeladowanie bramki

Czyli działa to tak wybieramy czujniki (piewsza linijka) sprawdzamy czy jest na linii jeśli tak to liczymy PWM jeśli nie to sprawdzmy kolejny. I tyle 😃

Oczywiście program to na razie wersja beta więc nie ma jeszcze uśredniania wyników i tak dalej.

DSC01473.thumb.JPG.c1b6be5620a5bf1649933cb7713ee8ec.JPG

  • Lubię! 2

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Rozwiązanie z multiplekserem ciekawe i pytanie w związku z tym: korzystając z tego sposobu, ile razy w ciągu sekundy uzyskujesz pełny zestaw wartości odczytanych z czujników?

ile razy w ciągu sekundy uzyskujesz pełny zestaw wartości odczytanych z czujników?

Według noty katalogowej opóźnienie bramki wynosi 40nS ja po każdej pętli warunkowej daje komendę delay która wynosi 1000uS teraz mam ją razy 16 więc sprawdzam całą linijkę w 0,016 tzn. 62,5 raza na sekundę ale jak widać możliwości układu są większe i to opóźnienie można na pewno znacznie zmniejszyć. Co ciekawe według noty katalogowej im wyższe napięcie tym mniejszy czas przełączania i tak przy zasilaniu z 15V opóźnienie wynosi już tylko 20nS więc całą linijkę można by było sprawdzić...to chyba sobie sam każdy policzy przepraszam ale po prostu nie mam w tej chwili kalkulatora pod ręką 🙂 Oczywiście polecam zweryfikować te dane z notą katalogową układu bo naturalnie mogłem coś źle przeczytać

Tolo, rozumiem, że przełączenie multiplekserem następuje gdy przetwornik ADC zdąży przekonwertować już napięcie z jednego czujnika.

Tolo, rozumiem, że przełączenie multiplekserem następuje gdy przetwornik ADC zdąży przekonwertować już napięcie z jednego czujnika.

Hmmm co masz na myśli ? Udostępniłem fragment kodu odpowiedzialny za sprawdzanie czujnika jak widać przełączenie następuje po konwersji i odczekaniu opóźnienia

Jeszcze może wrzucę szkic koncepcyjny do następnej konstrukcji :

Takie rozwiązanie pozwala na odczyt już 8 czujników naraz możemy już w zasadzie standardowo uśredniać wyniki pomiarów co na pewno będzie o wiele wygodniejsze a także sterowanie samym multiplekserem jest prostsze (tylko dwa piny) oraz czas przełączania całej linijki jest o wiele krótszy 😅

Swoją drogą jak napisać w bascomie precyzyjne opóźnienia o zadanym czasie ? Np. 40nS ?

Hmmm co masz na myśli ? Udostępniłem fragment kodu odpowiedzialny za sprawdzanie czujnika jak widać przełączenie następuje po konwersji i odczekaniu opóźnienia

Nie czytałem kodu, myślałem, że może przełączasz multiplekserem przed zakończeniem pomiaru. Prawdę mówiąc nie wiem jak działa pomiar napięcia w Bascomie, czy napięcie jest próbkowane i dochodzi do konwersji, czy napięcie jest potrzebne przez cały czas konwersji. Jeśli byłoby tak jak w pierwszej opcji to można by od razu po rozpoczęciu konwersji przełączyć kanał.

Niestety Bascom zwalnia z myślenia i zagłębiania się w dokumentację stąd sam nie wiem jak przebiega konwersja napięcia w AVRach.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...