Czy nowe warianty „PB” ATmega mają błąd w wykrywaczu braku prądu?

9

Od wielu lat z powodzeniem stosujemy mikrokontrolery ATmega48 / 88/168/328 w wielu naszych produktach. Zastanawialiśmy się teraz nad przejściem z wariantów A i PA na nowy wariant PB (ponieważ będziemy potrzebować dodatkowych pinów, timerów i UART w nowych produktach, ponieważ staje się on tańszy i ponieważ wydaje się, że stare warianty zostaną wycofane), więc wymieniliśmy ATmega328A z ATmega328PB. Wydaje się, że bardzo często szaleje po przerwach w zasilaniu . Takie problemy nigdy nie występowały w przypadku starych wariantów.

Regularne przerwy w zasilaniu są normalne w przypadku użytkowania naszych produktów. Używamy zasilacza impulsowego (takiego jak ten ) ustawionego na 5 V i kondensatory w zakresie 220µF na VCC ATmega, aby utrzymać SRAM przy życiu w przypadku przerw w zasilaniu w zakresie kilku minut, do przechowywania stanów wewnętrznych, które nie są misją krytyczne, ale znacznie zwiększające wrażenia użytkownika, ponieważ są natychmiast dostępne po ponownym uruchomieniu (stany te zmieniają się wystarczająco często, aby EEPROM nie był odpowiedni). To zawsze działało.

Jednak w przypadku nowej ATmega328PB, po przerwie w zasilaniu, układ resetuje się bez warunku resetowania w MCUSR, a zegar wydaje się szaleć.

  • wykrywacz braku prądu jest ustawiony dla każdego bezpiecznika. Próbowaliśmy wszystkich dostępnych poziomów, błąd występuje na wszystkich z nich.
  • używamy zewnętrznego 20 MHz, również ustawionego poprawnie na bezpiecznik.
  • wypróbowaliśmy 3 różne układy, więc nie była to ani jedna awaria lutowania, ani inny sprzęt.

Po wystąpieniu błędu zegar często ustawia się na 2,5x wolniejszą prędkość, co oznacza, że ​​mcu jest taktowany przez wewnętrzny oscylator 8 MHz. Czasami jednak spowolnienie wynosi około 6 razy. Oznacza to, że nie może to być błąd oprogramowania zmieniający dzielnik zegara, ponieważ nie mogę ustawić bezpieczników z oprogramowania, a dzielnik zegara nie może podzielić zegara przez 2,5 lub 6.

Więc moim pierwszym podejrzanym był nowy bezpiecznik wykrywania awarii zegara. Jednak bez względu na to, czy jest włączone, czy nie, zachowanie pozostaje takie samo.

Aby wykluczyć specyfikę oprogramowania, napisałem prosty program testowy, który nie robi nic innego, jak tylko przełącza wyjście z częstotliwością 100 Hz z przerwania timera i wskazuje za pomocą diod LED po każdym ponownym uruchomieniu, które warunki resetowania zostały aktywowane (odczytane z MCUSR). Reszta sprzętu również została usunięta, tylko mcu i regulator są tam (i diody wskaźnika z rezystorami szeregowymi).

Wyniki

Mniej więcej w 2/3 czasu nic ciekawego się nie dzieje. Po przerwie w zasilaniu, mcu wznawia pracę, świecą się zarówno wskaźniki resetowania wyłącznika zasilania, jak i resetowania po włączeniu zasilania.

(na zdjęciu czerwony to kołek przełączany, a niebieski to VCC. Na tym zdjęciu wyraźnie widać rozjaśnienie brony 2,7 ​​V. Wykonałem te same testy z innymi ustawieniami brązowania, wyniki są dokładnie takie same, więc pominę te zdjęcia)

uruchamia się ponownie w porządku

Mniej więcej w 1/3 przypadków występuje wspomniany błąd, a gdy zasilanie zostanie ponownie przywrócone, nie świecą żadne wskaźniki resetowania przy wyłączonym zasilaniu i resecie po włączeniu zasilania! Wyjście jest inne, jakby mcu tykało dziwnym zegarem. Nie jest jednak chaotyczny, wciąż tyka z tą samą częstotliwością.

uruchamia się ponownie w szalonym stanie

Co ciekawe, w tej sytuacji wykrywacz zanikania wydaje się być całkowicie nieaktywny, ponieważ po następnej przerwie w zasilaniu (gdzie czasem przywracany jest właściwy zegar, a czasem nie), wyraźnie widać, że wyjście nadal przełącza się dobrze po brązowym- nasz poziom został zaliczony. W takich sytuacjach zegar czasem przyspiesza, innym razem wolniej:

