Forum: Mikrocontroller und Digitale Elektronik Problem mit DAC ADC Wandlung


von Malte Struebert (Gast)


Lesenswert?

Hallo,
ich habe ein kleines Programm geschrieben welches mit einem Atmel MEGA8
und einem DAC0808 folgendes realisieren soll:

1.) Eine Spannung von 0-5 Volt wird über einen AD Eingang des Atmel
eingelesen.
2.) Das Programm macht ein internes Table Lookup (Tabelle geht von
0-255)
3.) Der Wert an der Tabellenposition wir über den DAC als spannung am
Ausgang ausgegeben.
4.) Die Ausgegebene Spannung soll für Kontrollzwecke wieder mit einem
zweiten DA Kanal eingelesen und verglichen werden. Ist die
Spannungsdifferenz zu groß soll eine LED eingeschaltet werden.

Beispiel: 5 Volt wird eingelesen (=255 AD). Wert an stelle 255 der
Lookup Tabelle wird gelesen (z.B. 128). Der Lookup Wert (128) wird an
den Port des DAC gegeben der dann ca. 2,5 Volt ausgeben sollte.

Mein Problem ist jetzt das ich immer eine Differen zwischen dem DAC
ausgangssignal und dem wieder eingelesenen Signal habe. Kann mir jemand
vieleicht helfen wie ich ein derartiges Problem zuverlässung gelöst
bekomme da die Kontrollfunktion sehr wichtig ist.

Hier ist ein Ausschnitt der Hauptschleife des Proramms:
while (1)
      {
        inputAD = read_adc(0);      // Read Sensor input Voltage

        offset = inputAD;        // Make table lookup to find output
Voltage
      outputValue = *offset;      // Read output Voltage from EEPROM

      PORTD = outputValue;      // Send output Voltage to DAC
      delay_us(600);

       // Check routines for LED control
       if (ErrorCounter == 0)      // Only show error status if 10 Sek.
startup counter is done
       {
         // InputMax LED (Gelb)
           if (inputAD > 245)                  // 245 => 4,8039 Volt
           {
             PORTB.1 = An;
             *InputMaxFlag = An;
           }
           else PORTB.1 = Aus;

           // OverVoltage LED (Grün)
      outputAD = read_adc(1);
      if (outputAD > 159)               // 153 => 3 Volt | 159 => 
3,12475
Volt (~1089mbar)
      {
        PORTB.0 = An;
        *OverVoltageFlag = An;
      }
      else PORTB.0 = Aus;

      // Error LED (Rot)
      if ( (outputAD-outputValue) > 5)  // // Wenn "Soll Ist Differenz" 
>
0,0588 Volt (=> 3 AD) dann Error
      {
        PORTB.2 = An;
        *ErrorFlag = An;
      }
      else PORTB.2 = Aus;
       }

      };
}

Gruß
Malte.

von Thomas O. (Gast)


Lesenswert?

Hallo,

jede Leitung bildet ja einen kleinen Wiederstand deswegen denke ich mal
bekommst du statt 128 nur 126 eingelesen. Wenn du aber sagen kannst das
die Differenz immer 2 ist, kannst du ja nach der Lookuptabelle immer 2
dazuaddieren dann werden halt 130 ausgegeben und durch die Verluste
haste dann wieder deine 128. Aber bei 254 und 255 wirds halt Probleme
geben weil du da keine 2 dazuaddieren kannst.

Du könntest aber auch nach dem zurücklesen die 2 addieren.

von Thomas Burkhardt (Gast)


Lesenswert?

Hi,

Leitungswiderstände sollten nahezu keine Rolle spielen, da die ADC
extrem hochohmig sind... Wichtig ist, zu überprüfen, ob das Timing des
ADC stimmt.

von Malte Struebert (Gast)


Lesenswert?

Hi,

die differenz liegt eher so im bereich zwischen 5-10, was rechnerisch
einen Fehler von fast 0,1volt ausmacht, das ist VIEL zu viel... da muss
also noch ein anderer Fehler sein.

@Thomas: Wie check ich das mit dem Timing?

Gruß
Malte.

von Josef (Gast)


Lesenswert?

DerATMEGA hat doch einen 10 Bit-Wandler. So wirst du bei 5 Volt eher
1024 auslesen. Das Ergebnis mußt du durch 4 teilen.
Außerdem würde ich die Ausgangsspannung mittels PWM erzeugen.

Da stimmt etwas nicht bei deinen Überlegungen.


SG Josef

von Thomas Burkhardt (Gast)


Lesenswert?

Hi,

keine Ahnung wie das in C gemacht wird ;)
Aber irgendwo muss der ADC doch mal initialisiert werden, der
entsprechende Vorteiler gesetzt etc. Wenn das nicht korrekt ist, misst
der schnell Mist.

von Uwe (Gast)


Lesenswert?

