Forum: Mikrocontroller und Digitale Elektronik NUCLEO-G474R, STM32G474. STM32CubeIde, Optimierung ADC-Genauigkeit


von Uli N. (uln)


Angehängte Dateien:

Lesenswert?

Für meinen aktuellen Testaufbau nutze ich ein NUCLEO-G474R und die 
Codegenerierungsmöglichkeiten der STM32CubeIde.

Ich lese mittels ADC1 und ADC2 mit 8kHz zwei Analogwerte ein, deren 
dürftige Genauigkeit mich etwas überrascht hat - bei einem Projekt vor 
zwei/drei Jahren mit einem STM32F405 (allerdings mit "bare metal" 
Programmierung) sind mir derartige Abweichungen nicht aufgefallen.
1
    Multimeter  ADC  read hex  read dec  calculated
2
    -----------------------------------------------
3
      1,206V   ADC1   0x0580     1408       1,12V
4
      1,516V   ADC2   0x06F9     1784       1,42V
5
      1,792V   ADC2   0x07F8     2040       1,62V
Durch Heruntersetzen der Default-ADC-Clock auf ein Achtel konnte ich die 
Genauigkeit zwar noch ein gutes Stück verbessern, eine weitere Senkung 
der ADC-Clock verbessert die Werte aber nicht mehr.
1
    Multimeter  ADC  read hex  read dec  calculated
2
    -----------------------------------------------
3
      1,206V   ADC1   0x05AF     1455       1,16V
4
      1,516V   ADC2   0x0721     1825       1,45V
5
      1,792V   ADC2   0x0883     2179       1,73V
Die Analogeingänge sind direkt mit einem OP-Ausgang (LM2904) verbunden,
so dass ich hinsichtlich Quellimpedanz wohl keine zusätzlichen 
Ungenauigkeiten zu erwarten habe.

Mache ich noch was Grundsätzliches falsch?
Hat jemnd noch Hinweise, was man u.U. verbessern könnte?
Hat schon jemand die unzähligen Angaben zur Genauigkeit im Datenblatt in 
einen einzigen Prozentwert umgerechnet?

: Bearbeitet durch User
von Uwe Bonnes (Gast)


Lesenswert?

Uli N. schrieb:
> Die Analogeingänge sind direkt mit einem OP-Ausgang (LM2904) verbunden,
> so dass ich hinsichtlich Quellimpedanz wohl keine zusätzlichen
> Ungenauigkeiten zu erwarten habe.
Aber Kondesnatoren direkt an den AIN Eingaengen hast Du doch?

von Thomas F. (tf1973)


Lesenswert?

Kalibrierung durchgeführt?

Beitrag #6203416 wurde von einem Moderator gelöscht.
von Uli N. (uln)


Angehängte Dateien:

Lesenswert?

Nein, da lt. Datenblatt eine Vergrößerung der so wie so vorhandenen 
parasitären Kapazität die ADC-Genauigkeit verschlechtern würde - 
außerdem sollte, wenn in der Ecke ein Problem vorhanden ist, eine 
weitere Verringerung der ADC-Clock-Frequenz etwas bringen - tut es aber 
definitiv nicht.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Uli N. schrieb:
> Nein, da lt. Datenblatt eine Vergrößerung der so wie so vorhandenen
> parasitären Kapazität die ADC-Genauigkeit verschlechtern würde

Auch ohne es zu verstehen: leg mal 1 - 10 nF direkt an den ADC-Eingang.
Alternativ den LM2904 durch einen µA741 ersetzen :-(

von Uli N. (uln)


Lesenswert?

> Kalibrierung durchgeführt?
> offest/gain compensation?

nein - sowas habe ich bis dato nur gemacht, um aus dem ADC das letzte
herauszukitzeln.

Wäre das erste mal seit dem 30 Jahre alten C167, wenn sowas notwendig 
wäre,
um überhaupt passable Werte zu erhalten (und das bei einem "brandneuen" 
Baustein)!?

von Uli N. (uln)


Lesenswert?

> Auch ohne es zu verstehen: leg mal 1 - 10 nF direkt an den ADC-Eingang.

Ist schon geplant - kann gerade nur nicht unter's Mikroskop zum Löten.

von Uli N. (uln)


Lesenswert?

> Auch ohne es zu verstehen: leg mal 1 - 10 nF direkt an den ADC-Eingang.

Ich habe das mal beim ADC2 Signal getestet und keine Verbesserung 
feststellen können, auch wenn ich es mit der 1/64 ADC-Clock teste - im 
Gegenteil, die eingelesenen Werte enthalten nun immer wieder Werte, wie 
ich sie mit der 1/1 ADC Clock erhalten habe.

von Guest (Gast)


Lesenswert?

Stell deine ADC sample time mal auf mehr als 2.5 Zyklen...

Das SH hat vermutlich nicht genug Zeit um sauber geladen zu werden. Bei 
den 8KHz die du willst kannst du das vermutlich auf den Maximalwert 
stellen.

Um deine Frage zu beantworten ja du machst grundsätzlich etwas falsch, 
du hast dich offensichtlich nicht mit der Funktionsweise des ADCs 
auseinander gesetzt.

von Stefan F. (Gast)


Lesenswert?

Uli N. schrieb:
>> Kalibrierung durchgeführt?
> nein

Dann würde das mal zuerst versuchen. Kapitel 20.4.8 vom Referenzhandbuch 
sagt dazu

"Calibration is preliminary to any ADC operation. It removes the offset 
error which may vary from chip to chip due to process or bandgap 
variation."

von Uli N. (uln)


Lesenswert?

Nach Einbau der Kalibrierung erhalte ich gute Werte!
1
    Multimeter  ADC  read hex  read dec  calculated
2
    -----------------------------------------------
3
      1,206V   ADC1   0x05E5     1509       1,20V
4
      1,516V   ADC2   0x0765     1893       1,51V
5
      1,792V   ADC2   0x08C3     2243       1,79V

Nicht so recht einleuchten mag mir, warum der Code Generator der Klicki 
Bunti das nicht in die ADC_Init() einbaut, wenn ohne doch nichts geht 
bzw. wenigstens ein Häckchen dafür vorhanden ist, mit dem man das 
erzwingen kann.

Thx für die Hinweise.

Beitrag #6204060 wurde von einem Moderator gelöscht.
Beitrag #6204202 wurde von einem Moderator gelöscht.
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.