Brak brązowienia, zegar przyspiesza Brak brązowienia, zegar staje się wolniejszy

Podczas tych testów użyłem 16K CK / 14CK + 4,1 ms dla opóźnienia rozruchu (ale opóźnienie 65 ms nie omija problemów).

Oto powiększone zdjęcie, na którym wyraźnie widać, że VCC osiąga stan stabilny przy 5 V w czasie poniżej 2 ms:

udany start, powiększenie

Na powyższym obrazku mcu uruchomiło się poprawnie.

Co ciekawe, gdy tak nie jest, napięcie zasilające dochodzi nawet do stabilnego poziomu 5 V (wydaje się, że wiele części MCU nie włącza się, więc pobiera mniej prądu podczas uruchamiania)

Poniżej znajduje się obraz z nieudanego początku:

nieudany start, powiększenie

Należy pamiętać, że oprogramowanie zaczyna działać po upływie ponad 85 ms po ustabilizowaniu napięcia zasilania, zamiast 10,5 ms wymaganego w inny sposób. Bezpieczniki opóźnienia uruchomienia są nadal takie same, 16K CK / 14CK + 4,1 ms.

Warto również zauważyć, że po wyłączeniu zasilania VCC stabilizuje się na poziomie około 1,1 do 1,2 wolta (stary wariant ATmega328A spadł do około 0,6 - 0,7 V). Utrzymuje to przez kilka minut. Jeśli poczekam wystarczająco długo (rzędu pół godziny lub więcej), mcu zawsze zaczyna się poprawnie! Wygląda więc na to, że problem polega na tym, że wokół jest 1,1 wolta, co zgodnie z arkuszem danych nie gwarantuje, że wystarczy do resetu po włączeniu zasilania. Ale to powinno wystarczyć do resetu!

Z wyjątkiem tych sytuacji detektor zanikania działa dobrze. Jest widoczny na pierwszym obrazie (sygnał wyjściowy zatrzymuje się po osiągnięciu poziomu podstawowego, a spadek napięcia zwalnia, gdy części mcu zostają wyłączone). Zrobiłem testy, kiedy obniżyłem VCC do nieco poniżej poziomu podstawowego i pozwoliłem mu wrócić z powrotem, mcu zawsze restartowało się poprawnie w takich warunkach, z zapalonym tylko wskaźnikiem zerowania.

Czy przegapiłem coś oczywistego, czy też ATmega328PB ma poważny błąd w wykrywaczu braku zasilania?

EDYTOWAĆ:

Co ciekawe, powyższe problemy powstają tylko wtedy, gdy przerywam dostawę przed regulatorem. Jeśli przerwie to po regulatorze (lub użyję zasilacza laboratoryjnego), problemy nigdy się nie zdarzają. Jakby kształt rosnącego napięcia powodował problemy. Jednak, jak widać na ostatnim zdjęciu, wzrost napięcia jest całkiem niezły i szybko się stabilizuje.

EDYCJA 2

Wypróbowałem to z 16 MHz zamiast 20 MHz, ale zdarzają się dokładnie te same problemy.

vsz
źródło
Czy skontaktowałeś się z Atmelem lub przejrzałeś ich błędy? W dzisiejszych czasach błędy w projektowaniu układów scalonych są dość powszechne.
Edgar Brown,
Przejrzałem erraty (nie znalazłem niczego w tym kierunku) i rozważamy skontaktowanie się z Atmelem, ale nie przed zrobieniem kolejnych testów i rozejrzeniem się.
vsz
3
Z mojego doświadczenia wynika, że ​​nie tracę czasu na skontaktowanie się z producentem lub korzystanie z jego forów. Zrobiłeś więcej niż wystarczająco debugowania, aby przedstawić bardzo mocny przypadek. Mając znacznie mniej, TI przesłało mi swoją wewnętrzną (niepublikowaną) erratę dla jednego z ich układów scalonych, który dokumentował nasz problem.
Edgar Brown,
Moje dwa centy warte: widziałem problemy z innymi procesorami, jeśli moc rośnie zbyt szybko. Niektórzy producenci określają maksymalny czas narastania, ale częściej nie jest to wspomniane.
Oldfart

Odpowiedzi:

3

Nie sądzę, że jest to błąd w wykrywaczu braku prądu, ale jak używasz układu.

Jak sam powiedziałeś, próg zerowania po włączeniu nie zostanie osiągnięty, jeśli zasilanie zostanie na krótko odłączone i podłączone, więc nie będzie POR.

