Forum: Mikrocontroller und Digitale Elektronik Vorgehensweise für Frequenzmessung mit 12-Bit ADC in MC


von Maximilian (maxclaus)


Lesenswert?

Von einem analogen Hallgeber, neben einer rotierenden Welle mit Magnet, 
erhalte ich eine annähernde Sinuswelle von 100 mVSS, zwischen 1 und 50 
Hz. Das Nutzsignal ist der temperaturabhängigen halben 
5V-Versorgungsspannung beaufschlagt. Diesem Nutzsignal ist aber auch ein 
sehr hochfrequentes Rauschen und Spratzen von im Mittel 50 mV und in den 
Spitzen bis 200 mV überlagert. Welche Vorgehensweise der ADC Messung und 
Weiterverarbeitung, zur Ermittlung der Frequenz (+-10%), würdet ihr 
vorschlagen? Die Elektronik ist vorgegeben und nicht veränderbar.
: Bearbeitet durch User
von Nick (b620ys)


Lesenswert?

Ein numerischer Filter mit gleitenden Durchschnitt.
Die halbwegs konstante Abtastrate isz wohl vom ADC vorgegeben, die Länge 
des Filters lässt sich auch experimentell ermitteln.
Die Frequenz ergibt sich dann durch die Nulldurchgänge oder 
Steigungsumkehr.
von Rainer W. (rawi)


Lesenswert?

Maximilian schrieb:
> Diesem Nutzsignal ist aber auch ein sehr hochfrequentes Rauschen und
> Spratzen von im Mittel 50 mV und in den Spitzen bis 200 mV überlagert.

DA würde ich mich mal drum kümmern. Wie hast du das gemessen?
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Irgendwann im Studium hab ich mal was von adaptiven Filtern mit 
LMS-Verfahren gelernt, dieser könnte das Signussignal "lernen" und 
reproduzieren, d.h. die Parameter Frequenz & Amplitude herausfinden, die 
du ja vermutlich wissen willst.
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Naja, bevor ich schon eine konkrete Filterrealisierung angebe, wuerde 
ich doch eher mal vage bleiben, angesichts der vagen Datenlage.
Sicherlich wirds gut sein, wenn man eh schon weiss, dass nur Signale 
zwischen 1..50Hz "interessant" sind, dass man, nachdem man eine seinen 
Anforderungen und der HW angepasste Abtastrate ueberlegt hat, dann die 
Samples erstmal durch ein entsprechendes Bandfilter schickt und hoffen 
kann, dass das die Stoerungen ausreichend daempft.
Danach koennt man z.b. nur noch die Vorzeichen der Samples auswerten 
(evtl. vereinfacht diese Aussicht die Realisierung des Bandfilters auch 
schon etwas) und gucken, ob man damit genuegend genau und ausreisssicher 
auf die Frequenz schliessen kann.
Wenn nicht, koennte man eine digitale PLL aufbauen/programmieren, die 
auf die gefilterten Samples "locked". Dann wird man schon recht gut aus 
den Werten fuer den NCO die Frequenz haben...

Gruss
WK
von Mi N. (msx)


Lesenswert?

Maximilian schrieb:
> zwischen 1 und 50
> ...
> zur Ermittlung der Frequenz (+-10%)

Da Nebenbedingungen unbekannt:
Signal filtern und eine Minute lang die Maxima zählen sollte reichen ;-)
von Maximilian (maxclaus)


Lesenswert?

Bis jetzt ist nicht viel gekommen. Die Erwähnung von 'Steigungsumkehr' 
durch Nick hat mich jedoch auf den Gedanken gebracht, dass das die 
Bildung des gleitenden Mittelwertes erübrigen würde. Ich bräuchte nur 
den vorherigen Messwert zum Vergleich und kann ableiten ob die Spannung 
hoch oder runter geht. Bei Wechsel dieser Veränderung endet/beginnt eine 
Periode.

Aber wie viele Messungen mache ich pro Halbwelle? Ist es besser eine 
breite oder mehrere schmale gemittelte Messungen pro Abtastung zu 
machen?

