Skocz do zawartości

Atmega 32 Resetuje się gdy obciążę silniki lub serwo.


zuba1

Pomocna odpowiedź

Witam. Jesli źle trafiłem to proszę o przeniesienie. Mam problem z ATmegą 32. W momencie gdy pracuje tylko ona i czujniki to wszystko pracuje prawidłowo(serwo i silniki wyłączone). Gdy włączę serwo i zacznie ono cyklicznie pracować (lewo prawo) ATmega też pracuje prawidłowo. Lecz gdy zacznę nim pracować z dużą częstotliwością (takie trocha szybkie machanie)-resetuje się w niestandardowy sposób że wszystko chodzi dużo wolniej + zostawia włączone porty które były włączone w momencie przerwania programu. To samo się dzieje w momencie włączenia silników. gdy pracują na pełnych obrotach to pracuje prawidłowo lecz gdy lekko je zablokuje lub spowoduję żeby szybko zmieniały swój kierunek jazdy (wystarczy nawet PWM) to resetuje się w taki sam sposób. A żeby stwierdzić czy program pracuje prawidłowo dodałem taki oto skrypt:


For I = 1 To 10

If Sw1 = 0 And Stan = 0 Then
Waitms 30
Flaga = 1
Goto Loka
End If

If Sw2 = 0 And Stan = 0 Then
Waitms 30
Flaga = 1
Goto Rc
End If


Led4 = 0
Led1 = 1
Waitms 30
Led1 = 0
Led2 = 1
Waitms 30
Led2 = 0
Led3 = 1
Waitms 30
Led3 = 0
Led4 = 1
Waitms 30
Led4 = 1
Next I
Start Timer2

Program ma na celu po prostu miganie diodami i w tym czasie za pomocą przycisków można wejść w jeden z dwóch dodatkowych trybów. Jest on umieszczony przed pętlą główną po koniuracjach timerów,zmiennych i wszelkiego innego cholerstwa.

gdy się resetuje to między przełączeniem się stanu diod miga co ok 1s 🙁

Dodaję schemat i płytkę. Laminat jest pomalowany całkowicie z dwóch stron zielonym markerem olejnym dla urody. Silniki z przekładni a to Tamiya 70168 a serwo to mg995

Link do komentarza
Share on other sites

1. Miałem całkiem niedawno podobny problem. Rozwiązaniem okazało się dolutowanie elektrolita na zasilaniu.

2. Czemu zostawiłeś piny AREF i AGND niepodłączone - mogą one być źródłem zakłóceń. Pin AGND powinien być podłączony do masy, a AREF przez kondensator ceramiczny też do masy.

3. Czy mostki, których używasz mają na pewno oznaczenie "L293D"? Brak litery D oznacza brak diod zabezpieczających, czyli generowanie dużych zakłóceń.

  • Lubię! 1
Link do komentarza
Share on other sites

Kolega całkiem dobrze opisał sytuację.

Elektrolity polecam 47uF/16V na wejściu i wyjściu stabilizatora oraz 47uF/16V low-esd przy wejściu napięcia zasilającego silniki do L293D oraz przy wyjściu zasilania na serwo.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Niestety Po zainstalowaniu 2 kondensatorów 47uf przed i za stabilizatorem oraz 2 kondensatorów 4,7uf tak samo oraz 470uf za stabilizatorem koło serwa i masę kondensatorów 100nf i 1uf ceramicznych. Co dalej?? Co może być przyczyną ?? Jaki kondensator dać do AREF??

Link do komentarza
Share on other sites

Ok 2A i powinno wystarczyć ale nie w tym rzecz. Robot się resetuje przy pracy silnika.

[ Dodano: 15-04-2014, 08:59 ]

A co.z PWM jaki powinien być ustawiony prescaler w TIMER1ja mam na 1 ale zauważyłem że, gdy ustawie na 64, robot chodzi sprawniej i resetuje się nieco później.

Link do komentarza
Share on other sites

