Pytanie:
Czy z powodu przetężenia nie powinienem być bardzo ostrożny podczas ustawiania styku I / O jako Wyjście?
Julian Zatloukal
2020-01-03 05:38:51 UTC
view on stackexchange narkive permalink

Pytanie można odnieść do dowolnego mikrokontrolera z funkcjami I / O, ale obecnie pracuję z popularnym ATmega328p. Rozważ następujący obwód: Prosty przełącznik SPST normalnie otwarty z rezystorem podwyższającym 10k i dołączonym kondensatorem ceramicznym, podłączony do dowolnego portu we / wy. Konkretny pin powinien być oczywiście skonfigurowany jako INPUT w odpowiednim DDRx. Arkusz danych zawiera opis, w sekcji Charakterystyka DC, styk wejścia / wyjścia prądu upływu \ $ (I_ {IL} / I_ {IH}) \ $ o wartości 1µA, daleko na horyzoncie prąd stały na pin I / O przy 40,0 mA. Żaden problem.

  DDRD = 0x00; // Cały port jako INPUT
 

enter image description here Teraz zastanów się, że zapomniałem, że dany pin musi być ustawiony jako Input, ustawiłem go jako Output i ustawiłem Port HIGH.

  DDRD = 0xFF; // Cały port jako OUTPUT
PORTD = 0xFF; // Cały port WYSOKI
 

Chociaż arkusz danych nie podaje impedancji wyjściowej , można ją oszacować na 25 Ω, na podstawie podanych wykresów. Teraz w momencie wciśnięcia przycisku prąd przepływa przez mikrokontroler ze źródła 5V z rezystorem 25Ω plus pomijalny opór dzięki miedzianemu śladowi. Teoretycznie powoduje to przetężenie o 160 mA powyżej prądu stałego na sufit we / wy. Czy to mogłoby usmażyć port i urządzenie? enter image description here Analogicznie, jeśli przełączę się na logikę pozytywną i ustawię port na LOW, można napotkać ten sam problem:

  DDRD = 0xFF; // Cały port jako OUTPUT
PORTD = 0x00; // Cały port LOW
 

enter image description here Biorąc pod uwagę, że ten typ obwodu jest gorliwie zalecany, jak nie wydaje się, że powoduje on żadnych problemów? Wracając do pierwotnego pytania, czy nie powinienem być bardzo ostrożny podczas ustawiania styku I / O jako Wyjście? Albo przynajmniej podłączyć rezystor małej serii jako prymitywną ochronę?

Uwaga: jeśli nie jesteś native speakerem języka angielskiego, możesz edytować post, jeśli zobaczysz coś niezręcznego.

