PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Spannung messen die am Arduino anliegt



achso
09.06.2017, 19:25
Hallo,
es ist zwar unwichtig, da nur eine Spaßschaltung, aber ich würde gerne wissen wie es geht.
Eine Solarzelle, ein Attiny, ein Goldcap, ein Motor und etwas Sensorik.

Die Solarzelle liefert Spannung. Der Goldcap puffert.

Jetzt soll der Motor erst laufen wenn 4 Volt sind. Aufhören wenn 2,5 Volt sind.

Im Arduino Kochbuch ist z. B. dieser Sketch. Der bezieht sich aber immer darauf das der Arduino 5 Volt oder x Volt Betriebsspannung hat.

Ein anderer Sketch bezieht sich auf %. Was ja eigentlich das gleiche ist.

Wenn ich jetzt sage 4 Volt, dann sind das bezogen auf 5 Volt Betriebsspannung 80%.
Ist die Betriebsspannung nur 2 Volt, dann sind die 80% ja 1,6 Volt.

Kann man den Schwellwert auf eine Spannung die "FEST" ist fixieren?


/*
* RespondingToChanges sketch
* flash an LED to indicate low voltage levels
*/

long warningThreshold = 1200; // Warning level in millivolts - LED flashes
long criticalThreshold = 1000; // Critical voltage level - LED stays on

const int batteryPin = 0;
const int ledPin = 13;

void setup()
{
pinMode(ledPin, OUTPUT);
}

void loop()
{
int val = analogRead(batteryPin); // read the value from the sensor
if (val < (warningThreshold * 1023L)/5000) {
// in the line above, L following a number makes it a 32 bit value
flash(val) ;
}
}

// function to flash an led with on/off time determined by value
// passed as percent
void flash(int percent)
{
digitalWrite(ledPin, HIGH);
delay(percent + 1);
digitalWrite(ledPin, LOW);
delay(100 - percent ); // check delay == 0?
}


Wenn es nicht möglich ist, kein Problem.
Analog ist das einfach.

Danke
Achim

RoboHolIC
09.06.2017, 22:22
Du könntest mal suchen, ob der Arduino eine Bandgap-Referenz -im Prinzip eine Zenerdionde- integriert hat. Dann kann man deren Spannung ratiometrisch messen und so auf die Betriebsspannung zurückschließen. Das geht ggf. sogar per internem Messpunkt, also ohne einen Analogeingang dafür zu belegen.

inka
10.06.2017, 10:52
hier war ein hinweis auf sowas...


https://www.roboternetz.de/community/threads/69208-Arduino-(Due)-Test-auf-ausreichend-Bordspannung/page2?p=626825&viewfull=1#post626825

oberallgeier
10.06.2017, 11:18
Hallo Achim.

Fazit (eigentlich gehört das zum Schluss): die Gesamtschaltung braucht Strom - mal mehr, mal weniger. Dieser Verbrauch MUSS von der Solarzelle überkompensiert werden - sonst geht garnix.


.. nur eine Spaßschaltung .. Solarzelle, ein Attiny, ein Goldcap, ein Motor und etwas Sensorik ..
Soweit so gut, nehmen wir mal an, es wird mit nem tiny13A gemacht - damit wir dokumentierte Referenzwerte haben (anpassen kannst Du Dir das selbst). Ich beziehe mich also beispielhaft, aber immer, auf dieses Datenblatt (http://www.atmel.com/Images/doc8126.pdf) (verlinkt).

Planung +:
a) Der Motor müsste SEHR mini sein, Stromaufnahme weit unter 40 mA - mehr liefert EIN Pin nämlich nicht, andernfalls ist ein Motortreiber erforderlich. UND - ein Motor am Pin des laufenden Controllers kann s..mässig stören, da sollte man evtl. mit einem Transistor schalten. Ersatzweise für den Motor könnte als Test eine LED genommen werden.
b) Der Tiny13A hat (wie viele oder alle?) Atmels
• 0 - VCC ADC Input Voltage Range
• Selectable 1.1V ADC Reference Voltage
kann also im Bereich zwischen 0V und Vcc den ADC betreiben/sinnvoll abfragen, siehe Datenblatt S 83. Ausserdem ist, für Dich praktisch, die interne Spannungsreferenz wählbar (S 88, 14.6.2 ADC Voltage Reference).

