mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Peak Detector.aber wie ?


Autor: Ralf G. (old-school) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

habe 6 Sensoren (Spulen) die ich auswerten muss,
alle 6 Sensoren (Spulen) sollen von der gleichen Stromschleife einen 
Wert messen, der abhängig von der Position entweder pos / neg gelagert 
und in der Amplitude sich unterscheidet ...

Um die werte mit einem AD einlesen zu können muss ich diese 
zwischenspeichert, ein Peak Detector wäre denkbar, speichert aber immer 
nur eine hälfte einer Amplitude, da ich aber pos / neg Peaks habe, bin 
ich ein-wenig ratlos wie man das lösen könnte ...

Bin für konstruktive Vorschläge dankbar ...

: Bearbeitet durch User
Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf G. schrieb:
> Bin für konstruktive Vorschläge dankbar ...

Deiner zu messenden Spannung einen (analogen) Offset
verpassen sodass dein Spannungsbereich in den (d)eines
ADC passen.

Autor: Ralf G. (old-school) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Deiner zu messenden Spannung einen (analogen) Offset verpassen

dann habe ich aber das Problem, das speichern der negativen Peaks 
funktioniert so nicht, wegen der Null-Linie U/2

: Bearbeitet durch User
Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf G. schrieb:
> dann habe ich aber das Problem, das speichern der negativen Peaks
> funktioniert so nicht, wegen der Null-Linie U/2

Was hindert dich daran den Offset nach dem A/D Wandeln
rechnerisch wieder abzuziehen?

Autor: Ralf G. (old-school) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Möglichkeit wäre zwei mal einen Peak Detector je für den POS und 
NEG Anteil aufzubauen und mit einen Komparator dahinter, das höhere 
Signal über einen Umschalter dem AD bereitstellen ...
gibt es sowas nicht schon fertig in einem IC ?

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst gleichrichten?

Autor: Ralf G. (old-school) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was hindert dich daran den Offset nach dem A/D Wandeln rechnerisch wieder 
abzuziehen?

Offset rausrechnen kein Problem, es geht um das speichern von 6 dieser 
sehr kurzen Signale die dann selektiv eingelesen werden müssen, mit 
einem Peak Detector kann man nur Spitzenwerte von eine Amplituden-Seite 
speichern !?

: Bearbeitet durch User
Autor: Ralf G. (old-school) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Erst gleichrichten?

ein Peak Detector beinhaltet einen Gleichrichter ?!

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du benötigst in jedem Fall 2 Peakdetektoren für min. und max.
Dann auf einen Differenzverstärker. Danach dann den Offset für den ADC 
addieren. Für den Offset den min. Wert (mit entsprechender 
Verstärkung/Abschwächung) nehmen.

Welche Spannung hat denn der Peak maximal (+/-), und welchen 
Eingangsbereich hat dein ADC?

: Bearbeitet durch User
Autor: Ralf G. (old-school) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joe F.

Danke für die Antwort, damit habe ich schon gerechnet, das ich beide 
Peaks zwischenspeichern muss ...

> Welche Spannung hat denn der Peak maximal (+/-), und welchen

von einigen 100 mV bis weit über 10V ... da muss ich entweder den 
Schleifen-Generator in seiner Leistung (Schleifen-Strom) steuern oder 
den Eingangs-Bereich über ein dig. gesteuertes Poti anpassen ...

> Eingangsbereich hat dein ADC?

angepeilt ist 0-5V durch den Dif-Verstärker ja kein Problem entsprechend 
anzupassen ...

Projekt dazu siehe hier: 
http://www.roboternetz.de/community/threads/69425-...

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hö?

Wenn das Signal sowieso in einen Microcontroller wandern soll, würde ich 
das Signal mit Offset und entsprechend gedämpft direkt an den ADC hängen 
und mit ausreichender Geschwindigkeit (>20kHz) samplen. Den Rest macht 
der µC praktisch nebenher.


Gruß

Jobst

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf G. schrieb:
> Signal_Spule.JPG

Was soll hier eigentlich die Angabe eines Leitwertes auf der Abszisse? 
;-)
https://de.wikipedia.org/wiki/Siemens_(Einheit)

