Forum: Mikrocontroller und Digitale Elektronik Dela/Sigma extern auswerten


von Christian S. (chris02)


Lesenswert?

Hallo zusammen,

ich spiele gerade ein wenig mit folgendem Eval Board von TI:
https://www.ti.com/tool/AMC3336EVM

Der Delta Sigma gibt ein wunderbares PWM Singal. Dieses Signal würde ich 
aber gerne extern auswerten. Ob am PC, über ein anderes Eval Board mit 
passender SW, einen µC/FPGA, LogicAnalyzer (z.B. Saleae) etc. ist mir 
egal. Hauptsache eine "Plug&Play" Lösung.

Ich hätte halt ganz gerne eine fertige Lösung, welche man kaufen oder 
aufbauen kann um das Signal aus zu werten. Was ich nicht möchte ist, das 
digitale Signal in ein analog Signal umwandeln und dann auswerten.

Leider habe ich per google nichts finden können. Habt ihr eine Lösung?

Viele Grüße

von Harald K. (kirnbichler)


Lesenswert?

Was stellst Du Dir unter "auswerten" vor?

Ein PWM-Signal ist ein digitales Signal mit genau zwei unterschiedlichen 
Pegeln - entscheidend ist hier der zeitliche Verlauf.


Wenn Du das mit irgendwas "auswerten" willst, musst Du /ausreichend 
schnell/ die Signalflanken erfassen.

Das ließe sich mit simplen Polling machen (ständig nachsehen, wie der 
Pegel gerade ist), einfacher aber ist es, auf die Hardwareausstattung 
Deines ungenannten Microcontrollers zurückzugreifen.

Hier bietet sich die Verwendung eines Timers im Zusammenhang mit einem 
Capture-Eingang an; der Timer läuft frei mit ausreichend hoher Frequenz 
und bei jeder Signalflanke wird der Zählerstand erfasst.

Wenn Du diese Zählerstände betrachtest, hast Du Dein Signal 
"ausgewertet".

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Christian S. schrieb:
> Ich hätte halt ganz gerne eine fertige Lösung, welche man kaufen oder
> aufbauen kann um das Signal aus zu werten.

Da bezweifle ich, ob's da was fertiges fuer genau diesen, deinen 
Spezialfall gibt.
TI empfehlen in ihrem Datenblatt (8.2.1.2) ihre C2000 oder Sitara 
Prozessoren, haste da schonmal geguckt, ob bei deren Evalboards evtl. 
was dabei ist?

Gruss
WK

von Peter D. (peda)


Lesenswert?

Es werden ja aus den 20MHz Takt einzelne Pulse ausgeblendet.
Man braucht also nur einen Timer im Waveform-Mode, um die 20MHz zu 
erzeugen und einen weiteren im Counter-Mode zum Zählen. Der µC sollte 
daher mit mindestens 40MHz laufen. Also irgendwas schnelleres als 8051 
oder AVR.

von Alfred P. (paaalm07)


Lesenswert?

Du musst den CLK sowieso vorgeben, minimum 9 MHz. Das könnte sogar ein 
AVR der mit 20MHz läuft. Nyquist sollte also erfüllt sein.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Christian S. schrieb:
> Der Delta Sigma gibt ein wunderbares PWM Singal.

Nur ist das kein PWM, sondern PDM 
https://en.wikipedia.org/wiki/Pulse-density_modulation

Peter D. schrieb:
> Der µC sollte
> daher mit mindestens 40MHz laufen.

und

Alfred P. schrieb:
> Du musst den CLK sowieso vorgeben, minimum 9 MHz. Das könnte sogar ein
> AVR der mit 20MHz läuft. Nyquist sollte also erfüllt sein.

Etwas Luft um den Bitstrom zu filtern usw. braucht man auch noch. Weil 
es offensichtlich ein Einzelstück oder Prototyp werden soll würde ich 
mit der Taktfrequenz deutlich höher gehen, um mich nicht mit der 
MCU-Leistung herumquälen zu müssen.

von Christoph M. (mchris)


Lesenswert?

>Der Delta Sigma gibt ein wunderbares PWM Singal.
>Dieses Signal würde ich aber gerne extern auswerten.

Im einfachsten Fall mit einem RC-Tiefpass und einem ADC-Eingang.

von Falk B. (falk)


Lesenswert?

Christoph M. schrieb:
> Im einfachsten Fall mit einem RC-Tiefpass und einem ADC-Eingang.

Was er EXPLIZIT NICHT wollte!

von Christoph M. (mchris)


Lesenswert?

>Was er EXPLIZIT NICHT wollte!

Hast Recht. Ich habe den letzten Satz übersehen.

von Rainer W. (rawi)


Lesenswert?

Falk B. schrieb:
> Was er EXPLIZIT NICHT wollte!

