Forum: Mikrocontroller und Digitale Elektronik MCP3201 und Genauigkeit


von Andreas L. (andreas_l226)


Angehängte Dateien:

Lesenswert?

Guten Tag, ich bin ganz neu im Forum und habe ein wenig mitgelesen, aber 
keine (direkte?) Antwort auf meine Frage bekommen. Ich versuche, meinen 
Gaszähler mit einer IR-Diode auszulesen. Die 6 im Anzeigedisplay hat 
eine silberne Platte und eine Empfangsdiode müsste das reflektierende 
Signal bemerken.

Ich messe den Widerstand an der Empfangsdiode mit einem MCP3201. Die 
Diode selbst ist über einen Widerstand an 3.3 Volt angeschlossen und das 
Ausgangssignal wird dann von einem Raspberry ausgewertet, siehe 
https://forum.fhem.de/index.php?topic=71609.0

Durch die Schaltung (siehe Bild, allerdings nutze ich 225kOhm 
inzwischen) messe ich de facto nur den Widerstand der Diode. Daher ist 
eine Schwankung der Referenzspannung irrelevant. Messe ich die Spannung 
an der Diode mit einem digitalen Voltmeter, so ist diese Spannung 
ziemlich störungsfrei: Läuft eine silberne 6 durch, sinkt die Spannung 
deutlich, sonst bleibt sie halbwegs stabil.

Mit dem MCP bekomme ich aber starke Schwankungen auch ohne, dass die 
silberne 6 durchläuft und die liegen im 5%-Bereich. Alles mit folgendem 
python-Code
1
spi = spidev.SpiDev()
2
spi.open(0, 0)
3
spi.max_speed_hz = 50000
4
numdata = 100
5
WasHigh = True
6
7
def GetADC():
8
    Msum = 0
9
    s = 0
10
    while s < numdata:
11
        adc = spi.xfer2([0, 0]) #receive raw data
12
        hi = (adc[0] & 0x1F);   #first three bits are irrelevant
13
        low = (adc[1] & 0xFE);  #last bit is irrelevant: FE for B, FC for C chip (MCP3201-B/C) Danil
14
        data = (hi << 8) | low; #combine all bits
15
        Msum += int(data)       #calculate average
16
        s += 1
17
    return int(Msum/(4*numdata))   #value is 4 times or 2 bits too high (see above)
18
usw.
Ich hoffe mal, dass das kein Fehler in der Programmierung ist, da ich in 
anderen Foren schon darüber diskutiert habe. Sonst wäre ich für einen 
Hinweis sehr dankbar. Ich habe inzwischen den Eindruck, dass der MCP 
sehr ungenau ist. Wieso muss man überhaupt iterieren und wieso liefert 
er nicht unmittelbar einen genauen Wert? Hat hier jemand vergleichbare 
Erfahrungen gemacht? Vielen Dank schon im Voraus für die Hinweise.

von Klaus R. (klara)


Lesenswert?

Hallo,
ich verstehe nicht wozu Du den MCP3201 benötigst. Das ist doch ein 
12-Bit AD-Wandler. Du willst doch eigentlich nur Impulse messen. Dafür 
reicht doch ein Komparator. Dort stellst Du Deine Schwellspannungen so 
ein, dass der Impuls zu registrieren ist.

Andreas L. schrieb:
> Mit dem MCP bekomme ich aber starke Schwankungen auch ohne, dass die
> silberne 6 durchläuft und die liegen im 5%-Bereich.

Ja und? Die 5% sind so etwas wie ein Rauschen. Aber das Nutzsignal 
stellt sich doch sicher deutlicher da? Willst Du den Verlauf des Signals 
sauber verfolgen oder nur Ein/Aus erkennen?
mfg klaus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.