Eine Minute filtern ist zu lang. Nach 10 Sekunden spätestens muss eine 
Messung vorliegen.
: Bearbeitet durch User
von Udo S. (urschmitt)


Lesenswert?

Maximilian schrieb:
> Die Elektronik ist vorgegeben und nicht veränderbar.

Dann hat die hoffentlich wenigstens ein Anti Aliasing Filter für den 
ADC, der dann auch zur benutzten Abtastrate passt.
Ansonsten misst du eh Mist, das kann kein digitales Filter mehr 
aufräumen.
von Klaus F. (klaus27f)


Lesenswert?

Maximilian schrieb:
> Sinuswelle von 100 mVSS

Da würde ich doch mal zu einer Vorverstärkung raten.

Hat der Hallgeber einen Namen?
Was empfielt dessen Datenblatt?
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Maximilian schrieb:
> Bis jetzt ist nicht viel gekommen.
Was erwartest du? Dass irgendwer genau deine Stoersignale kennt?

> Die Erwähnung von
> 'Steigungsumkehr'
> durch Nick hat mich jedoch auf den Gedanken gebracht, dass das die
> Bildung des gleitenden Mittelwertes erübrigen würde. Ich bräuchte nur
> den vorherigen Messwert zum Vergleich und kann ableiten ob die Spannung
> hoch oder runter geht.
Steigungsumkehr = Vorzeichenwechsel der 1. Ableitung.
1. Ableitung = Differenzierer.
Differenzierer = macht Probleme bei hohen Frequenzen, die du durch die 
Stoerungen sicher in deinem Signal hast.

> Bei Wechsel dieser Veränderung endet/beginnt eine
> Periode.
Oder ein Stoerimpuls...

> Aber wie viele Messungen mache ich pro Halbwelle?
So viele, wie deine HW und Signalverarbeigung zulaesst, wenn du nicht 
Energie sparen musst. Sonst kriegst du kein Geld fuer CPU-Idle zurueck.

>Ist es besser eine
> breite oder mehrere schmale Messungen pro Abtastung mit Mittelwert zu
> machen?
Ich wuerde die Signalverarbeitung permanent durchlaufen lassen.

Gruss
WK
von Nick (b620ys)


Lesenswert?

Maximilian schrieb:
> Ich bräuchte nur
> den vorherigen Messwert zum Vergleich und kann ableiten ob die Spannung
> hoch oder runter geht.

Das klappt leider nicht. Die Spannung steigt und ist nahe dem 
Scheitelwert des eigentlichen Signals. Dann kommt ein Spike daher und du 
hast zwei fallende Flanken kurz nacheinander.
Um den Filter kommst du nicht rum.
Sicher, Bandpass wäre besser. Aber ich würde es erst mal einfach 
probieren.
von Norbert (der_norbert)


Angehängte Dateien:

Lesenswert?

AMPLITUDE = 100
STÖRUNG = 2*AMPLITUDE
FREQ = 29.56
SPS = 20000
SAMPLES = 20000

* Mit drei verschiedenen Filtern.
* Mit FFT.
von Mi N. (msx)


Lesenswert?

Maximilian schrieb:
> Eine Minute filtern ist zu lang. Nach 10 Sekunden spätestens muss eine
> Messung vorliegen.

Interessant zu erfahren, dann warte eben nur 10 Sekunden ;-)
Während sich Einige hier bemühen, alles möglichst kompliziert zu machen, 
würde ich vom Signal per digitalem Komparator die Perieden bestimmen und 
auswerten.
Supersimpel aber sicherlich nicht zielführend, wenn man sich tagelang 
über dieses 'Problem' austauschen möchte.
von Rainer W. (rawi)


Lesenswert?

Maximilian schrieb:
> Bis jetzt ist nicht viel gekommen.

Von dir auch nicht.
Nochmal: WIE hast du die Störungen gemessen und woher kommen ggf. 
höherfrequente Magnetfelder in deinem Aufbau?
Was ist das für ein Hall-Sensor (Typenbezeichnung)?
100 mVSS ist nicht die Welt. Hat der Magnet evtl. durch zu hohe 
Temperatur Feldstärke eingebüßt?
Bandbreitenbegrenzung des Signals ist auf jeden Fall nötig, aber erstmal 
versucht man, die Störungen an der Quelle zu reduzieren.
: Bearbeitet durch User
von Cartman E. (cartmaneric)


