Forum: Mikrocontroller und Digitale Elektronik Problem beim Auslesen von MCP3208


von Joe (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Problem beim Auslesen eines MCP3208.

Gemessen werden soll die Spannung am Arbeitswiderstand einer Photodiode.
Der MCP wird per SPI von einem RaspberryPi gesteuert, entweder über 
spidev oder alternativ über Bit-Banging mit anderen GPIO-Ports.

Der Arbeitswiderstand hat 1 MOhm, Multimeter zeigt Spannungen im 
Messbereich des MCP.

Allerdings ist das Signal irgendwie verrauscht und ich hab
keine Ahnung warum.

Der Sensor ist in einem fast Licht-dichten Beutel.
Ich hab ein paar Sachen ausprobiert, siehe Bilder.

mcp3208_dark.jpg zeigt die Spannung am Arbeitswiderstand, MCP ist 
"normal"
angeschlossen, sehr verrauscht...

mcp3208_ground.jpg zeigt das Signal wenn man den Kanal am MCP auf Ground 
setzt, wie zu erwarten nix zu sehen.

mcp3208_nc.jpg ist das was mich eigentlich stutzig macht, hier hab ich 
den Kanal am MCP nicht verbunden. Trotzdem wird irgendein Signal 
ausgelesen.

Es sieht irgendwie so aus als würde das Signal das bei nicht verbundenem 
Kanal ausgelesen wird auch das
eigentliche Signal überlagern, wenn der Kanal verbunden ist.

An anderen Kanälen sehen die Signale genauso aus.

Ich hab leider noch nicht so viel Ahnung von Microkontrollern.
Ist das ein Effekt den ihr kennt? Und was kann man da machen?

Viele Grüße,
Joe

von Easylife (Gast)


Lesenswert?

Zum Debuggen werden Schaltplan und Sourcecode benötigt.

von Easylife (Gast)


Lesenswert?

Ist das vielleicht einfach das Grundrauschen das du hier dargestellt 
hast?
1MOhm rauscht natürlich ziemlich.

Wie hoch wäre denn auf deiner Skala in deinen Diagrammen der 
Vollausschlag deines 12-bit ADCs?

von Joe (Gast)


Lesenswert?

Ich verwende diese Klasse bei SPI-Betrieb:

https://gist.github.com/yoggy/7096133

Die Schaltung die ich für SPI verwende ist ähnlich dieser hier, nur mit 
Photodiode und angepasst für MCP3208:

http://www.raspberrypi-spy.co.uk/2013/10/analogue-sensors-on-the-raspberry-pi-using-an-mcp3008/

Mittels Bit-Banging über die GPIO-Ports des Pi hab ich mit an diesem
Aufbau und Code orientiert und ihn für den MCP3208 angepasst:

https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/connecting-the-cobbler-to-a-mcp3008

Der Vollausschlag des ADC wären die 3,3 V (Vref abgegriffen am Pi).
Ist vermutlich keine hochpräzise Messung, aber die Genauigkeit sollte 
ausreichen.

Sind die Werte dann nicht etwas zu hoch für Grundrauschen?

Ich werde mal folgendes probieren:

 - kleinere Frequenz für SPI, ist grad 1 MHz
 - Spannung am Arbeitswiderstand der Photodiode mit Multimeter messen
 - eine Messreihe bei Zimmerhelligkeit

von Joe (Gast)


Angehängte Dateien:

Lesenswert?

Also die SPI-Frequenz hat wohl nix damit zu tun.

Die Spannungen am Arbeitswiderstand hab ich mal mit dem
Multimeter gemessen, das passt auch.

Ich glaube der Hinweis mit dem rauschenden 1 MOhm Arbeitswiderstand
geht in die richtige Richtung, aber ich weiß noch nicht genau,
was das bedeutet. Bezieht sich hierauf der Hinweis auf
http://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor
dass die Schaltung ziemlich langsam ist?

Mit der angegebenen Formel komme ich auf eine Grenzfrequenz von ungefähr 
6kHz. Die Auslesefrequenz ist höchstens 1kHz.

Hab eine kleine Messreihe gemacht (1 MOhm, 470 kOhm und 200 kOhm),
Bilder sind angehängt.

von E. K. (new_berlin)


Lesenswert?

Verwendest du einen Anti-Aliasing-Filter? Schonmal dran gedacht dass das 
Rauschen durch Aliasing zustande kommt?

: Bearbeitet durch User
von Easylife (Gast)


Lesenswert?

Ich nehme an, der Knick in den Messkurven bedeutet unterschiedliche 
Beleuchtungszustände?

Das Rauschen sieht mir so aus, als ob auf dem Signal ein Sinus liegt, 
den du eben mit einer sehr niedrigen Frequenz mitsamplest.
Echtes Rauschen wäre in etwa gleich verteilt, hier häufen sich die 
Punkte an 2 Linien mit Offset zum Messignal.

Miss mal dein Signal mit einem schnellen Oszilloskop, ob die Störung 
periodisch ist (Sinus) und welche Frequenz die hat.
Diese Störung müsstest du erstmal eliminieren.

von Easylife (Gast)


Lesenswert?

Leg mal einen 1nF Kondensator direkt zwischen Eingang des MCP3280 und 
GND.
Das sollte es deutlich besser machen.

von GB (Gast)


Lesenswert?

Du hängst hoffentlich nicht wirklich die Photodiode direkt an den 
Eingang des ADC?
Was Du brauchst ist ein Transimepdanz-Verstärker oder - wie in deinem 
Multimeter - einen hochohmigen Eingangsverstärker (10 MOhm!).

Beispiel für eine Verstärker für Photodioden:
http://www.linear.com/solutions/1211

Easylife schrieb:
> Leg mal einen 1nF Kondensator direkt zwischen Eingang des MCP3280 und
> GND.
> Das sollte es deutlich besser machen.

Eher noch schlimmer. Dann muss die Photodiode mit ihrem sehr kleinen 
Strom nicht nur den 20pF Sample-Kondensator sondern noch zusätzlich den 
1nF-Kondensator laden.

von Joe (Gast)



Lesenswert?

Mit Filtern hab ich auch schon rumprobiert (Butterworth und Hamming)
Ich hab Bilder von einem Butterworth-Lowpass angehängt.

Ich arbeite über SSH auf dem Pi und habe jetzt gemerkt, dass es einen
großen Einfluss auf die Messreihe hat, ob ich die Zwischenergebnisse per 
print ausgeben lasse.

In den Bildern sieht man, dass die Sampling Frequenz ungefähr auf den 
Faktor zwei runtergeht und dass das gefilterte Signal (oben rechts) eine 
Schwingungskomponente
mit ungefähr mit 10 Hz hat. Aber woher kommt diese Komponente?
Das sollte doch am eigentlichen Spannungssignal nichts ändern, oder?

Ja, der Knick in der vorherigen Messkurve kommt davon, dass ich die
Photodiode abgedunkelt hab.

Wenn man jetzt vom gefilterten Signal ohne print-Ausgabe ausgeht, sieht
das ja schon viel besser aus. Allerdings weiß ich nicht ob es für die
Anwendung ausreicht.
Ich bin dabei ein Pulsoxymeter 
(http://de.wikipedia.org/wiki/Pulsoxymetrie) zu bauen.

Dabei beträgt die Amplitude des benötigten Signals ungefähr 3-5 % vom 
gemessenen Signal.
Üblicherweise wird das ein Bandpass von 0,5 bis 5 Hz verwendet um den
Herzschlag herauszufiltern.
So wie das Signal im Moment aussieht würde das genau im Rauschen 
untergehen.
Ist der 1 nF-Kondensator in diesem Fall auch noch hilfreich
und in welchen Frequenzbereich glättet er gut?

von Easylife (Gast)


Lesenswert?

GB schrieb:
> Eher noch schlimmer. Dann muss die Photodiode mit ihrem sehr kleinen
> Strom nicht nur den 20pF Sample-Kondensator sondern noch zusätzlich den
> 1nF-Kondensator laden.

Ja und? Für 1000 Messungen pro Sekunde reicht auch ein kleiner Strom, um 
1nF zu laden.
Und es eliminiert Störungen.

Probiere den Kondensator halt mal aus. Mit den 1M/1nF ergibt einen 
Filter, der erst bei 1000Hz einsetzt.
Für deine Anwendung kannst du also vermutlich auch 10nF nehmen.

Die störungen könnten auch 50Hz Netzbrummen sein.

von Joe (Gast)


Lesenswert?

GB schrieb:
> Du hängst hoffentlich nicht wirklich die Photodiode direkt an den
> Eingang des ADC?
> Was Du brauchst ist ein Transimepdanz-Verstärker

Ich hab den Arbeitswiderstand der Photodiode an den ADC gehängt, nicht
die Photodiode selbst.
Ja, das mit dem Transimepdanz-Verstärker habe ich schon mehrfach 
gelesen. Aber da das Pulsoximeter ja nur ein kleines Bastelprojekt ist 
will ich
eigentlich nur mit Sachen arbeiten, die hier sowieso rumliegen.

Die Photodiode ist zusammen mit zwei LEDs (Rot und IR, back-to-back) in 
einem Einweg-Sensor verbaut den ich im Krankenhaus mitgenommen hab.

Denkt ihr, dass das mit Photodiode und Arbeitswiderstand garnicht 
funktionieren wird?

Easylife schrieb:

> Probiere den Kondensator halt mal aus. Mit den 1M/1nF ergibt einen
> Filter, der erst bei 1000Hz einsetzt.
> Für deine Anwendung kannst du also vermutlich auch 10nF nehmen.

Ja, werd ich mal mal machen.

> Die störungen könnten auch 50Hz Netzbrummen sein.

In den Bildern in meinem vorherigen Beitrag ist die 
Fourier-Transformierte des Signals zu sehen. Da ist auf jedenfall auch 
ein kleiner Beitrag vom Netzbrummen sichtbar. Aber den sollte der 
Butterworth-Lowpass plattmachen.

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.