mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Signalerfassung


Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Hoffentlich habe ich das richtige Forum gewählt.

Ich möchte mich mit einem neuen Thema der Elektronik befassen uns suche 
nach guten Beispielen oder Texten die sich mit dem Thema befassen.

Ich möchte ein Analogsignal umwandeln und in einzelne Werte separieren.
Frequenz und Spannung sind aktuell mal nicht interessant, da es mir um 
das Verstehen des Prinzips geht. Jedoch wäre das Ziehl dan ca. 500kHz 
mit Signalen mit 100mV-1V peaks, die Pulslängen wären dann etwa 
200-500ns, da die Pulse nicht regelmässig sind.

Wird ein ADC von einem Analogsignal ausgelesen, erhalte ich ja zum 
Beispiel folgende Werte bei einem Sinuns-Signal (natürlich wären es 
mehr, sind ja nur als Beispiel)

1) 0V
2) 2V
3) 4V
4) 2V
5) 0V

Bei einem anderen Signal vieleicht

1) 0V
2) 10V
3) 20V
4) 10V
5) 5V
6) 2V
7) 0V


Mich würde in meiner Applikation dann aber jeweils nur der Höchstwert 
interessieren, also 4V und 20V. Relevant wäre auch das das Signal nur 
einmal registriert wird, also nicht ein "Rechtecksignal aus dem 
Spitzenwert". Dies würde ja dann zb folgendes bringen:

1.) 0V
2.) 10V
3.) 10V
4.) 10V
5.) 0V

Dann würde die Software ja 3mal ein Signal mit 10V sehen. Da müsste man 
schon so etwas wie Sigle-Shot haben oder die die Flanken auswerten.

Prinzipell wäre es aber schon aus einem Pulsförmigen (Sinus) Signal ein 
Rechteeck mit dem Spitzenwert zu machen.


Kennt jemand gute Beispiele oder Texte liefern wo solche vorgänge 
erklärt werden?

Das ganze sollte natürlich auf dem aktuellen Stand der Technik gelöst 
werden. Ich denke fast, sowas sollte als "In-Chip" auf dem Markt 
exisiteren.


Grüsse Urs

Autor: Antwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da passt was nicht mit deinen Zahlen. Zunächst sprichst du von 1V dann 
von 10V Signal.
Du sprichst von 500kHz aber von 200ns (-> 5MHz). Du müsstest dann sogar 
mit 10MHz abtasten.

Das heißt ein interner ADC in einem uC reicht wohl nicht aus. Du 
brauchst einen externen. Die Maximalbildung ist später nur Software.

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Wie bereits erwähnt war das im Beispiel nur ein Beispiel...

Bezüglich der Signale, es sind nicht 5Mhz, sondern höchstens 500kHz, 
denn die Signale kommen ja nicht dauerhaft. Wenn du von zb. 1Hz aus 
gehst, ist es ja egal ob der Puls 1us oder 100us ist, es sind ja dann 
trozdem 1Hz also 1 Signalwechsel pro Sekunde, oder habe ich jetz etwas 
verwechselt?

Bezüglich der Bauteile bin ich völlig offen. Nur hatte ich gehofft das 
es etwas gibt was das schon kann, also eine Art Bauteil dem man einen 
Befehl übergibt "miss peaks" oder so ähnlich.

Autor: Antwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du möchtest die Amplitude dieses Spannungsimpulses auswerten. Es ist 
keineswegs egal wie lange der Puls anliegt. Ein ADC benötigt eine 
gewisse Zeit diesen auszuwerten.

Autor: StarLord (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einer Frequenz des Signals kannst du nur reden wenn das Signal auch 
periodisch ist. Aus deinem ersten Beitrag ist hervorgegangen, dass es 
eben NICHT periodisch ist.

Du möchtest aber bei einem sporadisch auftretendem (nicht periodischen) 
Signal den Spitzenwert bestimmten, richtig?

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Das Signal tritt "spontan" auf, also keineswegs mit einer fixen on/off 
Zeit wie ein Rechtecksignal aus einem Funktionsgenerator

Prinzipiell meine automatische "one-shot" Messung:

1.) Warten auf Signal...
2.) TRIGGER löst aus
3.) Spitzenwert bestimmen und ausgeben
5.) TRIGGER setzen
6.) Warten auf Signal...

