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

Atmega 8 sterowanie zasilania na 230V AC i 90V DC.

sirek86 05 Lip 2010 13:39 5688 13
  • #1 8262489
    sirek86
    Poziom 11  
    Witam!

    Mam prośbę o prześledzenie układu i wskazanie błędów.Wszelkie propozycje mile widziane.

    Atmega 8 sterowanie zasilania na 230V AC i 90V DC.

    Układ, powinien działać następująco (jeżeli czas pozwoli, wrzucę i kod).
    Czujniki temperatury rejestrują jej wahania w dwóch miejscach. (układ rozpocznie działanie poniżej temp. zadanej)
    Normalnie sygnał nie będzie podawany na stycznik załączający "zasilanie 90V". Zewnętrznie będę podawał sygnał do załączenia stycznika "Ładowanie", nastąpi załączenie (tutaj nie uwzględniłem celowo załącznika, gdyż układ będzie jeszcze współpracował z innym). Gdy "czujnik napięcia" wykryje otwarcie klapki zasilającej oraz podam sygnał z zewnątrz, nastąpi załączenie stycznika "zasil. 230V".
    Wyświetlacz zastąpię chyba tylko 'gold pinami' żeby można było jedynie podejrzeć sytuację.

    Wykonuję taki schemacik pierwszy raz, więc proszę o pomoc/opinie.

    Nasunęły mi się pytania: przeglądając różne schematy natknąłem się że kondensatory elektrolityczne przy stabilizatorze są połączone równolegle ze stałymi, dlaczego?
    czy nie powinienem użyć styczników o podwójnych stykach przełączalnych ?
    Prąd jaki będzie płynął przez styki będzie maksymalnie 1A
  • #2 8262641
    tmf
    VIP Zasłużony dla elektroda
    Kondensatory elektrolityczne i ceramiczne ("stałe") mają różną charakterystykę dla prądów zmiennych. Stąd często łączy się je równolegle. Ty też to musisz zrobić, oprócz elektrolitów muszą przy stabilizatorze z obu stron być ceramiczne 100nF. Bez nich może sie wzbudzać. Podobnie przy procesorze zasilania powinny być odsprzęgnięte kondensatorami 100nF. Powinieneś także podłączyć AVCC, nawet jeśli nie używasz ADC. To tak na szybko.
  • #3 8263413
    gaskoin
    Poziom 38  
    no i reset powinien być podłączony przez rezystor np 10k do vcc i do gnd przez kondensator np elektrolit 4,7 mikro
  • #4 8265043
    flapo213
    Poziom 21  
    A jakie czujniki temperatury ? Ze schematu widzę że chyba DS18x20 czyli one-wireowe. Jeśli tak rozważ tryb zasilania parasite power ponieważ te czujniki nie przechodzą testów przepięciowych i trzeba je jakoś zresetować.

    No i oczywiście sugestie poprzedników odnośnie podstawowych kwesti czyli reset i avcc koniecznie.

    Wszystko jest w nocie aplikacyjnej / datasheet do ATM8 co i jak i dlaczego.

    Pozdrawiam
  • #5 8266739
    gaskoin
    Poziom 38  
    no i ta dioda którą zastosowałeś przy przekaźniku ciut słaba... 1n400x będzie lepszym pomysłem. Poza tym powinieneś zastosować jakąś filtracje dla ADC (chociażby tą z dsa)
  • #6 8269632
    sirek86
    Poziom 11  
    Witam ponownie,

    poprawiłem to co panowie sugerowali.

    Atmega 8 sterowanie zasilania na 230V AC i 90V DC.

    Czujniki temp. to DS18S20 jednak będą podłączone tak jak na schemacie poprzez złącza AK500/3 ze względu na rozpiętość położeń obu czujników. Jeżeli coś się stanie z jednym musiałbym zmieniać i drugi lub ingerować w kablach, a tak wyjmę, podłączę zamiennik i jest mniejszy problem.
    Co prawda wywaliłem wyświetlacz, jednak jeszcze się zastanawiam czy go umieszczać, raczej w programie go umieszczę.

    Teraz będę pisał program, do tego układu, może się uda. :|
  • #7 8272118
    sirek86
    Poziom 11  
    Program działa, ale mam pytanie...

    Czy ktoś się spotkał że w czujnikach DS1820 temperatura jest wyższa o kilka stopni ? Ja dla sprawdzenia włożyłem czujnik w folii do lodowatej wody (woda z lodem), temperatura powinna wskazywać coś koło zera, jednak pokazywało minimalnie 5 st. C; dlatego też w czujniku drugim odejmuję jeszcze 5 stopni.

    Drugie pytanie mam odnoście moich pod-pętli... czy nie da się ich jakoś skrócić?!
    Stworzyłem to troszkę z głowy ale samą inicjację odczytu temp. znalazłem na forach.


    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    
                                         'konfiguracja pinów
    
    Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32            ' deklaracja symbolu stopień
    
    Dim T(4) As Byte                                            'tablica czterech bajtów do przechowywania temperatury
    Dim Temp1 As Single , Temp2 As Single                       'tablice do pokazywania wartości z przecinkami
    Dim Str_temp As String * 5
    
    Declare Sub Czytaj1                                         'deklaracja pod-pętli
    Declare Sub Czytaj2
    Declare Sub Regulator
    Declare Sub Klapka
    
    Config Portd.0 = Output                                     'konfiguracja portów
    Config Portd.1 = Output
    Config Portd.2 = Output
    Config Portc.2 = Input                                      'podciagniecie "jedynki" do czujnika otwartej klapki zasilania 230V
    
    Zasil90v Alias Portd.0
    Zasil230v Alias Portd.1
    Zalacz_zasil Alias Portd.2
    Czujnik_nap Alias Portc.2
    
    
    
    
    
     Cls
    
    '------------------------------PĘTLA GŁÓWNA-------------------------------------
    
    Do
    
    Call Czytaj1
    
    Locate 1 , 1                                                'ustaw kursor
    Lcd "Temp 1 =" ;
    If T(2) > 0 Then Lcd "-" ;                                  'wyswietlanie w zależności od znaku temperatury
    Lcd Str_temp ;
    Lcd Chr(0) ; "C  "
    
    Call Czytaj2
    Locate 2 , 1
    Lcd "Temp 2 =" ;
    If T(4) > 0 Then Lcd "-" ;                                  'wyswietlanie w zależności od znaku temperatury
    Lcd Str_temp ;
    Lcd Chr(0) ; "C  "
    
    Call Regulator
    
    Loop
    
    
    '-------Pod pętle------
    
    Sub Czytaj1                                                 'pierwszy czujnik
    
    Config 1wire = Portc.1
      1wreset                                                   'inicjacja magistrali 1WIRE
     If Err = 1 Then                                            'kontrola błędu - jeśli err=1 wtedy nie znaleziono czujnika
       Lcd "Brak pierwszego DS1820"                             'poinformuj o tym
       Do
       Loop                                                     'poczekaj
     End If
    1wwrite &HCC                                                'Wybór układu (dla 1 sztuki pomijamy wysyłanie numeru)
    1wwrite &H44                                                'Polecenie konwersji temperatury
    Waitms 200                                                  'czas konwersji 200 ms
    1wreset                                                     'inicjacja magistrali 1WIRE
    1wwrite &HCC                                                'Wybór układu (dla 1 sztuki pomijamy wysyłanie numeru)
    1wwrite &HBE                                                'żądanie odczytania temperatury
    T(1) = 1wread()                                             'odczytaj z magistrali 1WIRE 1 bajt do 1 elementu tablicy T
    T(2) = 1wread()                                             'odczytaj z magistrali 1WIRE 2 bajt do 2 elementu tablicy T
    1wreset                                                     'inicjacja magistrali 1WIRE
    If T(2) > 0 Then                                            'Jeśli t(2)=0 to temperatura jest dodatnia
    T(1) = 256 - T(1)                                           ' oblicz temperaturę zgodnie z danymi noty katalogowej
    End If
    Temp1 = T(1) / 2                                            'obliczamy temperaturę wg noty katalogowej
    Str_temp = Fusing(temp1 , "##.&&")
    
    End Sub
    
    
    
    
    
    Sub Czytaj2                                                 'drugi czujnik
    Config 1wire = Portc.0
      1wreset                                                   'inicjacja magistrali 1WIRE
     If Err = 1 Then                                            'kontrola błędu - jeśli err=1 wtedy nie znaleziono czujnika
    
       Lcd " Brak drugiego"                                     'poinformuj o tym
       Do
       Loop                                                     'poczekaj
     End If
    1wwrite &HCC                                                'Wybór układu (dla 1 sztuki pomijamy wysyłanie numeru)
    1wwrite &H44                                                'Polecenie konwersji temperatury
    Waitms 200                                                  'czas konwersji 750 ms
    1wreset                                                     'inicjacja magistrali 1WIRE
    1wwrite &HCC                                                'Wybór układu (dla 1 sztuki pomijamy wysyłanie numeru)
    1wwrite &HBE                                                'żądanie odczytania temperatury
    T(3) = 1wread()                                             'odczytaj z magistrali 1WIRE 1 bajt do 1 elementu tablicy T
    T(4) = 1wread()                                             'odczytaj z magistrali 1WIRE 2 bajt do 2 elementu tablicy T
    1wreset                                                     'inicjacja magistrali 1WIRE
    If T(4) > 0 Then                                            'Jeśli t(2)=0 to temperatura jest dodatnia
    T(3) = 256 - T(3)                                           ' oblicz temperaturę zgodnie z danymi noty katalogowej
    End If
    T(3) = T(3) / 2                                              'obliczamy temperaturę wg noty katalogowej
    Temp2 = T(3) - 5
    Str_temp = Fusing(temp2 , "##.&&")
    End Sub
    
    
    
    
    Sub Regulator
       If Temp1 < 10 Then
    
                   Call Klapka
    
             Elseif Temp2 < 10 Then
    
                   Call Klapka
            Else
                Reset Zalacz_zasil
                Reset Zasil230v
                Reset Zasil90v
    
    
       End If
    End Sub
    
    
    
    Sub Klapka
         If Czujnik_nap = 1 Then
    
                Wait 1
                Reset Zasil230v
                Wait 1
                Set Zasil90v
                Wait 1
                Set Zalacz_zasil
    
         Elseif Czujnik_nap = 0 Then
    
                Wait 1
                Reset Zasil90v
                Waitms 500
                Reset Zalacz_zasil
                Wait 1
                Set Zasil230v
    
          End If
    End Sub



    dodatkowo zamieszczam schemat LCD, może komuś się przyda
    Atmega 8 sterowanie zasilania na 230V AC i 90V DC.
  • #8 8272177
    xury
    Specjalista automatyka domowa
    Ja mam taką jedną uwagę; skoro czas konwersji temperatury to 750ms to dlaczego czekasz tylko 200 ms ? Być może dlatego masz takie przekłamania w odczycie ?
    Zamiast dwóch identycznych podprogramów można użyć tylko jednego z przekazywaniem parametru do podprogramu. W tym wypadku było by to: portc.1 lub portc.0
  • #9 8272246
    jony15
    Poziom 24  
    Co do czujników i ich rozbieżności to tak naprawdę sam nie wiem; kiedyś w sterowniku do pieca też odejmowałem ok 3 stopnie żeby temperatura się "zgadzała" ale przed chwilą pomiar z dwóch czujników oddalonych o ok 2cm od siebie ( DS1820 ) jeden pokazał 16,5 a drugi 17,5 stopnia; miernik unit-t pokazuje 17 stopni a jakiś chiński "dt - coś tam" pokazuje 19 stopni. Hm LM35 pokazuje 15,8 stopnia. Ale wygląda że wszystko w granicy błędu.
    p.s. czujniki jak i mierniki leżą w miarę obok siebie od paru godzin.
  • #10 8272838
    sirek86
    Poziom 11  
    Witam!
    @xury
    Czas konwersji jest taki krótki ponieważ czujniki są połączone trzema przewodami (2 wire) więc nie jest wymagany czas "aż" 750ms. Jednak aby rozwiać wątpliwości z dłuższym czasem pokazuje takie same odczyty. czujniki zestawione obok siebie okazują takie same parametry.

    a co do programu, jeszcze pomyślę w wolnej chwili
  • #11 8272925
    flapo213
    Poziom 21  
    Witaj,

    Niedokładność pomiaru jest bardzo prosta do wytłumaczenia i bynajmniej nie chodzi tutaj o czas jaki czekasz czy 750ms czy 200ms, jeśli nie odczekasz wymaganego czasu to odczytasz poprzedni rezultat i tyle. Ponieważ używaż DS18B20 których dokładność jest taka sobie 1C-2C w zależności od przedziału. Błąd jest w zasilaniu czujników, datasheet wyraźnie mówi, że aby otrzymać wymaganą dokładność trzeba zasilić czujniki w trybie parasite power to co Ci proponowałem wcześniej. Uzasadnienie jest proste jeśli zasilasz czujnik non stop to się grzeje co wpływa na niedokładność pomiaru. Błąd rzędu 3C i więcej to raczej nienormalna sytuacja.

    Jeśli zdecydował byś się na tryb parasite power to trochę przeróbek jest niezbłednie koniecznych i na pewno dotrzymanie czasu konwersji przy 12bitach 750[ms]. Ale co i jak w tym trybie to odsyłam do dokumentacji DS18B20 wszystko jest napisane jak podłączyć układy w trybie parasite power jaki minimalny prąd ile czasu na przełączenie zasilania z week pull up na strong na porcie itd.

    W razie niejasności odnośnie tego pytaj.

    Pozdrawiam
  • #12 8273163
    sirek86
    Poziom 11  
    w sumie jedno sprostowanie; ja korzystam z DS18S20 (albo po prostu DS1820) ale faktycznie w dokumentacji znalazłem że maksymalny czas conversji wynosi 750ms o niższym nie znalazłem.

    jednak gdzieś znalazłem że maksymalny prąd przy moim połączeniu wynosi 1,5 mA. ale czy taki prąd jest wstanie podgrzać urządzenie nawet o 5 st. ?!
  • #13 8273918
    flapo213
    Poziom 21  
    Witaj,

    Czas konwersji zależy od tego ilu bitowy jest wynik, dla 12 bitów to 750[ms] a dla 9 bitów to nie pamiętam dokładnie ale chyba 250[ms] lub mniej, trzeba by zerknąć do dokumentacji.

    Co do prądu to jakby to powiedzieć co dla jednych jest mało dla innych jest dużo.

    Wyobraź sobie że jest tam mikrometrycznych wielkości czujnik obok którego jest jakiś kawałek innej struktury która wydziela jakieś ciepło więc jest w stanie zakłócić pomiar, czy 5 stopni to ciężko powiedzieć. Gdybyś miał tryb parasite power i normalny byłbyś w stanie stwierdzić.

    Zresztą zrób taki test:

    zostaw w pomieszczeni o w miarę stablinych temperaturowo warunkach czujnik po czy włącz i zobacz jak szybko i od jakie do jakiej tempratury wzrośnie wartość.
    Ma to sens bo pierwszy pomiar powiedzmy będzie pozbawiony tego błędu po czy sprawdzaj w ciągu np 10 minut jak zmieni się ta temperatura bo że wzrośnie to jasne. Oczywiście podczas testu nie dotykaj czujnika.

    Pozdrawiam
  • #14 8279643
    sirek86
    Poziom 11  
    ... co do kondensatorów przy atmedze

    nie znalazłem schematu odnoszącego do nich, jako konieczność

    a w stabilizatorze 7805 tylko o kondensatorach elektrolitycznych, o normalnych też nic nie pisali.
REKLAMA