Forum: Mikrocontroller und Digitale Elektronik STM32F373 ADC hängt


von Jürgen C. (cjr)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe ein mir nicht erklärliches Verhalten beim experimentieren 
festgestellt.
Das Problem liegt nach meiner Einschätzung beim Microcontroller und 
äussert sich wie folgt:
Beim "durchfahren" des Wertebereichs des 12 bit AD-Wandlers ergeben sich 
hohe Wertesprünge bei folgenden Werten:
von 511 nach 568 bleibt der Wert bei 511
von 1023 nach 1099 bleibt der Wert bei 1023
von 3000 nach 3027 bleibt der Wert bei 3027
die Wert die bei ca. 4000 liegen müssten kann ich mit mein Hardware 
nicht erreichen.
Es sind auch noch zwischendrin kleinere Bereiche die das selbe Verhalten 
zeigen.

Festgestellt habe ich es bei der Auswertung eines resistiven 
Toutchpanels,
wo ich jeden gedrückten Punkt auf dem Display anzeigen lasse.
Dabei ergeben sich Streifen die nicht gefüllt werden können wie im
Anhang zu sehen ist.
Es sieht zwar so aus, als würde der Fehler beim Display oder beim
Toutchpanel liegen, aber dies würde ich ausschließen;
Das Toutchpanel weil trotz ADC-Rauschen an jeder Stelle die Abgrenzungen
der Streifen auf den Punkt genau sind, das Display weil die Anzeige
ansonsten(Zeichnen und Schreiben) einwandfrei ist.

Sonstige Hardware(Platine, Spannungsregler usw.) würde ich auch 
ausschließen.

Die Software (HAL) sollte auch nicht verantwortlich sein kann ich
aber nicht ausschließen.

Bleibt noch der Prozessor, der Bit-Fehler im ADC haben könnte.

Vieleicht ist es auch nur ein einmaliger Fehler, der durch unsachgemäße
Behandlung verursacht wurde. Da ich die Hardare nur einmal habe, kann 
ich
dies zur Zeit aber nicht überprüfen. Es wäre nett, wenn jemand die eine 
oder die andere Variante bestätigen könnte.
Vieleicht hilft es auch anderen.

Zur Hardware:
- STM32F373 VBT6 B HPAGF KOR HP 325 (das vermutete Problem)
- resistives Toutchdisplay
- selbstgeäzte Platine, alle Prozessorpinns genutzt aber noch nicht
  vollständig bestückt.
- Recom R783.3-05 Spannungsregler

Das Toutchpanel ist vollgendermaßen angschlossen:
y- -> PA0
X+ -> PA1
X- -> PA2
Y+ -> PA3
direkt verbunden ohne zusätzliche externe Beschaltung.
Es wird mit dem betroffenen ADC Kanal 1 und Kanal 3 ausgelesen.

Viele Grüße

Jürgen C.

von Bergi (Gast)


Lesenswert?

Ein Schaltplan wäre schon hilfreich. Aber das erste was mir einfällt ist 
das sich resistives Touchpad nach hohen Ausgangswiderstand anhört und 
der ADC je nach Samplezeit eine niedrigen Ausgangswiderstand braucht. Im 
spzifischen Datenblatt des MCU steht drinnen wieviel Ohm der Ausgang 
haben darf.

Das nächste ist dein Spannungswandler. Rascom das sind doch meist 
schaltende DC/DC Wandler, ohne LDO dazwischen kannst du mit dem nicht 
den ADC bzw. weil der ADC ja in deinem MCU ist deine MCU versorgen, da 
aufgrund des Schaltens die Versorgung sehr sehr unsauber ist.

von Jürgen C. (cjr)


Lesenswert?

Hallo Bergi,

der Schaltregler bzw. der Widerstand des Toutch würde das durchaus
vorhandene Rauschen der Werte erklären aber nicht die exakt reproduzier-
baren Lücken in den ADC-Werten. Auf dem Bild(Foto vom Display) sind
hunderte Wandlungen zu sehen die immer den gleichen Fehler zeigen.
Senkrechte und waagrechte Unterbrechungen dar schwarzen Bereiche;
Die schwarzen Bereiche entstehen durch Zeichnen auf dem Toutch Display 
und
sollten diese exakten Unterbrechnungen nicht zeigen.