Dabei muss natürlich sichergestellt werden das der Puls nur einmal und 
korrekt gemessen wird.

Trifft zb. beim Abfallen des Signals schon das nächste ein, "baut" 
dieses auf dem Abfallenden Signal auf und produziert einen falschen 
Spitzenwert.

Man müsste also bei abfallen des Signals die Zeit "auf den Spitzenwert" 
zurückspulen und notieren, und dann warten bis das Signal wieder 
komplett 0 ist, bevor der Trigger wieder aktiviert wird.

Eigentlich könnte man zb. bei ansteigen des Signals anfangen dauerhaft 
zu messen und beim Abfall dann den höchsten Wert zu nehmen. Das benötigt 
dann aber wohl einen extrem schnellen ADC mit entsprechend schneller 
Auswertung.

Autor: Antwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nunja also deine One-Shot Messung wird so wohl nicht unbedingt 
funktionieren. Wenn du einen externen ADC hast musst die die 
Kommunikation zwischen ADC und uC mit beachten. Das heißt sobald dein 
Impuls kommt, müsste der uC ein Startbefehl an den ADC senden. Je nach 
Kommunikationsgeschwindigkeit ist dann der Impuls schon vorbei. Der ADC 
müsste also dauerhaft messen, und die Software muss aus den 
Spannungswerten irgendetwas sinnvolles herausfiltern.

Woher kommt denn eigentlich dein Signal? Das hört sich alles für mich 
etwas komisch an.

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hab ich mir auch gedacht, das es zu schnell ist. Desswegen suche ich 
ja nach einer anderen Lösung. Ein Oszilloskop kann ja auf den Trigger 
hin auch das Signal messen und Anzeigen. Bei meiner Applikation wäre ja 
sogar alles was nach der Spitze kommt völlig irrelevant -> Brauch also 
weder erfasst noch verarbeitet werden.

Das Signal kommt von einer Photo-Röhre (Photomultiplier) mit einem 
Kristall davor. Das Signal steigt relativ schnell an und fällt dann eher 
langsam ab.

Ein Signal sieht ca so aus:
https://www.intechopen.com/source/html/45892/media...

Die Dauer hängt jedoch vom Kristallmaterial ab, und ist in meinem Fall 
ca. 250ns

Autor: Volle22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Urs schrieb:
> Bei meiner Applikation wäre ja
> sogar alles was nach der Spitze kommt völlig irrelevant -> Brauch also
> weder erfasst noch verarbeitet werden.

um zu wissen das es die Spitze war musst du die Daten nach der Spitze 
auswerten. Die vor der Spitze sind die irrelevanten.

Du musst erkennen wann die Ableitung dauerhaft das Vorzeichen geändert 
hat.

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich meinte man müsse nach der Spitze triggern, also "abfallende Flanke" 
und dan die letzte Zeit auswerte wo die Spitze war.

Aber wie gesagt, ich suche eigentlich auch Sachkunde zu den 
Grundkentnissen wie man sowas überhautp macht, und welche Bausteine es 
dazu gibt.


Es gibt X DSP IC's, aber welcher ist der Richtige?

Autor: Volle22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Prinzip hast du zwei Möglichkeiten

Burstmessung
ein  Komparator erkennt eine Triggerschwelle
starten den ADC mit N Messungen
danach sucht ein µC den größten Wert aus den N Samples.
= günstig, wenig Flexibel


Kontinuierliche Messung
der ADC läuft dauerhaft
der µC berechnet die Ableitung und erkennt am Vorzeihenwechsel (und 
anderen Kriterien) den Puls  und sein Spitzenwert.
= teuer, sehr Flexibel

Autor: Antwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst einfach nur schnell genug abtasten damit der Abtastzeitpunkt 
möglichst nah an die "Spitze" rankommt. Sowas in Richtung 100MSPS. Je 
nachdem wie genau du es brauchst. Dann speicherst du im uC die letzten 
x-Werte und nimmst den größten (bzw laut Diagramm den kleinsten).

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen

Ich habe vermutlich zuwenig/ungenaue Informationen genannt.

Nochmals eine genaue Beschreibung des Signals.

Signal
Das Signal das an der Schaltung ankommt kann Spitzen von 100mV bis 900mV 
haben, und ist etwa 250ns lang. Es ist nicht linear, es steigt schnellt 
an, und fällt eher langsam ab.