Fragt sich, was der TO an dem Signal auswerten wollte.
Soll da ein Zähler lustig hoch und runter zählen, soll die 
Frequenzstabilität bestimmt werden, soll der Flankenjitter bewertet 
werden oder was ist das Ziel?

von Falk B. (falk)


Lesenswert?


von Uwe B. (uwe_beis)


Lesenswert?

Du willst das Signal aus dem AMC3336 z. B. mit einem µC/FPGA auswerten, 
ohne noch eine weitere Hardware dazwischen zu haben?

Kein Problem, es ist nur etwas mehr Aufwand in Software. Ob ein µC den 
zusätzlichen Rechenaufwand das schafft, hängt von der Applikation und 
natürlich vom µC ab.

Wie schon mehrfach erwähnt, ist das Ausgangssignal kein PWM-Signal, 
sondern ein PDM-Signal. Der Mittelwert des PDM-Signals entspricht dem 
ursprünglichen Analog-Wert, deswegen Cristophs Hinweis auf einen 
Tiefpass. Der ist prinzipiell richtig, nur bitte nicht als analoger 
Tiefpass + ADC. Nebenbei: Die Auflösung eines PDM-Signals ist, im 
Gegensatz zu PWM oder PCM, inhärent unendlich.

Ein solcher digitaler Tiefpass ist in einem µC oder FPGA natürlich 
möglich. Ein einfacher, 1-poliger digitaler Tiefpass besteht ja daraus, 
einen kleinen Teil des Eingangssignals zu nehmen und zu einem großen 
Teil des Ausgangssignals zu addieren. (So einfach formuliert würde das 
gleichzeitig zu einer großen "Verstärkung" führen - egal, das ist hier 
nicht das Thema.)

Digitale Tiefpässe höherer Ordnung sind nicht so trivial. Wie man 
analoge Filter (Bessel, Butterworth, Chebycheff) höherer Ordnung in 
digitale Filter umrechnet und wie die aufgebaut sind, ist in 
https://beis.de/Elektronik/Filter/AnaDigFilt/AnaDigFilt.html 
beschrieben. Alles das geht prinzipiell in µC und FPGA. Ohne externe 
Hardware.

Sinc-Filter sind wohl einfacher, habe aber andere Nachteile.

von Gustl B. (gustl_b)


Lesenswert?

Rainer W. schrieb:
> Fragt sich, was der TO an dem Signal auswerten wollte.

Was will man wohl am Ende aus einem PDM Bitstrom rausbekommen der von 
einem 1 Bit ADC kommt? Ja, richtig, Abtastwerte mit mehr Bits Auflösung.

Uwe B. schrieb:
> Digitale Tiefpässe höherer Ordnung sind nicht so trivial.

FIR Filter sind bereits erfunden.

von Uwe B. (uwe_beis)


Lesenswert?

Gustl B. schrieb:
>> Fragt sich, was der TO an dem Signal auswerten wollte.
Ja, das könnte wichtig sein.

> Was will man wohl am Ende aus einem PDM Bitstrom rausbekommen der von
> einem 1 Bit ADC kommt? Ja, richtig, Abtastwerte mit mehr Bits Auflösung.
Na ja, ganz das Ende wird es nicht sein, sondern nur ein 
Zwischenschritt. Das Ende wäre vielleicht einfach nur Speichern, 
Auswertung des Signals auf bestimmte Vorkommnisse, Kompression und 
Speicherung, Anzeige des Signalverlaufs...

> FIR Filter sind bereits erfunden.
Ich muss gestehen, dass ich den Unterschied bzgl. Rechenaufwand zwischen 
IIR und FIR nicht abschätzen kann. Der hängt sicherlich auch von der 
Applikation bzw. dem Ziel ab.

von Hans-Georg L. (h-g-l)


Lesenswert?

Hallo Christian,
das sieht nur so aus wie PWM ist aber üblicherweise ein SPI Daten Stream 
getaktet durch den Clock Eingang. Es gibt auch welche die Manchester 
Code ausgeben.
Ich würde dir einen STM32H750 vorschlagen den bekommst als Board für ca. 
15€.
https://de.aliexpress.com/item/1005001567462650.htm.
Der H753 kostet etwas mehr und hat dafür mehr Flash Speicher

Die haben einen "Digital filter for sigma delta modulators (DFSDM)" 
damit hast du schonmal die Hardware erschlagen und Code-Beispiele dafür 
findest du auch im Netz...

von Christoph M. (mchris)


Lesenswert?

Christian S.
>Ich hätte halt ganz gerne eine fertige Lösung, welche man kaufen oder
>aufbauen kann um das Signal aus zu werten.
Du könntest einen PiPico und die PDM-Library verwenden, dort ist wohl 
ein Sinc3 Filter eingebaut:

https://github.com/earlephilhower/arduino-pico/tree/master/libraries/PDM

