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.
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.
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. ;-)
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.
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.
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.
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.
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.
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?
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.
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
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.
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.
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).
Fü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 anhängst.
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.
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.
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.
Für den MCP3008 habe ich diese Library verwendet: https://github.com/adafruit/Adafruit_MCP3008
Ich musste die etwas umschreiben, weil der nur für 3.3V ausgelegt war, aber ich verwende den als 5V. Also habe ich das hier geändert #define MCP3008_SPI_FREQ 3600000 .
Dadurch habe ich den ADC schneller auslesen können. Aber für 1khz Rechteck Signal Bereich mit nur knapp 12 Messungen für High ist das zu wenig, finde ich. Also mit 2 Kanäle. wenn ich nur ein Kanal abfrage, dann 24.
Dann habe ich mir gedacht, dass der DigitalWrite zu langsam ist. Also habe ich den geändert.
Aber diese Änderung hat in diesem Fall nix bewirkt. Mit dem Code kann ich den ESP32 schneller digitalWrite und Read verwenden. Daher habe ich den probiert.
Um genau zu verstehen, was da passiert, wäre meine Empfehlung einen günstigen Logic-Analyzer (Saleae-Clone für ~15 Euro) an die SPI zu hängen, oder ein Zweikanal-Oszi an den Chipselect und Clock.
Weil die 200k Samples pro Sekunde sind das Maximum des Bausteins, aber die liefert er nicht automatisch aus, sondern der Code holt jedes Sample einzeln ab. Durch Messen kann man feststellen, wieviel Zeit vergeht zwischen den Abholungen. Je nachdem wie schnell der Controller ist und was er sonst noch zu tun hat, dauert das länger oder kürzer. Für 200ksps müsste er alle 5 Mikrosekunden einen Transfer machen.
Mir ist nicht klar, ob der ESP das erreicht allein durch zyklisches Abfragen in Software, oder ob man so Späße wie DMA dazu braucht, die den Transfer in Hardware erledigt und nur alle n Samples dann die Software einen Puffer auswertet.
Durch Messen kann man feststellen, wieviel Zeit vergeht
zwischen den Abholungen. Je nachdem wie schnell der Controller ist und
was er sonst noch zu tun hat, dauert das länger oder kürzer. Für 200ksps
müsste er alle 5 Mikrosekunden einen Transfer machen.
oder ein Zweikanal-Oszi an den Chipselect und Clock.
Ich habe ein Bild dazu gemacht. 12 Microsekunden ist der High Pegel. Und der läuft so durch wie das Bild zusehen ist bis zum Ende der Schleife. Ohne dass da Lücken zu bemerken sind.
Ich habe den ESP32-S3 bestellt und werde es mal ausprobieren. Der ESP32 Dev Kit v4 hat sowieso viel zu viele einschränkungen, daher lohnt sich mal der Kauf.
der andere FastAnalogRead ist glaube ich, nur für Arduinos. Ich habe jedenfalls kein ESP32 lesen können.
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.
Die KI sagt :
Der ESP32 verfügt über zwei 12-Bit-Analog-Digital-Wandler (ADCs), die über 18 Kanäle verfügen und DMA-fähig sind. DMA (Direct Memory Access) ermöglicht eine effiziente Datenübertragung von den ADCs in den Speicher, ohne dass die CPU ständig Datenübertragungen überwachen muss. Dies ist besonders nützlich für kontinuierliche Abtastungen mit hoher Geschwindigkeit.
Hauptmerkmale:
1
Zwei ADCs:
2
Der ESP32 hat zwei ADC-Einheiten (ADC1 und ADC2), die jeweils mehrere Kanäle unterstützen.
3
12-Bit-Auflösung:
4
Beide ADCs bieten eine Auflösung von 12 Bit, was 4096 diskrete Werte ermöglicht.
5
18 Kanäle:
6
Insgesamt stehen 18 analoge Eingangskanäle zur Verfügung, die auf verschiedene GPIO-Pins verteilt sind.
7
DMA-Unterstützung:
8
Der ESP32 ADC kann im DMA-Modus betrieben werden, um eine effiziente Datenübertragung zu ermöglichen.
In der Tat! Vor allem muss man zeitlich äquidistant abtasten,
sonst kommt nur Murks und Mist heraus. Das scheint hier im
Thread aber niemanden zu stören. Ist ja auch nicht wichtig: