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

Sterownik pompy CWU program do atmegi8

14 Lut 2009 21:59 2124 12
  • Poziom 20  
    W związku z budową sterownika do pompy CWU, po przygotowaniu projektu analogowego, stwierdziłem że znacznie prościej będzie wykorzystać mikrokontroler. Urządzenie jest dość proste, mierzy regularnie temperaturę i jeśli wykryje wzrost załącza przekaźnik na określony czas. Niestety w pisaniu oprogramowania do µC jestem początkujący i prosiłbym o pomocną dłoń w celu sprawdzenia napisanego programu. Program jest napisany w Bascomie, bo od czegoś trzeba zacząć.


    Code:

    $regfile = "m8def.dat"                                      'informuje kompilator o pliku dyrektyw mikrokontrolera

    $crystal = 8000000                                          'informuje kompilator o częstotliwości oscylatora


    Config Portb.2 = Output                                     'Konfiguracja wyjścia
    Reset Portb.2                                               'Ustawienie wyjścia w stan=0
    Config 1wire = Portd.1                                      'konfiguracja linii magistrali 1-Wire

    Declare Sub Pomiar                                          'procedura odczytu temperatury z układu DS1820
    Declare Sub Pompa                                           'procedura ustawianie stanu wyjścia

    Dim T1 As Word                                              'Zmienna 1 do przechowywania temperatury
    Dim T2 As Word                                              'Zmienna 2 do przechowywania temperatury
    Dim T3 As Word                                              'Zmienna 3 do przechowywania temperatury
    Dim Delta As Word                                           'Zmienna do przechowywania różnicy temperatur


    Call Pomiar                                                 'wywołanie procedury pomiaru temperatury
    T2 = T3                                                     'Ustawienie początkowe wartości zmiennych
    T1 = T2                                                     'Ustawienie początkowe wartości zmiennych

    Do                                                          'Główna pętla programu
     T1 = T2                                                    'Przesunięcie wyników pomiaru
     T2 = T3
     Call Pomiar                                                'Pomiar temperatury
     Delta = T3 - T1
     If Delta > 5 Then Call Pompa                               'Sprawdzenie delta T i wykonanie procedury Pompa
    Loop                                                        'Koniec głównej pętli programu
    End



    Sub Pomiar                                                  'definicja procedury pomiaru temperatury
     1wreset                                                    'reset magistrali 1-Wire
     1wwrite &HCC                                               'opuszczenie zapisu numeru ID
     1wwrite &H44                                               'start pomiaru temperatury
     Waitms 750                                                 'opóźnienie na czas konwersji
     1wreset                                                    'reset magistrali 1-Wire
     1wwrite &HCC                                               'opuszczenie zapisu numeru ID
     1wwrite &HBE                                               'komenda odczytu zmierzonej temperatury
     T3 = 1wread(2)                                             'zapis zmierzonej temperatury do  T3
     1wreset                                                    'reset magistrali 1-Wire
    End Sub                                                     'koniec procedury pomiaru

    Sub Pompa                                                   'definicja procedury ustawiania stanu wyjścia
     Set Portb.2                                                'ustawienie wyjścia w stan=1
     Wait 40                                                    'włączenie pompy na 40 sekund
     Reset Portb.2                                              'ustawienie wyjścia w stan=0 wyłączenie pompy
     Wait 600                                                   'wyłączenie pompy na 10min
    End Sub
  • Poziom 39  
    SzymonHK napisał:
    ... Urządzenie jest dość proste,...

    I niebezpieczne :!:
    SzymonHK napisał:

    ... mierzy regularnie temperaturę i jeśli wykryje wzrost załącza przekaźnik na określony czas.

    Ależ Twój kod, "reaguje" na spadek temperatury :!:
    Code:
    Do                                                          'Główna pętla programu
    
     T1 = T2                                                    'Przesunięcie wyników pomiaru
     T2 = T3
     Call Pomiar                                                'Pomiar temperatury
     Delta = T3 - T1
     If Delta > 5 Then Call Pompa                               'Sprawdzenie delta T i wykonanie procedury Pompa
    Loop                                                        'Koniec głównej pętli programu
    End

    Poza tym, nawet gdyby program wykrywał wzrost temperatury, to Twój sterownik nie włączy pompy, jeśli temperatura będzie rosła w tempie np. 0.5C/s , a ta po dojściu do odpowiedniej wartości spowoduje, że z chałupy pozostanie tylko kupa gruzu, jeśliby zawiodły zawory bezpieczeństwa ;)
  • Poziom 20  
    Zanim napiszesz cokolwiek, przeczytaj ze zrozumieniem. Szterownik wykrywa WZROST temperatury, a przyrost jest w tempie 15°C/s. Poza tym praca tej pompy nie powoduje żadniego niebezpieczeństwa, a tymbardziej nie zamienia czegokolwiek w kupę gruzu.
    Pozdrawiam
  • Poziom 39  
    SzymonHK napisał:
    ... Szterownik wykrywa WZROST temperatury...

    Faktycznie - pomyliłem się :|
    Code:

    Delta = T3 - T1

    Ale w takim razie, czy "zawieszenie" pomiaru temperatury na 10 minut, nie jest ryzykowne :?:
    SzymonHK napisał:

    Poza tym praca tej pompy nie powoduje żadniego niebezpieczeństwa, a tymbardziej nie zamienia czegokolwiek w kupę gruzu.

    Myślałem raczej, o ... braku pracy ;)
  • Poziom 20  
    Pompa służy do cyrkulacji CWU, po dostarczeniu wody do punktów poboru, 10 min to czas stygnięcia wody, ponowna cyrkilacja jest niepotrzebna. Algorytm jest przetestowany, problemem dla mnie jest poprawność programu, w częsci odczytu temperatury z dallasa i podstawianie właściwego typu zmiennych. Tu przydałaby się pomoc.
  • Poziom 39  
    SzymonHK napisał:
    ...Algorytm jest przetestowany

    Wierzę, ale warto zabezpieczyć się na jakieś nieprzewidziane sytuacje, a w ATMega8, trochę kodu da się upchać ;)
    SzymonHK napisał:
    problemem dla mnie jest poprawność programu, w częsci odczytu temperatury z dallasa i podstawianie właściwego typu zmiennych. Tu przydałaby się pomoc.

    Algorytm sam w sobie jest ok, jeżeli masz świadomość, że DS180 ma rozdzielczość 0.5C, czyli w przypadku
    Code:
     Delta > 5

    oznacza Delta > 2.5C
  • Poziom 20  
    Mam świadomość rozdzielczości ds'a, 2,5 stopnia na 750ms to powinien być wystarczający próg, aby układ nie załaczał się bez chwilowego poboru CWU, pytanie czy zmienna typu Word, poprawnie obsłuży odczyt z 1-wire i porównanie?
  • Poziom 39  
    SzymonHK napisał:
    ... pytanie czy zmienna typu Word, poprawnie obsłuży odczyt z 1-wire i porównanie?

    W zakresie temperatur dodatnich, może być WORD, ale jako że DS1820 "koduje" wartość temperatury typem INTEGER, to takiego typu należałoby użyć.
  • Poziom 20  
    Pomiar temperatury będzie tylko dodatni, czyli zostawić typ Word, za czy ten zapis jest poprawny:
    Code:
     T3 = 1wread(2)  
  • Poziom 39  
    SzymonHK napisał:
    Pomiar temperatury będzie tylko dodatni, czyli zostawić typ Word, za czy ten zapis jest poprawny:
    Code:
     T3 = 1wread(2)  

    W zasadzie, w tym przypadku wystarczy odczytać tylko 1 bajt z DS-a, ale tak jak masz, też jest dobrze.
  • Poziom 20  
    Coś jednak działa źle, bo cały czas wykonywana jest procedura pompa,pomimo stałej temperatury.
  • Poziom 16  
    witam.
    Zastosuj dwa DSy jeden w zasobniku drugi natomiast na powrocie przed pompą, druga sprawa reakcja układu na różnice temperatury 5....10oC, poczym włączenia pompy na 30 sekund lub wyłączenia pompy gdy temperatury zbliżą się sie do siebie z różnicą 1...2 oC, no i można by zastosować ignorowanie układyu gdy temperatura w zasobniku spadnie poniżej 20....25oC no bo po co przemiatać zimną wodę.
    pozdrawiam.
  • Poziom 20  
    -> Michał_z1
    Robię coś prostego i efektywnego, można rozbudować układ, ale piec sam dba o stan zasobnika, a czekanie na wzrost temperatury powrotu cyrkulacji CWU jest niecelowe, ciepła woda dociera do kranu w czasie o 40% krótszym niż spowrotem do zasobnika. Poza tym żeby zrealizować te funkcje trzebaby zastosować 3 DS-y: 1 do zasobnika, 2 na powrocie i 3 na wylocie z zasobnika. Znając parametry układu wystarcza 1, a na dodatek jest chyba efektywniej.

    ->Zumek
    Zbadałem wyniki dla delty w czasie stygnięcia czujnika i poradziłem sobie z problemem