Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Pomiar odległości na AVR

Michal_Lach 28 May 2005 12:19 8322 18
  • #1
    Michal_Lach
    Level 11  
    Witam!
    Prajektuje urządzenie do pomiaru odległości na procku ATmega 16(kwarc 12MHz wykorzystujący przetworniki ultradźwiękowe do pomiaru.
    Generuje sygnał na dla przetwornika na Liczniku T/C0 w trybie CTC (narazie prostokąt 40kHz), a odbierać chcę na komparatorze analogowym na wejściach ani0(plus odbiornika 40 SR10) i minus na adc0(wejscie przetwornika A/C może być podłaczoe do ujemnego wejścia komparatora za pomocą multileksera). Wynik pomiaru wyrzucam na wyawietlacz i sygnalizuję dźwiękiem.
    Jednak po przejżeniu paru projektów( między innymi : Praktyczny Elektronik, Nowy Elektronik i paru publikacji w necie) mam pewne wątpliwości co do generowania sygnału na przetworniku(chyba 40ST12).
    Czym musze wzbudzac taki przetwornik sinusem czy moge prostokątem?

    Właściwie potrzebuje tą wiedze natychmiast, więc za każdą pomoc i trafną uwagę z góry dziękuję :]
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • Helpful post
    #3
    lbugiera
    Level 21  
    Prostokąt wystarczy do pobudzania. Z tego co słyszałem (zasłyszane, a więc może być nie dokońca prawdziwe :) ) to te nadajniki 40st potrzebują niezłą amplitude napięcia na wejsciu, aby osiągnąc zasięg kilku metrów. Ja zrobiłem sonar na atmega, wzmacniaczu ze zmiennym wzmocnieniem ca3080 i ndajniku i odbiorniku muraty ma40a5s i ma40a5r. Pobudzałem je z max'a 232, generacja sygnału na atmega i liczniku, progowanie na komparatorze z atmega, działa piknie, 4 metry zasięgu, na swojej drodze do 2 metrów znajdzie wszystko. Co do zmiennego wzmocnienia, to potrzebne jest one jesłi chcesz osiągnąc odległości powyżej 3 metrów i mieć blisko siebie nadajnik i odbiornik. Prościej niż stosować wzmacniacz, ze zmiennym wzmocnieniem jest zastosować zmienny próg, np rozładowywujący się kondensator. Mała odległość między nadajnikiem, a odbiornikiem jest też potrzebna jeśli chcesz zmniejszyć martwą przestrzeń do <10 cm.

    Powodzenia.
  • #4
    -sivy-
    Level 11  
    a nie można to zrobić bezpośrednio z μC? tzn. podłączyć nogi nadajnika ultradź. bezpośrednio do procka?

    ja zrobiłem to tak (ale nie wiem jak odebrać sygnał, bez wzmacniania go)

    Code:
    $crystal = 8000000
    
    Config Portd = Output
    Enable Interrupts
    Enable Ovf0
    On Ovf0 Podprog
    Dim Sonar1 As Bit
    Dim Sonar2 As Bit
    Sonar1 = 1
    Sonar2 = 0
    Config Timer0 = Timer , Prescale = 1

    Do
    'tu będzie właściwy program
    Loop

    Podprog:
    Timer0 = 155                  'coby liczył od zadanej wartości (  -> 255)
       Sonar1 = Not Sonar1
       Sonar2 = Not Sonar2
       Portd.0 = Sonar1
       Portd.1 = Sonar2
    Return


    nie wiem czy dobrze liczę te wartości:

    μC = 8MHz
    częstotliwość pracy nadajnika to 40kHz
    zmieniać stan trzeba 2 razy na okres, więc
    8MHz/(40kHz*2) = 100

    licznik timer0 pracuje do 2^8 czyli 0-255, więc zaczynając od 155 uzyskam pożądane 100.

    gdzieś się mylę??
  • #5
    lbugiera
    Level 21  
    Co do programu który przedstawiłeś, to sie nie wypowiem, bo C dla AVRów sie nie uczyłem, zacząłem od asemblera i przy tym zostane :) Jeśli chodzi o podpięcie nadajnika bezpośrednio pod uC to na pewno to nie wystarczy. Jeśli w ogóle nadajnik będzie cos nadawał, to osiągniesz bardzo małe odległości, mysle że przy dużym wzmocnieniu odbiornika, 30-50 cm to będzie max. Te nadajniki muszą byc pobudzane minimum amplitudą 10V (czyli między szczytami 20 V) i to nie wszystkie będą przy takim napięciu dobrze nadawać (wystarczająco mocno). Najprostszym sposobem pobudzania takiego nadajnika jest podłączenie go pod przetwornice napięcia RS232/TTL czyli popularnego MAX232. Wtedy podłączasz nadajnik jedną noga pod T1out, drugą pod T2 out i zapodajesz na T1in i T2in raz T1in=1 i T2in=0 i po półokresu dla 40 kHz (12,5 mikrosekundy) T1in=0 i T2in=1, później po drugiej połówce zmieniasz do T1in=1 i T2in=0 i tak na zmiane, w ten sposób dostajesz na wyjściu 40 kHz z międzysczytowym napięciem 40 V. Ja w ten sposób osiągnoąem 4 metery zasięgu na nadjaniku murata ma405s kupionym w semiconductors bank we Wrocławiu za 5 zeta w komplecie z nadajnikiem :D
    Jeśli chodzi o dokładną generacje 40 khz to idealnie nadaje się do tego Timer 1 ustawiony w trybie CTC. Będzie ci on odmierzał połówki okresu i w każdej (przerwanie Compare match) dokonujesz zmiany T1in i T2in na stan przeciwny. Najprawdopodobniej nie uda ci sie ustawić dokładnych 40 kHz ze względu na małe możliwości ustawienia prescalera i częstotliwośc kwarcu jaką masz, ale wybierz najbliższą możliwą do wygenerowania częstotliwość. W moim przypadku było to 40060 Hz. Ogólnie wceluj w 40 kHz +/- 0,5 kHz i będzie działać.

    Powodzenia

    Powodzenia
  • #6
    -sivy-
    Level 11  
    co do odległości to nie potrzeba mi dużo. mam zrobić sterowanie do samochodziku, żeby nie wjeżdżał w przeszkody, więc jakieś 10 cm w zupełności mi wystarczy.
  • #7
    lbugiera
    Level 21  
    -sivy- wrote:
    co do odległości to nie potrzeba mi dużo. mam zrobić sterowanie do samochodziku, żeby nie wjeżdżał w przeszkody, więc jakieś 10 cm w zupełności mi wystarczy.


    No to być może sterowanie tego 5 V wystarczy, z drugiej jednak strony pobudzanie prze max'a 232 równiez jest bardzo proste. Jeśli potrzebujesz 10 cm to w odbiorniku wystarczy ci jeden wzmacniacz operacyjny. Np najprościej będzi e zastosowac TLC271/2 (TS272 to samo tylko troche szybszy) bo możesz go zasilać z 5 V. W praktyce pewnie będzie ci potrzebne 20-30 cm bo jeśli ten samochodzik szybko jeźdźi to pewnie nie zdązy sie zatrzymać :D
  • #8
    ko_rex
    Level 19  
    Witam po przerwie. Wcześniej podałem linka do mojego opracowania. Przy zasilaniu ok. 12 V uzyskałem poprawny pomiar od ściany na jakieś 4,2 m z ręki. Dlatego nadajnik jest takiej prostej postaci. Myślę, że z ATmegą możesz spróbować podłączyć nadajnik bezpośrednio do pinów i sterować przeciwsobnie. Będziesz miał amplitudę 10V a wydajność prądowa pinów wdaje się być wystarczająca (dochodzi do 40 mA). Ale skoro chcesz to używać w samochodzie....no to przecież masz tam wyższe napięcia do dyspozycji. Jeśli będziesz mierzył małe odległości, to pobudzenie nie może byż zbyt długie, ani zbyt silne, ponieważ nie będziesz w stanie wykryć sygnału odbitego. Zostanie zakłucony przez drgania mechaniczne urządzenia wywołane przez nadajnik.
  • #10
    lbugiera
    Level 21  
    -sivy- wrote:
    Quote:
    (...) i sterować przeciwsobnie.

    co to znaczy??

    znalazłem jeszcze coś takiego...
    http://www.patron.net.pl/AVRintropl.htm#_Toc91331604


    To znaczy, że podłaczasz jedną noge nadajnika do jednego portu ATmega, drugą do drugiego, i zapodajesz 5V na pierwszą i 0V na drugą , a po półokresu dajesz 0V na pierwszą i 5V na drugą. W ten sposób amplituda między sczytowa twojego sygnału to 10 V
  • #11
    -sivy-
    Level 11  
    :) no to dokłądnie tak robię... a można jakoś bezboleśnie spróbować, czy dobrą amplitudę "zrobiłem" przy pomocy np. miernika (V) i podpiąć to jakoś sprytnie do odbiornika?

    pytam, bo na różne sposoby kombnuję, ale nijak nie chce to działać...
  • #12
    lbugiera
    Level 21  
    -sivy- wrote:
    :) no to dokłądnie tak robię... a można jakoś bezboleśnie spróbować, czy dobrą amplitudę "zrobiłem" przy pomocy np. miernika (V) i podpiąć to jakoś sprytnie do odbiornika?

    pytam, bo na różne sposoby kombnuję, ale nijak nie chce to działać...


    Możesz miernikiem na zakresie AC.
    W odbiornik wstaw tylko jeden wzmacniacz operacyjny np. ten TLC271 w konfiguracji wzmacniacza nie odwracającego, ze wzmocnieniem ustawionym rezystorami na 100 (rzeczywiście to będzie maks 50) i wyjście podłącz pod AIN0 a pod AIN1 podlącz próg, czyli jakiś potencjometr, np 100k. I taki odbionik powinien wystarczyć. W odbiorniku bez wzmacniacza juz się raczej nie obejdzie.
  • #13
    -sivy-
    Level 11  
    hm... mam pod ręką tylko TL084CN... będzie?
    o! jeszcze się LM324N znalazł :) będzie co z tego?
  • #14
    lbugiera
    Level 21  
    -sivy- wrote:
    hm... mam pod ręką tylko TL084CN... będzie?
    o! jeszcze się LM324N znalazł :) będzie co z tego?


    lm324 jest za wolny, wyciszniesz z niego wzmocnienie ok.10 przy tej częstotliwości, a Tl084 powinien być zasilany symetrycznie. wiec V- do 0 a V+ do min 8V,i musisz zabezpieczyć wyjście aby nie poleciało na AIN więcej niż 5V - najlepeij zrobic to dioda zenera 5V1. Podłączasz diode katodą do AIN, anodą do gnd. wyjście wzmacniacza łączysz z AIN przez rezystor 1k. Wtedy wzmocnienie jakie wycisniesz z tl084 to ok.60 (rezystorami ustaw na dwa razy więcej). Odbiornikowi musisz ustalić dzielnikiem rezystorowym punkt pracy na jakieś 3V (czyli jedna noga do gnd a drugą do w śriodek dzielnika) no i progiem musisz operować w okolicy 4V. Nie zapomnij dodać kondensatora zapobiegającego wzmacnianiu składowej stałej (pod rezystor idący od wejścia odwracającego do gnd podłaczas kondensator, tak aby powstały górnoprzepustowy filtr RC miał 3db gdzieś na 10 kHz)

    Powodzenia, ide spać :D
  • #15
    Michal_Lach
    Level 11  
    Witam i dziękuję za wszystkie odpowiedzi.
    W poniedziałek zrobiłem testy na oscyloskopie i gnereacja działa świetnie, odbiornik dostaje synał i popodłączeniu do oscyloskopu otrzymuję piękny sinus jednak o małej amplitudzie i odległość max 10-15 cm, co jest winą podłączenia bezpośrednio do portów. W najbliższym czasie będę robił podobne testy już ze wzmocnionym sygnałem(prawdopodobnie przetestuje rozwązanie z tranzystorowym wzmacniaczem i z MAX232)
    Ale jeszcze chciałbym zapytać jak dokładnie zrobić samo przeliczenie odległości. Wymyśliłem sobie tak, że ustawie progi impulsów z licznika powiedzmy przy zegarze 8MHz dla jednego 10 cm był by to przedział od 4654 do 5090 impulsów i zbudowac taką pętle, która sprawdza tylko te wartości,a po każdym przejściu zwiększa próg tak żeby odpowiadał następnej odległości np 11 cm. Myślę, że to jest najprostsze rozwiązanie bo rezygnuję z mnożenia czy dzielenia i pętle można zrobić w taki sposób że program bedzie przez nią przechodził tak długo aż zmierzona odległości juz bedzie poza zasięgiem( można go ustalić odgórnie, albo licznik już wiecej nie zliczy). Inne pomysły mile widziane
    Podajcie jakieś rozwiązania dotyczące konfiguracji komparatora albo przetwornika A/C chyba, że ktoś juz ma cos takiego w asemblerze :)
    Wiec byłbym bardzo wdzięczny za umieszczenie tego w tym temacie
    Z góry dzięki za odpowiedzi
  • #16
    lbugiera
    Level 21  
    Co do wyliczania odległości ja użyłem dzielenia przy pomocu gotowej procedurki z not katalogowych atmela. Dzieliłem przez 40 na kwarcu 11.0592, więc możliwe, że przy kwarcu 8 wystarczającą dokładnosc obliczeń uzyskasz dzieląc przez 32 (nie chce mi się przeliczać :D ), a dzielenia przez 32 jak wiadomo odpowiada przesunieciu o 5 bitów w prawo. Poza tym jeśli ten pomiar ma słuzyć tylko do zatrzymania autka, to nie potrzebne ci jakies konkretne jednostki (np. centymetry), ale jakieś określenie blisko - daleko.
  • #17
    Michal_Lach
    Level 11  
    Właśnie potrzebuje konkretne wartości bo mój projekt ma tą odległość na LCD wyświetlić.

    Można jeszcze to policzyć na dwa sposoby tak jak mówisz dzieląc albo mnożąc i potem ewentualnie przesuwając a pare (chyba 5 czyli docelowo dzieląc i mnożąc) bitów wtedy otrzymam właściwie dość dokładny wynik w cm. Ale chciałem to zrobić na paru pętlach żeby można było usrednić odczytaną z licznika liczbę impulsów bo trudno żeby wyświetlać 0,9 cm.

    No ale nic pokombinuje, dzieki za odpowiedź i jak już wymyśle to pewnie umieszcze na forum, może akurat komuś się przyda.
  • #18
    eros81
    Level 14  
    ko_rex wrote:
    Zrobiłem coś takiego, ale na UST40R i UST40T i pobudzałem prostokątem. Śmigało super. Zobasz link: http://wartburg353.webpark.pl/

    Strona już nie istnieje : czy jest możliwość znalezienia opisu tego dalmierza gdzie indziej ??
  • #19
    loader_online
    Level 11  
    eros81 wrote:
    ko_rex wrote:
    Zrobiłem coś takiego, ale na UST40R i UST40T i pobudzałem prostokątem. Śmigało super. Zobasz link: http://wartburg353.webpark.pl/

    Strona już nie istnieje : czy jest możliwość znalezienia opisu tego dalmierza gdzie indziej ??


    web.archive.org

    tu kliknij


    Pzdr.