Lesenswert?

Maximilian schrieb:
> Von einem analogen Hallgeber, neben einer rotierenden Welle mit Magnet,
> erhalte ich eine annähernde Sinuswelle ...
> Die Elektronik ist vorgegeben und nicht veränderbar.

Vermutlich wäre es sehr viel einfacher, für ein weitgehend
störungsfreies Signal an der Quelle zu sorgen. Da wurde etwas
zusammengepfuscht, und dir die A.schkarte zugeschoben...

Ich habe vor vielen Jahren mal Messungen an einer Turbine
messtechnisch begleitet. Da war sogar die exake Phasenlage des
Synchronsignals entscheidend für den Erfolg. Entsprechend
gründlich wurde bereits beim Geber das Sognal konditioniert,
und eine PLL sorgte dann für eine stabile Referenz der Messungen.

Um die fehlende Tauglichkeit des Aufbaus mit dem du nun konfroniert
bist nachzuweisen, würde ich einige Messsungen der Signalqualität
machen. Dabei könnte z.B. herauskommen, dass es mit überschaubarem
Aufwand unmöglich ist, daraus stabile Werte herauszulesen.

Mit dem vorgegeben und der Auswertung dessen, müsste man dann
auch eine schlechte Qualität einer davon abgeleiteten Referenz
akzeptieren.
von Norbert (der_norbert)


Lesenswert?

Mi N. schrieb:
> würde ich vom Signal per digitalem Komparator die Perieden bestimmen und
> auswerten.

2500mV Offset + 100mVpp Signal + 200mV Störung, das wäre aber … hmmm … 
ambitioniert. Zumindest ohne reichlich Signalkonditionierung vorab.
: Bearbeitet durch User
von Mi N. (msx)


Lesenswert?

Norbert schrieb:
> 2500mV Offset + 100mVpp Signal + 200mV Störung, das wäre aber … hmmm …
> ambitioniert. Zumindest ohne reichlich Signalkonditionierung vorab.

Wie ein Signal nach TP-Filterung aussehen kann, hast Du ja schon 
gezeigt.
Da sehe ich kein Problem, die Periodendauer per Hysterese zu erkennen.
Wie das Signal vom TO aussieht, weiß er wohl nur selber.
von Norbert (der_norbert)


Angehängte Dateien:

Lesenswert?

Mi N. schrieb:
> Wie das Signal vom TO aussieht,

Schmutzig! Sehr, sehr schmutzig. ;-)
Eigentlich mehr Schmutz als Nutz…

PS. Mit 'ner FFT über einen Zeitraum von 10 Sekunden bekommt man es 
schon sehr schön genau. Und jede einzelne FFT dauert ziemlich genau 
20ms. Könnte man also bis zu 50 mal pro Sekunde überlappend anwenden.
von Mi N. (msx)


Lesenswert?

Norbert schrieb:
>> Wie das Signal vom TO aussieht,
>
> Schmutzig! Sehr, sehr schmutzig. ;-)
> Eigentlich mehr Schmutz als Nutz…

Na gut, Dir und Deiner Glaskugel glaube ich das!
Gegen Spratzen hilft übrigens eine Spratzenlaus, die sich davon ernährt 
und daraus dunkle Punkte macht.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Norbert schrieb:

> Schmutzig! Sehr, sehr schmutzig. ;-)

Interessant, was manche Leute für Ergebnisse herausbekommen, selbst wenn 
das KI-generierte Trollposting wesentliche Angaben unterschlägt, z.B. 
die verwendete Samplerate oder die Angabe, worauf sich eigentlich die 
Prozentangabe des zulässigen Fehlers bezieht...

Das ist natürlich Absicht, weil die Hauptaufgabe des Postings die 
Generierung von nutzlosem Traffic ist.
von Norbert (der_norbert)


Lesenswert?

Mi N. schrieb:
> Na gut, Dir und Deiner Glaskugel glaube ich das!

Glauben heißt: Nicht wissen.

Aber schon im Eingangsbeitrag steht unmissverständlich:

Maximilian schrieb:
> Sinuswelle von 100 mVSS,
> hochfrequentes Rauschen … in den Spitzen bis 200 mV überlagert

Ein Störsignal doppelt so stark wie das Nutzsignal.
Das würde ich jederzeit schmutzig nennen.
von Norbert (der_norbert)


Lesenswert?

Ob S. schrieb:
> Das ist natürlich Absicht, weil die Hauptaufgabe des Postings die
> Generierung von nutzlosem Traffic ist.

Hat ja gut geklappt. ;-)
von Paulus T. (paulchen7135)


Lesenswert?

Hallo, an alle Beteiligten,
es wird nach der Ermittlung einer FREQUENZ gefragt...
seit wann brauche ich dazu einen 12 Bit ADC ????
Oder habe ich ALLES falsch verstanden ???
Ach ja, ist dort ein übles Schaltnetzteil in Arbeit ?
Grüße aus MeckPomm
von Norbert (der_norbert)


Lesenswert?

Paulus T. schrieb:
> Oder habe ich ALLES falsch verstanden ???

Ja!

Außerdem hast du nicht alles gelesen.
von Harald A. (embedded)


Lesenswert?

Sind die Störungen evtl. dem Messaufbau zuzuordnen und in Wirklichkeit 
nicht vorhanden? Z.B. langer Masseclip am Tastkopf?

Zum Messverfahren: wieviel RAM hast Du denn übrig? Neben mathematischen 
Verfahren könntest Du einfach für 2500 Werte alle 10us per DMA in einen 
Buffer wandeln und „offline“ nach den Maxima suchen. Kann ja in der 
Hauptschleife passieren wo Rechenzeit ggf. keine Rolle spielt. Nach der 
Ermittlung gleich wieder mit einem neuen Zyklus starten.
von Nick (b620ys)


Lesenswert?

Könnte der TO einfach mal das Signal oszilloskopieren und gnädigerweise 
hier posten?
von Harald A. (embedded)


Lesenswert?

Meinen letzten Post ignorieren, hatte untere Grenzfrequenz übersehen.
von Rainer W. (rawi)


Lesenswert?

Nick schrieb:
> Könnte der TO einfach mal das Signal oszilloskopieren und gnädigerweise
> hier posten?

Und dazu das Spektrum ...
von Mi N. (msx)


Lesenswert?

... und eine Tüte Spratzen.
von Udo S. (urschmitt)


Lesenswert?

Nick schrieb:
> Könnte der TO einfach mal das Signal oszilloskopieren und gnädigerweise
> hier posten?

Der TO ist anscheinend weg und meldet sich nicht mehr.
von Gunnar F. (gufi36)


Lesenswert?

Maximilian schrieb:
> Welche Vorgehensweise der ADC Messung und
> Weiterverarbeitung, zur Ermittlung der Frequenz (+-10%), würdet ihr
> vorschlagen?

Mit einem STM32F4x das Signal zu digitalisieren und eine FFT zu bilden, 
ist jetzt nicht so ein Hexenwerk. Wenn man darin geübt ist, geradezu 
einfach, für einen ganz Neuen im Thema schon ganz schön verwirrend. 
Finden sich aber viele Beispiele zum Abkupfern. Stichwort YAEC in YT.
von Mi N. (msx)


Lesenswert?

Gunnar F. schrieb:
> Mit einem STM32F4x das Signal zu digitalisieren und eine FFT zu bilden,

Was soll denn der ganze Aufwand?
Weiter oben hatte Norbert ein hypothetisches Signal erzeugt und mit 
einfachen Mittel gefiltert: blaue Kurve.
Spratzen hat er zwar vergessen, aber das gefilterte Signal mit einer 
kleinen Hysterese von 100 (ohne Dimension) eindeutig zu erkennen, wäre 
doch kein Problem. Wenn die Nulllinie driften sollte, könnte man die 
Hysterese anhand von Maxima und Minima nachführen, oder man fügt noch 
einen Hochpass <= 0,1 Hz ein. Aber das wird überhaupt nicht notwendig 
sein.
Alles zusammen: Kinderkram.
von Norbert (der_norbert)