von X. Y. (Gast)


Lesenswert?

Hannes J. schrieb:
> Nur ist das kein PWM, sondern PDM
> https://en.wikipedia.org/wiki/Pulse-density_modulation
Für die Auswertung ist das wahrscheinlich ziemlich gleich.

Falk B. schrieb:
> Christoph M. schrieb:
>> Im einfachsten Fall mit einem RC-Tiefpass und einem ADC-Eingang.
> Was er EXPLIZIT NICHT wollte!
Irgendeine Form der Filterung wird benötigt. Auch wenn es kein analoger 
sein soll. Ein IIR ließe sich einfach auch mathematisch nachbilden.

Uwe B. schrieb:
>> FIR Filter sind bereits erfunden.
> Ich muss gestehen, dass ich den Unterschied bzgl. Rechenaufwand zwischen
> IIR und FIR nicht abschätzen kann.
IIR sind als Systeme erster Ordnung eigentlich am Einfachsten. Wenn man 
auf einen BIQAD wechselt wird es aufwändiger und manche FIR sind 
effektiver. Für solche Aufgaben wie das Auswerten von PWM benuzt man 
Dezimationsfilter.

In der ersten Stufe lassen sich diese sehr einfach mit einem 
Hogenauer-Filter machen. Das sind praktisch nur einfach ein paar 
verkette Zähler.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Holger W. schrieb:
> Hannes J. schrieb:
>> Nur ist das kein PWM, sondern PDM
>> https://en.wikipedia.org/wiki/Pulse-density_modulation
> Für die Auswertung ist das wahrscheinlich ziemlich gleich.

Im Gegenteil. PDM kannst du einfach zählen. Z.B. mit der 
Counter-Hardware eines µC, der mit dem Takt des Delta-Sigma Wandlers 
synchronisiert ist. Zum Beispiel ein 8-Bit Counter, und für die Dauer 
von 256 Taktsignalen zählen. Das reduziert den Datenstrom 256:1 und aus 
deinem 20 MHz 1-Bit Datenstrom macht dir die Hardware einen wesentlich 
zivilisierteren 78,125 kHz 8-Bit Datenstrom für die weitere Verarbeitung 
im µC.

PWM musst du timen (Dutycyle messen) oder (keine gute Idee) analog 
filtern und danach mit dem AD-Wandler eines µC messen.

Der Dutycycle von PDM enthält hingegen keine weitere Information die 
über  DT == 0 --> 0 oder DT > 0 --> 1 hinaus geht. Wenn du das timest 
bekommst du 20000000 Werte/s, die du auf == 0 testen musst.

von X. Y. (Gast)


Lesenswert?

Hannes J. schrieb:
> PWM musst du timen (Dutycyle messen) oder (keine gute Idee) analog
> filtern und danach mit dem AD-Wandler eines µC messen.
Bitte was?
Du kannst das ganz genauso synchronisieren wie eine PDM. Die PWM hat 
zudem noch eine konstantes Periodenverhalten und ist bei unbekannter 
Frequenz und Phase einfacher zuverarbeiten.

von Gustl B. (gustl_b)


Lesenswert?

Hannes J. schrieb:
> PDM kannst du einfach zählen.

Ja, aber das ist nicht verlustfrei! Das Zählen ist schon ein Filter, 
Tiefpass. Aber eben auch kein gutes Filter. Ich habe damals für PDM 
Mikrofone einen FIR genommen weil das Ergebnis nur mit Zählen zu 
schlecht war.

Hannes J. schrieb:
> Das reduziert den Datenstrom 256:1

Nein. Die Frequenz. Die Datenrate nur 1:32

Holger W. schrieb:
> synchronisieren

Was meinst du damit?

: Bearbeitet durch User
von X. Y. (Gast)


Lesenswert?

Gustl B. schrieb:
> Holger W. schrieb:
>> synchronisieren
>
> Was meinst du damit?

Du musst on Phase sein mit dem Signal. Entweder kennst du die Frequenz 
oder du tastest ab oder du generierst die Frequenz.

von Gustl B. (gustl_b)


Lesenswert?

Holger W. schrieb:
> Du musst on Phase sein

Was meinst du denn damit?!
PDM liefert einen Bitstrom. Es reicht wenn du jedes einzelne Bit korrekt 
erkennst. Dazu gibt es üblicherweise noch eine Clock mit der man diese 
Bits abtasten kann.

von Falk B. (falk)


Lesenswert?

Gustl B. schrieb:
> Dazu gibt es üblicherweise noch eine Clock mit der man diese
> Bits abtasten kann.

Eine Clock? Eine coocoo clock? Oder doch eine Glock? Vielcht nur ein 
Glöckchen?

von Gustl B. (gustl_b)


Lesenswert?