Planung -:
c) Wenn kein ausreichend minimalistischer Motor benutzt werden soll brauchst Du einen Motortreiber. Hier nehme ich mal an es wird ein L293D (http://cdn-reichelt.de/documents/datenblatt/A200/L293D%23STM.pdf) (klein, günstig). Der hätt zum Funktionieren gern dann aber schon gern 4,5V (bis 30V) und zieht runde 40 mA und mehr - nur Eigenbedarf. Das geht also im Prinzip garnicht.
d) Hast Du mal die Strombilanz nachgerechnet? Der Tiny 13A verbraucht auch ohne Motorbetrieb Strom - den kann man durch Sleep-Modus minimieren, aber . . .

Mal überlegen wie das mit dem Strom ist.
Annahme a1) Kein Motor + kein Motortreiber, sagen wir mal nur ne LED. Dann wird der Controller mit internem Oszillator betrieben, sagen wir mal mit 1 MHz (das ist der Lieferzustand/"fabrikneu"). Weniger wäre möglich, aber das lohnt vermutlich nicht unbedingt (beim Stromhunger).
Annahme a2) Der Tiny läuft meist nicht (*gg*), ist vorzugsweise im Sleepmodus. Da verbraucht er immer noch knappe 30 µA - die gehen also von der Ladeleistung der Solarzelle ständig weg! Dieser Zustand nutzt uns nix - aber Du programmierst den eben so, dass der Tiny - sagen wir mal - alle Sekunden "aufwacht".
Annahme a3) Im Wachzustand sieht der Tiny nach ob er MEHR als seine 1,1 V hat. Wenn ja - dann Start LED(Motor), wenn nein - weiterschlafen.
Anmerkung: Ich habe noch nie ausprobierte, ob die Messung mit der internen Spannungsreferenz beim Betrieb mit Unterspannung läuft. Vermutlich wäre es besser oder gar notwendig die BOD (Brown Out Detection = Unterspannungserkennung) auf 1,8 V runter zu nehmen - dann arbeitet er sicher über 1,1 V los (dieses Gebiet ist von mir nicht getestet).
Da steht im Datenblatt, S 32, 7.4.3 ".. If the Brown-out Detector is .. always consume power. Vielleicht findest Du im DAtenblatt die Stelle aus der Du diesen Verbrauch rauslesen kannst (mein Posting ist eh schon lang genug und ich bin zu faul dazu).
Annahme a3) Es läuft nun bis hier, sprich: tiny ist gestartet, hat geprüft, zu wenig Spannung gefunden und - ist in Sleep-Zustand gegangen. Nach ner Sekunde schaltet der Tiny13A auf Wachzustand und läuft und verbraucht runde 0,2 mA. Er misst die anstehende Spannung. Wenn er die maximale erhoffte Spannung erkennt, Du willst 4V, dann schaltet er LED/Motor ein. Und wat machen wir nu wenn der Goldcap bei z.B. 3,9 V liegt, der tiny also läuft? Da ist die Spannung höher als die Referenz (eigentlich immer dann, wenn der tiny im "Wachzustand" ist) - und wie soll der Controller damit umgehen?
Weiter mit Planung
e) Du braucht also einen Stromteiler, der den ADC auch noch bei 4 V mit max 1,1 V beliefert. Annahme: Wir nehmen 5k und 15k. Bei 4 V am Spannungsteiler kommen also (richtige Verschaltung vorausgesetzt) 1 V am ADC an. Grad noch unter der Maximalmarke - man könnte also Fehlmessungen (die dann z.B. 1023 liefern) erkennen. Dieser Spannungsteiler frisst DAUERND 0,2 A - geht also wieder von der Solarzellenlieferung ab.

Soweit sollten also die Denkanstösse reichen. Ich hoffe nur, dass keine Fehler drin sind und dass es nicht zuuu ausführlich oder zuuu unverständlich ist.

PS: inka war schneller

achso
10.06.2017, 21:49
Hallo,
danke für eure Ideen.
Das stürmt ja ganz schön auf mich ein.
Aber ich werde das mit der Referenzspannung von 1,1 Volt probieren.
Ich nutze den Attiny 85. Als Motortreiber ganz schnöde einen 74 AC 245. Mit den L293 stehe ich wegen des Eigenverbrauchs nicht so in Kontakt.
Da ich schon so einige Zeit mit dem Problem experimentiere und immer schnell zu analogen Basteleien neige, habe ich die simpelste Lösung für mein Unvermögen gesucht:

