Forum: Mikrocontroller und Digitale Elektronik Filterausmessung mit Arduino oder STM32


von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich würde gerne automatisch ein Bodediagramm eines Filters erzeugen.
Dazu würde ich gerne die Messung mit z.B. einem STM32 automatisieren.

Filter Grenzfrequenz: 50kHz

Meine Idee:
Messung von: 1kHz bis 200kHz

STM32F105RBT6 hat einen DAC der bis zu 1MSPS schafft.
Da ich ja aber auch noch eine Sinustabelle ausgeben muss, genügt dies 
nicht.
Bei 200kHz wären nur noch 5 Sinuswerte möglich.

Deshalb die idee: Array mit Sinuswerten. Timer kickt DMA an. DMA 
schreibt werde in das PWM Timer Register. So sollten wohl ca. 200kHz 
möglich sein.

Die Messung soll wie folgt ablaufen:

STM gibt definierte Frequenz an Ausgang IO1 aus.
Dieses Signal muss jedoch noch Entkoppelt werden. Daher 1uF?
Dieses geht nun auf das Filter.
Die Ausgangsspannung des Filters wird während. z.b. 10ms mit dem ADC 
eingelesen und mittels Berechnung der RMS Wert gebiltet und abgelegt.

Nun zum Problem.
Der STM hat nur single ended ADC.
Was gilt es zu berücksichtigen, wenn ich den ADC Eingang mittels 
Spannungsteiler auf VDD halbe lege und mittels Kondensator das 
Ausgangssignal des Filters dort einspeise?

Habe noch ein Bild angehängt.
Danke!

von Thomas W. (diddl)


Lesenswert?

Es so günstige 3€ Bausteine die Sinus mit einstellbarer Frequenz 
ausgeben, dass man da wirklich nicht selbst herum basteln muss.


https://de.aliexpress.com/item/CJMCU-9833-AD9833-Modul-Signal-Generator-Modul-STM32-STM8-STC-Mikroprozessoren-Sinus-Quadrat-Welle-DDS-Monitor/32907216793.html

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Den AD9833 hab ich auch schonmal genutzt.
Bei hohen Frequenzen kommt da auch kein wirklicher Sinus mehr raus.
Das hat was mit dem DDS Prnzip zu tun, umso höher die Ausgangsfrequenz 
umso mehr Sinuszwischenwerte in der Tabelle werden übersprungen.

Also genau das was der TO mit dem DAC des STM32 auch machen muss.
Daher brauchts hinter dem DAC eh nochn Tiefpassfilter und dahinter einen 
Buffer.

Bei meinem AD9833 Projekt gabs da nen schönen 3fach PI Filter dahinter:
http://www.fritzler-avr.de/gallery/main.php?cmd=imageview&var1=Projekte%2FSignalgenerator+2%2FIMG_2115k.jpg

von Frank K. (fchk)


Lesenswert?

Ich würde eher externe ADCs und DACs verwenden. Die sind meist von 
höherer Qualität, Du fängst Dir weniger Störungen ein, und Du kannst dir 
die geeigneten Bausteine aussuchen.

Als Idee hier mal ein Vorschalg mit einem I2S-Codec bis 192kHz.
https://statics.cirrus.com/pubs/proDatasheet/CS4271_F1.pdf

Ist halt für Audio gedacht, d.h. bis DC kommst Du nicht runter. Dafür 
eben mit differentiellen Ein- und Ausgängen und 16 Bit Wortbreite. 
Ansonsten gibts auch ADCs und DACs für höhere Abtastraten bis in den 
GHZ-Bereich hinein, wenn Du das brauchst.

Oder ganz anders:
- ein einstellbarer Sinusgenerator als Signalquelle
- ein einstellbarer Sinusgenerator als Referenz für den Mischer
- ein Mischer mit Tiefpass, der das Empfangssignal auf eine 
Zwischenfrequenz runtermischt
- ein guter DAC mit niedriger Abtastrate, der die ZF einliest.
- ggf die letzten beiden Punkte noch ein zweites Mal für einen zweiten 
Empfänger als Referenz

Siehe auch https://www.youtube.com/watch?v=IpI-cGU6-FY, wo ein 
kommerzielles Produkt auseinander genommen wird. Da siehst Du, wie das 
gemacht wird.

fchk

von T.U.Darmstadt (Gast)


Lesenswert?

Mw E. schrieb:
> Den AD9833 hab ich auch schonmal genutzt.
> Bei hohen Frequenzen kommt da auch kein wirklicher Sinus mehr raus.
> Das hat was mit dem DDS Prnzip zu tun, umso höher die Ausgangsfrequenz
> umso mehr Sinuszwischenwerte in der Tabelle werden übersprungen.

Das Springen ist immer der Fall. Man erkennt es nur bei kurzen Perioden 
stärker. Mit einem DAC ist es grundsätzlich aber nur dann besser, wenn 
man auch auf höheren Auflösungen rechnet. Die DDS chips gehen immerhin 
schon bis 4MHz/n @ 24Bit

