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.
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.
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.
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.
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
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.
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
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.
Hast du die Referenzquelle entkoppelt ? OPV mit Verstärkung 1, der die Referenzquelle "niederohmig" macht!
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.
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
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.
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.
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
Hallo, hast du auch mal das Datenblatt nach der Entstörung für die AD-Spannung geschaut, da soll ein kleiner Tiefpass reingemacht werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.