Ralf G. schrieb:
> Messdaten_2.jpg

Warum muss eigentlich die Peakhöhe bestimmt werden. Die Daten sehen so 
aus, als, als ob es sich um eine stark gedämpfte Schwingung handelt, 
d.h. die Peakfläche liefert genauso die Aussage über die Pulsenergie. 
Zusammen mit dem Vorschlag von Jobst, dürfte das genauer sein.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf G. schrieb:
> Um die werte mit einem AD einlesen zu können muss ich diese
> zwischenspeichert
Warum zwischenspeichern? Ich würde da einfach einen hinreichend 
schnellen AD-Wandler nehmen und mit z.B. 100kHz wandeln? Das Signal an 
sich ist ja schnarchlangsam...

> Bin für konstruktive Vorschläge dankbar ...
Wie genau brauchst du den Spitzenwert? Wieviele Bits löst dein ADC 
auf?


BTW: du solltest in der Eletrotechnik unbedingt zwischen "mS" und "ms" 
unterscheiden!

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine andere Möglichkeit wäre das Signal über ca. 5ms zu integrieren, und 
dann den Offset drauf.
Geht natürlich nur, wenn die Signalform in den 5ms einigermaßen 
"ähnlich" aussieht, sich also nur in der Amplitude unterscheidet.

Autor: old_School_Offline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was soll hier eigentlich die Angabe eines Leitwertes auf der Abszisse?

es ist die Millisekunde (ms) gemeint ... also nicht mS

> Wie genau brauchst du den Spitzenwert? Wieviele Bits löst dein ADC auf?

möchte die 6 Detektoren(Spulen) miteinander vergleichen, bin da noch 
offen in der Umsetzung, das Problem ist der große Bereich von einigen mV 
bis einigen zig V ...

> Warum zwischenspeichern?

weil es sechs kurze Signale sind die exakt zur gleichen Zeit auftreten 
und eingelesen werden müssen ...

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
old_School_Offline schrieb:
> das Problem ist der große Bereich von einigen mV
> bis einigen zig V

Definiere den Bereich mal genauer. Vorher waren es 100mV-10V, jetzt 
<100mV...
Kommen denn Peaks von sagen wir mal 100mV und 10V in einer Messreihe 
vor, oder ist das der Messbereich, mit dem die Schaltung insgesamt 
umgehen können soll.
Also, bei der einen Installation kommen Signale von 100mV bis 2V vor, in 
der anderen 500mV bis 10V, und man würde die Empfindlichkeit des 
Einganges dann einmalig z.B. mit einem Potentiometer einstellen.

PS:
+/-10V in 10mV Schritten aufzulösen ist auch nicht wirklich ein großes 
Problem. Das wären 11 bit, mit einem 12 oder besser 16-bit ADC ist das 
locker machbar.

: Bearbeitet durch User
Autor: old_School_Offline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Definiere den Bereich mal genauer.

je nach dem wo sich der Bot innerhalb der Stromschleife befindet bzw 
über der Schleife befindet, kann sich der Werte-Bereich eben von einigen 
zig. mV bis einigen zig. V bewegen ... die sechs Sensoren (spulen) 
werden aber je nach Lage ungefähr im gleichen Bereich sich befinden,
Der Bot kann über eine Funk-Strecke auf die Sende-Leistung des 
Schleifen-Generator (Basis-Station) Einfluss nehmen, bzw. kann das Modul 
für die Sensoren im Bot die Eingangsempfindlichkeit selbiger über z.B. 
Digitale Potis einstellt.

Warum das ganze ...
Ich baue derzeit einen BOT in Modul-Bauweise auf, Main-CPU, 
I2C-Bus-System und Antriebs-Modul sind soweit fertig. Jetzt ist die 
Schleifen Erkennung und deren Sensoren-Auswertung dran ... 
"Sensor-Modul", in jedem Module sitzt ein "Arduino nano" mit seinen 
Möglichkeiten ...

Aber bitte jetzt nicht das Projekt auseinander nehmen ...