Detektor zanikania również tu niewiele pomoże. Używasz AVR przy 20 MHz, a to wymaga napięcia zasilania wynoszącego 4,5 V lub więcej lub naruszasz specyfikację. I BZT nie gwarantuje, że wyłączy się przy 4,5 V, zwykle jest to mniej niż, powiedzmy 4,3 V. Więc nawet zanim BOD się uruchomi, nie ma gwarancji, w jakim stanie AVR się kończy, ale BZT powinien się uruchomić, z wyjątkiem tego, że może nie działa z powodu zegara 20 MHz. Gdy napięcie zacznie ponownie rosnąć, BZT dezaktywuje się, zanim napięcie zasilania ponownie osiągnie bezpieczny poziom 4,5 V. Jeśli został poprawnie uruchomiony. Czas opóźnienia rozruchu należy następnie ustawić na wystarczająco wysoką wartość, aby napięcie mogło wzrosnąć z poziomu dezaktywacji BZT do 4,5 V przed zwolnieniem resetu wewnętrznego.

Ale wszystko może się nie powieść, ponieważ potrzebuje co najmniej 4,5 V do pracy z częstotliwością 20 MHz. Arkusz danych AVR wspomina, że ​​jeśli wewnętrzny system resetowania jest nieodpowiedni, należy użyć zewnętrznego układu resetującego, iw tym przypadku wygląda na to, że rozwiązałoby to problemy z resetowaniem AVR, zanim napięcie spadnie do 4,5 V.

Tylko ja
źródło
Zakładam, że BZT nie używa samego procesora, ale jest to dedykowany sprzęt. Może zmienili to dla wariantu PB? Byłbym zaskoczony, gdyby nie obsługiwały BZT dla 20 MHz. Najwyższy poziom podstawowy to 4,3 V, więc 20 MHz wymagałoby zewnętrznego BZT? Mimo to mam wątpliwości, że sama przyczyna. Zrobiłem test z poziomem 20 MHz, 2,7 V, ustawiłem VCC na 3 V, działało dobrze. Kiedy ręcznie obniżyłem napięcie do nieco poniżej 2,7, wyjście zatrzymało się, gdy zwiększyłem je powyżej 2,7, wyjście wznowione, zawsze nigdy nie zawiodło, ani razu. Tylko uruchomienie od 1.1 V wydaje się wyłączać BZT.
vsz
Najprawdopodobniej jest to dedykowany sprzęt, ale czy podczas podnapięcia przed uruchomieniem BZT możesz mieć pewność, że poprawne dane są pobierane z pamięci flash w celu wykonania procesora i czy procesor wykonuje je poprawnie? Może lub po prostu zapisywać losowe dane w zarezerwowanych rejestrach wykonujących nieokreślone czynności. Specyfikacje uległy zmianie dla wariantu PB i nie obsługiwały BZT dla 20 MHz na starszym układzie. Wariant PB ma rzeczywiście różne krzywe BZT i POR, a później włącza się przy niższych napięciach.
Justme,
Proszę spojrzeć na moje drugie zdjęcie. BZT najwyraźniej był poprawnie włączony i zresetował układ. Nie można zainicjować tylko przy następnym uruchomieniu. Poza tym napędzałem ten układ 3 V i działał poprawnie, nigdy nie zawiódł ani razu.
vsz
Cóż, moim zdaniem chip nie musi działać poza bezpiecznym obszarem operacyjnym, ale kontynuujmy. BZT nie resetuje wykrywacza awarii zegara, więc tylko resetowanie po włączeniu zasilania i resetowanie zewnętrzne wyłączą się z zegara wewnętrznego. Sprawdź dokładnie ustawienia bezpiecznika CFD. Czy używasz zewnętrznego kryształu lub zewnętrznego zegara? Bezpiecznik CFD mógł wcześniej być bezpiecznikiem Full Swing. A ponieważ nie ma bezpiecznika pełnego obrotu, maksymalna częstotliwość dla kryształu wynosi 16 MHz, a 20 MHz wymaga zewnętrznego sygnału zegarowego poziomu logicznego. Może to być również problem z uruchomieniem kryształu, więc umieść także lunetę na kryształowych szpilkach.
Justme,
Używam kryształu. Dobry pomysł, przyjrzę się temu. Pamiętaj, że to samo zachowanie, które przedstawiłem na zdjęciach, wystąpiło bez względu na to, czy CFD było włączone czy wyłączone.
vsz