Forum: Mikrocontroller und Digitale Elektronik 40khz mit ESP32 erfassen


von Erik H. (erik_h)


Lesenswert?

Hi, welches Modul/Wandler benötige ich, um 40khz zu erfassen. Ich will 
die Wellen auslesen und weiter bearbeiten. Ich brauch 2 Kanäle.

Was ich bisher versucht habe:
Ich habe ein MCP3008 verwendet, mit der Hoffnung die 40khz auszulesen. 
200ksps dachte ich, sollte ausreichen. Ich nutze den adafruit_mcp3008 
library. https://github.com/adafruit/Adafruit_MCP3008
Dann habe ich bemerkt, dass 2 Kanäle sehr lange Zeit benötigt. Ich habe 
bei einem 1khz nur 6 mal ein Hohen Pegel lesen können, bei einem 
Rechteck Signal. Also habe ich nur ein Kanal ausgelesen, dann wurden 12 
Werte gelesen. Das war für mich immer noch zu langsam. Also habe ich in 
der library nachgeschaut und gesehen, dass es auf 1Mhz SPI Frequenz 
läuft. Ich habe es Manuell geändert auf 3.6Mhz. Denn der Wandler läuft 
mit 5V. Nun habe ich 24 Hohe Werte in 1khz. Aber wenn ich die 40 khz 
auslesen möchte, dann ist das doch viel zu wenig.

Arduino Code:
1
#include <Adafruit_MCP3008.h>
2
3
Adafruit_MCP3008 adc;
4
5
int bufferL[10000];
6
int bufferR[10000];
7
8
int count = 0;
9
10
void setup() {
11
  Serial.begin(500000);
12
  while (!Serial);
13
  adc.begin();
14
  
15
}
16
17
void loop() {
18
  if(count==10000){
19
    for (int i=0; i<10000; i++) {
20
      Serial.println(bufferL[i]);
21
    }
22
    count=0;
23
  }else{
24
    bufferL[count] = adc.readADC(0);
25
    //bufferR[count] = adc.readADC(1);
26
    count++;
27
  }
28
}

von Wastl (hartundweichware)


Lesenswert?

Erik H. schrieb:
> welches Modul/Wandler benötige ich, um 40khz zu erfassen. Ich will
> die Wellen auslesen und weiter bearbeiten.

Das versteht kein Schwein. Erklär erst mal im Detail was du
unter "40khz erfassen" und unter "Wellen auslesen" verstehst.

von Björn W. (bwieck)


Lesenswert?

Wastl schrieb:
> Das versteht kein Schwein. Erklär erst mal im Detail was du
> unter "40khz erfassen" und unter "Wellen auslesen" verstehst.

Er will offenbar ein Analogsignal bis 40kHz abtasten.
Dazu braucht er wenn es ordentlich werden soll ein Wandler mit 10 MSps.
Sein MCP3008 kann nur 200kSps, ist also unbrauchbar.

von Marci W. (marci_w)


Lesenswert?

Björn W. schrieb:
> Er will offenbar ein Analogsignal bis 40kHz abtasten.
> Dazu braucht er wenn es ordentlich werden soll ein Wandler mit 10 MSps.

Wieso braucht er eine 25-fache Abtastfrequenz? OK, ich gehe jetzt mal 
von einem irgend wie gearteten Audio-Signal aus? Aber vielleicht verrät 
uns der TO, was für ein Signal er denn genau auswerten will.
Nicht dass er in Wirklichkeit ein Digitalsignal erfassen möchte. ;-)

ciao

Marci

von Erik H. (erik_h)


Lesenswert?

Ja, es ist ein analoges Signal. Das wird von ein Ultraschallwandler 
erfasst.
Also um nicht zu übertreiben, würde denn auch 1msps ausreichen?
welches Modul, oder ADC wandler würdet ihr mir empfehlen? Ich möchte das 
mit ein esp32 benutzen. Wenn möglich, mit ein library für arduino.

von Wastl (hartundweichware)


