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

Resetowanie się atmega8, przy załączaniu przekaźnika

Mariojas 30 Wrz 2009 18:34 14870 60
  • #1 7075772
    Mariojas
    Poziom 17  
    Mam zbudowany układ na podstawie atmega8 obsługujący bramę przesuwną. Atmega uruchamia jeden z dwóch przekaźników powodując uruchomienie silnika prądu stałego w jednym kierunku obrotów bądź drugim. Układ działa tak jak należy na "sucho" czyli na biurku poskładany, nie podłączony do silnika. Ale gdy już układ jest na swoim miejscu to chwile po uruchomieniu silnika (czasem jest to mniej niż pół sekundy) atmega chyba się resetuje, bo wraca do poprzedniego stanu. Jeden z przewodów zasilających silnik jest poprowadzony pod płytką drukowaną, w miejscu gdzie jest uC. Przez przewód płynie ok 2 - 3A. Dodam, że - nie ma różnicy czy pod nóżke reset podłącze +5V przez rezystor 49kOm czy zostawie w powietrzu, przy nóżce mam podłączony do masy kondensatorek 100n, układ jest stabilizowany przez 7805, przed którym jest +12V i elektrolit 470uF. Przekaźniki są zasilane z punktu przed 7805 (+12V + elektrolit).
    Co zrobić?
  • Pomocny post
    #2 7075865
    wojtekkk09
    Poziom 15  
    Witam,
    pewnie napięcie zasilania spada na mikroprocesorze i się resetuje.
    Dodałbym kondensatory:
    - przed stabilizatorem
    - za stabilizatorem
    - no i oczywiście zaraz przy procesorze (VCC)

    Pozdrawiam
    Wojt

    edit:
    możesz jeszcze sprawdzić czy to jest wina spadku napięcia, stosując dodatkowy zasilacz, którym będziesz zasilał przekaźniki. Jeżeli nadal się będzie resetować, to szukałbym problemów w zakłóceniach...
  • #3 7075918
    Mariojas
    Poziom 17  
    hmmm czy ja wiem. układ uC i przekaźniki są zasilane razem, ale silnik jest z innego trafo zasilany. Tak jak mówiłem, gdyby to miał być problem to układ nie działałby na "sucho". Włożyłem teraz kondensator za stabilizatorem i nic to nie dało. Zauważyłem, że uC czasem nie reaguje wcale na przycisk.
  • #4 7075938
    misiek85_1
    Poziom 11  
    Poczytaj o układach gasikowych. Tak na szybko to daj kondensator 100nF na silnik.
  • #5 7075969
    Mariojas
    Poziom 17  
    uu teraz gdy odłączyłem zasilanie samego silnika to zauważyłem, że gdy zadziała jedna krańcówka (w postaci kontaktronu) to efekt jest podobny do resetu. Więc może to być wina programu, ale nie koniecznie. Możliwe ze podczas startu kontaktrony się zwierają, ale w poprzednim układzie takie coś nie występowało. Poprzednio sterowanie miałem na bazie przerzutników i bramek i nie było z tym problemu.
    Po za tym zauważyłem kolejny problem. Pomimo użycia w BASCOMie opcji "debounce" układ zachowuje się czasem jakby był problem drgania styków.

    Dodano po 17 [minuty]:

    po dodaniu kondensatora jako prosty układ gasikowy widać poprawę, ale to nie wyeliminowało problemu. Jeśli chodzi o zjawisko podobne do drgań styków to po kilku takich jakby "drganiach" atmega sie blokuje i nie reaguje na przycisk.

    Dodano po 5 [minuty]:

    przez chwile działało idealnie, po czym nagle silnik sam zmienił kierunek obrotów po czym kondensatorek spłonął. Ceramiczny o nadruku 104, jest zły?
  • #6 7076077
    wojtekkk09
    Poziom 15  
    Może pokaż schemat jak to podłączyłeś, bo ciężko coś przewidywać.

    Pozdrawiam
    Wojt
  • #7 7076297
    Mariojas
    Poziom 17  
    Schemat:
    Resetowanie się atmega8, przy załączaniu przekaźnika
    ups. nie dorysowałem zasilania przekaźników K1 i K2, jest to +12V (1). No i z pośpiechu trafo dla +12V ;)

    I od razu program:
    
    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Portd.5 = Output
    'Config Portd.6 = Output AIN0
    'Config Portd.7 = Output AIN1
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.2 = Input
    Config Portd.2 = Input
    Config Portd.3 = Input
    Config Portd.4 = Input
    
    Dim Akcja As Byte
    
    Akcja = 0                                                   '0 - stoi; 1 - stoi po otwieraniu; 2 - stoi po zamykaniu; 3 - zamyka się; 4 - otwiera się
    
    Declare Sub Przycisk1
    Declare Sub Przycisk
    Declare Sub Zamykanie
    Declare Sub Otwieranie
    Declare Sub Zatrzymaj
    Declare Sub Zatrzymaj_po_otwieraniu
    Declare Sub Zatrzymaj_po_zamykaniu
    Declare Sub Zabezpieczenie
    Przekaznik_zamykanie Alias Portd.5
    Przekaznik_otwieranie Alias Portb.0
    Zasilanie Alias Portb.1
    Krancowka_zamkniete Alias Pind.2
    Krancowka_otwarte Alias Pind.3
    Przycisk Alias Pinb.2                                       'sterowanie jednym przyciskiem - fizycznie mam juz w ten sposób zbudowane sterowanie do bramy, ale na przerzutnikach - czas na zmiane :)
    Brama_optyczna Alias Pind.4
    
    Reset Przekaznik_zamykanie
    Reset Przekaznik_otwieranie
    Reset Zasilanie
    Set Portd.2
    Set Portd.3
    Set Portb.2
    
    Poczatek:
    Do
    
    Debounce Przycisk , 0 , Subprzycisk
    Debounce Brama_optyczna , 1 , Subbrama_optyczna
    Debounce Krancowka_zamkniete , 0 , Subkrancowka_zamkniete
    Debounce Krancowka_otwarte , 0 , Subkrancowka_otwarte
    If Acsr.5 = 1 Then Goto Subzabezpieczenie
    
    Loop
    
    End
    
    Subkrancowka_otwarte:
    If Akcja <> 0 Then Call Zatrzymaj
    Goto Poczatek
    
    Subkrancowka_zamkniete:
    If Akcja <> 0 Then Call Zatrzymaj
    Goto Poczatek
    
    Subbrama_optyczna:
    If Akcja = 3 Then Call Zatrzymaj_po_zamykaniu
    Goto Poczatek
    
    Subzabezpieczenie:
    If Akcja = 3 Then Call Zabezpieczenie
    If Akcja = 4 Then Call Zatrzymaj_po_otwieraniu
    Goto Poczatek
    
    Subprzycisk:
    If Przycisk = 0 Then
       Do
       Loop Until Przycisk = 1
       Call Przycisk1()
    End If
    
    Sub Przycisk1
    If Akcja = 0 Then If Krancowka_otwarte = 0 Then Call Zamykanie
    If Akcja = 0 Then If Krancowka_zamkniete = 0 Then Call Otwieranie
    If Akcja = 3 Then Call Zatrzymaj_po_zamykaniu
    If Akcja = 4 Then Call Zatrzymaj_po_otwieraniu
    If Akcja = 1 Then Call Zamykanie
    If Akcja = 2 Then Call Otwieranie
    If Akcja = 0 Then If Krancowka_otwarte <> 0 Then If Krancowka_zamkniete <> 0 Then Call Otwieranie
    Goto Poczatek
    End Sub
    
    Sub Zamykanie
    Akcja = 3
    Set Przekaznik_zamykanie
    Set Zasilanie
    Wait 1                                                      'program czeka aż silnik ruszy (przy ruszaniu działa przez chwile zabezpieczenie) i odpadnie krancowka. Gdyby nie to to brama by od razu sie zatrzymala
    Goto Poczatek
    End Sub
    
    Sub Zabezpieczenie
    Akcja = 2                                                   'ustawia akcja = 2 aby po subprogramie brama zareagowała tak jakby była zatrzymana przyciskiem podczas pracy
    Reset Przekaznik_zamykanie                                  'zatrzymuje silnik
    Waitms 50                                                   'czeka aż brama sie ustabilizuje (bezwladnosc bramy ;) )
    Set Przekaznik_otwieranie                                   'cofa lekko bramę...
    Wait 2                                                      '...przez 2s ;)
    Call Zatrzymaj_po_otwieraniu                                ' i zatrzymuje bramę
    Goto Poczatek                                               'wraca do loop
    End Sub
    
    Sub Otwieranie
    Akcja = 4
    Set Przekaznik_otwieranie
    Set Zasilanie
    Wait 1                                                      'program czeka aż silnik ruszy (przy ruszaniu działa przez chwile zabezpieczenie) i odpadnie krancowka. Gdyby nie to to brama by od razu sie zatrzymala
    Goto Poczatek
    End Sub
    
    Sub Zatrzymaj_po_zamykaniu                                  'dwa podprogramy poniżej w działaniu przypominają zatrzymaj, po za zmianą akcji na inne, dzięki temu po zatrzymaniu w połowie drogi bramy, sterownik wie w którą stronę ruszyć bramę
    Akcja = 2
    Reset Przekaznik_zamykanie
    Reset Zasilanie
    Goto Poczatek
    End Sub
    
    Sub Zatrzymaj_po_otwieraniu
    Akcja = 1
    Reset Przekaznik_otwieranie
    Reset Zasilanie
    Goto Poczatek
    End Sub
    
    Sub Zatrzymaj
    Waitms 20
    Reset Przekaznik_otwieranie
    Reset Przekaznik_zamykanie
    Reset Zasilanie
    Akcja = 0
    Goto Poczatek
    End Sub
    Pind.3:
    


    Dodano po 17 [minuty]:

    i z tego co zauważyłem to gdy ACSR.5 = 1 (wtedy kiedy na pin PD6 trafi napięcie większe od napięcia na pinie PD7) to silnik się wyłacza, zamiast przejść w podprogram Zabezpieczenie (cofnięcie troche bramy).
  • Pomocny post
    #8 7076708
    Konto nie istnieje
    Poziom 1  
  • #9 7076727
    Mariojas
    Poziom 17  
    atom1477 napisał:
    A LED1 i LED2 to czasem nie powinny mieć rezystorów ograniczających prąd?
    Jak masz poprowadzone masy? Mówisz że to osobne obwody, ale to nieprawda bo masę masz wspólną.

    Wyczytałem w notce Atmegi że można "olać" rezystory więc do testów je tak mam.

    No tak, masa wspólna, inaczej układ by nie działał.
  • #10 7076754
    AvrArm
    Poziom 15  
    Kilka uwag:
    - w Twoim przypadku wszystkie przyciski powinny być zabezpieczone przed drganiami styków układem RC. Samo Debounce to tylko na biurku będzie dobrze działać ;) natomiast tutaj tzn.w ciężkich warunkach nie żałuj 6 elementów więcej (kondensator+rezystor na przycisk).
    - szeregowo z diodami LED przydały by się rezystorki
    - przydały by się rezystor pomiędzy bazą a masą tranzystora sterowanego z portu PB1
    - na wejściu i wyjściu stabilizatora oprócz tych elektrolitów kondensatory 100n

    To tak na szybko , programu nie analizowałem...
  • #11 7076767
    Konto nie istnieje
    Poziom 1  
  • #13 7076792
    kordirko
    Poziom 22  
    Wydaje mi się że winowajcą jest wejście PD6 podłączone wprost do styków silnika.
    Silnik = element indukcyjny, tam jest pewno cała masa różnych impulsów i szpilek, na plus i na minus.
    Do czego służy te wejście PD6 ?
  • #14 7076806
    Mariojas
    Poziom 17  
    kordirko napisał:
    Wydaje mi się że winowajcą jest wejście PD6 podłączone wprost do styków silnika.
    Silnik = element indukcyjny, tam jest pewno cała masa różnych impulsów i szpilek, na plus i na minus.
    Do czego służy te wejście PD6 ?

    Jest skonfigurowane jako wejście nieodwracające komparatora analogowego.
  • Pomocny post
    #15 7076811
    Konto nie istnieje
    Poziom 1  
  • #16 7076826
    Mariojas
    Poziom 17  
    atom1477 napisał:
    Do pomiaru prądu silnika. Ale chyba za dużych szpilek to tam nie ma.
    Przy 10A będzie dopiero 1V. Problemy mogły by być powyżej 5V (50A), ale nie sadzę żeby aż taki prąd popłynął.
    Przy włączaniu by mógł, ale indukcyjność silnika w tym przypadku akurat pomaga bo uniemożliwia powstanie udaru prądu.

    Większy prąd niż 10A raczej nie popłynie, bo jest bezpiecznik 10A przy silniku. Miałem już raz zablokowany wirnik przez kilka sekund i bezpiecznika nie uszkodziło.

    Dodano po 57 [sekundy]:

    atom1477 napisał:
    Do pomiaru prądu silnika. Ale chyba za dużych szpilek to tam nie ma.
    Przy 10A będzie dopiero 1V. Problemy mogły by być powyżej 5V (50A), ale nie sadzę żeby aż taki prąd popłynął.
    Przy włączaniu by mógł, ale indukcyjność silnika w tym przypadku akurat pomaga bo uniemożliwia powstanie udaru prądu.

    Dodano po 1 [minuty]:

    "The pin driver is strong enough to drive LED displays directly." oznacza że piny są dość silnie żeby wysterować nimi diodę (bez wzmacniacza). Nie chodzi o brak rezystora ograniczającego.
    Niezbyt dokładnie to wyjaśnili, ale na pewno o to im chodziło.

    OK, poprawie to :)
  • #17 7076850
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Układ wysoce genialny [;

    Brak rezystorów szeregowych dla diod - genialne

    Podłączenie tylko jednego pinu zasilania ATmegi - genialne

    Użycie AŻ jednego kondensatora filtrującego zasilanie - genialne

    Filtracja dla 7805 przy użyciu jedynie dwóch kondensatorów - genialne

    ogólnie - genialne. Myślę, że nikogo nie powinno dziwić, że ten układ nie działa - on nie ma prawa działać <:

    4\/3!!
  • #18 7076866
    Konto nie istnieje
    Poziom 1  
  • #19 7076869
    AvrArm
    Poziom 15  
    Cytat:
    Rezystory od bazy do masy w zasadzie są zbędne. Pin AVR dobrze zwiera do masy.

    Też miałem taki pogląd dopóki na oscyloskopie nie zobaczyłem ładnych szpil podczas włączania atmegi. Fakt, tylko podczas włączania ale zawsze...
  • #20 7076873
    Mariojas
    Poziom 17  
    Wszystko przyjąłem "na klatę" ale z 12V na wejście komparatora to ja przepraszam, ale nie ma Pan racji, chyba, że ja jakiś dziwny jestem ;)

    Dodano po 4 [minuty]:

    atom1477 napisał:

    Gdzie połączyłeś masę zasilania procesora i masę zasilania silnika?

    hmmm jak by to wytłumaczyć... to tak jakby dwa oddzielne układy, których masy połączyłem jednym kabelkiem. A masy te połączone są mechanicznie prawie w tym samym miejscu (odległość <1cm).

    A co do mojej genialności - jestem elektrykiem, a nie elektronikiem. W technikum elektrycznym nie uczą o tak dokładnych filtracjach.
  • Pomocny post
    #21 7076897
    Konto nie istnieje
    Poziom 1  
  • #22 7076919
    Mariojas
    Poziom 17  
    "Podłączenie tylko jednego pinu zasilania ATmegi - genialne "
    Czyli nóżki AREF i AVCC też pod Vcc?

    Dodano po 1 [minuty]:

    atom1477 napisał:

    Nie rozumiem. A jak niby punkt podłączania miał by być w nie tym samym miejscu?
    Podłączenie powinno być raczej krótkie. Rezystor pomiaru prądu blisko „minusa” kondensatora elektrolitycznego filtrującego zasilanie. Masa z tego „minusa” do masy procesora (do masy kondensatora za stabilizatorem 75L05 znaczy się), a napięcie z rezystora 0,1R też od razy z rezystora, a nie gdzież dalej z kabla.

    Jest krótkie, jak najkrótsze. Przed rezystorem od razu do PD6 i za rezystorem od razu do masy przy uC, bez udziwnień.
  • #23 7076942
    Freddie Chopin
    Specjalista - Mikrokontrolery
    W dokumentacji jest napisane co z nimi zrobić, wystarczy przeczytać.

    Co do "poprawienia się z kondensatorami", to ja nic takiego nie wyczytałem, poza informacją, że dodał gdzieś JEDEN 100n, a ja dodałbym ze 3 (conajmniej).

    4\/3!!
  • Pomocny post
    #25 7076972
    Konto nie istnieje
    Poziom 1  
  • #26 7076993
    Mariojas
    Poziom 17  
    To gdzie jeszcze mam dodać kondensatory oprócz dwóch ceramicznych przed i po stabilizatorem?

    OK, AVcc bedzie podłączone.
  • Pomocny post
    #27 7077008
    Konto nie istnieje
    Poziom 1  
  • #28 7077020
    Mariojas
    Poziom 17  
    a po co mam coś ustawiać coś nt. AVCC skoro nie korzystam z A/C? O właśnie...
    Nikt nie zauważył że w programie nie podałem zasilania na komparator. Nie wiem dlaczego to przeoczyłem.

    OK, bedzie RESET przez 10k bo taki akurat mam.

    Ale lutować bede jutro wieczorem, z uwagi na późną porę ;)

    Dodano po 1 [minuty]:

    Przy procesorze jest, widać na schemacie, specjalnie tak narysowałem :)
    OK, kondensatory będą. Obudowa silnika jest podłączona pod jeden z przewodów.
  • #29 7077043
    Konto nie istnieje
    Poziom 1  
  • #30 7077089
    Freddie Chopin
    Specjalista - Mikrokontrolery
    chrobek napisał:
    Przy procesorze jest, widać na schemacie, specjalnie tak narysowałem :)

    Narysowałeś jeden, a ma ich być kilka - tuż przed KAŻDYM pinem zasilania i od AREF do masy.

    4\/3!!
REKLAMA