2A to może być mało przy takim zestawie. Sam mówisz, że reset następuje podczas pracy silnika. Możliwe, ze w pewnym momencie serwo pobiera spory prąd, przez krótki czas. Wtedy spada napęcie źródła zasilania, stabilizator nie daje rady i procesor sie resetuje.

Link do komentarza
Share on other sites

Z tym że, to się dzieje bez podpiętego serwa. Robot jest zasilany z gniazda do blancerowania ogniwa (tak jak widać na schemacie) mam podejrzenie że ma zamałą wydajność. Co wy na to?

Link do komentarza
Share on other sites

nanab, bez przesady, kable od ballancera nie są na tyle cienkie żeby przy nawet 5A był na nich na tyle duży spadek napięcia, aby miało to wpływ na resetowanie mikrokontrolera.

Ja obstawiam kiepskiej jakości akumulatorek, który ma za małą pojemność co się przekłada na wydajność prądową. Umieszczenie ścieżek prądowych od zasilania mostków tak blisko mikrokontrolera też nie ma na niego zbyt dobrego wpływu. A serwo przy nagłych zmianach kierunku ruchu potrafi pociągnąć sporo prądu, nawet bez obciążenia i szpilki z silnika serwa pewnie przechodzą na zasilanie mikrokontrolera i go resetują.

  • Lubię! 1
Link do komentarza
Share on other sites

Ok miej więcej czaję dodałem dwa kable pod płytką w zasilaniu i się poprawiło ale przy szybkiej zmianie ruchem opon dzieje się dalej to samo. Pomogło też zmienienie Prescalera w pwm na 256. Przełożę też zasilanie proca na inne źródło i zobaczę co będzie.

[ Dodano: 16-04-2014, 11:54 ]

Dziwna sytuacja. Ładuję akumulator i podłączam go do robota a on normalnie się włącza lecz gdy próbuje ruszyć silnikami to następuje reset. co najciekawsze przed naładowaniem pracował normalnie na tym programie i uznałem że wszystko jest cacy (choć w małym procencie). Okazuje się że winne są najpewniej przewodu lub akumulator ponieważ wcześniej pracowało spoko a gdy naładowałem aku i zwiększyłem tym jednocześnie moc akumulatora silniki tworzą taki skok napięcia (niepożądana szpilka) że resetuje zasilanie. Załatwiłem od znajomego stary niemiecki oscyloskop ED II o maksymalnej częstotliwości pracy 1Mhz. Może nim spróbuję wychwycić co się dzieje. Dziś wrzucę nagrania z pomiarów może coś wywnioskujemy (jeśli sam nie wpadnę na pomysł).

[ Dodano: 16-04-2014, 20:26 ]

Jeszcze dziwniejsza sytuacja. Siadam sobie przed robotem z lutownica i instaluje nowy akumulator. Po za instalowaniu włączam i robot się resetuje w tym samym momencie czyli po odliczeniu 5s. Myślę "sprawdzę czy ja jednym silniku też tak robi" wyciągam lewy l293d i powtarzam czynność -Reset "ok ciekawe czy bez drugiego mostka tak zareaguje" Więc wyciągam drugi-robot pozostaje bez mostków. Startuję -Reset (tradycyjnie po odliczeniu 5s) myślę "serwo??" Odpinam włączam w tym momencie pracują tylko 2 dalmierze i procesor + 4 niebieskie diody wciskam start robot liczy 5s po czym nie uwierzycie bo ja też nie wieże robot się resetuje.

Ktoś ma pomysł bo mi czacha dymi.

[ Dodano: 16-04-2014, 20:29 ]

'FRodo v2.0 by Bartłomiej Zuba 2014r(c)
'brak walki
'brak rc
$regfile = "m32def.dat"
$crystal = 8000000

'***************************************************************************************
'czujniki
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Input

Cz1 Alias Pinb.0
Cz2 Alias Pinb.1
Cz3 Alias Pinb.2

'silniki
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output

Prawoprzud Alias Portc.0
Prawotyl Alias Portc.1
Lewoprzud Alias Portc.2
Lewotyl Alias Portc.3

Portc = 0


Config Portd.4 = Output
Config Portd.5 = Output