Lesenswert?

Björn W. schrieb:
> Sein MCP3008 kann nur 200kSps, ist also unbrauchbar.

Käse!
Laut Abtast-Theorem genügt die doppelte Abtastrate bezüglich
der maximal auftretenden Frequenz.

GAF (grösster anzunehmender Fehler) ist dass die Abtastung
nicht zeitlich äquidistant, also im festen Raster, erfolgt.
Das ergibt maximalen Mist.

von Nemopuk (nemopuk)


Lesenswert?

Unabhängig von der optimalen Abtastrate kommt es mir komisch gor, dass 
er unter 1000 Abtastungen nur 12 oder 24 mal einen HIGH Pegel erhält.

Ich würde erstmal messen, ob das Signal direkt am Eingang des ADC 
wirklich ein 40 kHz Rechteck Signal ist.

Und ich würde den ADC mit einem Poti als Signalquelle testen, ob er 
wenigstens bei DC plausible Werte ausgibt.

: Bearbeitet durch User
von Klaus R. (klara)


Lesenswert?

Erik H. schrieb:
> Ich habe
> bei einem 1khz nur 6 mal ein Hohen Pegel lesen können, bei einem
> Rechteck Signal. Also habe ich nur ein Kanal ausgelesen, dann wurden 12
> Werte gelesen. Das war für mich immer noch zu langsam. Also habe ich in
> der library nachgeschaut und gesehen, dass es auf 1Mhz SPI Frequenz
> läuft. Ich habe es Manuell geändert auf 3.6Mhz. Denn der Wandler läuft
> mit 5V. Nun habe ich 24 Hohe Werte in 1khz. Aber wenn ich die 40 khz
> auslesen möchte, dann ist das doch viel zu wenig.

Wenn Du nur Spitzenwerte messen willst, dann gibt es einfachere Methoden 
die dann Dein MCP3008 auch besser umsetzen kann. Schau Dir die Schaltung 
"Einfacher Diodendetektor" an.

https://de.wikipedia.org/wiki/H%C3%BCllkurvendemodulator
mfg Klaus

: Bearbeitet durch User
von Erik H. (erik_h)


Lesenswert?

Ne, es ist ein 1khz Signal von ein Oszilloskop. Mit dem habe ich erstmal 
probiert

von Erik H. (erik_h)


Lesenswert?

Danke, das schaue ich mir an

von Wastl (hartundweichware)


Lesenswert?

Klaus R. schrieb:
> Wenn Du nur Spitzenwerte messen willst, dann gibt es einfachere Methoden
> die dann Dein MCP3008 auch besser umsetzen kann.

Weder kann er formulieren was er genau will, noch hat er
Ahnung davon wie er das machen soll.

von Erik H. (erik_h)


Lesenswert?

Danke Klaus, das gibt mir Hoffnung in eine andere Richtung die ich auch 
ausprobieren werde. Evtl sogar die bessere Option.

Ich war erst im Gedanken die Frequenzen auszulesen mit Amplitude und da 
eine Logik einzubauen. Aber umso höher die Geschwindigkeit vom ADC, umso 
teurer und komplizierter werden die Dinger.

: Bearbeitet durch User
von Klaus R. (klara)


Lesenswert?

Erik H. schrieb:
> Ich war erst im Gedanken die Frequenzen auszulesen mit Amplitude und da
> eine Logik einzubauen. Aber umso höher die Geschwindigkeit vom ADC, umso
> teurer und komplizierter werden die Dinger.

So ist es.
mfg klaus

von Wastl (hartundweichware)


Lesenswert?

Erik H. schrieb:
> Aber umso höher die Geschwindigkeit vom ADC, umso
> teurer und komplizierter werden die Dinger.

Je später der Freitag, um so skurriler werden die Ideen.

Die Leute mit den Scheuklappen (die einem daran hindern über
den Tellerrand hinauszusehen) eilen herbei und lassen den
Thread laufen, egal was der TO dazu oder nicht dazu beiträgt.

