Forum: Mikrocontroller und Digitale Elektronik LPC2138 AD-Wandler Problem


von Kxx S. (kskolik)


Lesenswert?

Hallo, liebe Forengemeinde,

ich hab ein sehr merkwürdiges Problem mit dem AD Wandler vom LPC2138. In 
den Erratasheets hab ich nichts dazu gefunden, auch mit dem User Manual 
komm ich nicht weiter.

Die AD-Wandlung funktioniert soweit prima, allerdings manchmal "hängt" 
sich der Wandler auf.

Sowohl im Burst Mode als auch im Software Mode.

Verwendet wird der folgende Code:
1
static unsigned short adc_read(unsigned char ch)
2
{
3
  unsigned int i;
4
  AD0CR = 0x00200300 | ch; // Init ADC (Pclk = 12MHz) and select channel
5
  AD0CR |= 0x01000000; // Start A/D Conversion
6
  do
7
  {
8
    i = AD0DR; // Read A/D Data Register
9
  } 
10
  while ((i & 0x80000000) == 0); // Wait for end of A/D Conversion
11
  unsigned int channel = AD0DR & 0x07000000; 
12
  return (i >> 6) & 0x03FF; // bit 6:15 is 10 bit AD value
13
}

Problem:
Das Done-Bit wird nicht gesetzt, ergo wird die do-while-Schleife nicht 
verlassen.

Woran kann das liegen? Die IO-Pins sind auch richtig für den Wandler 
konfiguriert, ebenfalls läuft er (Power control etc.)

Meine Vermutung:
Da es sporadisch auftritt, könnte es ein Problem mit der 
Versorgungsspannung des Prozessors sein.

Das ganze wird über TRACO Gleichrichter versorgt, mit 3.3 V. Allerdings 
kann es shconmal vorkommen, dass kleinere Spannungsspitzen bzw. 
-Einbrüche auftreten. Hardwaremäßig ist da so leider nicht viel dran zu 
ändern.

VIelleicht liegt es aber auch nicht daran.

Für jede Hilfe bin ich sehr dankbar!

-Kai

von kskolik (Gast)


Lesenswert?

Ist das Problem schonmal bei jemandem aufgetreten?

Hier ist noch ein Auszug aus dem User Manual:

------------------------------------------------------------------------

Note: if the A/D converter is used, signal levels on analog input pins 
must not be
above the level of V3A at any time. Otherwise, A/D converter readings 
will be invalid.

(aus: LPC213x User manual Rev. 01 — 24 June 2005 Seite 193)

------------------------------------------------------------------------

Nun kann es sein, dass durch Induktivitäten bzw. Schaltvorgänge im 
Lastromkreis Spannungsspitzen auftreten. Leider lassen sich diese durch 
eine galvanische Entkopplung (mittels Hall Sensoren) nicht vollständig 
von der Steuerelektronik fernhalten.

Kann es sein, dass durch solch auftretende Spannungsspitzen (die 3.3V, 
also V3A, kurzzeitig überschreiten) sich der AD-Wandler "aufhängt"?

Sollte das der Fall sein, wie kann man am besten dagegen vorgehen? 
Kondensatoren vor dem AD-Wandler Eingang gegen Masse? Wenn ja, was wäre 
da ein akzeptabler Wert?

Des Weiteren: Was wäre eine sinnvolle, softwareseitige Abbruchbedingung 
für die im vorigen Beitrag genannte while-Bedingung? Es gibt ja beim 
AD-Wandler leider kein Fault-Mode Bit oder ähnliches.
Vielleicht mit einem Timer? Oder einfach eine Zählvariable, die 
vielleicht bis 15 zählt? (Der AD-Wandler benötigt ja für 10Bit 11 
Zyklen).

Ich bitte um Hilfe :-)

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.