Twój angielski, interpunkcja, pisownia i wielkie litery są doskonałe i znacznie lepsze niż wielu native speakerów, którzy tu publikują.Niech ktoś z większą wiedzą na temat GPIO tych chipów odpowie na twoje pytanie.+1.
@Transistor Miło to słyszeć!Prawda jest taka, że zwykle poświęcam więcej czasu na pisanie tego typu postów, po prostu czuję, że wszyscy czepiają się moich tekstów: ”(
Podobnie jak podczas jazdy dwupasmowej, uważaj, aby nie zmienić pasów na nadjeżdżające pojazdy.Dokładasz starań, aby kod był zgodny z projektem systemu.Ogólnie rzecz biorąc, nie ustawia się kontroli portu w ten sposób, typowe jest odczyt-modyfikacja-zapis, który nie jest wymagany, ale typowy jest dla zmniejszenia ryzyka takich błędów.Ale zdarzają się błędy i wióry wypuszczają dym.Nawet mając dziesięciolecia doświadczenia, zwykle kupuję kilka-trzy sztuki na wypadek, gdyby jedno wysadziło i nie chcę czekać kilku dni / tygodni na następne.
Jednocześnie, jeśli chcesz wykonywać prace sprzętowe lub programowe na tym poziomie, podejmujesz to ryzyko i znajdujesz osobiste rozwiązania, które pomogą Ci wyrobić dobre nawyki, rozwiązanie jednej osoby, aby nie popełniać błędów, nie działa na inną osobę.Każda dodana linia kodu zwiększa ryzyko projektu, więc nie chcesz też mieć przesady w kodzie, to samo dotyczy projektu sprzętu.szczupły, złośliwy i czysty, ale okazuj ostrożność.
Widziałem ludzi zajmujących się sprzętem, którzy dodawali rzeczy na wypadek, gdyby oprogramowanie się zepsuło, a także wiele potrzebnego oprogramowania do ochrony oprogramowania przed ludźmi, a nie wszyscy siedzący i rozmawiający z nimi, a obie strony robią to, co powiedziały, że zrobią izrób to dobrze, czy to wzajemna ocena, podwójne sprawdzenie, czy cokolwiek.
@old_timer Dziękujemy za poświęcenie czasu na ich napisanie!Myślę, że kodowanie w systemach wbudowanych nie jest magicznym światem, w którym nic się nie stanie, jeśli coś zepsujesz, w przeciwieństwie do tworzenia aplikacji internetowych lub mobilnych.Zły kod może uszkodzić rzeczywisty sprzęt, zwrócę na to uwagę i będę ostrożny.
@JulianZatloukal Kiedyś (przypadkowo) ustawiłem odwrotne odchylenie 5v na vcc i gnd na chipie ATTiny85 przez ~ 5 s - zauważyłem, że robi się dość gorąco (bolesne w dotyku) i wyciągnąłem moc.Chip nadal działał jak mistrz, architektury avr są notorycznie odporne.
Powinieneś być * nieco * ostrożny, ponieważ nowy chip będzie cię kosztował tylko około 2 $?
Sześć odpowiedzi:
Tom Carpenter
2020-01-03 06:21:05 UTC
view on stackexchange narkive permalink

Jak powiedzieli inni, nie powinieneś mieć problemu, o ile dokładnie sprawdzisz kod.

Jeśli zrobisz to źle, ogólnie rzecz biorąc, piny ATMega IO ograniczą się do około ~ 80 mA z powodu wewnętrznej rezystancji tranzystorów MOSFET (wartość znaleziona w eksperymencie). To nie jest dobre dla chipa, ale tak długo, jak nie pozostawiasz go w tym stanie przez dłuższy czas, mają tendencję do regeneracji.


Jeśli się martwisz, dobrym pomysłem może być umieszczenie rezystora szeregowo z wejściami. Coś w kolejności 330R dla 5V VDD lub 220R dla 3,3V VDD. Zapewni to ograniczenie prądu zwarcia do ~ 15 mA, co jest wygodnie zgodne ze specyfikacją.

Rezystor znajduje się między pinem IO a tym, co go napędza (np. przycisk z podciąganiem lub CMOS). Ponieważ ATMega ma dość ograniczony użyteczny zakres częstotliwości (IO freq < 10 MHz), dodatkowy rezystor nie będzie miał żadnego zauważalnego wpływu na działanie obwodu, ponieważ wejścia mają bardzo mały prąd upływu i pojemność

Dzięki, że zauważyłeś post!Z pewnością dwukrotnie sprawdzam swój kod, uważając się obecnie za bardziej programistę!Ale tak naprawdę martwiłem się, że głupia linia w importowanej bibliotece włącza wyjście.Być może jestem trochę paranoikiem.Nie wiedziałem o tranzystorach MOSFET ograniczających prąd, być może dlatego wcześniej nie słyszałem o tym problemie.
Nie jesteś paranoikiem, szpilki zawodzą, jeśli zwierasz je do masy lub Vdd na 328p.
Justme
2020-01-03 06:06:44 UTC
view on stackexchange narkive permalink

Należy zachować ostrożność, ale nie należy się tym bać.Ustawienie wyjścia pinowego i skierowanie go w innym kierunku spowoduje przepływ dużego prądu, ale też nie spowoduje natychmiastowego wybuchu dymu.Możesz na przykład zasilać urządzenie ograniczonym prądem zasilania laboratoryjnego podczas tworzenia projektu, aby tego rodzaju błędy powodowały jeszcze mniej uszkodzeń.Bardziej martwiłbym się, że przycisk i kondensator ulegną uszkodzeniu podczas ciągłego użytkowania, ponieważ naciśnięcie przycisku skutecznie zwiera kondensator, a skok prądu jest ograniczony tylko przez nasadkę ESR, okablowanie PCB i rezystancję przycisku, więc może przekroczyć wiele amperów.A ponieważ na przycisku wystąpi odbijanie się styku, prąd ma składowe wysokiej częstotliwości, co w połączeniu z indukcyjnością błądzącą długich drutów przekształci skoki prądu w skoki napięcia, chronione tylko przez diody zabezpieczające styki IO.Generalnie więc rezystor o wartości nawet 330 omów w szeregu zaczyna być całkiem dobrym pomysłem na ograniczenie prądu za pomocą przycisku.

Graham
2020-01-03 19:11:59 UTC
view on stackexchange narkive permalink

Biorąc pod uwagę, że ten typ toru jest gorąco zalecany, jak nie wydaje się on powodować żadnych problemów?

Ponieważ inżynierowie konfigurując wejścia / wyjścia dla swoich urządzeń, zwracają uwagę, aby a nie używać jako wyjścia. W przypadku większości wejść / wyjść ustawiamy piny jako wejścia lub wyjścia podczas uruchamiania i nigdy nie zmieniamy ich później. To daje nam tylko jedną linię kodu, którą musimy dokładnie sprawdzić, co nie jest wyjątkowo trudnym zadaniem.

Nie ma potrzeby stosowania rezystora ochronnego, chyba że uważasz, że prawdopodobnie będziesz nieostrożny podczas kodowania. W takim przypadku zdecydowanie sugeruję, abyś popracował nad ulepszeniem praktyk kodowania, wykonując lepsze testy lub przeglądając kod przed jego uruchomieniem.

Jako podobny przykład, jeśli podłączysz przewód bezpośrednio między liniami zasilającymi + 5V i 0V, przepalisz zasilacz. Nie oznacza to, że musisz chronić swój zasilacz - oznacza to po prostu, że musisz uważać, aby nie popełniać takich błędów!

A teraz, wracając do pierwotnego pytania, czy nie powinienem być szczególnie ostrożny podczas ustawiania styku I / O jako Wyjście?

Tak, powinieneś. Ale mam nadzieję, że jesteś równie ostrożny co do wszystkich wielu innych sposobów, w jakie możesz spowodować uszkodzenie obwodu, na przykład zwarcie pinów, obrócenie po obu stronach mostka H lub inne podobne błędy.

Masz rację, może ekranowanie każdej szpilki nie jest niezawodne.Być może pisząc coś takiego jak DDRD | = (1 << PORTD1) |(1 << PORTD5) |(1 << PORTD7);zamiast DDRD | = 0b10100010;jest mniej podatny na błędy.Powinienem również sprawdzić, czy jakaś dołączona biblioteka zastępuje niektóre DDRx.
@JulianZatloukal Tak, samodokumentujący się kod jest o wiele lepszy.Ogólnie rzecz biorąc, ważne jest, aby pisać (i komentować) kod tak, jakbyś oczekiwał, że ktoś inny będzie musiał go przeczytać i natychmiast zrozumieć.Za sześć miesięcy nie będziesz dokładnie pamiętać, co zrobiłeś, a tym „kimś innym” będziesz ty.:)
Czasami ludzie projektują obwody, które będą uruchamiać kod, którego nie piszą i którego nie mogą przeglądać.W takich przypadkach rozsądne może być upewnienie się, że złe programowanie nie zabije jednostki.Przykłady obejmują niektóre modele biznesowe robotyki i wszystko, co dotyczy edukacji.
@DisplayName To prawda.Nie powiedziałbym jednak, że to bardzo powszechna aplikacja - większość ludzi, którzy są w stanie zaprojektować swoje płytki, projektuje również własną elektronikę.I bez obrazy Juliana, ale każdy, kto projektuje tablice edukacyjne ogólnego przeznaczenia na sprzedaż, będzie bardzo doświadczony, więc przekroczył punkt, w którym musiałby zapytać o to SE.
David Molony
2020-01-03 16:25:21 UTC
view on stackexchange narkive permalink

