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.

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

sirek86 05 Lip 2010 13:39 4659 13
  • #1 05 Lip 2010 13:39
    sirek86
    Poziom 9  

    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

    0 13
  • #2 05 Lip 2010 14:29
    tmf
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #3 05 Lip 2010 18:44
    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

    0
  • #4 06 Lip 2010 08:17
    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

    0
  • #5 06 Lip 2010 17:06
    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)

    0
  • #6 07 Lip 2010 12:10
    sirek86
    Poziom 9  

    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. :|

    0
  • #7 07 Lip 2010 22:58
    sirek86
    Poziom 9  

    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.


    Code:
    $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.

    0
  • #8 07 Lip 2010 23:14
    xury
    Poziom 38  

    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

    0
  • #9 07 Lip 2010 23:32
    jony15
    Poziom 22  

    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.

    0
  • #10 08 Lip 2010 09:43
    sirek86
    Poziom 9  

    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

    0
  • #11 08 Lip 2010 10:12
    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

    0
  • #12 08 Lip 2010 11:24
    sirek86
    Poziom 9  

    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. ?!

    0
  • #13 08 Lip 2010 15:20
    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

    0
  • #14 10 Lip 2010 13:09
    sirek86
    Poziom 9  

    ... 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.

    0