ESP32 - Lesen Sie mehrere analoge Eingänge

Ich muss mehrere analoge Eingänge so schnell wie möglich auf einem ESP32 lesen. Mit möglichst schnell meine ich, dass idealerweise alle Eingänge gleichzeitig gelesen werden.

Momentan lese ich sie einfach nacheinander mit aufeinanderfolgenden AnalogREAD()-Aufrufen in meinem Code, aber es kommt vor, dass ich einen Wert an einem Eingang lese, an dem kein Strom anliegt. Ich habe vor einigen Monaten irgendwo gelesen, dass es in diesen Fällen gut ist, zwischen Read-Aufrufen eine Pause einzulegen, um ihm die Zeit zu geben, zur richtigen Eingabe zu wechseln.

Ist das wahr? Was ist eine angemessene Zeit, die ich dort investieren muss, wenn ich bedenke, dass ich alle (5 Eingaben) so schnell wie möglich lesen müsste?

Alle Eingänge liegen auf dem ADC 1.

Hängt vom ADC-Typ ab. Wenn es sich um ein kapazitives Sample-and-Hold handelt, ist es möglicherweise ratsam, nach dem Umschalten auf einen anderen Eingang eine Pause einzulegen, damit sich der Kondensator auf die neue Eingangsspannung einstellen kann. Wie lange dies dauert, hängt von den beteiligten Impedanzen ab.
@Unwichtig Normalerweise wird der analoge Eingangspin getrennt und nur während der Abtastperiode nach Beginn der Umwandlung mit dem Abtastkondensator verbunden. Und es ist die Aufgabe des ADC, den Abtastkondensator zurückzusetzen, wenn er fertig ist. Da die Abtastperiode immer dieselbe ist, gibt es daher keinen Unterschied, ob eine Verzögerung vorliegt oder nicht. Wenn eine Verzögerung hilft, bedeutet dies, dass der ADC möglicherweise sowieso zu schnell läuft oder die Quellenimpedanz für die Abtastzeit zu hoch ist.

Antworten (1)

Der schnellste Weg wäre, zwei verschiedene ADCs zu verwenden, damit Sie zwei analoge Eingänge gleichzeitig abtasten und konvertieren können.

Der zweitschnellste Weg (laut Referenzhandbuch) wäre, dem ADC eine Liste von Kanälen mitzuteilen, die abgetastet werden sollen, und ihm zu sagen, dass er die Kanäle in der Liste abtasten soll, die Ergebnisse mithilfe von DMA in den Speicher schreibt und mit einem Scan-Complete-Interrupt meldet wenn es fertig ist, die Liste durchzugehen.

Eine Verzögerung zwischen ADC-Umwandlungen bringt wenig Nutzen, wenn es hilft, dann ist es ein Zeichen dafür, dass die abgetasteten Signale zu hohe Impedanzen haben, um ein stabiles Ergebnis zu erhalten, was auch ein Zeichen dafür sein könnte, dass der ADC für die erwarteten Signalimpedanzen falsch konfiguriert ist , und nur eine längere Abtastperiode (oder ein langsamerer ADC-Takt) könnte das Problem beheben. Normalerweise erfolgt die Umschaltung zwischen den Kanälen, wenn die analoge Abtastschaltung nicht mit dem analogen Pin verbunden ist.

Vielen Dank! Ich werde die Listenversion Ihrer Lösung überprüfen.