Lesenswert?

Mi N. schrieb:
> Spratzen hat er zwar vergessen,

Ja, da fehlte mir dann doch die Vorstellungskraft. ;-)
von Rick (rick)


Lesenswert?

Udo S. schrieb:
> Der TO ist anscheinend weg und meldet sich nicht mehr.
Der sucht noch nach der Samplerate vom ADC.

Die Samplerate wäre ja auch egal, wenn er einen F-U-Wandler einbaut, 
aber bei der Anforderung:

Maximilian schrieb:
> Die Elektronik ist vorgegeben und nicht veränderbar.

¯\_(ツ)_/¯
von Rainer W. (rawi)


Lesenswert?

Rick schrieb:
> Die Samplerate wäre ja auch egal, wenn er einen F-U-Wandler einbaut ...

Blöde nur, dass so ein F-U-Wandler ein sauberes Signal braucht und nicht 
irgendwelchen Dreck mit einem SNR von 6dB ... -6dB (?).

Damit wären wir dann wieder bei der Suche nach der Quelle für die 
Störungen oder wenigstens bei einem anständigen Filter, falls Signal und 
Störungen spektral ausreichend gut trennbar sind.
: Bearbeitet durch User
von Kai D. (Firma: CAD- und CAE-Konstruktion) (robokai)


Lesenswert?

Cartman E. schrieb:
> Vermutlich wäre es sehr viel einfacher, für ein weitgehend
> störungsfreies Signal an der Quelle zu sorgen

Ein edler Gedanke - im Industrieumfed oft nicht machbar. Die Maschinen 
stören alles was magnetisch empfangen kann. Da kannst du Abschirmen bis 
der Arzt kommt. Man sieht den Dreck immer.

Norbert schrieb:
> Mit 'ner FFT über einen Zeitraum von 10 Sekunden bekommt man es
> schon sehr schön genau. Und jede einzelne FFT dauert ziemlich genau
> 20ms.

Das taugt aber meistens nicht zu einer Auswertung für solche 
magnetischen Geber, weil deren Information SOFORT benötigt wird, weil 
die Regelung sie braucht. Mit schon mehr als 50ms - 100ms hat man ein 
Problem.

Ich habe gerade ein ähnliches Thema und muss wenigstens 10khZ rauschfrei 
verarbeiten, brauche also einen schnellen Filter.

Beitrag "Daten-Filterung per uC - Erklärung des Amplitudenverlaufs"
von Norbert (der_norbert)


Lesenswert?

Kai D. schrieb:
> Das taugt aber meistens nicht zu einer Auswertung für solche
> magnetischen Geber, weil deren Information SOFORT benötigt wird, weil
> die Regelung sie braucht. Mit schon mehr als 50ms - 100ms hat man ein
> Problem.

Von einer Regelung lese ich im Eröffnungspost aber nicht das Geringste.
(Und mit der von ihm beschriebenen Signal-Qualität wäre das sowieso ein 
hochgradig fragwürdiges Unterfangen)
von J. S. (engineer) Benutzerseite


Lesenswert?

Maximilian schrieb:
> Von einem analogen Hallgeber, neben einer rotierenden Welle mit Magnet,
> erhalte ich eine annähernde Sinuswelle von 100 mVSS, zwischen 1 und 50
> Hz.
Wie schnell muss das Ergebnis feststehen?
Das Beste für solche Fälle ist aus technischer Sicht ein modifiziertes 
Kalman-Filter mit variablen Parametern, das sich nachregelt. Praktisch 
wird die Motordrehzahl wie mit einer dymamisches PLL nachverfolgt. Das 
ist aber rechenaufwändig.
Etwas einfacher und dafür gröber ist eine FFT oder ein Görtzel. Ist aber 
mithinter extrem langsam und kommt mit Delay.
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.