minibot - Spannungsmessung mit AD-Wandler

Spannungsmessung mit AD-Wandler am Raspberry Pi – Update

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).


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):

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.

4 Gedanken zu „Spannungsmessung mit AD-Wandler am Raspberry Pi – Update“

  1. 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 ???

    1. 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.

    1. 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

Schreibe einen Kommentar

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