Czy bezpiecznie jest nagle usunąć moc Arduino? [Zamknięte]

12

Jeśli mam Arduino, czy mogę nagle włączyć i wyłączyć zasilanie, nie psując go? Jeśli projektuję produkt z włącznikiem / wyłącznikiem, czy muszę uwzględnić opóźnienie przed wyłączeniem zasilania, aby mikrokontroler mógł wykonać jakieś czyste wyłączenie? A może wystarczy podłączyć przełącznik SPST do linii zasilania Arduino?

(Projektując produkt, mam na myśli użycie ATmega z kodem Arduino niezależnie na niestandardowej płycie z innymi komponentami).

Edycja: Przez Arduino mam na myśli tylko flashowanie programu ładującego Arduino, aby móc programować w Arduino zamiast AVR. Układ, którego chcę użyć, to Atmel atmega328P Nie potrzebuję żadnego użycia pamięci EEPROM.

Michael Sohnen
źródło
3
Pamiętaj, że „Arduino” jest marką, więc otrzymuje duże „A”. Stolice mają znaczenie.
Tranzystor
3
Być może, jeśli w rzeczywistości jest to „Arduino”, ale w rzeczywistości chodzi o ATmega na niestandardowej płycie, która byłaby bardziej „arduino”. Jeśli chodzi o aktualny temat, oprócz ATmega należy również wziąć pod uwagę wszelkie inne elementy, które mogą mieć stan , zwłaszcza pamięci zewnętrzne - na przykład, jeśli istnieje karta SD, która wymaga dużej uwagi i troski. Wreszcie, niektóre zasilacze robią nieprzyjemne rzeczy przy włączaniu / wyłączaniu.
Chris Stratton,
1
Czy możemy założyć, że nie używasz karty SD?
UKMonkey
To twój produkt. Czy musisz coś zaoszczędzić, jeśli wyłączy się zasilanie? Odpowiedź na to pytanie odpowiada na twoje pytanie.
StainlessSteelRat

Odpowiedzi:

18

Tak, można bezpiecznie wyłączyć Arduino.

Cóż, w większości bezpieczny.

Procesory stosowane w różnych Arduinos mają trzy typy pamięci:

  1. Flash - Gdzie jest przechowywany twój program. Twój program może czytać rzeczy stąd, ale nie może tego napisać.

  2. RAM - gdzie zmienne programu są przechowywane podczas działania programu. Dane tutaj znikają po wyłączeniu Arduino. Twój program czyta i pisze tutaj stale.

  3. EEPROM - tam, gdzie twój program może przechowywać rzeczy, które będą potrzebne przy następnym uruchomieniu. Zwykle rzeczy, które zmieniają się rzadko, ale są potrzebne przy każdym uruchomieniu programu. Jak dane kalibracyjne dla czujnika.

Większość programów używa tylko Flasha i RAM. Za pomocą tych programów możesz włączać i wyłączać Arduino w dowolnym momencie.

Jeśli twój program zapisuje do EEPROM, wyłączenie zasilania podczas zapisywania do EEPROM może uszkodzić tam dane.

Jak wpływa to na twój program, zależy od tego, jakie są dane.

Jeśli spowoduje to uszkodzenie danych kalibracyjnych czujnika, otrzyma się złe pomiary tego, co wykrywa czujnik.

Jeśli zapisujesz sumy kontrolne z danymi EEPROM, możesz wykryć uszkodzenie, a program może zostać zamknięty zamiast korzystania ze złych danych.

Oczywiście będziesz wiedział, czy Twój program zapisuje do pamięci EEPROM - musisz załadować oddzielną bibliotekę i użyć specjalnych poleceń do odczytu i zapisu w obszarze EEPROM.

Niebezpieczeństwo jest naprawdę tylko w tej krótkiej chwili, gdy piszesz do EEPROM. Ponieważ zdarza się to rzadko (i zwykle tylko w kontrolowanych warunkach), dane EEPROM będą również bardzo rzadkie.


Podsumowanie:

Możesz włączać i wyłączać Arduino do woli, bez niebezpieczeństwa, chyba że używasz EEPROM - i nawet wtedy będziesz go miał przez większość czasu.

JRE
źródło
8
„Flash - gdzie jest przechowywany twój program. Twój program może stąd czytać, ale nie może go zapisać”. - Wiele układów AVR (z pewnością 328P w zestawie) może sam zaprogramować lampę błyskową. Tak właśnie działa cykl programowania Arduino; bootloader, działający na 328P, programuje sam 328P. Jest mało prawdopodobne, że OP to zrobi, ale jest to możliwe.
marcelm
2
Ponadto, jeśli użyjesz Arduino z dodatkowym sprzętem (np. Czujnikiem), możesz równie dobrze dodać kondensator i wydać portpin do pomiaru mocy zewnętrznej, aby w razie zniknięcia można bezpiecznie zapisać eeprom chcieć. W ATmega cykl zapisu EEPROM wynosi zwykle 3,4 ms. Jeśli więc kondensator może utrzymać procesor przy życiu przez 5 ms, a przed każdą operacją zapisu eepromu sprawdzasz zewnętrzne zasilanie, jesteś bezpieczny.
vsz
10

Tak, możesz szybko wyłączyć zasilanie, nie niszcząc go.

Jedyny powód, dla którego widzę opóźnienie wyłączania obwodu, to bezpieczeństwo lub funkcjonalne przyczyny zewnętrznych urządzeń peryferyjnych.

Np. Po wyłączeniu zasilania należy zapisać dane w nieulotnej pamięci. Lub po wyłączeniu zasilania, należy upewnić się, że mechanizm znajduje się w bezpiecznej pozycji po wyłączeniu zasilania.

Wymagałoby to monitorowania dostaw i posiadania wystarczającej pojemności podtrzymania, aby uruchomić procesor i jakiejkolwiek funkcji wymaganej do wykonania.

JCollins
źródło
6

Termin Arduino odnosi się do bardzo szerokiego spektrum płytek mikrokontrolerów, które mają różne układy, a zatem wpływ utraty mocy jest różny. Polecam więc podać dokładny numer używanego układu ATmega. Ale ogólnie rzecz biorąc, w przypadku układów takich jak ATmega328, poniższe są dobre.

Tak, możesz usunąć moc z Arduino, nie niszcząc ani nie niszcząc niczego, ale pamiętaj o następujących rzeczach:

  • Jeśli kod wykorzystuje pamięć EEPROM, pamięć flash może ulec uszkodzeniu lub dane mogą nie zostać dokładnie zapisane, gdy urządzenie flashuje dane i zasilanie jest odłączone.

  • Jedyny sposób, w jaki nagła utrata zasilania może wyrządzić szkodę oprócz EEPROM, to urządzenia używane z Arduino (np. Karta SD).

Electric_90
źródło