'sw
Config Pina.4 = Input
Config Pina.5 = Input

Sw1 Alias Pina.4
Sw2 Alias Pina.5

'ledy
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.3 = Output

Led1 Alias Porta.0
Led2 Alias Porta.1
Led3 Alias Porta.2
Led4 Alias Porta.3

'moduł startowy
Config Pinc.6 = Input
Set Pinc.6
Modul_startowy Alias Pinc.6

Config Pinc.4 = Input
Set Pinc.4
Klapa Alias Pinc.4

'***************************************************************************************

'Pwm
Config Timer1 = Pwm , Pwm = 8 , Prescale = 256 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
Pwm1a = 0
Pwm1b = 0
Start Timer1
'***************************************************************************************

'ADC
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc

'*****************************************************************************************


'serwo
Config Servos = 1 , Servo1 = Portc.7 , Reload = 5

Config Portc.7 = Output

Servo(1) = 170

'*****************************************************************************************

'timer
Config Timer2 = Timer , Prescale = 8
Enable Interrupts                                           'Zgoda na wszystkie odblokowania.
Enable Timer2                                               'Odblokuj Timer2.
On Timer2 Czas1
Stop Timer2

'***************************************************************************************
'zmienne
Dim I As Byte
Dim Z As Byte
Dim V As Byte
Dim Licznik As Word
Dim Czas As Word
Dim Czass As Word                                           'sekundy
Dim Flaga As Bit
Dim Flaga2 As Bit
Dim Bab As Bit
Dim Nac1 As Bit
Dim Kierunek As Byte
Dim B As Byte
Dim A As Byte
Dim Stan As Byte
Dim Mapa(256) As Byte
Dim Msa As Bit
Dim Bll As Byte
'***************************************************************************************
'log
Flaga = 1
Flaga2 = 1
Msa = 1
Bll = 0
For I = 1 To 10

If Sw1 = 0 Then
Msa = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Waitms 1000
Gosub Main
End If

If Sw2 = 0 Then
Waitms 10
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Waitms 1000
Flaga = 1
Start Timer2
Gosub Rc
End If


Led4 = 0
Led1 = 1
Waitms 30
Led1 = 0
Led2 = 1
Waitms 30
Led2 = 0
Led3 = 1
Waitms 30
Led3 = 0
Led4 = 1
Waitms 30
Led4 = 1
Next I
'***************************************************************************************
'main

Main:
Start Timer2
Servo(1) = 170
Pwm1a = 0
Pwm1b = 0
Waitms 3
Flaga = 1
Flaga2 = 1
Do

Gosub Test

'dla pracy bez modułu
If Sw1 = 0 And Msa = 0 Then
Kierunek = 2
Flaga = 0
Czas = 0
Licznik = 0
Do
If Czas = 5 Then Gosub Walka
Loop
End If


If Sw2 = 0 And Msa = 0 Then
Kierunek = 0
Flaga = 0
Czas = 0
Licznik = 0
Do
If Czas = 5 Then Gosub Walka
Loop
End If

'z modułem
If Modul_startowy = 1 And Msa = 1 Then
Flaga = 0
Czas = 0
Licznik = 0
Gosub Walka
End If

If Sw1 = 0 And Msa = 1 Then Kierunek = 2
If Sw2 = 0 And Msa = 1 Then Kierunek = 0

Loop

'***************************************************************************************

