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
MultimeterADCreadhexreaddeccalculated
2
-----------------------------------------------
3
1,206VADC10x058014081,12V
4
1,516VADC20x06F917841,42V
5
1,792VADC20x07F820401,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
MultimeterADCreadhexreaddeccalculated
2
-----------------------------------------------
3
1,206VADC10x05AF14551,16V
4
1,516VADC20x072118251,45V
5
1,792VADC20x088321791,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?
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?
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.
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 :-(
> 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)!?
> 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.
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.
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."
Nach Einbau der Kalibrierung erhalte ich gute Werte!
1
MultimeterADCreadhexreaddeccalculated
2
-----------------------------------------------
3
1,206VADC10x05E515091,20V
4
1,516VADC20x076518931,51V
5
1,792VADC20x08C322431,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.