Man hat üblicherweise einen Takt mit fester Phase zu den Bits. Entweder 
weil man den Takt verwendet um den AD Wandler zu betreiben oder weil der 
den Takt als Ausgang mit anbietet. Es ist jedenfalls nicht das Problem 
die Bits von der PDM zu erfassen. Das Problem ist eher die gut genug zu 
filtern. Auch das ist schon gelöst.

von Alexander (alecxs)


Lesenswert?

iht redet hier von verschiedenen Sachen

https://www.mikrocontroller.net/articles/Pulsdichtemodulation

von Gustl B. (gustl_b)


Lesenswert?

Keine Sorge, ich weiß was PDM ist.

von Alexander (alecxs)


Lesenswert?

gut und was wollt ihr dann immer mit dem zählen?

von Gustl B. (gustl_b)


Lesenswert?

Das weiß ich auch nicht. Falk hatte schon sehr weit oben geschrieben 
dass man das filtern sollte. Sehe ich genauso. Allerdings ist das Zählen 
auch ein Filter. Kein guter Filter, aber eben ein lausig schlechter 
Tiefpass.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Zaehlen ist sowas wie integrieren fuer Haubdschueler. Mit einem 
Integrator faengt ein Hogenauerfilter an, um eine Dezimation zu 
erreichen.
Deshalb immer dieses zaehlen.

von Christoph M. (mchris)


Lesenswert?

>Das weiß ich auch nicht. Falk hatte schon sehr weit oben geschrieben
>dass man das filtern sollte.

Und noch besser, es gibt den OpenPDMFilter:

https://github.com/earlephilhower/arduino-pico/blob/master/libraries/PDM/src/rp2040/OpenPDMFilter.c

von X. Y. (Gast)


Lesenswert?

Gustl B. schrieb:
> PDM liefert einen Bitstrom. Es reicht wenn du jedes einzelne Bit korrekt
> erkennst.

Dazu musst du die Phase des Taktes kennen. Also wie ich geschrieben 
habe, sie selbst erzeugen, oder kennen und dann synchron sampeln, oder 
asynchron einsampeln.

Hast du das noch nie getan?

Nochmal: Es ist egal ob PDM oder PWM oder irgend ein anderes digitales 
Signal, du musst die Flanken erwischen und irgendwie integrieren, zählen 
oder summieren oder wie immer du es nennen möchstest.

von Gustl B. (-gb-)


Lesenswert?

Holger W. schrieb:
> Dazu musst du die Phase des Taktes kennen.

Nein? Es reicht wenn ich einen Takt habe mit dem ich die Bits abtasten 
kann.

Holger W. schrieb:
> Hast du das noch nie getan?

Doch, mit mehreren PDM Mikrofonen. Und ja da hatte ich immer einen Takt. 
Phase war egal, aber das war eben der Bittakt mit dem ich die Bits schön 
erfassen konnte.

Holger W. schrieb:
> Es ist egal ob PDM oder PWM oder irgend ein anderes digitales
> Signal

Nein.

Holger W. schrieb:
> du musst die Flanken erwischen

Wozu die Flanke? Flanke der Bits oder vom Takt?
Bei PDM muss man die Bits korrekt erfassen. Keine Flanken.
Bei PWM macht Flanke natürlich Sinn, hier geht es aber um PDM.

Holger W. schrieb:
> irgendwie integrieren, zählen
> oder summieren oder wie immer du es nennen möchstest.

Das kann man so machen, aber dann ist es bei PDM eben schlecht. Bei PWM 
kann man das machen um das Tastverhältnis zu bestimmen, dann ist es gut, 
aber PDM ist etwas Anderes, das muss man tiefpass filtern. Ja, 
Integrieren oder Summieren ist auch ein tiefpass Filter, aber eben ein 
sehr schlechter.

von Benedikt S. (benedikt_s)


Lesenswert?

www.st.com/resource/en/application_note/an4990-getting-started-with-sigm 
adelta-digital-interface-on-applicable-stm32-microcontrollers-stmicroele 
ctronics.pdf

Ich lasse diesen Link mal hier.

von Alexander (alecxs)


Lesenswert?

Wir erfinden also einen Takt und zählen imaginäre Flanken. Gefällt mir

von X. Y. (Gast)


Lesenswert?

Gustl B. schrieb:
> Holger W. schrieb:
>> Dazu musst du die Phase des Taktes kennen.
>
> Nein? Es reicht wenn ich einen Takt habe mit dem ich die Bits abtasten
> kann.

DAS IST DOCH DASSELBE!

von Gustl B. (-gb-)


Lesenswert?

Nein, die Bits kann ich bei ziemlich beliebiger Phasenlage erfassen. Es 
muss nur sichergestellt sein, dass nicht der Zeitpunkt an dem die Bits 
ihren Wert ändern können getroffen wird.

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.