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

ATMega - Pomiar napięcia na fototranzystorach

tomek.ch 21 Nov 2013 22:49 2799 13
Automation24.pl
  • #1
    tomek.ch
    Level 12  
    Witam,
    chciałbym wykonać czujnik mierzący napięcia na ośmiu fototranzystorach. Zastanawiałem się nad Mega16 lub Mega8 w obudowie TQFP, ponieważ posiadają osiem portów ADC, jednak nie daje mi spokoju myśl, żeby zastosować pomiar na jednym porcie. Wartość napięcia, na którą miałby zareagować kontroler jest zbliżona, lub nawet taka sama we wszystkich ośmiu przypadkach, a różnice z poszczególnych pomiarów mało istotne. Jak myślicie - czy jest to sprzętowo możliwe?
  • Automation24.pl
  • #2
    movzx
    Level 39  
    tomek.ch wrote:
    Zastanawiałem się nad Mega16 lub Mega8 w obudowie TQFP, ponieważ posiadają osiem portów ADC
    Tiny26 ma nawet jedenaście - i to w DIP28.
    Polecam wypasioną wyszukiwarkę mikrokontrolerów na stronie Atmela: Link
    tomek.ch wrote:
    czy jest to sprzętowo możliwe?
    Może tak: ADG508. Oczywiście wyłącznie w celach rozrywkowo-edukacyjnych, bo znacznie taniej będzie wstawić kontroler z odpowiednią liczbą portów ADC.
  • Automation24.pl
  • #3
    korrus666
    Level 40  
    W zasadzie czy użyjesz wewnętrznego przełącznika do pomiaru ADC czy jakiegoś zewnętrznego to chyba nie ma wielkiego znaczenia. Atmega i jej podobne i tak mają jeden przetwornik ADC a tylko kilka przełączanych wejść. Jedynym sensownym powodem dla którego miałbyś to robić zewnętrznie jest to że brakuje ci wejść.
  • #5
    tomek.ch
    Level 12  
    dondu wrote:
    Czy to ma być robot typu linefollower?
    Podaj więcej szczegółów o samych pomiarach i parametrach, które oczekujesz, bo w zależności od tego można kombinować różne proste rozwiązania.

    Nie, to nie robot. To czujnik poziomu płynu. Idea jest taka: 8 par dioda LED i fototranzystor co minutę dokonują pomiaru. Jeżeli na którymkolwiek fototranzystorze wzrośnie napięcie powyżej pewnego poziomu, kontroler ma zareagować, np. włączyć alarm. W momencie alarmu stan napięcia na pozostałych nie ma znaczenia.
    Po powyższych postach widzę, że nie ma co kombinować, tylko podłączyć to do ośmiu portów ADC.
    Jeszcze pytanie: czy diody LED i fototranzystory mogę połączyć z resztą elektroniki za pomocą ok. 1 m taśmy, takiej jak do dysków IDE, tylko oczywiście węższej? Obawiam się o spadki napięcia, lub zakłócenia. Pomiary nie wymagają jakiejś wielkiej dokładności.
  • #6
    dondu
    Moderator on vacation ...
    Spokojnie możesz łączyć, bo zakłócenia wyeliminujesz programowo poprzez uśrednianie pomiarów, których nie dokonasz jeden co minutę, tylko sukcesywnie,, a co minutę tylko decyzja. Tutaj masz wielkie pole do popisu od strony programu.

    Możesz także dodać filtry dolnoprzepustowe (rezystor + kondensator), ale filtr programowy powinien wystarczyć.
  • #7
    tomek.ch
    Level 12  
    dondu wrote:
    Spokojnie możesz łączyć, bo zakłócenia wyeliminujesz programowo poprzez uśrednianie pomiarów, których nie dokonasz jeden co minutę, tylko sukcesywnie,, a co minutę tylko decyzja. Tutaj masz wielkie pole do popisu od strony programu.

    Możesz także dodać filtry dolnoprzepustowe (rezystor + kondensator), ale filtr programowy powinien wystarczyć.


    Nie chcę uśredniać pomiarów, ponieważ diody LED musiałyby być ciągle włączone, a to by powodowało punktowe podgrzewanie zbiornika z płynem, a tego muszę uniknąć. Płyn, jeśli go ubywa, obniża poziom baaardzo powoli, więc myślę, że wystarczy pomiar raz na kilka minut. Sprawdzałem sobie napięcia na fototranzystorze i napięcie rośnie prawie od 0 do 4 V w miarę przesuwania czujnika po zbiorniku. Mnie interesuje przedział od ok. 2,5 V do 3,5 V, a nawet więcej i nie jest ważne czy kontroler zareaguje przy 2,5 V czy 3,5 V. Program chcę napisać jak najprostszy, bo mam bardzo małe doświadczenie, a czasu mam mało. Powstaje on w bólach i mam wrażenie, że niebawem będę prosił Kolegów z forum o pomoc i konsultacje. Załączam fragment schematu z fototranzystorem - mam nadzieję, że ten kondensator pomoże. Rezystor i kondensator będą na PCB, a fototranzystor na przewodach w odległości max. 1 m (prawdopodobnie ok. 0,5 m).
    ATMega - Pomiar napięcia na fototranzystorach
  • #8
    movzx
    Level 39  
    tomek.ch wrote:
    Nie chcę uśredniać pomiarów, ponieważ diody LED musiałyby być ciągle włączone
    Jeśli ustawisz zegar ADC do w miarę wysokiej wartości, typu 200kHz - to masz 65µs na jedną konwersję.
    Odrzucasz pierwszy wynik po zmianie wejścia multipleksera, następnie startujesz np. w trybie free-run i w przerwaniu zbierasz próbki. Po 6,5ms masz 100 sztuk.

    Czyli np. co 10s włączasz LEDy, czekasz jakiś czas stabilizacji, zbierasz z 8 kanałów w powiedzmy 100ms i spokój na kolejne 10s.
  • #9
    BlueDraco
    MCUs specialist
    Nie rozumiem, dlaczego LED miałyby coś podgrzewać, to po pierwsze. Po drugie, zacznij od przerwania timera i np. 100 razy na sekundę zaświeć kolejną diodę i zmierz napięcie z kolejnego czujnika, a w następnym cyklu wyłącz tę diodę i zaświeć następną itd.
  • #11
    tomek.ch
    Level 12  
    Dziękuję Koledzy za rady. To co piszecie brzmi bardzo ciekawie, jest dla mnie zrozumiałe, ale przeceniliście moje umiejętności. Nie dam rady tego napisać. Póki co, robię próby w Bascomie na jednym kanale ADC. Pomiar (pojedynczy) działa, włącza alarm. Muszę dorobić całą resztę obsługi.
  • #13
    tomek.ch
    Level 12  
    Program na razie wygląda tak:
    Code: vbnet
    Log in, to see the code

    Potrzebuję dodać obsługę przycisku Sw1 w czasie wykonywania podprogramu Alarm. Po wciśnięciu Sw1 wyłącza się buzzer, a Led1 nadal mruga i program czeka np. 5 min. Jeśli W nadal jest >=1000 włącza się PK na 1 sekundę, wyłączają Ledy i program czeka na ponowne wciśnięcie Sw1, po którym wraca na początek. Będę wdzięczny za podpowiedzi i sugestie.
  • #14
    tomek.ch
    Level 12  
    Pomyślałem trochę i wyszło mi coś takiego:
    Code: vbnet
    Log in, to see the code

    Nie wiem jak sobie poradzić z podprogramem Alarm. Chodzi o to, aby pętla działała określony czas (powiedzmy 5 min.) i przy braku reakcji użytkownika (Sw=1) wykonał się podprogram Zatrzymaj.