Vernünftige und konkrete Ideen kommen jedenfalls nicht.

von Alexander (alecxs)


Lesenswert?

Was denn nun, HIGH Pegel oder analoges Signal? Ersteres solltest Du mit 
pulseIn() erfassen können.

von Uwe (uhi)


Lesenswert?

Ich häng mich mal an den Thread ran, mit einer fast identischen 
Fragestellung: Fledermausklassifizierer. Ultraschallwandler, Nutzsignale 
im Bereich 20 bis 70 kHz, AD mit ca. 200ksps und mindestens 10bit 
Auflösung. Mono reicht. Geht das mit einem ESP32? Welcher ADC?

von Dietrich L. (dietrichl)


Lesenswert?

Erik H. schrieb:
> 40khz

Erik H. schrieb:
> 1msps

Du solltest die richtigen Einheiten verwenden.
Man kann zwar erahnen, was du meinst, aber das schafft unnötige 
Verwirrungen...

von Nemopuk (nemopuk)


Lesenswert?

Uwe schrieb:
> Ich häng mich mal an den Thread ran

Super, dann führen wir jetzt also zwei Diskussionen gleichzeitig im 
selben Raum, und bei beiden weiß niemand, worum es geht. Aber hey, wird 
schon.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Wastl schrieb:
> Käse!
> Laut Abtast-Theorem genügt die doppelte Abtastrate bezüglich
> der maximal auftretenden Frequenz.

Doppelkaese!
Es geht im Abtast-Theorem um die maximal auftetende Bandbreite, nicht 
Frequenz.

Was evtl. hier, wenn man "nur" so um 40kHz herum was samplen moechte 
ggf. die Sache vereinfachen koennte, wenn man wuesste was man tut.

scnr,
WK

von Wastl (hartundweichware)


Lesenswert?

Dergute W. schrieb:
> wenn man wuesste was man tut

Das ist eine der entscheidenden Fragen, von der der TO ebenso
wenig Ahnung hat wie von vielen anderen. Bester Hinweis dafür
ist, dass er auf viele Nachfragen keine Antworten weiss. Denn
wenn Antworten kämen würde man merken wie wenig Ahnung er hat.

von Klaus R. (klara)


Lesenswert?

Uwe schrieb:
> Ich häng mich mal an den Thread ran, mit einer fast identischen
> Fragestellung: Fledermausklassifizierer. Ultraschallwandler, Nutzsignale
> im Bereich 20 bis 70 kHz, AD mit ca. 200ksps und mindestens 10bit
> Auflösung. Mono reicht. Geht das mit einem ESP32? Welcher ADC?

Wenn es um Fledermäuse geht, dann ist das schon der richtige Ansatz. Ich 
hatte mir vor Wochen auf meinem Handy die App Spectroid installiert. 
Oben sieht man die Amplituden des Frequenzbandes und unten sieht man den 
zeitlichen Verlauf wie ein Teppich. Zunächst sieht man so gut wie rein 
gar nichts. Dann fing ein Vogel anzutrellern. Und siehe da, man sah in 
der Tat deutlich einen Verlauf der Melodie. Das hatte ich gar nicht so 
erwartet, ist aber nur schlüssig.

Ich denke der TO will so etwas entwickeln.
mfg Klaus

von Richie (mikro123)


Lesenswert?

Wastl schrieb:
> Dergute W. schrieb:
>> wenn man wuesste was man tut
>
> Das ist eine der entscheidenden Fragen, von der der TO ebenso
> wenig Ahnung hat wie von vielen anderen. Bester Hinweis dafür
> ist, dass er auf viele Nachfragen keine Antworten weiss. Denn
> wenn Antworten kämen würde man merken wie wenig Ahnung er hat.


Er ist ja schon seit anderthalb Jahren am Thema:
Beitrag "Mosfet und Ultraschallsensor"

Da wird er wohl ein wenig Ahnung haben.

von Wastl (hartundweichware)


Lesenswert?

