mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit DAC ADC Wandlung


Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolle (Gast)
Datum:

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

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Till (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
indem du anstatt von 78irgendwas referenzspannungsquellen nimmst?

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/schaere...

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.