Hallo! Ich möchte ein Ladegerät bauen und habe Probleme mit dem ADC meines Mega32. Zum testen lade ich über einen 10k Widerstand einen 1000µF Elko und messe die SPannung am Elko. Die Werte, die mir der ADC liefert sind allerdings für die Verwendung in einem Ladegerät nicht so toll, weil sie eben doch ein gewisses "Rauschen" oder "Zittern" zeigen. Selbst wenn ich den ADC0 direkt an VCC anschließe bekomme ich das "Zittern" nicht raus. Ich habe schon alle möglichen Methoden zum Runden der Ergebnisse ausprobiert die mir eingefallen sind. Der AVR hat alle benötigten Kondensatoren, ich verwende ein geschrimtes Messkabel und auch die interne Refernzspannung bringt keine Besserung. Er misst 6x hintereinander, addiert die Ergebnisse, prüft ob die Werte auf- oder abgerundet werden müssen, multipliziert sie mit 10 und teilt sie dann durch 6. Mit 10 multipliziere ich damit bei der Dividion durch 6 nicht so viel "verloren" geht... dachte ich jedenfalls weil z.B (11+12)/2 11,5 sind und der AVR dann einfach nur eine 12 draus machen würde. Rechnet er aber (11+12)*10/2 bekommt er 115 raus, hat die 5 also noch mitgenommen. Den entscheidenden Codeschnippsel habe ich begefüft falls ihr es euch mal ansehen möchtet. Grüße, Marco
Hier einmal ein Excel Digramm dass in blau die Spannung zeigt (in mV) und in grün die Differenz (dU/dt) zum vorherigen Wert. Da die zeitliche Differenz immer 1 (weil gleich) ist die Rechnung sehr simpel. Sowohl die Umrechnung vom ADC Wert (*10) in mV als auch die Berechnung der Differenz (z.B. (A2-A1)/1) macht Excel. An der grünen Kurve kann man gut sehen dass die Messfehler nach unten und nach oben ausschlagen. Da das Ladegerät abschalten würde wenn die Steigung 0 ist (sich also innerhalb der letzten beiden Messungen nichts getan hat) kann man sich vorstellen dass es so wie es im Moment läuft nicht klappen kann. Die Steigung von 0 würde durch die "Messfehler" schon viel früher erreicht. Eventuell ist die Steigung sogar schon als negativ gemessen bevor sie real überhaut 0 erreicht.
Mal eine kleine Idee in Richtung Hardware: Hast Du an alles gedacht? Stromversorgnung am Controller mit 100nF abpuffern. AGND von GND trennen und möglichst bei der Einspeisung zusammenführen. Im Datenblatt ist meist eine Beschaltung von AREF über eine kleine Induktivität zu finden, falls extern angeschlossen. Falls interne Referenz benutzt wird, dann an AREF einen Kondensator gegen Masse schalten. Bei einem Mega32 im TQFP unter den ADC-Pins eine Massefläche auf der anderen Seite der Platine anbringen. Das hilft meist alles um Störungen zu vermeiden. Hab keine schlechten Erfahrungen mit dem AVR ADC gemacht. Sind glaub ich lt. Datenblatt auf 1 LSB genau. Bin aber jetzt zu faul nachzusehen. Ist die ADC-Taktfrequenz auch nicht über 200kHz? Das macht ihn auf die letzten Stellen auch ungenau!
Verstehe ich das richtig: Du wunderst dich ernsthaft darüber, dass der ADC um +-1 bis +-2 Einheiten schwankt???
Ich gleich sowas immer mit einem Software-Lowpassfilter aus, in dem ich auf den/die vorherigen Messwerte zurück greife. Messwert = (Messwert * 15 + ADC) / 16 Gruß Roland
Datasheet, Stichwort "ADC Noise Canceller". Wie sieht die AVCC/AGND-Beschaltung exakt aus (bis hin zur Leitungsführung)?
Ineressant: in welchem Abstand finden deine Messungen statt? Nimm 12 Messungen innerhalb einer Sekunde und addiere sie auf. Den grössten und den kleinsten Messwert subtrahierst Du von deinem Gesamtergebnis. und dann NICHT durch 10 Teilen. (Hatten wir hier schon mal die Diskussion ->Oversampling) Die Messungen alle Minute wiederholen, damit auch tatsächlich sicher sein kannst, dass eine Änderung eintritt/eintrat.
@Barti: Wie meinst du das mit dem Trennen? Ich habe GND und VGND direkt unter dem DIP Gehäuse verbunden. AREF und AVCC sind je über einen SMD Kondensator mit AGND verbunden. Ist das so nicht richtig? Ich merke gerade dass ich mit darüber noch garkeine Gedanken gemacht habe und dass vielleicht da auch der Fehler liegen könnte... das ist immerhin mein allererstes Projekt in dem halbwegs "genau" gemessen werden muss und dementsprechend kleine ist meine Erfahung :) Und noch eine Frage: Bei meinem "Messkabel" (hatte gerade nur 15cm RG174 zur Hand) führe ich GND und nicht VGND an die Schirmung weil ich GND und VGND verbunden habe... also auch nicht richtig? Als Vorteiler habe ich mit 128 den größt möglichen gewählt. @A.K.: Dass der ADC um etwa +- 1 oder 2 LSB ungenau ist muss ich wohl wirklich erst einsehen, ja :) Und ich hoffe das durch Hard- und Softwarebasteleien so gut wie möglich zu kompensieren. Ich brauche die Spannung nicht auf's µV genau. Ich brauche nur einen "butterweichen" Spannungsverlauf damit die Berechnung der Ladeschlusserkennung nichts fehlinterpretiert. Die Sache mit der "ADC Noise Reduction" im Sleepmode habe ich noch nicht ans Laufen gebracht, bin mir um seine Existenz aber im klaren. Das werde ich sobald ich Zeit habe auch nochmal testen. @Roland Praml und Axel Rühl: Klingt interessant und ich werde es auf jeden Fall mal ausprobieren. Sollte ja schnell mal getestet sein. Danke auf jeden Fall!
"Ich merke gerade dass ich mit darüber noch garkeine Gedanken gemacht habe" Atmel hat darüber im Datasheet einige Seiten verbrochen, und evtl. auch die eine oder andere Application Note (z.B. #40).
"Als Vorteiler habe ich mit 128 den größt möglichen gewählt." Was kommt dabei als ADC-Takt raus? Atmel schreibt ja 50-200KHz vor, tiefer zu gehen macht's auch nicht genauer.
"Was kommt dabei als ADC-Takt raus? Atmel schreibt ja 50-200KHz vor, tiefer zu gehen macht's auch nicht genauer." 7,3728MHz/128=57,6 (gerundet) also ziemlich am unteren Ende dessen was Atmel vorschreibt.
So, ich habe jetzt GND von AGND getrennt, AGND an die Schrimung vom Messkabel gelötet, habe mich vom Oversampling getrennt und messe jetzt nur etwa 1x pro Sekunde 64x mal und teile dann durch 64. Es ist jetzt schon besser geworden aber ich denke da ist noch etwas mehr drin.
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.