Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Bariera podczerwieni/ generowanie 38KHz

austin007 06 Oct 2011 13:04 4061 14
Altium Designer Computer Controls
  • #1
    austin007
    Level 17  
    Witam!

    Padła mi elektronika od baterii automatycznej i przysiadam,by zrobić ją od nowa.
    Zasada działania opiera się o barierę podczerwieni. Odbicie wiązki od ręki i powrót do odbiornika IR powoduje uruchomienie zaworu.

    Ze względu na gabaryty i to,że mam pod ręką , będzie to Atmega8L(smd).
    Pierwotnie chciałem generator 38KHz chciałem zrobić na LM555 i kluczować go, dla oszczędności zasilania Atmegą. Zaletą jest bezpośrednie sterowanie diodami nadawczymi IR, niewielki koszt, sprzętowe rozwiązanie i zupełnie zwalnia mnie to od pisania kodu (oszczędność czasu)

    Zastanawiam się czy jednak nie warto wrzucić jednak generowanie tych 38KHz do procka i wygenerować je na przerwaniach. Jest to nowy temat dla mnie, ale trzeba się rozwijać. Do tego chciałem obsługiwać Część odbiorczą w Atmedze (TSOP).

    Co to o tym sądzicie? Da się wygenerować taki przebieg. Najchętniej o niskim wypełnieniu, żeby prąd średni diody IR był niski , a w peaku wysoki.
    Da się może sprzętowo to zrobić w Atmedze 8 np na PWM?

    Piszę w Bascomie, zaczynam w C.

    Pozdrawiam
    L
  • Altium Designer Computer Controls
  • #2
    mirekk36
    Level 42  
    Pewnie, że się da zrobić sprzętowo wszystko o czym tu piszesz na procku. Zarówno generowanie nośnej o niskim wypełnieniu w oparciu o Timer sprzętowy i jeden z jego trybów pracy albo CTC albo FAST PWM. Żaden problem - po co dodatkowe układy? przecież w oparciu o to robi się fajnie dowolne piloty podczerwieni właśnie, a nie tylko taką prostą barierę.

    https://www.elektroda.pl/rtvforum/topic1139494.html

    po to są takie procesorki, po co mają leżeć odłogiem? ;)
  • Altium Designer Computer Controls
  • #3
    austin007
    Level 17  
    Dziękuję za odpowiedź i link.
    Pytanie czy uda mi się uzyskać te 38kHz kombinując preskalerami i częstotliwością zegara?
    Rozumiem,że używając FastPWM, będzie to praca w 16 bitach i całkowicie sprzętowo realizowana?
    Jest w takim przypadku możliwe obsłużenie zewnętrznego przerwania INT 0/1 z odbiornika podczerwieni TFMS
    L
  • #4
    MirekCz
    Level 35  
    Generować PWM możesz zupełnie niezależnie od tego co aktualnie wykonuje się na procesorze. Po prostu ustawiasz tryb PWM tak jak chcesz i on jest obsługiwany w pełni sprzętowo (bez zatrzymywania realizacji kodu programu). Dlatego przerwania będą obsługiwane poprawnie i nie będą wpływały na generowanie fali 38KHz.

    Dokładnością 38KHz nie masz się co martwić, bo odbiorniki zazwyczaj mają dosyć szeroki zakres działania i +/- kilkaset Hz nie będzie problemem, ale dobierając odpowiedni kwarc i prescaler możesz wygenerować "idealne" 38KHz - przynajmniej od strony matematyki ;).
  • #5
    austin007
    Level 17  
    Nie zmieści mi się zewnętrzny kwarc, dlatego pytanie dotyczy tego, co oferuje na pokładzie procek. Czyli pytanie brzmi: jakie kombinacje wewnętrznego zegara i preskalerów dadzą mi ( i jakie) najbliższe częstotliwości tej wymaganej tj. 38kHz.

    L
  • Helpful post
    #6
    mirekk36
    Level 42  
    austin007 wrote:
    Nie zmieści mi się zewnętrzny kwarc, dlatego pytanie dotyczy tego, co oferuje na pokładzie procek. Czyli pytanie brzmi: jakie kombinacje wewnętrznego zegara i preskalerów dadzą mi ( i jakie) najbliższe częstotliwości tej wymaganej tj. 38kHz.

    L


    Ale to się bardzo prosto wylicza ;)

    np ustawiasz sobie taktowanie wen. oscylatorem 8MHz (bo moim zdaniem dodawanie specjalnie po to zewn. kwarca całkowicie mija się z celem) .... i dalej bierzesz sobie jakiś 8bitowy timer, np Timer2 i odpalasz tryb CTC

    8MHz / preskaler=1 / (38kHz x 2) = 105,26

    dlaczego 38kHz razy 2 ??? ano dlatego, że np w trybie CTC musisz wziąć pod uwagę cały okres.

    zatem wystarczy odpalić tryb CTC dla Timer2 i włożyć wartość 105 do rejestru OCR2. A po ustawieniu odpowiednich bitów rejestru timera COMxx masz na wyjściu piękną nośną 38kHz jak w twarz strzelił ;) tyle że wypełnienie 50%. I najpierw może sobie to wypróbuj. A jak chcesz inne wypełnienie to poczytaj o FAST PWM i tam podobnie - też będziesz musiał obliczyć częstotliwość PWM a wartością rejestru OCR wyregulujesz sobie wypełnienie jak ci się przyśni w granicach od 0 do 100%

    Dodano po 2 [minuty]:

    I tak jak pisał kolega wyżej - to że wygeneruje się ciut inna częstotliwość nośna niż 38kHz bo przecież OCR w trybie CTC nie może przyjąć wartości ułamkowej 105,26 to nic nie szkodzi. Bo scalone odbiorniki podczerwieni mają tak dużą tolerancję że szkoda gadać ;) .... i mógłbyś równie dobrze wygenerować sobie nośną 36kHz a ja kładę swoją głowę pod topór, że odbiornik TSOP na 38kHz tak samo idealnie ją zobaczy. Więc idę o zakład - a jak wygram to życzę sobie krzynkę zacnego trunku o złocistym kolorze ;)
  • #7
    austin007
    Level 17  
    Świetnie, dziękuję.

    Nie chce nadużywać pomocy Kolegi, ale zanim nauczę się obsługi przerwań i PWM, chce zrobić PCB. Bo to sprawa na cito:)

    Proszę o informację, czy zewnętrzny driver diod IR NPN podpiąć mam podpiąć do OC1 czy OC2 tak, aby w TRYBIE PWM generować szpilki 38kHz.

    W trybie CTC trzeba podpiąć bazę drivera pod inną nogę?
    Widzę,że skłaniasz się ku trybowi CTC:)

    L
  • #8
    mirekk36
    Level 42  
    Nie - niekoniecznie CTC - ja akurat najczęściej korzystam do pilotów z CTC pomimo wypełnienia 50%, bardzo długo żyją na bateriach. Ale w twoim przypadku bariera ma chyba działać non stop tak ???? i czy na baterii ???? Bo jeśli na baterii to pewnie że lepiej zrobić to na PWM i dać minimalne możliwe wypełnienie. Ale jeśli ze stałego zasilacza to ja bym się tam nie patyczkował i dał CTC ;)..... to już wolny wybór wg własnych preferencji.

    A nogi OC1 czy OC2 hmmm popatrz dobrze w notę PDF.... ATmega8 nie ma w ogóle wyjścia OC1 !!!!! ..... Ma OC1A, OC1B (ale to od Timera1 16-bitowego) oraz tylko OC2 od Timera2 8-bitowego.

    Tak w ogóle to polecam myślenie o procku ATmega88 a nie o starociu ATmega8. Wtedy rzeczywiście miałbyś jeszcze OC1 ;) bo Timer0 w tym procku ma dodatkowe tryby działania. A w ATmega8 może pracować TYLKO jako zwykły licznik i to wsio. Zresztą ATmega88 ma jeszcze sporo innych zalet w porównaniu do m8.

    Co do pinów - to naprawdę polecam drugą stronę noty PDF procka i tam przecież WSZYSTKO widać na rysunku jak na dłoni - na jakim pinie jakie masz wyjście.
  • #9
    MirekCz
    Level 35  
    Używaj OC1A i OC1B - na nich łatwo wygenerować PWM.
    Jak nie używasz kwarcu to przynajmniej dobrej jakości rezonator ceramiczny. Mają one zazwyczaj dokładność na poziomie 0,5% - co wystarczy - i są dostępne w miniaturowych obudowach SMD wielkości el. biernych, więc na pewno się zmieści na płytce ;). Wewnętrzny rezonator jest bardzo mało dokładny i możesz mieć nawet o 10% inny zegar niż oczekujesz, co będzie już za dużym błędem dla tego typu czujników.
  • #10
    dondu
    Moderator on vacation ...
    MirekCz wrote:
    Wewnętrzny rezonator jest bardzo mało dokładny i możesz mieć nawet o 10% inny zegar niż oczekujesz, co będzie już za dużym błędem dla tego typu czujników.

    Oj, mocno przesadziłeś. Atmel podaje w notach, że po kalibracji mozna spokojnie uzyskać 1%: http://mikrokontrolery.blogspot.com/2011/04/stopery-timery-itp.html
    OSCCAL - klucz do sukcesu.
  • #11
    mirekk36
    Level 42  
    MirekCz wrote:
    Wewnętrzny rezonator jest bardzo mało dokładny i możesz mieć nawet o 10% inny zegar niż oczekujesz, co będzie już za dużym błędem dla tego typu czujników.


    Absolutnie się z kolegą nie zgadzam i jak pisałem wcześniej jestem się gotów założyć. Tyle że nie o tą część wypowiedzi, gdzie kolega pisze że wewn. oscylator (no bo na pewno nie wewn. rezonator (to chyba literówka)) .... a odnośnie tej części wypowiedzi, że to już będzie za dużym błędem dla tego typu czujników.

    ABSOLUTNIE NIE będzie za dużym błędem i to nawet bez stosowania KALIBRACJI za pomocą rejestru OSCCAL.

    Więc jak - zakład ? ;)
  • #12
    austin007
    Level 17  
    Dziękuję Kolegom za dużą pomoc.

    Siądę dziś i zrobię PCB.
    Więcej pracy, ale rozwinę się.

    Założenia:
    Okazało się ,że mam odbiorniki TSOP4833 na 33kHz. Da się wygenerować?

    1. Generuję więc 33kHz PWM, żebym mógł potem zrobić z tego szpilki, ew jak nie dam rady to zrobię tryb o wypełnieniu 50% w trybie CTC
    2. Podpinam driver diód IR do wyjścia OC1A. Czy niezależnie od trybu PWM/CTC mogę korzystać z wyjścia OC1A?
    3. Odbiornik podczerwieni TSOP4833 podpinam pod INT0. W oryginale odbiornik jest prawie cały zalany żywicą. Pewnie ze względu na jego wielką czułość. Ustawiony jest poprzecznie - powód j.w.
    4. Konieczna jest druga bariera podczerwieni do identyfikacji czy demontujemy obudowę baterii. W oryginale jest fototranzystor i dodatkowa dioda IR. Odkręcając śrubkę blokującą obudowę, wiązka z diody IR pada na fototranzystor. Tu trzeba by wygenerować przebieg zdecydowanie różny od podstawowego 38kHz, żeby się nie zakłócały, albo w ogóle raz na np 500ms puścić impuls i sprawdzać czy fototranzystor przewodzi. Zupełnie programowo. Kroki: dioda IR nadaje_> sprawdzam czy fototranzystor przewodzi. Muszę więc podtrzymać nadawanie diody IR jakąś pojemnością.

    Poproszę tu o ew sugestie jak to zrobić praktycznie.

    Zmontuję część sprzętową, zajmę się programem i zdam relację.
    Z ciekawości zmierzę częstotliwość generowanego przebiegu. Ew skalibruję jak Koledzy piszą. Sam jestem ciekaw jak to wyjdzie.
    Rzeczywiście odbiorniki podczerwieni mają sporą tolerancję. Jednak, mimo że czułość jest bardzo duża, to spada w miarę oddalania się od nominalnej.
  • #13
    mirekk36
    Level 42  
    austin007 wrote:

    1. Generuję więc 33kHz PWM, żebym mógł potem zrobić z tego szpilki, ew jak nie dam rady to zrobię tryb o wypełnieniu 50% w trybie CTC


    Dasz radę, spokojnie ;)


    austin007 wrote:
    2. Podpinam driver diód IR do wyjścia OC1A. Czy niezależnie od trybu PWM/CTC mogę korzystać z wyjścia OC1A?


    Eeeej, ;) daj sobie spokój i nie marnuj sprzętowego 16-bitowego Timera1 na coś co można spokojnie zrealizować w oparciu o Timer2 8-bitowy. Taka jest zasada. Więc pomyśl jak już o wyjściu OC2 albo jak weźmiesz normalny procek ATmega88 to o wyjściu OC1. Timer1 może ci się bardzo przydać dalej.


    austin007 wrote:
    3. Odbiornik podczerwieni TSOP4833 podpinam pod INT0.


    Można to zrobić w oparciu o INT0 ale jeśli byś potrzebował przypadkiem badać jakieś krótkie serie impulsów to zastanów się nad wejściem ICP Timera1 ..... bo będzie to dużo łatwiej zrobić tą drogą - i już masz pierwszy moment, gdzie przyda ci się bardzo Timer1.

    austin007 wrote:
    W oryginale odbiornik jest prawie cały zalany. Pewnie ze względu na jego wielką czułość.


    Nie ze względu na czułość, ta masa stanowi dodatkowy filtr IR a przy okazji dzięki temu, że jest grubsza pozwala zwiększać znacznie kąt odbioru wiązki podczerwieni.


    austin007 wrote:
    4. Konieczna jest druga bariera podczerwieni do identyfikacji czy demontujemy obudowę baterii. W oryginale jest fototranzystor i dodatkowa dioda IR. Odkręcając śrubkę blokującą obudowę, wiązka z diody IR pada na fototranzystor. Tu trzeba by wygnerować przebieg zdecydowanie różny od podstawowego 38kHz, żeby się nie zakłócały, albo w ogóle raz na np 500ms puścić impuls i sprawdzać czy fototranzystor przewodzi. Zupełnie programowo. Kroki: dioda IR nadaje_> sprawdzam czy fototranzystor przewodzi. Muszę więc podtrzymać nadawanie diody IR jakąś pojemnością.
    No tu to się możesz srogo przejechać, jeśli zachce ci się zwykłego fototranzystora do odbioru albo jeszcze modulacji nośnej typu 38kHz.... Pomyśl albo nad takim samym TSOP'em albo w ogóle zastosuj jakiś gotowy czujnik szczelinowy jakich pełno na rynku albo do znalezienia prawie w każdym sprzęcie elektronicznym, choćby myszce, magnetowidzie itp..... Stosowanie bariery z nośną do otwierania obudowy to moim zdaniem lekka przesada. Tu o wiele lepiej zastosować właśnie taki gotowy czujniczek.


    austin007 wrote:
    Na zmontuję część sprzętową, zajmę się programem i zdam relację.


    Tutaj porada, bo często nie wiedzieć czemu ludzie zaczynają od przygotowania PCB a potem sobie to oprogramują jak sądzą. Tymczasem nie mając doświadczenia praktycznego choćby z wyborem sposobu oprogramowania czegoś takiego, to pośpiech i cito w takich przypadkach kończą się najczęściej, wyrzuceniem PCB bo jest zła i projektowaniem kolejnej, a potem kolejnej itd... Wtedy się okazuje, że nie dość, że strata czasu to i dość sporych pieniędzy. Ja bym proponował koledze (tak szczerze) ... wciąć w rękę jakiś - dowolny - zestaw uruchomieniowy i najpierw sprawdzić te założenia pisząc program. A jak się okaże już na 100%, że wszystko działa na tym czy innym przerwaniu. Na tym czy innym pinie OCx, plus szereg innych rzeczy - to wtedy odpadnie kupa błędów związanych z właściwym zaprojektowaniem PCB.


    austin007 wrote:
    Z ciekawości zmierzę częstotliwość generowanego przebiegu. Ew skalibruję jak Koledzy piszą. Sam jestem ciekaw jak to wyjdzie.
    Rzeczywiście odbiorniki podczerwieni mają sporą tolerancję. Jednak, mimo że czułość jest bardzo duża, to spada w miarę oddalania się od nominalnej.


    Taaak to właściwy wniosek w końcu. Tolerancja bardzo duża a jedyny efekt to spadek zasięgu. Tylko ciekaw jestem ile kolega jeszcze będzie musiał ćwiczeń przeprowadzić, żeby dojść do oczywistych i znanych już wniosków, że:

    1. jeśli zastosuje się odbiornik TSOP np na te 38kHz to różnica czy odchyłka w nośnej o 1-5% praktycznie w żaden ZAUWAŻALNY sposób nie wpłynie na ten zasięg. A jeśli założymy, że nawet wewn. oscylator miałby mieć niedokładność aż 2% !!! to nawet przy założeniu, że wybierzesz wartość OCR2 = 105 jak z przykładu powyżej dla taktowania 8MHz, to uzyskasz np nie 38kHz tylko np 37,8kHz . W takim przypadku być może się okaże że zasięg zmniejszył się (o ile miałbyś cierpliwość to testować) np z 20m do 19,5m

    2. NAWET jeśli do odbiornika TSOP wprost wygenerujesz nośną nie 38kHz tylko od razu 36kHz albo i 40kHz - to podobnie jak wyżej jedyny efekt tego będzie taki że zasięg spadnie np z 20m do 19m. A zastanawia się ktoś o jakie odległości chodzi we własnym projekcie ????? Najczęściej o kilka metrów MAX. A w twoim konkretnie projekcie zdaje się że jeszcze o dużo mniejsze odległości.

    Tak więc pomyśl sobie ile by ci dało odpalenie chociażby takiej nośnej i odbiornika na jakimś zestawie albo nawet na płytce stykowej i przekonanie się na własnej skórze jak to jest i że nie ma co przesadzać z tym dopasowywaniem się do idealnej częstotliwości nośnej - popadając wręcz jak niektórzy podpowiadają w paranoję stosowania w tym celu zewnętrznych kwarców i wybierania Timera1 żeby SUPER idealnie się wpasować. To jest mniej więcej tak jak wybór najlepszego karabinu snajperskiego po to żeby z odległości 2 metrów trafić do tarczy o średnicy 3m ;)

    Mam nadzieję, że dobrze to wytłumaczyłem ? - bo skupiasz się na 38kHz a pomijasz inne ważne aspekty takiego projektu - na czym się później - jak pisałem wcześniej bardziej przejedziesz niż na tych dokładnych 38kHz.
  • #14
    austin007
    Level 17  
    Absolutnie zgadzam się, że nacisk należy odsunąć od generowania okrągłych 33kHz.
    Sprawdziłem w nocie katalogowej i ATMEL gwarantuje bez procedury kalibracyjnej tolerancję 3% w moich warunkach (25*C,5V, 1MHz internal). Miód - malina.Wystarczy. Przecież to 33kHz +/- 1kHz!

    Rzeczywiście dobrą praktyką byłoby pozostawienie w spokoju 16bitowego timera.
    W tym projekcie nie będzie więcej funkcjonalności. Ma być prosto, skutecznie i bezpiecznie, bo to woda.

    Kontrola zdjęcia obudowy, barierą będzie realizowana fototranzystorem i diodą IR. Mam plastikową obudowę , w której pozycjonowane są wszystkie elementy i w/w śrubka. Pod nią projektuję PCB.
    Nadawanie IR będzie okresowe, małej częstotliwości, bądź nadawanie przez jedną pętlę główną i sprawdzenie fototranzystora. Prąd diody IR wystarczy niewielki.Nie może być za jasno. W opisywanej obudowie elementów opto, jest tunel ze szczeliną i otworem po środku , w który wchodzi bariera w postaci króćca będącego przedłużeniem śruby. Skupiam się raczej jak nadawać i jak mierzyć.

    Co do toru głównego, to należy pamietać,że wiązka odbija się od dłoni i wraca do odbiornika. Odległość to ok 10 cm, ale kąty i współczynnik odbicia jest niekorzystny.

    Uwagi n/t kolejności projektowania są jak najbardziej słuszne.