Damit das für den minibot angeschaffte OLED-Display auch einen vernünftigen Nutzen hat, soll es unter anderem für die Überwachung der Akku-Spannung genutzt werden. Dazu sind drei Schritte notwendig:
- Die 12,3 Volt müssen auf maximal 3,3 Volt reduziert werden
- Die maximal 3,3 Volt müssen mit einem AD-Wandler von analog (0 bis 3,3 Volt) nach digital (Wert 0 bis 1023) gewandelt werden, damit der Rasberry Pi sie „versteht“.
- Der digitale Wert muss in einen Spannungswert von 0 bis 12,3 Volt umgerechnet werden, damit er auf dem Display angezeigt werden kann.
Und nun der Reihe nach. Um einen analogen Wert für einen Computer lesbar zu machen (der ja nur 1 oder 0 versteht), braucht man einen Analog-Digital-Wandler (AD-Wandler).
Update
Ich bin gewechselt auf einen Baustein, der per I2C ansteuerbar ist. Das ist mit Video und Schaltplan alles hier beschrieben!
Für den Raspberry Pi bietet sich der MCP3008 an, der hier mit seinen Anschlüssen und allem super beschrieben wird. Dieser lässt sich leicht per SPI ansteuern und hat 8 Eingänge.
Dieses Bauteil (IC) verträgt an seinen Eingängen (und auch als Versorgungsspannung) einen Bereich von 2,7 bis 5,5 Volt – aber natürlich nicht die 12,3 Volt, die aus meinem Li-Po–Akku kommen. Um letztere zu reduzieren, bediente ich mich eines klassischen Spannungsteilers, der jedoch aus mir noch nicht erklärbarem Grund nicht die gewollte Zielspannung von maximal 3,3 Volt erzielte. Zusätzlich ist mehr Schutz für ein IC immer besser, ich entschied mich daher für eine Variante mit einem Widerstand und einer Z-Diode, die die Spannung auf 3,3 begrenzt. „Verdrahtet“ sieht das Ganze dann so aus (hier noch ohne die Anschlüsse zum RasPi):
Auf der linken Seite bei „+Batt“ und GND wird die Batteriespannung mit 12,3 Volt angelegt. Als Z-Diode D1 kann z.B. eine 1N5333 genutzt werden; der Typ ist aber relativ egal. Ich habe mich für eine beliebige 3,3V-Z-Diode entschieden, die 500mW verträgt – man weiß ja nie. Der 630Ω-Widerstand dient zur Strombegrenzung.
Als letztes erfolgt noch das Auslesen und die Umrechnung des vom AD-Wandler gelieferten Wertes in die maximal 12,3 Volt-Spannung. Für das Auslesen des MCP308 habe ich übrigens die Bibliothek py-spidev genutzt. Das sieht bei mir im Sourcecode wie folgt aus:
#!/usr/bin/python # coding=utf-8 ###### AD converter stuff from MCP3008 import MCP3008 adc = MCP3008() voltage = 0 value = 0 # read AD converter (battery voltage) # use channel 0 on IC value = adc.read(channel = 0) # 2.73 V = 12.32 V (measured) > 1023 / 3.3 * 2.73 / 12.32 = 68.693182 voltage = (value / 68.693182) print("Voltage: %.1f" % voltage)
Alles klar? Den vollständigen Sourcecode gibt es hier bei GitHub.
Und so sieht das Ergebnis später auf dem OLED-Display aus:
Rechts oben im Bild sind der 620Ω-Widerstand und die Z-Diode ganz gut zu erkennen.
Hei, ich seh da zwei Probleme: 1.an der Z-Diode hast du immer 3,3 Volt, es sei denn, die Batt-Spannung sinkt darunter; Was ja nicht für den Messbereich gedacht ist. 2. Ich werde mir den MCP300B mal ansehen (Datenblatt), aber ist mit CH0-7 nicht ein 8Bit Ein oder Ausgang gemeint? CH0 ist ein analog-Eingang ???
Danke für dein Feedback. Ich denke aber nicht.
1. Ist die Z-Diode ja in „Gegenrichtung“ geschaltet. Siehe z.B. auch hier:
2. Es ist ein analoger Eingang, da es ja ein Analog-(nach)-Digital-Wandler ist. Siehe auch Datenblatt.
So oder so, hat es aber am Ende doch wie gewünscht funktioniert. Ich berichte in meinem Podcast auch darüber:
http://www.robotiklabor.de/rl082?t=0:17:21
Ich habe mich daher nun für den (auch nicht ganz perfekten Baustein) hier entschieden:
https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/ads1015-slash-ads1115
Ich habe einen entsprechenden neuen Artikel geschrieben.
Moin, Die Diode sperrt doch bis 3,3V. Wo „teilt“ denn der Spannungsteiler da? Es fehlt doch ein Widerstand zu GND..
Sehr ich genauso, das ist kein Spannungsteiler, sondern nur ein „Vorwiderstand“ Spannungsteiler sieht so aus:
BAT+ |———|R1 1200 Ohm|——|Messabgang|——| R2 300 Ohm|—–| GND = Bat-
Hier ein exemplarischer Spannungsteiler mit Verhältnis 1:4, d.h. 12V wären in dem Fall 3V bei einer Ladeschlussspannung des Akkus von 14 V hättest du immerhin noch 3,5V also zu hoch für deine TTL Logik. Da die Eingänge am IC aber Hochohmig sind, zeigt er dir 13,2V also mit 3,3V als Voll an, das ist absolut OK denn die geladene Batterie wird selten darüber sein.
Ein staatl. gepr. Elektrotechniker