Richie schrieb:
> Er ist ja schon seit anderthalb Jahren am Thema:

.... und de Facto nix passiert, Thread im Sande verlaufen.

Auch weil früh die Erkenntnis ausgesprochen wird:

Monk schrieb:
> Dir fehlen Grundlagen.

Ihm fehlt so ziemlich alles, ausser der Fähigkeit Copy&Paste
auszuüben.

von Klaus R. (klara)


Lesenswert?

Wastl schrieb:
> Bester Hinweis dafür
> ist, dass er auf viele Nachfragen keine Antworten weiss. Denn
> wenn Antworten kämen würde man merken wie wenig Ahnung er hat.

Ich würde sagen, am Anfang waren wir alle unwissend. Das ist ja keine 
Schande. Es dauert eben Jahre um Handwerker zu werden und noch etwas 
länger um Ingenieur zu werden. Im Laufe meiner Ausbildungen habe ich 
immer gute Lehrer geschätzt. Die bringen einen auch wirklich weiter.

Wir haben doch gesehen das sich der TO bemüht. Das ist doch die 
Hauptsache dabei. Immerhin hat er zumindest ein Oszi. Das hatte ich in 
meiner Lehre noch nicht.

Also bitte seit etwas toleranter.
mfg Klaus

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Der ESP32 hat doch I2S. Kann er da auch 96kHz oder ist bei 48kHz 
Schluss? Die Beschreibung bei Espressif gibt da nicht so viel her.

von Alexander (alecxs)


Lesenswert?

SPI geht bis 26 MHz da ist noch Luft nach oben. Kommt halt darauf was 
sonst noch so läuft.

von Richie (mikro123)


Lesenswert?

Alexander schrieb:
> SPI geht bis 26 MHz da ist noch Luft nach oben. Kommt halt darauf was
> sonst noch so läuft.

Es ist wenig hilfreich, wenn Du Unsinn schreibst.
SPI geht bis 80MHz bei diversen ESP32, selbst beim alten "ohne Zusätze".

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Erik H. schrieb:
> Das wird von ein Ultraschallwandler erfasst.
Welche Information soll aus dem Signal ausgelesen werden? Nicht, dass es 
hier um das simple Vorhandensein, also die Hüllkurve des Signals geht 
(Abstandsmesseng per US).

Gür alle am einfachsten ist es, wenn du beschreibst, was da von welchem 
Wandler erfasst wird und wozu das gut sein soll. Und wenn du zudem noch 
einen Schaltplan oder wenigstens eine Übersichtsskizze deines Systems 
mit anfängst.

Richie schrieb:
> Da wird er wohl ein wenig Ahnung haben.
Ist da nicht ein Wort zu viel im Satz?

Uwe schrieb:
> Ich häng mich mal an den Thread ran
Mach für eine völlig neue Frage einen neuen Thread auf.

von Alexander (alecxs)


Lesenswert?


: Bearbeitet durch User
von Erik H. (erik_h)


Lesenswert?

Erstmal sehr interessant wie ihr Meinungen über mich macht, nur weil ich 
nicht sofort antworten konnte.

Ich kann auch nicht so sagen, wie ich es geschafft habe Verwirrungen zu 
sorgen und weis grad nicht so genau wie ich als kleiner Hobby 
Elektroniker das besser beschreiben kann.
Mein Vorhaben wollte ich erst nicht schreiben, weil ich einfach selber 
etwas probieren wollte. Ich wollte halt nur wissen, was man da so an ADC 
wandler verwendet. Oder evtl schon mein mit Code etwas falsch mache.

Ich hätte eher Sinuswelle sagen sollen. Naja, diese Kurven die am 
Oszilloskop angezeigt werden.
Diese Höhen und Tiefen wollte ich auslesen/erfassen. Wieviel Volt eine 
Welle ausgibt usw, die von ein Ultraschallsensor(Ein reiner Wandler, der 
mit Operationsverstärker verstärkt wird) gelesen wird. Denn wenn eine 
weitere Welle ein Objekt trifft, die etwas hinter dem ersten Objekt 
steht, dann ist sie meistens noch hinter der ersten abgeprallten Welle. 
Diese Wellen wollte ich auslesen, ob es auch 8 sind, die ich gesendet 
habe. Dann wollte ich eine 35 khz Welle hinterher schicken, und die dann 
erkennen und weiteres versuchen.

