Hallo zusammen,
ich bastel gerade an einem Arduino Projekt, bei dem ein Arduino Nano
Messdaten loggt und diese dann stündlich an einen Arduino Mega
überträgt.
Leider hängt sich der Arduino Nano sporadisch auf und ich kann mir nicht
wirklich erklären woran dies liegt.
Der Aufbau ist wie Folgt: Arduino Nano schaltet ein 5V Wechsel-Relais
(kurzer Implus, sodass das Relais auf AN wechselt und den Arduino Mega
mit Strom versorgt). Danach werden die Daten von der SD Karte gelesen
und an den Arduino Mega übertragen (siehe Code). Wenn die Übertragung
abgeschlossen ist, wird dem Arduino Mega der Strom wieder abgeschaltet,
indem das Relais in die andere Position wechselt.
Sporadisch hängt sich der Arduino Nano allerdings auf. Dabei leuchtet
zumeist die TX-LED auf dem Board dauerhaft (beim "normalen" Übertragen
blinkt sie) und das Relais bleibt auf "AN" stehen. Ich habe schon
versucht das Problem einzugrenzen indem ich einen Watchdog eingebaut
habe, allerdings bleibt der Arduino auch dort "hängen". Am Arduino Nano
liegen auch 5V an, wenn er hängen bleibt.
Das Relais wird über den Pin 3 bzw. 5 gesteuert. Der Arduino Nano,
wieauch der Arduino Mega werden über denselben Step-Down Converter
versorgt mit 5V versorgt. Ich benutze die AltSoftSerial Bibliothek.
Habt ihr eine Idee wo der Fehler liegen könnte?
Würde mich über Tipps freuen!
Viele Grüße
Marc
Vermutlich wird das Relais deine Spannungen ein bisschen durchrütteln.
Sinnvoll platzierte Kondensatoren, Freilaufdiode, gutes Ground-Konzept,
kurze Versorgungsleitungen... An all das hast du sicherlich gedacht?
Hallo Sebastian,
dank dir für die schnelle Rückmeldung!
Das hört sich sehr plausibel an und ich habe "nur" das Relais an die
beiden Pinne des Arduino Nano angeschlossen und sämtliche Ground
Verbindungen verbunden und auf kurze Versorgungsleitungen geachtet.
Allerdings habe ich weder eine Freilaufdiode, noch Kondensatoren
verbaut. Hört sich plausibel an, dass der Fehler dort liegt. Ich lese
mich da mal ein, wie genau das funktionuiert. Vielen Dank!
J. schrieb:> ich habe "nur" das Relais an die> beiden Pinne des Arduino Nano angeschlossen
Aber einen Transistor hast du schon dazwischen?
Der arme Controller-Pin liefert nicht genug Strom, um ein Relais zu
schalten...
J. schrieb:> Habt ihr eine Idee wo der Fehler liegen könnte?
Im nicht gezeigten Schaltplan und Code.
Code und Schaltpläne kann man nicht in Prosa posten.
Wozu das Relais?
Setze doch einfach den Mega in Power-Down und wecke ihn per Interrupt
wieder auf.
Bedenke, dass dein Arduino Mega einen hohen Einschaltstrom aufnimmt
(wegen der Kondensatoren). Wenn du die Stromversorgung einfach hart per
Relais schaltest, bricht wahrscheinlich die Versorgungsspannung kurz
zusammen.
Eine praktikable Alternative wäre ein separater 5V Spannungswandler mit
Enable Eingang anstelle des Relais. Dieser würde die Stromstärke beim
Einschalten z.B. auf 1000 mA begrenzen. Das Netzteil muss natürlich so
viel her geben.
Hi,
nein, ich habe da keinen Transistor dazwischen gesetzt.
Ich hatte ein Relais ausgesucht, was "nur" 36 mA (5V) für den
Wechselvorgang benötigt und hatte gehofft, dass die 40 mA, die der
Arduino Nano kurzzeitig bereitstellen kann, dafür reichen.
Aber ich fürchte, dass das wohl nicht der Fall ist..
Der Stromverbrauch des Arduino Mega im Power-Down Mode ist mir zu viel,
das ganze soll über Akku betrieben werden.
J. schrieb:> Arduino Nano ... WDT
und WDT ist manchmal eine ganz schlechte Idee!
Geht nicht mit dem alten Bootloader.
Funkenlöscheinrichtung, wurde ja schon genannt.
J. schrieb:> Der Aufbau ist wie Folgt: (viele Worte)
Gibts das auch als Schaltplan mit Namen und Typbezeichnungen? Denn ein
Schaltplan ist die weltumfassende Sprache in der Elektronik. Und du
brauchst den ja sowieso zur Dokumentation deines ganzen Aufbaus.
> werden über denselben Step-Down Converter versorgt
Ist der Arg geheim? Woraus wird der versorgt? Wie ist der verschaltet?
Sind an den nötgen Stellen Pufferkondensatoren in der nötgen Größe?
J. schrieb:> Ich hatte ein Relais ausgesucht, was "nur" 36 mA (5V) für den> Wechselvorgang benötigt
Was ist das für ein unbekanntes Relais? Ist das bistabil oder
monostabil? Hast du da eine Freilaufdiode dran?
Arduino F. schrieb:> und WDT ist manchmal eine ganz schlechte Idee!
Mal davon abgesehen, dass die Software damit evtl. nicht klarkommt: der
Watchdog sollte in so einer simplen Anwendung niemals ansprechen
(müssen).
Lothar M. schrieb:> der Watchdog sollte in so einer simplen Anwendung niemals ansprechen> (müssen).
Sollte er wohl eigentlich nie, egal wie komplex die Anwendung ist.
Mal abgesehen von wirklich beabsichtigten WDT Interrupt/Reset.
Aber hat er offensichtlich TROTZ WDT den Arsch nicht mehr hoch
bekommen.
Und eben das, ist auch nicht OK.
Moin,
Es hört sich so an, als ob das Relay ein einspuliges "Latching Relay"
ist, das mit gegenpolarisierten Impulsen angesteuert wird. Ich würde
Deine FW dahingehend ändern, daß Du zwei Pins parallel schaltest und die
Relaisspule über einen 47-100uF Elko ansteuerst (Plus zum AVR hin). Das
andere Ende an Masse. (Anstatt zwei Pins kannst Du das Relais mit einer
separat versorgten komplementären Gegentaktendstufe ansteuern).
Die Ansteuerung des Relais ist nun einfach permanent HIGH für EIN und
permanent LOW für aus. Eine Pulsansteuerung ist nicht länger notwendig.
(Der Kondensator wirkt nun als Umpolquelle. Beim Einschalten kriegt das
Relais einen positiven Stoß während das C sich auflädt. Beim Abschalten
schaltet der AVR Pin auf Masse und das Relais kriegt einen negativen
Impuls vom C und bringt es wieder zum Abschalten).
Dann schalte einen 220-470uF zur besseren Sützung der
Versorgungsspannung an den Vcc Pin an. Aus diesen C kann der AVR den
nötigen Schaltstrom ziehen.
Vorsichtshalber könnte man zum Schutz des AVRs noch zwei externe Dioden
am AVR Ausgang vorsehen.
Vorsorglich sollte auch der Brownout auf die niedrigste Spannung mit den
Fuses gesetzt werden oder rausfinden wie es momentan eingestellt ist.
4.5V ist zu hoch. (Angeblich sind Arduinos auf 2.7V eingestellt, was in
Ordnung ist).
Nach Möglichkeit wechsle den Standard gelieferten Bootloader gegen einen
"Optiboot" Typ aus. Dazu brauchst Du entweder ein AVR ISP
Programmiergerät oder einen zweiten umprogrammierten Arduino (UNO,
NANO). Danach funktioniert der Watchdog korrekt. ( Mit dem gelieferten
B.L. hängt sich der Bootloader auf und transferiert nie zum
Anwenderprogramm.
Gruß,
Gerhard
Hallo zusammen,
ihr habt natürlich recht: Ein Schaltplan muss sein und wird von mir
jetzt angefertigt!
Den Watchdog hatte ich nur implementiert, in der Hoffnung, dass er mir
Aufschluss geben kann ob es am Code liegt (dürfte dann ja mit Watchdog
nicht mehr hängen bleiben) oder an der Verschaltung. Auf das Problem mit
dem Bootloader bin ich dann auch gestoßen und musste ihn updaten.
Ich hab folgende Bauteile verwendet:
Spannungswandler: Pololu D25V25F5 5V, 2.5A
Relais: OMRON G6AK-274P
Freilaufdioden löte ich gerade ein!
Bitte habt noch ein bisschen Gedult mit dem Schaltplan :)
J. schrieb:> Relais: OMRON G6AK-274P
Und aus den vielen verschiedenen Varianten dieser Familie vermutlich die
Variante "Double-winding Latching (Standard Models)" mit der Bezeichnung
G6AK-274P-ST-US, denn nur die hat bei 5V die erwähnten 36mA als
Spulenstrom.
J. schrieb:> Sporadisch hängt sich der Arduino Nano allerdings auf.
Passiert das immer an der selben Stelle? Hat das (Schalten des) Relais
überhaupt etwas mit dem Problem zu tun? Was passiert, wenn du das Relais
mal einfach ausbaust und die Kontakte überbrückst, sodass da nichts
geschaltet wird?
Hallo Gerhard,
ich hatte ein Dual coil Relais verwendet, bei dem ich das Relais dann
über zwei Pins in die "An" oder "Aus"-Stellung für den Arduino Mega
steuern kann. Aber deine Lösung ist natürlich auch schön. Würde
allerdings ersteinmal versuchen das Ganze mit den Relais hinzubekommen,
die ich aktuell hier habe.
Anbei auch der Schaltplan (gemalt). Ich werde den die Tage mal digital
machen! Die Dioden habe ich sobenen wie im Schaltplan eingezeichnet
eingelötet.
@Lothar: Genau, das ist das Relais, was ich verwendet habe
Viele Grüße
Hallo Lothar,
das Fehlerbild ist immer dasselbe.
Das Relais ist in der "An"-Stellung und der Arduino Mega ist an und der
Arduino Nano hat sich aufgehangen.
Den Fehler kann ich eingrenzen ab dem Zeitpunkt, wo das Relais
angeschaltet wird und bis zum Zeitpunkt, an dem das Senden der Daten
fertig ist.
Allerdings tritt der Fehler nur sehr spradisch auf (ein paar Stunden bis
3 Wochen), weswegen ich ihn schlecht reproduzieren oder beobachten kann.
Ich werde das Ganze mal nochmal ohne das Relais aufbauen und testen, das
ist eine gute Idee!
Grüße
J. schrieb:> Hallo Gerhard,> ich hatte ein Dual coil Relais verwendet, bei dem ich das Relais dann> über zwei Pins in die "An" oder "Aus"-Stellung für den Arduino Mega> steuern kann. Aber deine Lösung ist natürlich auch schön. Würde> allerdings ersteinmal versuchen das Ganze mit den Relais hinzubekommen,> die ich aktuell hier habe.>> Anbei auch der Schaltplan (gemalt). Ich werde den die Tage mal digital> machen! Die Dioden habe ich sobenen wie im Schaltplan eingezeichnet> eingelötet.>> @Lothar: Genau, das ist das Relais, was ich verwendet habe>> Viele Grüße
Hallo,
Danke für den Schaltplan. Zwei Gedanken dazu:
Der ATMEGA GND Anschluß sollte idealerweise nicht über die
Relaisrückleitung am Spannungsregler angeschlossen werden. Das könnte
beim Schalten wegen der Masseschleife eine Störspannung induzieren, die
möglicherweise den AVR zurücksetzen kann.
Das Relais ist eigentlich überhaupt nicht notwendig. Mit einem P-Kanal
MOSFET könnte man die 5V für den ATMEGA genauso gut direkt schalten.
Noch etwas, der geschätzte Serienwiderstand der AVR Ausgänge dürfte in
der selben Größenordnung liegen wie der Spulenwiderstand von 125 Ohm. Da
dürfte dann beim Schalten an die 50% der AVR Versorgungsspannung in der
AVR Pin Ausgangsstufe abfallen ( also ist messen angesagt ). Das Relais
kriegt also nur zwischen 2-3V. Ist das genug?
Gruß,
Gerhard
Noch etwas:
Ich sehe gerade, daß D8/9 als Soft-Serial eingesetzt wird. Nicht
vergessen vor dem Abschalten die Pins auf Masse zu programmieren, sonst
zieht der TX Pin(D9) den abgeschalteten uC hoch. Auch schadet es hier
nie die Serial Verbindungen über 470-1K Widerstände zu führen. Das
begrenzt den Strom im Fehlerfall.
Man könnte auch den D9 über eine Diode am RX Pin des anderen uC
anschließen und dort einen Pullup am RX Pin vorsehen. Dann isoliert die
Diode den abgeschalteten uC. (Allerdings kann der herunter gezogene RX
Pin Serial Handler Probleme verursachen (Overrun, Framimg) wenn der RX
Pin im Mega Ausschaltzustand dauerhaft auf Masse liegt).
Der Transistor soll ein IRFD9120 o.ae. sein, D8 Serien Widerstand 470-1K
J. schrieb:> der Arduino Nano hat sich aufgehangen.
Dazu vielleicht noch ein Wort: der hat sich nicht irgendwie "aufgehängt"
in der Form, dass er schlicht nichts mehr tut, sondern er arbeitet mit
seiner gesamten Rechenleistung an der Lösung irgendeines Problems.
Üblicherweise wartet er in solchen Fällen darauf, dass eine
Schnittstelle "fertig" wird bzw. eine gewünschte Reaktion zeigt. Ich
könnte mir z.B. gut vorstellen, dass er da z.B. mit dem Lesen der
SD-Karte nicht auf die erwartete Art "fertig" wird.
Nachtrag:
Falls das Relais drin bleiben soll, beachte bitte, dass bei 5V und 25C
die Ausgangsstufe einen Quellenwiderstand von rund 25 Ohm hat. Das
bedeutet, dass bei 40 Ohm Last vom Relais 1V an der Ausgangsstufe
abfällt und die Spule bestenfalls mit nur 4V auskommen muss; das ist
aber wahrscheinlich ausreichend. Wenn Du sicher gehen willst, schalte
und betreibe jeweils zwei Pins zusammen. Dann halbiert sich der
Ausgangswiderstand und es fallen nur noch 0.5V ab.
Im Datenblatt steht übrigens, dass die Normaltypen mit 70% der
angegebenen Spulenspannung funktionieren sollen. Das bedeutet, dass eine
Spulenspannung von 3.5V in der Tat ausreichen sollte.
Die 6V Version des Relais wäre besser gewesen, weil dann bei Rs=25Ohm
noch 4.45V anstehen. Die Ausgangsstufe wird dann mit "nur" 22mA
(Rrel=200Ohm) belastet.
Im Datenblatt sind die Belastungskurvendiagramme angegeben um Dir ein
Bild zu machen zu können.
J. schrieb:> Der Stromverbrauch des Arduino Mega im Power-Down Mode ist mir zu viel,> das ganze soll über Akku betrieben werden.
Der ATmega2560 zieht im Power-Down nur 1µA.
Was aber ständig Strom zieht, ist USB-Chip ATmega8U und der
Spannungsregler rückwärts. Für Akkubetrieb die 5V zu den beiden
durchkratzen. Dann geht auch Power-Down.
Das Relais ist der Schuldige.
Entweder das Relais ersetzen gegen Halbleiter, wiw oben bereit
beschrieben, oder das Relais zumindest über einen Transistor, oder z.B
ULN2801 oder ä. schalten.
Und auch die Versorgung vom Mega zum uno trennen, oder über Spulen in
der Versorgung betreiben, so das diese sich nmit gegenseitig stören.
Bitte auch beachten, dass solche Relais mit polarisierten Wicklungen
ausgestattet sind. Also unbedingt Pins 1 und 2 verwenden und 15,16 auf
Masse. Die funktionieren sonst nicht.
Seite 8:
https://www.mouser.ca/datasheet/2/307/en_g6a-1148492.pdf
Ich sehe keine (wirklichen) Probleme mit Direkt Port Betrieb des Relais.
Nur wäre das 6V Modell günstiger gewesen, weil dann der Pin Strom vom
AVR nur noch 22mA betragen würde (R[L] = 25 Ohm + 200 Ohm). Noch
günstiger wäre der P-Kanal MOSFET Schalter gewesen;-)
Hallo zusammen,
vielen Dank für die Unterstützung!
Ich habe die Dioden letzte Woche am Relais wie im Schaltplan dargestellt
eingelötet. Bis jetzt hat sich der Arduino auch noch nicht aufgehangen!
Allerdings hat er das auch sonst eher sporadisch gemacht. Also heißt es
erstmal abwarten :)
Das Schalten mit dem Relais ist denk ich auch die falsche Lösung
gewesen. Ich versuche jetzt erstmal das Ganze mit dem Relais ans Laufen
zu bekommen und dann möchte ich das Ganze gerne optimieren. Ich denke
der ATmega2560 im Power-Down Modus ohne weitere (unnötige) Bauteile ist
da die schönste Lösung.
@Gerhard: Pin 15 und 16 des Relais sind auf Masse. Wenn ich die
Seriellen Pins vor dem Abschalten auf Masse programmiere, dann müsste
das doch über digital.write gehen, oder? Widerstände habe ich eingelötet
und damit funktioniert es auch.
Viele Grüße
Lothar M. schrieb:> Dazu vielleicht noch ein Wort: der hat sich nicht irgendwie "aufgehängt"> in der Form, dass er schlicht nichts mehr tut, sondern er arbeitet mit> seiner gesamten Rechenleistung an der Lösung irgendeines Problems.
Vielleicht arbeitet er an der Weltformel.
Oder er fragt sich intensiv warum er als Arduino geboren wurde und
verfällt in Depression.
Hallo zusammen,
ich wollte mal eine kurze Rückmeldung geben.
Das ganze System läuft nach der Anpassung mit den Dioden viel stabiler!
Dies scheint tatsächlich der Fehler gewesen zu sein :)
In den letzten eineinhalb Monaten hat sich der Nano allerdings auch
einmal aufgehangen. Auch wieder im "Moment", indem das Relais geschaltet
wird, ohne dass der Watchedog den Nano resetten konnte.
Gibt es vielleicht noch eine weitere Lösung um den Nano beim Schalten
des Relais zu entlasten?
Würde mich über Antworten freuen!
Grüße
J. schrieb:> Gibt es vielleicht noch eine weitere Lösung um den Nano beim Schalten> des Relais zu entlasten?
Falscher Ansatz. Du brauchst eine stabile Stromversorgung, und die hast
du nicht, solange du einfach ein ganzes Board (= große Kapazitive Last)
auf die gemeinsame Versorgungsspannung schaltest.
Es sei denn, sie liefert ohne mit der Wimper zu zucken 100 Ampere. Aber
dann würden dir die Kontakte des Relais bald kaputt gehen. SO kommt man
nicht vernünftig weiter.
Man könnte eine Schaltung zur Strombegrenzung dazwischen packen, die
würde aber noch aufwändiger sein, als die bereits vorgeschlagene Lösung:
Steve van de Grens schrieb:> Eine praktikable Alternative wäre ein separater 5V Spannungswandler mit> Enable Eingang anstelle des Relais.
Ich ergänze: Das Netzteil muss dabei stark genug sein, den maximalen
Strom zu liefern, denn der Spannungswandler (bzw. Spannungsregler)
zulässt. Ansonsten hast du nämlich immer noch einen unerwünschten
Spannungseinbruch, nur weiter vorne.
J. schrieb:> der Ansatz mit dem Spannungswandler auf Enable-Funkltion hört sich> vielversprechend an!
Aha.