Viele Grüße

Jürgen

: Bearbeitet durch User
von Luis Trenker (Gast)


Lesenswert?

Jürgen C. schrieb:
> Das Toutchpanel ist vollgendermaßen angschlossen:
> y- -> PA0
> X+ -> PA1
> X- -> PA2
> Y+ -> PA3
> direkt verbunden ohne zusätzliche externe Beschaltung.
> Es wird mit dem betroffenen ADC Kanal 1 und Kanal 3 ausgelesen.

... und wo kommt die Spannung her? Widerstände mit den ADC
messen geht nicht ohne Spannung .....

von Bergi (Gast)


Lesenswert?

Das geht schon in dem man einfach die GPIO's auf Push/Pull Ausgänge 
umschaltet, aber der Widerstand ist ohne Puffer vorm ADC ein riesen 
Problem und verfälscht das Ergebniss so stark das man nicht wissen kann 
was rauskommt. Den ADC Toasten ist nicht so einfach möglich da jeder 
Eingang mit Dioden intern geschützt ist. Ein Problem kann auch noch ein 
zu hoher Takt am ADC sein. Das kann auch die seltsamsten Fehler 
verursachen aber ich tippe auf den Hochohmigen Ausgang des Displays in 
kombi mit der schlechten Versorgung. Häng mal statt dem Touchpanel eine 
Labornetzteil drauf und fahre vorsichtig den Spannungsbereich durch.

von Jürgen C. (cjr)


Lesenswert?

Hallo,

wie Bergi sagt: GPIO Umschaltung.
Das Rauschen bekomme ich mit "Entprellung" (Mehrfachabfrage) ganz gut in 
den
Griff, aber auch bei unterschiedlicher Spannungsversorgung treten die 
Fehler
immer Genau an der gleichen Stelle auf, ob mit oder ohne "Entprellung".
Es scheint so als wollte der MC die betroffenen Werte einfach nicht
ausgeben. Ich kann mir das nur durch einen Bitfehler im ADC vorstellen.
Mich würde interessieren, ob dies nur eine einmalige Ausnahme ist, oder
ob dieses Problem schon bei anderen auch aufgetaucht ist.

Viele Grüße

Jürgen

von Luis Trenker (Gast)


Lesenswert?

Jürgen C. schrieb:
> Ich kann mir das nur durch einen Bitfehler im ADC vorstellen.

Triggerst du denn den ADC und wartest dann (Statusbit) dass er
mit einer Conversion fertig ist bevor du ihn ausliest?

Hältst du die maximale Samplingrate (und damit Abfrage-Rate) ein?

von Chris L. (kingkernel)


Lesenswert?

Hast du mal versucht das Display zu entfernen und mit einem Poti den 
Wertebereich des ADC zu durchlaufen. Die beiden Äußeren Pins des Poti 
auf Versorgungsspannung und GND, den Mittelabgriff auf den ADC, dann 
solltest du saubere Werte erhalten

von Bergi (Gast)


Lesenswert?

Mit einem Poti geht das nicht sauber weil der SAR-ADC bei voller 
Geschwindigkeit einen Eingangswiderstand unter 1Ohm haben muss damit 
kein Blödsinn rauskommt. Siehe Datenblatt. Deshalb meinte ich ja er soll 
es mit einem Labornetzteil versuchen.

von Bergi (Gast)


Lesenswert?

Hab grad mal ins Datenblatt geschaut und gesehen das dieser F3 
Mikrokontroller nur den langsamen SAR-ADC hat, der verträgt auch 400Ohm 
am eingang.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Bergi schrieb:
> Mit einem Poti geht das nicht sauber weil der SAR-ADC bei voller
> Geschwindigkeit einen Eingangswiderstand unter 1Ohm haben muss damit
> kein Blödsinn rauskommt. Siehe Datenblatt. Deshalb meinte ich ja er soll
> es mit einem Labornetzteil versuchen.

Resitive Touchdisplays habe ich am F4 seit Jahren problemlos im Einsatz. 
Außer ein paar ESD-Filtern ist nichts zwischen ADC-Eingang und 
Touchfolie.

