minibot - Spannungsmessung mit AD-Wandler

Spannungsmessung mit AD-Wandler am Raspberry Pi

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:

  1. Die 12,3 Volt müssen auf maximal 3,3 Volt reduziert werden
  2. 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“.
  3. 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). 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):

minibot - Aufbau der Spannungsüberwachung
minibot – Aufbau der Spannungsüberwachung

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:

minibot - Spannungsmessung mit AD-Wandler
minibot – Spannungsmessung mit AD-Wandler

Rechts oben im Bild sind der 620Ω-Widerstand und die Z-Diode ganz gut zu erkennen.

[130 Aufrufe]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.