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.
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!
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.
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.
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?
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.
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.
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.
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
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!
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?
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
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.
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.
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.
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;-)
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.
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.
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?
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:
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.