Da dachte ich, 200ksps würde für 40khz ausreichen. Zwar sehr Grob, aber 
immerhin erkennbar. Das das Teil jetzt in dem Fall so langsam abfragt, 
hat mir gezeigt, auch durch eure Kommentare, dass 200ksps viel zu wenig 
ist. Denn anscheint habe ich bisher mit mein Code noch nix verkehrt 
gemacht. 200ksps sind doch nix anderes wie 200khz, oder? Also, um eine 
40khz Welle zu erkennen, bedarf es doch mehr Abtastungen, um auch mal 
paar mal ins Tiefe zu messen und in den hohen Bereich. Sagen wir mal, 4 
Tiefe Messungen und 4 Hohe Messungen, damit man sicher gehen kann, dass 
es 40khz sind. Wenn ich nur 40ksps habe, dann wäre das nach mein Denken 
sehr unlogisch ein vernünftigen Wert zu bekommen.

Klaus hat mir super ein anderen Weg gezeigt, den ich ausprobieren werde, 
aber nicht gleich heißt, dass ich das hier so wollte, da einige deswegen 
nochmal nachgefragt haben, was ich nun möchte.

Im anderen Thread habe ich ein Verstärker gebaut mit Filter usw. Den 
habe ich so hoch aufgedreht, dass ich Rechteck Signale bekomme. Die habe 
ich mit dem esp32 ausgelesen durch normale digital Eingänge, ohne ADC. 
Das hat aber zu vielen Fehler geführt, da mein Verstärker einfach zu 
hoch aufgedreht war und nicht die richtigen Operationsverstärker waren. 
Hat nur bedingt geklappt. Aber so konnte ich durch die Schnelle Abfrage 
des esp32 über 10 Hoch und über 10 Tief messen. Somit konnte ich die 
Frequenz sehr gut erkennen, also die Wellenlänge und Anzahl usw. Beim 
ADC habe ich nun mitbekommen, dass alles langsamer läuft.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Du hattest es irgendwo geschrieben (Spannung zu hoch?) aber warum nutzt 
Du nicht einen der 12-Bit ADC Kanäle des ESP32 direkt? Mit 
analogReadFast() kommst Du auf 40kHz.

von Richie (mikro123)


Lesenswert?

Alexander schrieb:
> Richie schrieb:
>> SPI geht bis 80MHz bei diversen ESP32
>
> Als Host, aber nicht als Master.
>
> 
https://docs.espressif.com/projects/esp-idf/en/release-v5.2/esp32/api-reference/peripherals/spi_master.html#timing-considerations

Du solltest die Seite besser mal lesen...

Also: 80Mhz.

von Alexander (alecxs)


Angehängte Dateien:

Lesenswert?

Die Seite die ich Dir verlinkt habe.

von Erik H. (erik_h)


Lesenswert?

Alexander schrieb:
> Du hattest es irgendwo geschrieben (Spannung zu hoch?) aber warum nutzt
> Du nicht einen der 12-Bit ADC Kanäle des ESP32 direkt? Mit
> analogReadFast() kommst Du auf 40kHz.

ich probiere das nochmal. Ich weiß nicht mehr warum ich daran 
gescheitert bin. Ist leider schon sehr lange her. Ich glaub 
analogreadfast war nicht ausreichend. und dann wollte ich auch 2 
Sensoren lesen, was ich jetzt vergessen habe zu erwähnen.
Aber ich probiere das nochmal. Meine alten Codes müsste ich ja noch 
haben.

von Alexander (alecxs)


Lesenswert?

Sollte auch mit deinen ADC klappen. Welche Lib hast Du genutzt?

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.