Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATtiny2313] komparator analogowy

01 Sty 2010 21:57 4545 18
  • Poziom 19  
    Witam,

    Buduję sterownik pieca, który posiada dosyć nietypowy czujnik temperatury - nie ważne jaki, zasada jest taka: opór z czujnika jest tym większy im niższa jest temperatura. Sterownik ma za zadanie wyłączyć dmuchawę jeśli temperatura spadnie poniżej granicy jaką określa Rx . I teraz chciałbym do tego wykorzystać ATtiny2313 i jego komparator. Lecz komparator działa tak że jeśli AIN0 = AIN1 to wtedy podawane jest 0 na wyjściu i jeśli zbuduję układ jak na shemacie to procesor wyłączy mi układ jak opór z czujnika bedzie równy Rx. Taki układ bedzie mi dobrze działał w tej roli? Co trzeba zrobic żeby komparator realizował mi taki warunek AIN0 =< AIN1? Bo co jeśli temperatura bedzie spadać tak szybko że "przeskoczy" mi tą wartość Rx wtedy czujnik nie wyłączy dmuchawy.. Co powinienem zrobić?
    [ATtiny2313] komparator analogowy
    Proszę o pomoc :P
  • Relpol przekaźniki
  • Poziom 35  
    A nie prościej mierzyć napięcie, nawet przerabiać nie trzeba układu.
    Trochę program będzie bardziej rozbudowany bo musisz sprawdzać które napięcie jest większe AIN0 czy AIN1, a przy komparatorze wszystko masz że tak powiem "hardwerowo".
  • Relpol przekaźniki
  • Pomocny post
    Poziom 42  
    A może rozważ zastosowanie procka, który posiada przetwornik ADC. Bo o ile komparator sprawdzi się w tej roli o której piszesz to jednak pomyśl co będzie gdy w pewnym momencie temperatura będzie progowa czyli wartość wejścia + oraz wartość wejścia - będą co chwilę powodować włączanie i wyłączania dmuchawy. Nie zrealizujesz tutaj chyba okienka/histerezy a przydałaby się chyba co?

    Tak żeby np dmuchawa włączała gdy zostanie osiągnięta temp Tmax czyli jakaś tam wartość napięcia mierzonego na ADC - ale wyłączała się gdy temperatura spadnie poniżej Tmin. Ustawisz sobie tę różnicę wtedy już wg potrzeb i będzie cacy. Tzn mając procka z przetwornikiem ADC ustalisz sobie po prostu napięcie Vmax oraz Vmin

    to taka luźna propozycja bo z komparatorem tylko ciężko chyba to uzyskać

    Dodano po 1 [minuty]:

    Samuraj --> ATtiny2313 nie ma przetwornika ADC - ma tylko komparator
  • Pomocny post
    Poziom 43  
    grysek napisał:
    Lecz komparator działa tak że jeśli AIN0 = AIN1 to wtedy podawane jest 0 na wyjściu i jeśli zbuduję układ jak na shemacie to procesor wyłączy mi układ jak opór z czujnika bedzie równy Rx. Taki układ bedzie mi dobrze działał w tej roli? Co trzeba zrobic żeby komparator realizował mi taki warunek AIN0 =< AIN1? Bo co jeśli temperatura bedzie spadać tak szybko że "przeskoczy" mi tą wartość Rx wtedy czujnik nie wyłączy dmuchawy.. Co powinienem zrobić?


    Nic nie powinieneś zrobić. To zadziała tak jak chcesz.
    Bo komparator właśnie realizuje taki warunek:
    AIN0 =< AIN1.

    A nie taki:
    AIN0 = AIN1
    W ogóle nie wiem skąd Ci się to wzięło.
  • Poziom 19  
    Byłoby fajnie jakby udało się właśnie na Attiny ;/ Szkoda mi dawać do tego Atmegi bo w sumie to on ma tylko tyle do roboty + 1 PWM.

    Raczej drgania nie wystąpią ponieważ czujnik bardzo wolno reaguje na zmiany temperatury i jest raczej mało dokładny. Zastanawia mnie fakt jak zrobić żeby porównać czy opór jest większy czy mniejszy? Przecież musi się to jakoś dać zrobić;/

    Jeśli bym miał ADC to już bym sobie dał rade :P ale właśnie chodzi o to żeby to zrobic na attiny
  • Poziom 19  
    Atom, Czyli ten układ jest dobry? W takim razie skoro ten układ działa AIN0 =< AIN1 to jak zrobić AIN0 = AIN1? I dlaczego tak jest?

    O co chodzi z tą histerezą?
  • Poziom 42  
    grysek napisał:
    Byłoby fajnie jakby udało się właśnie na Attiny ;/ Szkoda mi dawać do tego Atmegi bo w sumie to on ma tylko tyle do roboty + 1 PWM.


    skoro szkoda ci ATmegi to co za problem zastosować ATtiny13 - na nim także spokojnie zrealizujesz PWM ale będziesz miał dodatkowo ADC

    odnośnie histerezy to właśnie przez to , że powoli następują zmiany temperatury to tym bardziej histereza może być potrzebna - przemyśl to - dlaczego.


    Ja osobiście wolałbym dać większy procek czyli ATmega8 niż dodawać jakieś wzmacniacze operacyjne skoro wszystko można w samym procku zrobić bez najmniejszego problemu. Ale jak mówię - do twojego celu może się okazać że i ATiny13 wystarczy - rozważ to wszystko ;)
  • Poziom 19  
    Z ciekawości pytam, przy okazji tego tematu bo może mi sie to przydać :P Czyli jak to zrobic? Jak taki układ histerezy powinien wyglądać?
  • Poziom 42  
    przeczytaj wyżej co napisałem, programowy układ histerezy to pikuś. Ustalasz sobie tylko Tmax i Tmin które tworzą okienko histerezy dopasowane do potrzeb
  • Pomocny post
    Poziom 43  
    Gdy
    AIN0 < AIN1 to masz 0 (mniejszy opór termistora)
    a gdy
    AIN0 > AIN1 to masz 1 (większy opór termistora)

    Albo odwrotnie, już nie pamiętam :D

    Przy AIN0 = AIN1 to nawet trudno powiedzieć bo prawie niemożliwe jest żeby te napięcia były sobie równe. Tym bardziej że układ ma histerezę kilka mV i napięcie niezrównoważenia kilka mV.
  • Pomocny post
    Poziom 34  
    Komparator jak już wspomniało kilka osób, porównuje napięcia w relacji mniejszy-większy (nie w relacji równy-nierówny), tak więc problemu z wykryciem relacji pomiędzy napięciem zmierzonym a referencyjnym nie będzie. Histerezę można rozwiązać łącząc napięcie referencyjne (pochodzące z dzielnika) z którymś pinem przez rezystor: wtedy można programowo zwiększyć lub zmniejszyć w jakimś stopniu napięcie referencyjne (3 wartości: odpowiednio dla pinu w stanie LO, HZ oraz HI)
    Rozwiązanie z ADC również jest dobre, zaprogramowanie histerezy jest w takim przypadku bardzo proste na poziomie programu (parę if'ów) oraz łatwe do dokładnego przestrojenia (zmiana dwóch wartości)
    Histereza jakkolwiek czy to używając ADC czy komparatora musi się pojawić, gdyż bez niej całość będzie działać na granicy progu przełączenia co spowoduje wzmocnienie się szumów co objawi się ciągłym zmienianiem stanu wyjścia.
  • Poziom 19  
    No więc tak, pomysł z Attiny13 odpada bo nie mam takiego w swoich zasobach a jeśli zamówię z neta to bedzie za długo trwało, a jednak zależy mi na czasie.

    Mogłby mi ktoś pokazać przykładowy kod albo algorytm tej histerezy? Lub poprostu dokładnie wytłumaczyć co się ma dziać? :P

    I mam jeszcze takie pytanie, a gdyby dodać opóźnienia i stan czujnika odczytywać dajmy na to co 0,5 sekundy wtedy nie powinny wystąpić drgania nie?
  • Pomocny post
    Poziom 42  
    grysek napisał:

    I mam jeszcze takie pytanie, a gdyby dodać opóźnienia i stan czujnika odczytywać dajmy na to co 0,5 sekundy wtedy nie powinny wystąpić drgania nie?


    No i teraz pomyśl sobie, że czujnik jest na granicznej wartości z progiem jaki sobie założyłeś tymi dwoma rezystorami, odczyt dokonujesz jak sobie wymyśliłeś co pół sekundy. Tak więc przekaźnik może sobie klapać co pół sekundy przez czas gdy temperatura powolutku rośnie. Chyba, że jesteś pewien, że w ciągu pół sekundy to ona wzrasta b.szybko

    A algorytm histerezy:

    Założenia:

    zakładasz, że np Tmax=32st
    zakładasz, że np Tmin=28st

    temperatura wyjściowa niech będzie 20st

    1. w pętli cały czas sprawdzasz czy temperatura czujnika nie przekroczyła Tmax. Jeśli przekroczyła to ZAŁĄCZASZ przekaźnik (o ile był wyłączony), a jeśli nie przekroczyła to nic nie robisz w programie

    2. w tej samej pętli sprawdzasz cały czas czy przekaźnik jest włączony a jeśli tak to czy temperatura jest większa od Tmin. Jeśli temperatura większa od Tmin to nic nie robisz ale jeśli mniejsza od Tmin to WYŁĄCZASZ przekaźnik

    to wszystko ;)

    oczywiście założenia co do wartości temperatury czy też mierzonego napięcia na czujniku możesz sobie zmieniać do woli wg uznania i potrzeb. Ta różnica pomiędzy Tmin a Tmax to jest właśnie to "oczko" histerezy więc masz możliwość regulacji wszystkich jej parametrów.


    ..... no ale do tego to ADC potrzebny, więc jak sam widzisz może warto poczekać na procek z ADC ? ;)
  • Pomocny post
    Poziom 35  
    Mirek dosadnie to wytłumaczył ale ja spróbuje trochę inaczej.
    W histerezie chodzi o to aby temperatura załączenia była inna jak temperatura wyłączenia przekaźnika.
    Załóżmy iż temperatura wynosi 20 stopni i jest w tendencji wzrastającej (leci do góry).
    Przy 23 stopniach decydujesz się włączyć wiatrak aby schłodzić dany element.
    Bez histerezy jeśli temperatura spadnie poniżej 23 nastąp wyłączenie, a gdy czujnik będzie miał małą bezwładność natychmiast się ociepli i znowu załączy wiatrak. Efektem tego będzie to że wiatrak będzie się bez przerwy załączał na granicy 23stopni. Tym częściej im mniejsza bezwładność.
    W przypadku gdy masz histerezę ustalasz sobie okienko np włączenie przy 23 ale wyłączenie już przy 20.
    Efektem końcowym będzie to że temperatura będzie oscylować w granicach 20 do 23, a załączenie wiatraka będzie mniejsze.
  • Pomocny post
    Poziom 43  
    Histerezę możesz też zrobić na ATTiny2313 (w zasadzie zwiększyć bo ona już tam jest).
    Jakiś pin ustawiasz jako wyjście i łączysz go rezystorem na przykład 1M z wejściem AIN0.
    Po każdym sprawdzeniu stanu komparatora stan komparatora przepisujesz do tego pinu.
  • Poziom 19  
    Jak narazie zrobiłem układ na komparatorze w Attiny, i sprawuje się nawet dobrze i rzeczywiście tak jak mówił mirek występuje czasem wachanie czujnika na tej granicy właśnie, zwłaszcza wtedy kiedy temp roiśnie powoli. Uwzględniłem to w kodzie i problemu narazie nie ma. Ale przy pierwszej lepszej okazji chyba wymienie attiny na proca z ADC, dodam jeszcze jakieś funkcje do tego :P

    Dzieki wszystkim za pomoc