Hi!
Ich denke dir fehlt ein ordentlicher Abgleich. Ist Vref wirklich genau
5V? Oder eher 4,95V? Macht dein DAC bei 127 auch 2,5V? Diese beiden
Geschichten überlagern sich ja. Nur wenn der Abgleich stimmt kannst du
nach anderen Fehlern suchen.

mfG, Uwe

von Malte Struebert (Gast)


Lesenswert?

Hi,

die Referenzspannung stimmt und beide (der DAC und der ADC) haben die
selbe Referenzquelle von daher sollten sie auch gleich messen. Der AD
Wandler ist korrekt initialisierz, daran liegts also auch nicht.

Gruß
Malte.

von Wolle (Gast)


Lesenswert?

Hast du die Referenzquelle entkoppelt ?
OPV mit Verstärkung 1, der die Referenzquelle "niederohmig" macht!

von Malte Struebert (Gast)


Lesenswert?

Hi,

hmm... jetzt wo dus sagst... die Referenzspannung macht ein
Festspannungsregler der mit nem Kondensator abgepuffert ist... sollte
aber eigentlich von der dimensionierung reichen oder meinst du nicht?

Falls nicht, gibt doch mal ein Beispiel wie ich das schaltungstechnisch
realisiere.

Gruß
Malte.

von Matthias (Gast)


Lesenswert?

Hi

ich kenne zwar die Schaltung nicht aber der ADC wird beim Start des
MEssvorgangs kurz recht niederohmig. Wenn dein DAC-Ausgang jetzt
relativ hochohmig ist bekommst du Probleme. Evtl. hilft schon ein 1nF
Kondensator direkt am ADC Pin.

Matthias

von Malte Struebert (Gast)


Lesenswert?

Hi,

werd das mit dem Kondensator mal ausprobieren. Irgendwie ist das ganze
wieder mal total merkwürdig. Hab auch mal versucht da softwaremäßig
gegenzuregeln aber irgendwie werd ich das Gefühl nicht los das ich am
AD Wandler immer nur müll messe weil der wert immer kleiner ist als
mein Ausgangssignal, auch wenn ich gegenregel bleibt er immer um einen
festen faktor kleiner, das kann doch eigentlich garnicht sein oder?

Gruß
Malte.

von Malte Struebert (Gast)


Lesenswert?

Hi,

ich glaube ich habe den Fehler gefunden. Anscheinend sind es mehrere
Messfehler aufgrund von schwankender Versorgungsspannung.

Obwohl ich einen 5v Festspannungsregler verbaut habe schwankt selbst
meine 5v Referenzspannung für den Atmel internen AD Wandler zwischen
5,079 und 5,088 Volt, je nachdem ob meine Versorgungsspannung 10 oder
15 Volt beträgt.

Gleiches nur mit stärkerem Effekt gilt für die 12V und -12V
Referenzspannung des DACs, dadurch habe ich teilweie Abweichungen von
18 Dezimalwerten im AD bzw. DA gewandelten Signal. Das ich da natürlich
nur Mist messe ist klar.

Wenn ich es nun schaffen könnte meine 5v Referenzspannung und nach
möglichkeit noch die 12 Volt so zu stabilisieren das ich möglichst
keine Schwankungen mehr habe bei Versorgungsspannungen zwischen 12-15
Volt dann wäre mir schon geholfen. Gibt es da IRGENDEINE Möglichkeit?

Gruß
Malte.

von Till (Gast)


Lesenswert?

indem du anstatt von 78irgendwas referenzspannungsquellen nimmst?

von Wolle (Gast)


Lesenswert?

Gee....nauuu..
Regler sind als Referenzquelle denkbar ungeeignet.
Referenzquellen liefern keinen Strom - im Sinne einer Regelung -
sondern nageln die Spannung fest, haben überwiegend eine
Temperaturgangkompensation und sind recht niderohmig. Trotzdem zur
Entkopplung über einen "Verstärker", der dann den Strom liefert.
Keine Regelschwankungen, kein Schwingen und - abgeglichen - hochgenau;
I.d.R. <0,1% Abweichung.
Ganz interessant:
http://www.elektronik-kompendium.de/public/schaerer/zbandgp.htm

von Thomas O. (Gast)


Lesenswert?

Hallo,

hast du auch mal das Datenblatt nach der Entstörung für die AD-Spannung
geschaut, da soll ein kleiner Tiefpass reingemacht werden.

von Malte Struebert (Gast)


Lesenswert?

Stimmt, hab ich übersehen, aber ich denke ich hab den Fehler
größtenteils eh schon gefunden, ein OP war am arsch und hat seltsame
Phänomene verursacht.

Hab ihn jetzt getauscht und alles ist schon wesentlich besser.

Klar die Spannungsstabilisierung für die Referenzspannung werd ich noch
machen damits noch besser wird aber im groben sollte es so gehen denke
ich.

Danke für eure Hilfe.

Gruß
Malte.

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.