Tatsächlich würde mich auch das Ergebnis des Poti-Tests interessieren.

Gerade bei dem Job kann der ADC mit maximaler Samplezeit betrieben 
werden.

Wenn der Potitest auch Sprünge zeigt, sollte man vielleicht endlich mal 
den Schaltplan anschauen und prüfen ob der Professor artgerecht gehalten 
wird.

von Mitlesa (Gast)


Lesenswert?

Marcus H. schrieb:
> Gerade bei dem Job kann der ADC mit maximaler Samplezeit betrieben
> werden.

Man kann einen ADC immer mit maximaler Samplefrequenz betreiben
für die er spezifiziert ist, nur nicht darüber hinaus.

Wie es mit der maximalen Samplezeit aussieht weiss ich allerdings nicht.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Mitlesa schrieb:
> Marcus H. schrieb:
>> Gerade bei dem Job kann der ADC mit maximaler Samplezeit betrieben
>> werden.
>
> Man kann einen ADC immer mit maximaler Samplefrequenz betreiben
> für die er spezifiziert ist, nur nicht darüber hinaus.
>
> Wie es mit der maximalen Samplezeit aussieht weiss ich allerdings nicht.

Keine Angst, Du brauchst nicht dumm sterben.
Schau Dir das passende Kapitel im Reference Manual an, dann weißt Du's 
auch.
Für diese MCU sind folgende Dokumente zum groben Einstieg relevant:
RM0313 Reference Manual
DM00046749 Datasheet
AN2834 ADC
AN4207 SDADC
ESO0189 Errata

von Bergi (Gast)


Lesenswert?

Du kannst den ADC immer mit maximaler Abtastrate betreiben aber was du 
dann für einen ADC Wert bekommst ist eine andere Sache. Bei den ST sitzt 
kein Puffer vor dem ADC das bedeutet wenn der ADC sampelt dann muss er 
seinen internen Sampelkondensator laden und wie schnell das geht hängt 
stark davon ab wie hoch der Widerstand am Eingang des ADC ist. Je öfter 
der ADC Sampelt desto öfter ladet er seinen Sampelkondensator, desto 
mehr Strom fließt durch den Eingangswiderstand vor dem ADC und desto 
schlechter wird das Ergebniss. Einfachste Lösung um diesen Fehler 
auszuschließen ist die Sampelzeit hoch zu setzen. Dies ist auch alles im 
Produktspezifischen Datenblatt festgehalten und kann ohne weiteres am 
ADC-Eingang mit dem Oszi nachgemessen werden.

Ich hatte mit den STM32 schon die interessantesten Fehler durch zu hohe 
Eingangswiderstände, leicht negative Spannungsspitzen an beliebigen 
GPIO's des Mikrocontrollers oder den falschen Takt am ADC. Auch eine 
nicht saubere Versorgung kann ein Problem sein.

Deshalb wäre es einfach mal interessant wenn man eine Spannungsquelle an 
den ADC hängt und den gesamten ADC bereich testet. Dann kann man 
zumindest den Touchscreen als Fehlerquelle ausschließen. Man kann auch 
mal am Eingang des ADC's mitmessen wie schnell der wirklich läuft da man 
aufgrund des Sampelns deutlich Spannungsspitzen am Eingang des ADC 
messen kann.

von Jürgen C. (cjr)


Lesenswert?

Hallo,
ich habe heute noch verschiedene Szenarien durchgespielt:
-Versorgung mit Labornetzteil (ohne Recom Schaltregler)
-Einspeisung der Spannung aus dem Labornetzteil in den ADC
-Verschiedene ADC Abtastraten (Manche Einstellungen ergaben keine
 brauchbaren Ergebnisse)
Es trat immer das gleiche Phänomen auf; Lücken im Werdebereich an der 
gleichen Stelle.

Was ich nicht geändert habe:
-Software
-Platine mit Prozessor

Wenn ich am Wochenende Zeit finde, werde ich nochmal eine Platine mit
einem Neuen Prozessor anfertigen und mich dann nochmal melden.

Viele Grüße

Jürgen

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.