Forum: Mikrocontroller und Digitale Elektronik Arduino hängt sich auf - Relais und I2C Kommunikation


von J. (j_arduino)


Lesenswert?

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
1
void Seriellsenden()
2
{ 
3
  sender.begin(9600);
4
  
5
  myFile = SD.open(DLogFileName);
6
  if (myFile)
7
    {
8
    int count=0;
9
    char Zeichen;
10
    while (myFile.available())
11
      {
12
      wdt_reset();
13
      Zeichen = myFile.read();
14
      sender.print(Zeichen);
15
      delay(5);   
16
      }
17
   }
18
}

von Sebastian R. (sebastian_r569)


Lesenswert?

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?

von J. (j_arduino)


Lesenswert?

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!

von Sebastian R. (sebastian_r569)


Lesenswert?

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...

von Peter D. (peda)


Lesenswert?

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.

von Steve van de Grens (roehrmond)


Lesenswert?

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.

: Bearbeitet durch User
von J. (j_arduino)


Lesenswert?

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.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

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.

von J. (j_arduino)


Lesenswert?

Hallo,

der Ansatz mit dem Spannungswandler auf Enable-Funkltion hört sich 
vielversprechend an!
Werde mich da mal einlesen, vielen Dank!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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).

: Bearbeitet durch Moderator
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

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.

von Gerhard O. (gerhard_)


Lesenswert?

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

: Bearbeitet durch User
von J. (j_arduino)


Lesenswert?

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 :)

von Gerhard O. (gerhard_)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

: Bearbeitet durch Moderator
von J. (j_arduino)


Angehängte Dateien:

Lesenswert?

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

: Bearbeitet durch User
von J. (j_arduino)


Lesenswert?

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

von Gerhard O. (gerhard_)


Lesenswert?

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

von Gerhard O. (gerhard_)


Angehängte Dateien:

Lesenswert?

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

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Gerhard O. (gerhard_)


Lesenswert?

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.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

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.

von Thomas S. (Firma: Chipwerkstatt) (tom_63)


Lesenswert?

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.

von Gerhard O. (gerhard_)


Lesenswert?

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;-)

: Bearbeitet durch User
von J. (j_arduino)


Lesenswert?

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

von Cyblord -. (cyblord)


Lesenswert?

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.

von J. (j_arduino)


Lesenswert?

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

Beitrag #7405221 wurde vom Autor gelöscht.
von Stefan F. (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.