von Egon D. (Gast)


Lesenswert?

Mw E. schrieb:

> Bei hohen Frequenzen kommt da auch kein wirklicher
> Sinus mehr raus. Das hat was mit dem DDS Prnzip zu
> tun, [...]

Nein.

Das hat damit zu tun, dass Analogtechnik dem normalen
Arduino-Bastler Teufelswerk und ein Gräuel ist. Dass man
in einem Abtastsystem -- und ein DDS ist ein solches --
einen Tiefpass braucht, ist nicht zu vermitteln.

von Egon D. (Gast)


Lesenswert?

Holger K. schrieb:

> STM32F105RBT6 hat einen DAC der bis zu 1MSPS schafft.
> Da ich ja aber auch noch eine Sinustabelle ausgeben
> muss, genügt dies nicht.

???

> Bei 200kHz wären nur noch 5 Sinuswerte möglich.

Und?

Das Signal wird, wenn ich das richtig sehe, an der
halben Abtastfrequenz gespiegelt; die niedrigste
Nebenlinie tritt also bei 800kHz auf. Da genügt schon
ein relativ simples Filter für ein brauchbares Signal.


> Die Ausgangsspannung des Filters wird während. z.b.
> 10ms mit dem ADC eingelesen und mittels Berechnung
> der RMS Wert gebiltet und abgelegt.

Naja... leicht unclever.

Wenn Du schon eine zeitaufgelöste Messwertfolge im
Mikrocontroller hast, kannst Du auch einen anständigen
Quadraturdemodulator programmieren (Lock-in-Prinzip;
Faltung mit sin/cos).

Das macht die Messung nochmal unempfindlicher für
nichtharmonische Nebenwellen.

von Holger K. (holgerkraehe)


Lesenswert?

Vielen Dank für eure Antworten.


Frank K. schrieb:
> Oder ganz anders:
> - ein einstellbarer Sinusgenerator als Signalquelle
> - ein einstellbarer Sinusgenerator als Referenz für den Mischer
>...

Mit Mischern etc. habe ich leider keine Erfahrungen.

Egon D. schrieb:
> Naja... leicht unclever.
>
> Wenn Du schon eine zeitaufgelöste Messwertfolge im
> Mikrocontroller hast, kannst Du auch einen anständigen
> Quadraturdemodulator programmieren (Lock-in-Prinzip;
> Faltung mit sin/cos).
>
> Das macht die Messung nochmal unempfindlicher für
> nichtharmonische Nebenwellen.

Klingt interessant.
Habe ich noch nicht gehört bisher. Bzw. keine Erfahrungen damit.
Was verliere ich denn, wenn ich einfach die Samples in eine RMS Spannung 
umrechne?

Danke

von T.U.Darmstadt (Gast)


Lesenswert?

Holger K. schrieb:
> Was verliere ich denn, wenn ich einfach die Samples in eine RMS Spannung
> umrechne?

S/N! Du rechnest dein komplettes Rauschen mit.

von W.S. (Gast)


Lesenswert?

Egon D. schrieb:
> Das Signal wird, wenn ich das richtig sehe, an der
> halben Abtastfrequenz gespiegelt; die niedrigste
> Nebenlinie tritt also bei 800kHz auf. Da genügt schon
> ein relativ simples Filter für ein brauchbares Signal.

Das glaubst aber auch nur du.
Designe dir mal ein "relativ simpls" Filter und guck dir dann das damit 
gefilterte Ausgangssignal an.

Mit dem DAC vom STM32 schaffst du bestenfalls 1 MSPS, der AD9833 
verträgt (wenn ich mich recht erinnere) maximal etwa 30 MHz und die 
AD9850 sind mit 120 MHz zwar taktmäßig besser, aber bei all diesem 
Kruscht ist das Ausgangssignal nur 10 Bit breit. OK, für's Grobe sollte 
das ausreichen, aber damit wirklich Filter ausmessen ?

Ich würde für NF-Zwecke mir entweder die Mühe machen, einen abstimmbaren 
rein analogen Sinusoszillator zu bauen (Wien oder Phasenschieber) und 
ihn nachträglich zu kalibrieren oder es so zu machen wie früher die 
Wobbler: einen Cursor in Form eines besonders hellen Leuchtpunkts in der 
dargestellten Kurve per Poti, und dann zwischen den Durchläufen den 
Oszillator auf eben diese Frequenz setzen und Frequenz ausmessen.

Oder: gleich einen DDS-Chip mit möglichst großer DAC-Bitbreite zu 
nehmen.

Für die Pegelmessung muß sich der TO dann sowieso was ausdenken, denn 
die üblichen logarithmischen Detektoren taugen für NF nicht sonderlich. 
Da wäre dann ein Spitzenwertdetektor und etwas Rechnen angesagt.

W.S.

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.