Die Maximale Anzahl der Pulse pro Sekunde soll auf 30'000 festgelegt 
werden. Treffen mehr als 30'000 ein, können die überzähligen "ignoriert" 
werden, da sie durch längeres "Aufzeichnen" auch registiriert werden.

Ich möchte dabei die Signalspitze registrieren und speichern, dessen 
Einheit/Mass ist irrelevant, da es nur um das Verhältniss geht. Es kann 
also vorher das Signal verstärkt werden oder ähnliches


Fachkunde

Ich möchte lernen WIE man soetwas umsetzt. Also wie man ein Spitzenwert 
Signal praktisch auswertet. Eine Aussage "ADC dauerhaft sampeln lassen 
und dann den Wert in der Software auswerten" ist mölicherweise korrekt, 
nur kann ich damit nicht viel anfangen, da ich ja nicht weiss WIE man 
das Auswertet. Ich suche nach Infos/Beispielen wo sowas gemacht wird, 
die Signalfrequenz oder Dauer ist für das Beispiel irrelevant, ich 
möchte doch nur erst mal wissen WIE man sowas löst.


Grüsse Urs

Autor: KLaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Urs schrieb:
> Das Signal das an der Schaltung ankommt kann Spitzen von 100mV bis 900mV
> haben, und ist etwa 250ns lang. Es ist nicht linear, es steigt schnellt
> an, und fällt eher langsam ab.

Schau dir das Signal auf einem schnellen DSO an. Stell den Trigger so 
ein, daß du ein brauchbares Bild erhältst. Dann lässt du dir die Daten 
z.B. als cvs-Datei ausgeben und suchst darin das Maximum.

MfG Klaus

Autor: Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Urs schrieb:
> Fachkunde
>
> Ich möchte lernen WIE man soetwas umsetzt. Also wie man ein Spitzenwert
> Signal praktisch auswertet. Eine Aussage "ADC dauerhaft sampeln lassen
> und dann den Wert in der Software auswerten" ist mölicherweise korrekt,
> nur kann ich damit nicht viel anfangen, da ich ja nicht weiss WIE man
> das Auswertet.

Die Praxis beruht auf Theorie. Die Theorie, um die es hier geht 
(digitale Signalverarbeitung), wird dir nicht gefallen, die ist nämlich 
randvoll mit Mathematik. Aus der Theorie kann man ein paar Fakten und, 
angepasst an die Praxis, ein paar Daumenregeln ableiten. Wenn man jedoch 
wissen will wie man es macht, dann sollte man die Theorie dahinter schon 
grundsätzlich verstanden haben. Man muss die Lösung nämlich auf das 
Problem zuschneiden.

> Ich suche nach Infos/Beispielen wo sowas gemacht wird,
> die Signalfrequenz oder Dauer ist für das Beispiel irrelevant,

Doch, die sind wichtig, da das Problem die Lösung beeinflusst.

> ich
> möchte doch nur erst mal wissen WIE man sowas löst.

Ok, was hältst du von diesem Beispiel? 
https://docs.google.com/viewer?url=patentimages.st...

Merkst du was? Die Kameraden haben eine sehr spezifische Lösung auf ein 
spezifisches Problem zugeschnitten.

Wir können statt dessen mal die Kernphysiker fragen 
http://root.cern.ch/root/html/TSpectrum.html Die haben auch gewisse 
Vorstellungen über Peak-Detection, bzw. je nach Anwendung andere 
Vorstellungen 
https://docs.google.com/viewer?url=patentimages.st...

Sogar für eine ganz einfache Lösung (analoges Abtast-Halte-Glied vor dem 
ADC) muss man das zu erwartende Signal verstanden haben um zu erkennen 
ob es Sinn ergibt das so zu machen und wenn ja das Abtast-Halte-Glied zu 
dimensionieren.

Autor: Antwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im ersten Schritt musst du dir Gedanken machen um die Hardware. Und 
dafür sind die Zahlen die du nennst enorm wichtig. Da passt wieder etwas 
nicht mit deinen Zahlen 30000 Signale pro sekunde? Dann wäre ein Impuls 
nur maximal 33ns lang statt 250ns.

Heißt Hauptaufgabe ist es erst einmal dein analoges Signal in 
irgendeiner Form zu digitalisieren. Dafür braucht man Zahlen.
Sobald das Signal digital vorliegt sind die Möglichkeiten in der 
Software grenzenlos. Also die Auswertung ist dann der zweite Schritte. 
Die Software dahinter ist für einen totalen Anfänger vielleicht nicht 
ganz einfach aber sicherlich auch kein Hexenwerk.

