logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATtiny2313][avr-gcc]Precyzyjny pomiar czasu luiminescencji z fotodiodą

240volt 28 Lut 2014 03:51 3321 17
REKLAMA
  • #1 13353710
    240volt
    Poziom 9  
    Witam,
    Buduję układ do badania luminoforów, Zasada działania polega na oświetlaniu luminoforu przez określony czas, a następnie pomiarze czasu luminescencji.
    Światło emitowane przez luminofor wykrywane jest przez fotodiodę.

    Zbudowałem prosty układ na attiny2313.

    Napisałem prosty kod.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Gdy tranzystor zostanie załączony przez fotodiodę załącza się licznik który zlicza dopóki tranzystor nie przestanie przewodzić. Przy taktowaniu procesora 1MHz jedno zliczenie tego licznika trwa 1 mikrosekundę.

    Jednak (jak można się spodziewać przy tak prostym układzie) nie działa on prawidłowo. Jeżeli diodę emisyjną trzymam z daleka od fotodiody licznik nie zlicza - czyli ok.
    Jednak gdy przysunę diodę do fotodiody licznik zaczyna zliczać i to do około 2 ms.
    Zastanawiam się jak to możliwe, ponieważ według programu najpierw gaśnie dioda a dopiero później sprawdzany jest stan pinu od fotodiody. Domyślam się że chodzi o pojemności pasożytnicze. Dołączam także wykres powstały z kilkudziesięciu pomiarów.

    Moja prośba brzmi: czy możecie mi pomóc z układem który będzie wzmacniał sygnał z fotodiody i podawał go na procesor a zarazem niwelował problem który opisałem?

    Dodam jeszcze że czas luminescencji którą chcę mierzyć wynosi poniżej 1 ms.
    Zastosowana fotodioda to VTB8441BH
    Poprawiono tytuł na bardziej streszczający problem i wprowadzono drobną kosmetykę linka.
    Proszę także przeczytać ze zrozumieniem tematy oznaczone na czerwono w dziale Projektowanie/Mikrokontrolery, aby w przyszłości uniknąć nieporozumień wynikających z niestosowania się do regulaminu forum...
    LordBlick
  • REKLAMA
  • #2 13356324
    BlueDraco
    Specjalista - Mikrokontrolery
    240volt napisał:
    Przy taktowaniu procesora 1MHz jedno zliczenie tego licznika trwa 1 mikrosekundę.


    Sugerujesz, że cały obieg pętli - sprawdzenie warunku i inkrementacja 16-bitowego licznika przez 8-bitowy procesor zajmuje jeden cykl zegara?

    Do mierzenia czasu służy timer, chyba że jednostką czasu jest "obieg pętli" - wtedy oczywiście powinieneś odpowiednio podpisać wykresy i wyniki pomiarów, np. "czas świecenia luminoforu X wynosi 3200 obiegów pętli".
  • #3 13363126
    240volt
    Poziom 9  
    Dzięki za uwagę, faktycznie nie pomyślałem o tym,

    Wracając do tematu, czy gdybym zastosował wzmacniacz operacyjny to mógł by rozwiązać mój problem?
  • REKLAMA
  • #4 13363276
    BlueDraco
    Specjalista - Mikrokontrolery
    Ja bym zgadywał, że problem leży w wolnym wychodzeinu tranzystora z nasycenia. Zmień konfigurację tego wzmacniacza. Możesz oczywiście użyć wzmacniacza operacyjnego, ale z głową - tu nie chodzi o to, czy jest to tranzystor, czy wzw. operacyjny, a o to, jak ten wzmaczniacz pracuje.
  • REKLAMA
  • #5 13371422
    240volt
    Poziom 9  
    Zmieniłem układ dołączając kolektor do PB0 a emiter do masy oraz usunąłem R1 i włączyłem wewnętrzny rezystor na PB0.

    Jest znaczna poprawa ponieważ teraz procesor nie zlicza do 1940-2050 obiegów pętli (op) a jedynie do 100-102 op.

    Wiem że czas świecenia mojego luminoforu to ok. 1ms.
    Niestety nie wiem 100 op ile to ms. Czy można oszacować ile ms zajmuje jeden op?
    Czy nie warto się tym zajmować i lepiej od razu zastosować timer?
  • REKLAMA
  • #6 13371544
    BlueDraco
    Specjalista - Mikrokontrolery
    Timer. Wyłącznie.
  • #7 13375004
    240volt
    Poziom 9  
    Przerobiłem licznik na timer:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czy możesz zweryfikować czy kod jest poprawny?
    Obecnie licznik zlicza wartości do około 35095, przy Fcpu = 1 Mhz, wychodzi że układ sam się wzbudza aż na 35ms?

    Mam jeszcze jedno pytanie, dlaczego jeżeli zeruję TCNT1 w pętli if (tam gdzie jest zakomentowane )to zliczanie rośnie aż do 58 000 ?
  • #8 13375092
    el2010tmp
    Poziom 25  
    240volt napisał:
    while (!(PINB & 0x01)){}; //Blokuje działania do czasu zakończenia luminescencji, a timer ciągle zlicza

    Po jakim czasie licznik się "obróci" dla prescalera==1 przy zegarze 1MHz...
    Wypadało by sprawdzić taki warunek. Zegar też można zwiększyć celem poprawy rozdzielczości pomiaru.
  • #9 13376821
    240volt
    Poziom 9  
    Cytat:
    Po jakim czasie licznik się "obróci" dla prescalera==1 przy zegarze 1MHz...


    Po około 65 ms?


    Cytat:
    Wypadało by sprawdzić taki warunek.


    Ne bardzo rozumiem? Jaki warunek ?
  • #10 13378026
    el2010tmp
    Poziom 25  
    240volt napisał:
    Ne bardzo rozumiem? Jaki warunek ?

    Warunek czy aby licznik się nie przepełnił.
  • #11 13378196
    240volt
    Poziom 9  
    Sprawdziłem, licznik się nie przekręca.
    Czy ktoś może potwierdzić czy dobrze obliczam że dla mojego programu,
    wartość w TCNT1 wynosząca 35000, oznacza że zliczenie trwało 35ms?

    Czy ma ktoś sposób jak wyeliminować zjawisko pozostawania tranzystora w otwarciu, aż przez około 35ms
  • #12 13378854
    polarczn
    Poziom 16  
    Jaki stosujesz Timer, bo tego w kodzie nie ma. W datasheecie są odpowiednie wzory do obliczania częstotliwości pracy timera.
  • #13 13429964
    240volt
    Poziom 9  
    Obecnie udało mi się uporać z problemami z mikrokontrelerem, wypożyczyłem oscyloskop i porównałem czasy mierzone przez uC i osc. wyniki są całkiem satysfakcjonujące.

    Teraz jednak pojawił się nowy problem, do detekcji promieniowania stosuję diodę BPW34, jednak czułość układu jest niska przez co wyniki otrzymuję dopiero gdy odległości pomiędzy fotodiodą luminoforem i diodą wynoszą <2mm. Konstrukcja mojego urządzenia wymaga jednak aby odległość od luminoforu do fotodiody wynosiła około 2 cm.

    Tak więc szukam sposobu na zwiększenie czułości mojego układu.
    Wymyśliłem że mogę zastosować kilka diod połączonych równolegle, jednak muszę tu uważać ze względu na sumujące się pojemności, przez co tracę szybkość działania (muszę jednak mierzyć czasy od 50 do 500 us).

    Wygrzebałem w sieci projekt, w którym autor wykorzystał tę diodę do pomiaru promieniowania jądrowego Link. Wykorzystał on układ TLC272, dzięki któremu ponoć można osiągnąć taką czułość.


    Czy waszym zdaniem układ ten nadaje się do mojego projektu, przede wszystkim czy nie będzie za wolny?
    W jaki sposób można regulować jego wzmocnienie? bo jednak potrzebuję nieco mniej czułego uradzenia.

    Myślałem też o zastosowaniu soczewki od ledów takiej jak tu, ale mam problem jak ją ustawić żeby odpowiednio zogniskować promieniowanie luminoforu.
  • #14 13430514
    BlueDraco
    Specjalista - Mikrokontrolery
    Zrób przyzwoity wzmacniacz, to po pierwsze. Przykładów wzmacniaczy do fotodiod znajdziesz sporo. Zwykle robi się to w konfiguracji wzmacniacza transimpedancyjnego.

    Po drugie, jeśli masz wiarygodnie mierzyć czas, potrzebujesz oscylatora kwarcowego jako wzorca częstotliwości.
  • #15 13433103
    240volt
    Poziom 9  
    Kwarc do procka to oczywista sprawa, już go nawet zamontowałem.

    Co do wzmacniacza, czy możesz podać jakieś konkretne układy ?
    Znalazłem coś takiego jak OPT101 ale nie wiem czy można regulować jego czułość,
    no i czy będzie wystarczająco czuły.
  • #16 13447692
    240volt
    Poziom 9  
    Witam,
    Wciąż zmagam się ze wzm. op. Skonstruowałem układ wg. schematu z załącznika, jednak problem pojawia się już przy małym wzmocnieniu ( jak na schemacie),

    w moim układzie fotodioda jest narażona przy każdym pomiarze na niemal bezpośrednie oświetlenie z diody LED, powoduje to wzbudzenie układu na kilkaset us, przez co właściwy sygnał zostaje niejako ukryty pod tym niechcianym.

    Czy ktoś wie w jaki sposób pozbyć się tego zjawiska?
    Może powinienem zastosować inny wzmacniacz?
  • #17 13447876
    BlueDraco
    Specjalista - Mikrokontrolery
    Hasło: wzmacniacz transimpedancyjny. Dlaczego kombinujesz jakiś improwizowane schematy zamiast obejrzeć, jak poprawnie konstruuje się wzmacniacze do fotodiod?
  • #18 13471552
    240volt
    Poziom 9  
    Witam ponownie.
    Wciąż walczę ze wzmacniaczem do fotodiody.
    Złożyłem układ jak ze schematu.
    Dla podanych wartości rezystorów wzmocnienie układu jest stosunkowo małe, do pomiarów luminescencji potrzebuję znacznie większego.
    Jednak już teraz pojawia się problem który widać na zdjęciach z oscyloskopu.

    Gdy padające światło z diody jest słabe (Led daleko od fotodiody) układ nasyca się i zaraz po zgaśnięciu leda sygnał spada do niemal zera.

    Jednak gdy przysunę Leda blisko fotodiody układ pozostaje nasycony przez kilkaset us, co widać na drugim zdjęciu. Jest to dla mnie duży problem ponieważ konstrukcja urządzenia wymaga diod bardzo blisko siebie, a strata 200us bardzo poważnie ograniczy zakres pomiarowy.

    Oczywiście im bardziej zwiększam wzmocnienie tym łatwiej układ się nasyca i dłużej trwa nasycenie.

    Czy jest jakiś sposób na walkę z tym zjawiskiem, lub przynajmniej jego ograniczenie?
REKLAMA