PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] A-/D-Wandler - Signalverarbeitung - Schaltung



SGH pRO.BOTICS
26.05.2015, 11:59
Guten Tag liebe Roboternetz-Community,

wir haben mal wieder ein kleines Problem bei der Schaltung eines eigentlich doch recht simplen Schulprojekts:

Die Idee:
Wir sollen uns in kleinen Gruppen ein Projekt zum Thema Schwingungen überlegen, da wir sowohl Software- als auch Hardwareseitig arbeiten wollten,
kamen wir auf die Idee, die Funktionsweise der digitalen Tonaufnahme näher zu untersuchen und im groben nachzustellen.
Der Plan sieht momentan so aus, dass wir eine Schaltung haben welche die Analogsignale (von Frequenzgenerator, Mikrofon,...) in einen "brauchbaren" Bereich bringt,
welche wir mit den Analog-IN-Pins eines Arduinos relativ genau einlesen können und die digitalisierten Signale via Serielle-Schnittstelle (bzw. USB) an einen Computer (Linux) übertragen,
wo sie dann in einem selbstgeschriebenden Java-Programm weiterverarbeitet und abgespeichert werden.
(Uns ist klar, dass wir damit natürlich nicht in Top-Qualität Musik aufnehmen werden können, aber die Funktionsweise sollte man so doch im Groben recht anschaulich darstellen können.)

Das Problem::confused:
Das mit Abstand größte Problem, das uns jetzt auch schon eine ganze Weile beschäftigt, ist die Schaltung zwischen Signalquelle und Arduino.
Diese soll eigentlich nur zwei Dinge erledigen:
1.) Das Eingangssignal (kann je nach Signalquelle Peak-to-Peak kleiner als 1V sein) auf 5V (Peak-to-Peak) verstärken.
2.) Das ganze Signal "nach oben verschieben", also den Mittelwert der Sinuskurve auf +2,5V bringen.
Die Reihenfolge der beiden Punkte ist uns eigentlich egal, wichtig ist nur, dass wir am Arduino ein - an die Signalquelle anpassbares - Signal von 0V-5V haben.

Wir haben schon eine einfache Schaltung mit einem LM741 versucht, welche allerdings lediglich zu den seltsamsten Verzerrungen der Sinuskurve auf dem Oszilloskop führte... :o

Daher hoffen wir, uns kann hier jemand weiterhelfen.


Schon mal im voraus danke für jegliche Hilfe!!! ;)


SGH pRO.BOTICS

PICture
26.05.2015, 12:11
Hallo!

Danke für Schaltplan eurer Schaltung im voraus ! ;)

SGH pRO.BOTICS
26.05.2015, 12:39
Eben das ist ja das Problem, wir haben keine Ahnung, wie wir die Schaltung aufbauen sollen.

Um das Signal "nach oben zu verschieben" haben wir beispielsweise versucht 2,5V DC um Signal zu addieren, was allerdings keine Wirkung zeigte.

Hier ist dennoch mal eine Skizze des Aufbaus:
30211

