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

AVR atmega8 - Serwo + DS18B20 sterowanie kotłem CO

maciek_1992 31 Gru 2013 00:38 1353 4
  • #1 31 Gru 2013 00:38
    maciek_1992
    Poziom 13  

    Witam.
    Zacznę od tego, że jestem amatorem/początkującym więc moje programy gównie opierają się na tym co znajdę w internecie + jakaś znikoma wiedza :)
    Chciałem zrobić sterowanie serwem w zależności od temperatury.
    Założenia:
    -Mikrokontroler atmega8
    -Pomiar temperatury DS18B20
    -Sterowanie serwem "binarne" dwa wybrane przeze mnie położenia do sterowanie "klapką" popielnika odpowiadającą za ciąg.

    Więc tak po walce z serwem powstał mi program:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Jest on wystarczający do tego celu zmiana wartości zmiennej T przestawia wychylenie serwa ja używam 103 i 108.
    Termometr na DS widziałem już dawno i program miałem zapisany na komputerze jest to wersja termometru binarnego, kod:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Zdaję sobie sprawę, że może on być nie za bardzo poprawny ale działa wystarczająco dokładnie, żeby wiedzieć czy na zewnątrz jest ciepło czy nie:)

    Oba programy jak na moje potrzeby są wystarczająco dobre ale gdy próbowałem je jakoś połączyć to przestaje mi działać pomiar temperatury ale serwo działa nadal, zamieszczam kod tego co napisałem:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Zdaje sobie sprawę, że w tych programach mogą być nawet poważne błędy więc postanowiłem napisać na forum, może znajdzie się ktoś kto będzie wiedział jak to zrobić.
    Pozdrawiam

    0 4
  • #2 31 Gru 2013 02:21
    Ilmarinen
    Poziom 12  

    Spróbuj wstawić z powrotem opóźnienie pomiędzy żądanie odczytania temperatury a odczytaniem jej z DS'a. Czas przetwarzanie to 750 ms i musi być zachowany.

    0
  • #3 31 Gru 2013 11:38
    maciek_1992
    Poziom 13  

    Po wstawieniu tego opóźnienia serwo co kilka sekund zmienia swoją pozycję z jednej ustawionej do 2 i po kilku sekundach wraca i tak cały czas.
    Edit.
    Po ustawieniu większego czasu późnienia serwo się uspokoiło ale nadal nie reaguje na wzrost temperatury.
    Edit 2.
    Zauważyłem ,że sterownik zachowuje się jakby temperatura była za wysoka w stosunku do tej zadanej mimo, że w pokoju jest chłodniej niż zadane 30*C (temperatura do testów) jeśli ustawię zadaną temperaturę na dużo większą np 30*10*16 to przesterowuje na otwarte więc to może od tego zależy? Tylko jaki mnożnik wybrać żeby to działało ?
    Aha i wsadziłem pomiar temperatury do przerwania od T1 co 2 sekundy nie wiem czy dobrze zrobiłem.

    0
  • #4 31 Gru 2013 22:59
    emarcus
    Poziom 34  

    maciek_1992 napisał:

    Zauważyłem ,że sterownik zachowuje się jakby temperatura była za wysoka w stosunku do tej zadanej mimo, że w pokoju jest chłodniej niż zadane 30*C (temperatura do testów) jeśli ustawię zadaną temperaturę na dużo większą np...


    Ten twój program termometru jest błędny!
    Przy symulowaniu przykładowych parametrów dla temp. 25 st C.; w wyniku otrzymujesz 17st C. (więc co to za pomiar?), sprawdź sam i skoryguj.
    Ponadto wszędzie piszesz że sensor jest DS1820 gdy tymczasem w programie pojawiają sie elementy obliczeniowe stosowane dla DS18B20.
    Metody wyznaczania temperatur różnią sie bardzo dla obydwu sensorów.
    Niemniej jednak nawet pominąc tą nieścisłośc i przyjąc DS18B20 wynik pozostaje błędny jak wskazałem wyżej.

    e marcus

    0
  • #5 01 Sty 2014 10:40
    maciek_1992
    Poziom 13  

    Mój błąd... czujnik to faktycznie DS18B20. Ale niestety jestem chyba za słaby i niestety nie wiem co zmienić/ poprawić :/ Więc mógłby mi ktoś napisać ten program, żeby to wszystko działało ?

    0