Potwierdzam, na chipie arduino uno 328p, jeśli podłączysz wyjście sterowane do masy lub VDD, zabije ten pin.Zrobiłem to przypadkowo kilka razy we wczesnych latach z elektroniką.

W przypadku innych układów, z którymi pracuję, bardzo uważam, aby tego nie robić, ale bardziej nowoczesne wydają się mniej podatne na ten tryb awarii.Na przykład przypadkowo ustawiłem licznik czasu na stm32 w trybie pwm out i kazałem mu walczyć ze sprzęgłem optycznym przez około 15 minut ... Opto kompleksowo wygrał przeciąganie liny ... Ale chip STM przetrwał.

Sytuacja z żetonami arduino 328 jest na tyle zła, że ludzie stworzyli „ruggeduino” z wszelkiego rodzaju zabezpieczeniami, aby uniknąć typowych przyczyn śmierci.

Edytuj: Dodanie rezystora, około 100 omów szeregowo z pinem, jest z mojego doświadczenia wystarczające, aby uniknąć uszkodzenia pinów.

„Ruggeduinos” hahaha.Może skrypt, który sprawdza kod pod kątem zmian DDRx w dowolnym GPIO, mógłby kiedyś pomóc.Być może spróbuję dodać rezystor lub po prostu zaryzykować, biorąc pod uwagę, że moja płytka drukowana jest już przepełniona komponentami.
Ruggeduino istnieje https://www.rugged-circuits.com/microcontroller-boards/ruggeduino-se-special-edition z rezystorem ograniczającym prąd na pin IO i dodatkowym ograniczeniem napięcia.„Funkcje obejmują ochronę przed przetężeniem i przepięciem na wszystkich pinach I / O i wyjściach 5 V / 3,3 V, ochronę przed wyładowaniami elektrostatycznymi na wszystkich pinach I / O i porcie USB, całkowite zabezpieczenie nadprądowe mikrokontrolera i działanie przy napięciu do 30 V.”
TimWescott
2020-01-03 06:05:08 UTC
view on stackexchange narkive permalink