PICture
26.05.2015, 12:49
Ich habe nie Steckbrett benutzt und deine Skizze ist für mich total unverständlich. Ich bezweifle auch, dass ihr mein skizziertes Schaltplan verstehen und umsetzen könntet. Aber vieleicht könnte jemand euch helfen. Sorry ! :(

Geistesblitz
26.05.2015, 13:25
Ist euch denn die Signalverarbeitung per Arduino wichtig oder warum macht ihr das so umständlich? Für sowas gibt es doch eigentlich den Mikrofoneingang am Rechner und auf die Werte müsste man eigentlich Zugriff haben, um die zu verarbeiten.

Ansonsten halt mit OPVs arbeiten, einmal einen zur Pegelanpassung und einen zum Verschieben der Spannung, aber so weit wart ihr ja auch schon. Soweit ich das bisher aber mitbekommen habe funktioniert das nicht richtig, wenn der OPV nur zwischen 5V und Gnd hängt, da der am oberen Ende genug Spannungsdifferenz braucht. Wenn man da keinen Rail-to-Rail-OPV verwendet, sind Verzerrungen vorprogrammiert. Also Rail-to-Rail-OPV verwenden oder höhere Spannungsversorgung wählen. Was für Schaltungen habt ihr denn jeweils verwendet? Hier sind schonmal die wichtigsten Grundschaltungen aufgelistet:
http://www.mikrocontroller.net/articles/Operationsverst%C3%A4rker-Grundschaltungen

Siro
26.05.2015, 14:43
Sehr einfach geht es nach dieser Schaltung.

30212
Das Audiosignal wird über eine Kondensator auf den invertierenden (mit Minus) bezeichneten Eingang.

Der nicht invertierende Eingang (mit plus gekennzeichnet) erzeugt den Offset (einen konstanten Gleichspannungsanteil)
der auf die Mitte der Versorgungsspannung gelegt wird. Das kann ganz einfach mit 2 gleichgrossen Widerständen erfolgen.
Ob das nun 470 Ohm oder 10000 Ohm sind spielt hierbei weniger eine Rolle. Beide gleich gross, dann fällt an beiden die gleiche Spannung ab und genau in der Mitte geht es zum Plus Eingang des Operationsverstärkers.

Da ihr unterschiedlich sarke (hohe) Signale verarbeiten wollt ist eine entsprehende Vorverstärkung sinnvoll.

Das geht ganz einfach mit 2 Widerständen, die ich mal mit RE und RG bezeichnet habe.
Die Formel der Verstärkung ist dann V = RG / RE. (ich weis da fehlt nen Minus ;))
Wenn also RG 1000 Ohm hat und RE 100 Ohm hat, dann haben wir eine Verstärkung von 10.

Problem: Die meisten Operationsverstärker können am Ausgnag nicht bis 0 Volt und auch nicht bis zur vollen Versorgungsspannung aussteuern. Hier können je nach Typ (741 schlecht) einige milli Volt oder sogar Volts verloren gehen.
Dafür gibt es die sogeannten Rail To Rail Operationsverstärker.
zum Beispiel den LMV324 (!!! NICHT zu verwechseln mit dem LM324) Das "V" beachten, ist der Low Voltage Typ.
Hier kann der Ausgang bis auf einige 10mV nach unten und nach oben hin arbeiten.

Im Ruhezustand liegt das Ausgangssignal dann auf halber Spannung,
Die Verstärkung ist dann anpassbar mit RG oder RE, kann natürlich auch ein Potentiometer sein.

! Achtung : in dieser Schaltung wird das Eingangssignal invertiert, was sich per Software ja leicht umdrehen lässt.
Ich mag die inertierte Schaltung lieber, weil man da weniger rechnen muss. :)

Siro

SGH pRO.BOTICS
26.05.2015, 15:49
Danke für die super Antwort!!! :)

Jetzt wissen wir auch, was wir falsch gemacht haben...
(Falscher OPV und noch dazu falsch angeschlossen) #-o

Wir werden es sobald der OPV da ist sofort ausprobieren!

wkrug
26.05.2015, 16:58
Euch ist euch schon klar, das das für einen Arduino eine nicht ganz einfach zu lösende Aufgabe ist.
1. Die Abtastrate müsste kontinuierlich mindestens 8kHz betragen. Der A/D Wandler kann dabei auf 8Bit eingestellt werden, dadurch wird er schneller.
Zudem muss die Abtastrate konstant bleiben. Ich würde das mit einer Interruptroutine machen.
2. Die gewonnenen Daten müssen schnellstmöglich aus dem Ram des Arduino raus, da hier ja nicht besonders viel Platz ist.
Da hierbei ja 80kiloBit Datenen pro Sekunde ( Start Bit, 8 daten Bits, 1 Stopp Bit ) entstehen müsste die Baudrate 115,2kBit/s betragen.
3. An den Eingang des A/D Wandlers ( und am Ausgang des D/A Wandlers ) gehört ein steilflankiges Anti Aliasing Filter, das 4kHz sehr gut bedämpft.

Zuviel Quatsch - entschuldigung Features - würd ich dann in den Arduino nicht mehr rein proggen.

Ich würd die Anbindung an den PC mittels USB und einem FT 232RL ( Hersteller FTDI ) Baustein machen.
Bei ELEKTOR gibts auch ein RS232 BOB ( Breakout Board ) mit diesem Chip, falls Ihr keine SMD's löten könnt.

Also, da habt Ihr schon noch einiges zu erforschen und zu entwickeln.