32673

Über den rechten Teil der Skizze liegt Plus an der Blinkled an. Irgendwann ist die Spannung bei 4 Volt. Dann blinkt sie und zieht die Basis des PNP auf GND. Der legt die Basis vom NPN auf Plus. Dieser schaltet nun GND durch. Der PNP geht jetzt über den Kollektor des NPN in "Selbsthaltung" und die Schaltung rechts liegt an Spannung bis irgendwer nicht mehr dabei ist. Spätestens bei 0,7 Volt. Der Verlust über den PNP zur NPN Basis ist ca 20mA. Die Zenerdiode hebt den Pegel der Blinkled bis zum Schalten auf 4 Volt an. Das Problem hier: das Rückschalten
Aber die Schaltung ist nur so und längst nicht fertig.
Ich hätte es gerne Galanter gelöst. Aber der ATTiny 85 hat auch keinen Port mehr frei. Nanos und ProMinis habe ich aber auch da.
Die Kästen mit IR Rechts/Links sind Ir Sensoren.
Es sind 4 Solarzellen a 2Volt 50mA. Je 2 in Reihe. Die liefern bei ordentlich Sonne dann im Leerlauf über 5 Volt.Unter Last nicht.

Danke mein lieber Oberallgäuer für diese reichliche Höhenluft, welche ich hier im flachen Land zwischen Nord und Ostsee nicht erreichen kann.

Auch Euch, Roboholik und Inka herzlichen Dank.

Ich werde mich Bemühen.

Achim

achso
12.06.2017, 21:18
Hallo,
mit der Referenzspannung von 1.1 Volt ist es ähnlich wie mit 5 Volt.
Ich gehe den leichteren Weg. Eventuel mit obiger Blinkled oder mit einem TL 7702A Spannungswächter.

Aber eure Vorschläge waren nicht für die Katz!
Ich habe viel gelernt!

Dankeschön und schönen Sommer

Achim

achso
01.07.2017, 20:52
Hallo,
Oberallgeier, du hast Recht. Die Solarzelle muß immer mehr Leistung bringen als verbraucht wird.

Aber aufgegeben habe ich nicht. Denn es regnet schon wieder!
Jetzt verwende ich einen Pro-Mini 3,3Volt. Am Raw Anschluß.
Die 4 Volt Solarzellen liegen weit über deren soll. Über 5 Volt sind möglich.

Das Problem:" Einschalten wenn der Goldcap 4,2 Volt durch die Solarzelle geladen wurde. Ausschalten bei 3,3 Volt.

Bei der Idee eine Analoge Schaltung zu nutzen hatte ich zuviel Stromverbrauch.

Deshalb nahm ich 2 x TL 7702. Spannungswächter welche über eine Meßbrücke genau regeln.

Der 1. schaltet seinen Pin 5 bei 3,3 Volt von GND auf +.
Hierüber wird der 2. über einen N-Mos an Spannung gelegt.
Dieser schaltet Pin 5 bei 4,2Volt von GND auf +.
Dadurch schaltet ein N-Mos durch. Dadur liegt GND am P-MOS Irfu9024N.
Jetzt liegt Spannung an der Steuerung.
Sinkt die Spannung unter 4,2 Volt liegt Pin 5 von TL 7702 B wieder auf GND Nivaue.
Der 2N 7000 vor dem Irfu wird aber über den 10µF Elko gehalten.
Wenn die Spannung unter 3,3 Volt sinkt schaltet TL 7702 A Ausgang 5 auf GND Nivaue.
Jetzt entlädt sich der Kondensator und das Gate von dem unteren 2N 7000 auf GND Nivaue.
Auch das Gate von dem oberen 2N 7000 geht auf GND Nivaue.
Das Gate von dem IRFU liegt über die 10K auf VSS.

http://up.picr.de/29653237ib.jpg

Wenn jemand eine einfachere IDEE hat>>>>> Gerne!
Der Vorteil bis jetzt ist, das der Stromverbrauch sehr niedrig ist.