Grüß euch,
ich benutze die Pro Unit Mega 128 von C-Control.
und will Spannungswerte per AD-Wandlung abspeichern und mit einem
Zeitstempel versehen.
Die Spannungswerte kommen von einem Distanzsensor.
Als Referenzspannung für die AD-Wandlung wurden 2,56V gewählt (intern),
bei 10Bit Auflösung.
Um zu testen, ob die gelieferten Spannungswerte nach der AD-Wandlung
identisch mit den Spannnungswerten vor der Messung sind, wurde an den
Sensor ein Voltmeter angeschlossen und der Abstand zum Messobjekt
konstant gehalten.
Die Werte, die das Voltmeter liefert, sind konstant und schwanken nicht.
Die Werte nach der AD-Wandlung schwanken stark. Es wurde alle 200ms ein
Messwert aufgenommen.
Digitalwert Zeit/s Spannung/V nach ADW Spannung/V Voltmeter angezeigt
235 0,4 0,5875 0,619
242 0,6 0,605 0,619
238 0,8 0,595 0,619
235 1 0,5875 0,619
236 1,2 0,59 0,619
232 1,4 0,58 0,619
232 1,6 0,58 0,619
237 1,8 0,5925 0,619
305 2 0,7625 0,619
235 2,2 0,5875 0,619
241 2,4 0,6025 0,619
239 2,6 0,5975 0,619
236 2,8 0,59 0,619
247 3 0,6175 0,619
234 3,2 0,585 0,619
242 3,4 0,605 0,619
Warum kommt es zu diesen Schwankungen nach der AD-Wandlung, obwohl der
Spannungswert des Sensors NICHT schwankt?
Hier der Auslesecode:
1 | word abstand(void)
|
2 | {
|
3 |
|
4 | word x;
|
5 | x=0;
|
6 | byte v_ref;
|
7 | v_ref=0xC0; //referenzspannung
|
8 | byte channel;
|
9 | channel=3;
|
10 | ADC_SetInt(v_ref,channel); //referenzspannung ist 2,56V->0xC0 Kanal 3 (PF.3)
|
11 | ADC_StartInt();
|
12 |
|
13 | x=ADC_ReadInt(); //AD-wert einlesen
|
14 |
|
15 | return x;
|
16 | }
|
Die Funktion abstand() wird alle 200ms aufgerufen.
Die Zeitmessung wird durch eine Interruptfunktion realisiert.
Vielen Danke für eure Antworten!!