Autor: Joe F. (easylife)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Das hier wäre so meine Idee.
Der uC müsste folgendes tun:
In regelmäßigen Abständen ADC Werte einlesen, sagen wir mal alle 10ms 
(100Hz).
Wenn der ADC Wert vom Nullwert (ca. halber Wertebereich +/- 
Rauschabstand) abweicht, ca. 6ms warten, und dann die eigentliche 
Messung machen.
In dieser 6ms sollte das Signal dann vollständig integriert sein.
Nach der Messung das Signal CLR für ca. 1-2ms auf high setzen, um den 
Integrator zu resetten.
Dann wieder von vorne beginnen.

Autor: old_School_Offline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joe F. (easylife)

Besten Dank für Ausführung, muss ich mir mal in Ruhe anschauen ...

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
old_School_Offline schrieb:
> @Joe F. (easylife)
>
> Besten Dank für Ausführung, muss ich mir mal in Ruhe anschauen ...

Eine solche Lösung hat natürlich den Vorteil, dass deine ADC Samplerate 
drastisch reduziert ist.
Der Nachteil ist: du musst die Schaltung auf dein Signal anpassen, und 
bei 6 Kanälen ist es dann doch einiges an Bauteilen...
U2 braucht man natürlich nur ein mal für alle 6 Kanäle.

Wenn es irgendwie möglich ist, würde ich auch die Lösung mit einer 
entsprechend hohen Samplerate (10-20KHz) vorziehen, und die 
Peak-Erkennung in der Firmware machen.
Signal von +/-10V mit einem Opamp auf 0..5V bringen, Clipping-Dioden 
rein, und fertig.

: Bearbeitet durch User
Autor: old_School_Offline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joe F. (easylife)

hat es einen Grund warum du genau den LT1638 genommen hast,
habe noch TL084CN massenhaft liegen.

Die Schaltung um U3, sieht recht genial aus, speichert sowohl positive 
als auch negative Impulse, mir ist aber noch nicht ganz klar,
warum entlädt sich der Kondensator C3 nicht über den Ausgang vom U1, 
wenn dieser die längste Zeit auf U/2 liegt

wie sieht denn das Ausgangs-Signal bei einem kleinerem Eingags-Signal am 
U1 aus ... ( z.B. Peak 2V )

Autor: Joe F. (easylife)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
old_School_Offline schrieb:
> @Joe F. (easylife)
>
> hat es einen Grund warum du genau den LT1638 genommen hast,
> habe noch TL084CN massenhaft liegen.

Weil LT-Spice für den LT1638 ein Simulationsmodell hat... ;-)

> > Die Schaltung um U3, sieht recht genial aus, speichert sowohl positive
> als auch negative Impulse, mir ist aber noch nicht ganz klar,
> warum entlädt sich der Kondensator C3 nicht über den Ausgang vom U1,
> wenn dieser die längste Zeit auf U/2 liegt

Der Ausgang von U1 liegt die längste Zeit auf 0V. Das Eingangssignal ist 
auf 0V bezogen.
Der Kondensator kann sich nur über R6 oder die Entlade-MosFETs entladen.

> wie sieht denn das Ausgangs-Signal bei einem kleinerem Eingags-Signal am
> U1 aus ... ( z.B. Peak 2V )

Bei 2V dürfte es noch gehen, das Ganze hat aber tatsächlich unangenehme 
Grenzen nach unten.
Ich würde sagen, mit Eingangssignalen unter 0.5V wird es dann schon 
recht ungenau.
Und das hängt mit leichtem Drift zusammen, den ich selbst in der 
Simulation nicht wegbekomme.
Ich habe die Schaltung noch etwas verbessert (R15 zur 
Entladestrombegrenzung, und C5 um DC-Offset zu eliminieren).
Wenn man dann mal mit den 100ms zwischen den Peaks simuliert, driftet 
der Augang ca. 20mV in 100ms weg...
Man kann noch etwas tricksen, indem man die CLR Phase so lange wie 
möglich macht (z.B. 70ms). Dann hat der Drift weniger Zeit...

Aber viel genauer wird es nicht werden, ausser jemand anderes hat noch 
die zündende Idee...

Es spricht vieles dafür, das Signal hochauflösend mit dem ADC 
abzutasten...

Autor: Possetitjel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe F. schrieb:

> Es spricht vieles dafür, das Signal hochauflösend mit
> dem ADC abzutasten...

Ja.

Wir haben zeitweise Peak-Detektoren in Messelektronik
(Ultraschall) verbaut, und es ist ein Furunkel am Arsch.

Wenn möglich, immer direktabtasten. Notfall mehrkanalig
mit unterschiedlichen (analogen) Tiefpässen im Eingang.

Autor: Joe F. (easylife)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hänge dir mal das LT-Spice File an. Dann kannst du dir selbst 
angucken, wie unangenehm sich das Ding bei kleinen Eingangssignalen 
verhält.
Den Pegel des Eingangs-Peaks kannst du einfach über den parameter 
peak_voltage verändern.

Autor: Joe F. (easylife)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ab und zu hilft es dann doch mal die Herren Tietze und Schenk zu 
konsultieren.
Es macht natürlich total Sinn, den Strom am positiven Eingang von U3 mit 
dem negativen Eingang gleich zu machen -> tataaa, weniger Drift.

: Bearbeitet durch User
Autor: Ralf G. (old-school) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sage erst mal besten Danke,

weis jetzt auf jeden Fall in welche Richtung ich probieren muss.

Bei der Auswertung geht es jetzt nicht um Messtechnisch hoch-genaue 
Werte,
eher ein vergleich der Sensoren zueinander, um heraus zu finden, ob der 
BOT sich dem Schleifen-Draht mit welcher Seite nähert und um dann das 
Tempo zurück zunehmen, damit man einen abruckten Stop beim überfahren 
vermeiden kann ... Für das Fahren auf dem Draht wird es bestimmt 
funktionieren, da dort das Signal dann am stärksten ist ...

Autor: Arno Nyhm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die schon geposteten Integrator-Schaltungen sind natürlich schon gut, 
ein Peak-Gleichrichter lässt sich in ähnlicher Form auch aufbauen.

Bei sechs Kanälen würde ich aber eher an soetwas wie einen AD9272 
denken, in Kombination mit einem kleinen FPGA.
Da hat man eindeutig weniger Komponenten und auch mehr Flexibelität.

Vielleicht erscheint es erst einmal ziemlich weit weg, aber mit der 
Verfügbarkeit von günstigen FPGA-Experimentierkits auf eBay und 
Konsorten (und auch kompletten Boards mit dem AD9272 - o.Ä.) ist es 
näher als es vielleicht anfangs ausschaut.
Es ist eine Überlegung wert...

Autor: old_School_Offline (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Es ist eine Überlegung wert...

Ich denke das ist ein wenig overkill ... da komme ich nie zum Ziel,
solch ein komplexer Schaltkreis, dann noch FPGA dazu.
Das Projekt hat noch so viele andere Baustellen, da scheitere ich und 
mein Projekt, bevor es richtig begonnen hat ...

Deswegen arbeite ich auch mit Modulen, die ich später auch noch 
nachbessern und zu Not austauschen kann, Material, Zeit und Effizienz 
beim Aufbau spiet da eher eine Nebenrolle, es muss für mich ohne großen 
Aufwand umsetzbar bleiben ...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Arno Nyhm schrieb:
> Bei sechs Kanälen würde ich aber eher an soetwas wie einen AD9272 denken
Ein "Analog-to-digital converter (ADC) 12 bits at 10 MSPS to 80 MSPS" 
für ein paar Signale im 1kHz-Bereich?

> in Kombination mit einem kleinen FPGA.
Die Frequenz hier im beschreibenen Fall ist doch schnarchlangsam, da 
braucht man kein FPGA, sondern nur einen µC und ein wenig 
Mitdenken/Nachdenken. Ich bin mir sicher, dass man 50kHz Abtastung mit 
Peaksuche auf 6 Kanälen auch mit einem 4€ µC locker hinbekommt...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.