Programmierung: Varianz bei ADC-Wandlungen verstehen

Bei der Durchführung von Konvertierungen mit dem ADC (Analog-Digital-Wandlung) kann das Ergebnis von Konvertierung zu Konvertierung variieren. Dies gibt Ihnen eine Methode zur Berechnung dieser Abweichung über die Zeit und einige mögliche Techniken zur Minimierung dieser Abweichung, wie die Verwendung von Kondensatoren oder die Verwendung des ADC-Schlafmodus. Um das vorherige Ergebnis mit dem aktuellen Ergebnis vergleichen zu können, muss das vorherige Ergebnis gespeichert werden. Sobald das aktuelle Ergebnis erfasst ist, wird eine weitere Variable um den Absolutwert der Differenz zwischen dem Ergebnis und dem vorherigen Ergebnis erhöht. Zuerst werden einige globale Variablen benötigt, um das vorherige Ergebnis, die gesamte Abweichung über die Zeit und die Abtastanzahl zu speichern (sie beginnen statisch volatil, da der Compiler sie optimieren würde, wenn diese Schlüsselwörter nicht vorhanden wären):



static volatile uint16_t previousResult = 0; static volatile int totalDeflectionOverTime = 0; static volatile uint16_t sampleCount = 0; Die Berechnungen erfolgen in der ISR (Interrupt Service Routine): ISR(ADC_vect) { uint8_t theLowADC = ADCL; uint16_t theTenBitResults = ADCH<<8 | theLowADC; Send_An_IntegerToMrLCD(13,1,theTenBitResults, 4); int deflection = theTenBitResults - previousResult; if (deflection << 0 ) deflection = previousResult - theTenBitResults; Send_An_AnIntegerToMrLCD(13,2,deflection, 4); previousResult = theTenBitResults; totalDeflectionOverTime += deflection; sampleCount++; if (sampleCount >= 300) { Send_An_IntegerToMrLCD(8,3,totalDeflectionOverTime, 6); totalDeflectionOverTime = 0; sampleCount = 0; } ADCSRA |= 1<
Zurück zum Blog

Hinterlasse einen Kommentar

Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.