Ogólnie zwarcie wyjścia logicznego do masy nie powoduje natychmiastowego zniszczenia chipa.Może to nie być dobre dla niego, ale nie jest tak źle, że błędne ustawienie wejść na wyjścia powoduje spalenie rzeczy.

A więc - śmiało używaj zalecanych obwodów i dokładnie sprawdź oprogramowanie.Jeśli masz chętnych przyjaciół lub współpracowników, zrób przegląd kodu.

jw_
2020-01-03 15:30:57 UTC
view on stackexchange narkive permalink

Musisz zaznaczyć „Absolute Maximum Ratings” w arkuszu danych, takim jak ten http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf, który to deklaruje

  Prąd DC na pin we / wy..................40,0 mA
Piny VCC i GND prądu stałego...........200,0 mA
 

Co oznacza, że jeśli nie zastosujesz się do powyższego, niezawodność części nie będzie zapewniona.Ale brak wiarygodności nie oznacza porażki teraz lub nawet porażki pewnego dnia, chodzi o szansę na porażkę.

W przypadku płyty deweloperskiej w laboratorium, jeśli jest drogie lub niełatwo jest zdobyć kolejną, potrzebna jest więcej uwagi.Możesz użyć specjalnej funkcji, aby uzyskać dostęp do rejestru, co czyni go pojedynczym punktem opieki, chyba że pamięć jest uszkodzona przez inny kod.Ale w większości przypadków nie jest to zbyt drogie ani czasochłonne, aby uzyskać kolejny, więc nie jest to duży problem.

BTW ESD może mieć większą szansę na zniszczenie twojej płyty deweloperskiej.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...