Du möchtest Beispiele hierzu? Dann kann ich dir sagen. Jede Schaltung 
dir irgendetwas mit Messtechnik zu tun hat funktioniert genauso so. Du 
kannst dir ein x-beliebiges Beispiel nehmen um das Grundprinzip zu 
verstehen.

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Antwort schrieb:
> Im ersten Schritt musst du dir Gedanken machen um die Hardware.
> Und
> dafür sind die Zahlen die du nennst enorm wichtig. Da passt wieder etwas
> nicht mit deinen Zahlen 30000 Signale pro sekunde? Dann wäre ein Impuls
> nur maximal 33ns lang statt 250ns.

Nein, ein Signal mit 250ns Pulsdauer und 1ns pause würde in 3.9Millionen 
Signale pro Sekunde resultieren... bei 30'000 Signalen sind wir irgendwo 
bei 33uS, nicht ns...




Wenn man das Signal sowieso komplett aufzeichnen muss, kann man das ja 
ganz ohne uC sondern direkt auf dem PC machen?

Autor: Antwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Urs schrieb:
> Nein, ein Signal mit 250ns Pulsdauer und 1ns pause würde in 3.9Millionen
> Signale pro Sekunde resultieren... bei 30'000 Signalen sind wir irgendwo
> bei 33uS, nicht ns...

Ups Asche auf mein Haupt...

Aber worum geht es denn hier. Soll bei der Messung jetzt die ganze Zeit 
ein PC laufen? Möchtest du nur einmal etwas auswerten und gut ist?

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein klar nicht, darum möchte ich ja das Signal vorher "präparieren". Am 
Ende der Schaltung soll am besten ein Standart-uC mit Daten bedient 
werden. Diese "Schnittstelle" soll nur die Pulshöhen übergeben bekommen 
(also ca. 30k Signale pro Sekunde) und diese dann z.b. in eine Datei auf 
SD Speichern.  SD soll ja mit Atmega und Co bis zu 13Mhz funktionieren, 
das sollte reichen.

Gibt es zb. keine "programmierbare" ADCs die zb. auf einen 
Trigger-Befehl zb. 100 Samples aufzeichnen?

Autor: Volle22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Urs schrieb:
> Eine Aussage "ADC dauerhaft sampeln lassen
> und dann den Wert in der Software auswerten" ist mölicherweise korrekt,
> nur kann ich damit nicht viel anfangen, da ich ja nicht weiss WIE man
> das Auswertet.



Das ist ein Anfängerübung im programmieren.

der ADC liefert die Wert ein ein Array (Liste)
da nimmst du den ersten vergleichst ihn mit dem zweiten
den größeren  merkst du dir.
Den gemerkten vergleichst du mit dem dritten
ist der größer merkst du dir den.
denn den mit dem vierten usw.

am ende der Liste hast du dir den höchsten wert gemerkt.

Im Kopf würdest du auch nicht anders machen

Autor: Antwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Urs schrieb:
> Nein klar nicht, darum möchte ich ja das Signal vorher
> "präparieren". Am
> Ende der Schaltung soll am besten ein Standart-uC mit Daten bedient
> werden. Diese "Schnittstelle" soll nur die Pulshöhen übergeben bekommen
> (also ca. 30k Signale pro Sekunde) und diese dann z.b. in eine Datei auf
> SD Speichern.  SD soll ja mit Atmega und Co bis zu 13Mhz funktionieren,
> das sollte reichen.
>
> Gibt es zb. keine "programmierbare" ADCs die zb. auf einen
> Trigger-Befehl zb. 100 Samples aufzeichnen?

Warum willst du den ADC programmieren wenn du doch einen uC hast auf dem 
du alles machen kannst?

Autor: Planetenloses Bürstengetriebe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau sprach jetzt gegen den vorgeschlagenen (schnellen)
Schwellwertkomparator? Damit kannst Du, zusammen
mit einem möglichst schnellen & präzisen Taktgenerator (TCXO),
einfachst genaue, zeitliche Messungen durchführen.
Falls super billig -> Int Eingang des uC,
falls extra edel   -> CPLD/kleines FPGA, dann uC

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.

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