Problem mit DAC ADC Wandlung

Gast #124912
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.
Gast #124913
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.
Gast #124915
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.
Gast #124916
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
Gast #124917
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.
Gast #124918
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
Gast #124919
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.
Gast #124921
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.
Gast #124922
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
Gast #124923
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.
Gast #124924
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.
Gast #124926
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
Gast #124928
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren