Beim Betrieb eines „embedded Systems“ mit einer Batterie ist es sinnvoll, die Batteriespannung zu überwachen. Sei es, um eine Warnung abzusenden (LOW_BAT) , oder um Verbraucher abzuschalten und damit eine längere Laufzeit zu bekommen oder um einen sicheren Zustand herzustellen.
Zum sicheren Betrieb gehört, eine mindest-Spannungsschwelle für den Betrieb des Controllers nicht zu unterschreiten, da unterhalb dieser Schwelle (Brown Out) Aussetzer und Störungen im Prozessor auftreten können. Schwieriger ist es einen vollständigen Spannungsausfall (Black Out) zu erkennen, da nach einem Reset bzw. Neustart alle Speicherinhalte „vergessen“ sind.
Für diese Art der Spannungsmessung kommen der Atmel 328P, der Atmel Mega und der Atmel Mega2560 in Frage, da diese die unten beschriebenene Messmöglichkeiten haben.
Aus der Tabelle „BODLEVEL Fuse Coding“ im Datenblatt für den Atmel 328P ist der kleinste Wert für den Brown Out mit Min: 1.7 Volt, Typisch: 1.8 Volt, Max: 2.0 Volt angegeben. Kleinere Werte würde ich also lieber nicht nehmen. Um noch reagieren zu können, ist es also sinnvoll diese Schwelle etwas höher zu legen. Ich lege also die Spannungsschwellen für meine Überwachung fest:
5 Volt bis 3 Volt für den Normalbetrieb
-> Die Software läuft mit allen Hard- und Softwarekomponenten.
kleiner 3 Volt bis 2 Volt für den eingeschränkten Betrieb
-> Die Software läuft eingeschränkt mit abgeschalteten Verbrauchern, um Strom zu sparen.
-> War noch kein Brown Out, dann gilt der eingeschränkte Betrieb bis zur Brown Out Warnung.
kleiner oder gleich 1.8 Volt für die Brown Out Warnung
-> Die Software läuft nur noch mit der Kommunikationskomponente und sendet ein LOW_BAT Signal.
größer 1.9 Volt für das Verlassen des Brown Out Bereiches
-> Dies ist nötig als Hysterese, damit im Grenzbereich nicht ständig hin und her geschaltet wird.
Die Hardware
Messung und Publisher
– Ein Arduino Mega2560
– Ethernet Shield W5100
Die Software
– mosquitto Server auf einem PC
– mosquitto Subscriber auf selbigem PC
Test
Für den Test wird der Mega2560 von einem Labornetzteil gespeist. Und dann von 5.1 Volt langsam heruntergeregelt bis zum Brown Out, dann wieder hoch bis zur Ausgangsspannung. Da hierfür der USB Anschluss nicht nutzbar ist, wegen der Spannungsversorgung darüber, muss auf eine andere Weise getestet werden.
Dafür ist MQTT einsetzbar. Den Publisher teste ich auf eine einfache Weise: Auf dem PC starte ich eine Kommadozeile und aus dem Mosquitto Programmordner starte ich einen einfachen Subscriber jeweils einen der beiden Topics mit mosquitto_sub -t Topic. Hier sehe ich dann tatsächlich die Werte, die der Publisher sendet.
Bei meinem Test, mit den obigen Schwellen, komme ich bis etwa 2700mV. Danach kommt keine weitere Meldung am Server an. Hier müssten also insgesamt, die Schwellwerte für das gesamte System angepasst werden, oder schon vorher ein Kommunikationsabbruchsignal gesendet werden, um dann intern auf den eingeschränkten Betrieb ohne Netzwerkshield umzuschalten. Das hängt dann von der jeweiligen Spezifikation ab.
Links
Spannungsüberwachung
http://physudo.blogspot.de/2014/08/spannung-uberwachen-am-arduino-atmega.html
Datenblatt Atmel 328P
Klicke, um auf Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf zuzugreifen
Datenblatt Atmel Mega2560
Mosquitto
https://mosquitto.org
Brown Out / Blackout
https://de.wikipedia.org/wiki/Stromausfall#Einteilung