'tryb walki
Walka:
Flaga = 0
Flaga2 = 0
Servo(1) = 60
Nac1 = 0
Do
Gosub Test
'atak
If Cz1 = 0 And Cz2 = 0 And Nac1 = 0 Then
Pwm1a = 255
Pwm1b = 255
Gosub Go
End If
'w czasie namierzania w lewo
If Cz1 = 1 And Cz2 = 0 And Nac1 = 0 Then
Pwm1a = 255
Pwm1b = 200
Gosub Lewo
Kierunek = 0
End If
'w czasie namierzania w prawo
If Cz1 = 0 And Cz2 = 1 And Nac1 = 0 Then
Pwm1a = 200
Pwm1b = 255
Gosub Prawo
Kierunek = 2
End If
'dla szukania w prawo
If Cz1 = 1 And Cz2 = 1 And Kierunek = 2 And Nac1 = 0 Then
Pwm1a = 50
Pwm1b = 50
Gosub Prawos
End If
'dla szukania w lewo
If Cz1 = 1 And Cz2 = 1 And Kierunek = 0 And Nac1 = 0 Then
Pwm1a = 50
Pwm1b = 50
Gosub Lewos
End If
'dla szukania po zgubieniu
If Cz1 = 1 And Cz2 = 1 And Kierunek = 1 And Nac1 = 0 Then
Pwm1a = 50
Pwm1b = 50
Gosub Lewos
End If

If Nac1 = 1 Then
Pwm1a = 50
Pwm1b = 50
Gosub Go
Licznik = 2000
Do

  If Bll = 1 Then Gosub Tyl

  If Licznik = 1600 Then Gosub Bb
Loop
Bb:
Nac1 = 0
End If


Gosub Test
Loop

'***************************************************************************************

'tryb testu czujników
Test:
If Cz1 = 1 Then Led1 = 0
If Cz1 = 0 Then Led1 = 1

If Cz2 = 1 Then Led2 = 0
If Cz2 = 0 Then Led2 = 1

If Cz3 = 1 Then Led3 = 0
If Cz3 = 0 Then Led3 = 1

Return

'***************************************************************************************

'zdalne sterowanie
Rc:
Flaga = 0
Flaga2 = 1
Do
Gosub Test
Loop

'***************************************************************************************
'lokalizacja
Loka:
Flaga = 0
Flaga2 = 0
Do
Gosub Test

Pwm1a = 50
Pwm1b = 50


If Cz1 = 1 And Cz2 = 0 Then Gosub Lewo

If Cz1 = 0 And Cz2 = 1 Then Gosub Prawo

If Cz1 = 0 And Cz2 = 0 Then Gosub Lewo

If Cz1 = 1 And Cz2 = 1 Then Gosub Go


Loop

'***************************************************************************************

'timer
Czas1:
Load Timer = 250

If Licznik = 4000 Then
Incr Czas
Licznik = 0
If Flaga2 = 0 Then Incr Bll
If Flaga2 = 1 Then Bab = 1
Incr B
End If

Incr Licznik
Incr Czass
'miganie diodą
If B = 4 Then B = 0

If Flaga = 1 And Czass = 500 Then Czass = 0

If Flaga = 0 And Czass = 1500 Then Czass = 0

If Czass = 0 Then Toggle Led4

'sterowanie podnośnikiem
If Klapa = 0 And Bab = 0 Then
Servo(1) = 150
Licznik = 0
Bll = 0
Bab = 1
Nac1 = 1
End If

If Bll = 1 Then Servo(1) = 60

If Bll = 5 Then Bab = 0

If Flaga2 = 0 Then Enable Timer0
If Flaga2 = 1 Then Disable Timer0

Return


'***************************************************************************************

'biblioteki obsługi silników

  Stopp:
  Lewoprzud = 0
  Lewotyl = 0
  Prawoprzud = 0
  Prawotyl = 0
  Return

  Go:
  Lewoprzud = 1
  Lewotyl = 0
  Prawoprzud = 1
  Prawotyl = 0
  Return

  Tyl:
  Lewoprzud = 0
  Lewotyl = 1
  Prawoprzud = 0
  Prawotyl = 1
  Return

  Lewo:
  Lewoprzud = 1
  Lewotyl = 0
  Prawoprzud = 0
  Prawotyl = 1
  Return

  Prawo:
  Lewoprzud = 0
  Lewotyl = 1
  Prawoprzud = 1
  Prawotyl = 0
  Return

  Lewos:
  Lewoprzud = 1
  Lewotyl = 0
  Prawoprzud = 0
  Prawotyl = 0
  Return

  Prawos:
  Lewoprzud = 0
  Lewotyl = 0
  Prawoprzud = 1
  Prawotyl = 0
  Return


'***************************************************************************************
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.