bei meinem Projekt mit dem Arduino Due und Simulink bekomme ich leider ein ADC Rauschen irgendwo hinein.
Die Signale, die ich mittels 4 ADC Eingängen (A0, A1, A2, A3) messen möchte, haben zwar selbst ein Rauschen von 3mV Amplitude, jedoch ist der Fehler bei der Abtastung 10x so groß. D. h. ich bekomme ein Signal mit 30mV Amplitude im Programm zur Verarbeitung.
Nun meine Frage:
Ist es eventuell möglich irgendwie, ohne Filterung im Simulink selbst, das Rauschen zu verringern?
Würde es eventuell helfen mit adc_init(); ADC_STARTUP_NORM zu setzen bzw. den ADC nicht in den Sleep Mode gehen zu lassen z. B.: adc_configure_power_save(ADC, ADC_MR_SLEEP_NORMAL, ADC_MR_FWUP_ON); ?
Das Programm in Simulink läuft derzeit mit einer Sample Time von 5kHz.
Wie wird der Due mit Strom versorgt? Hast Du die Restwelligkeit der Spannungsversorung auch gemessen? Hast Du die Signale gemessen, als sie bereits mit dem Due verbunden waren (GND)?
Über ein PC Netzteil mittels 12V über den Vin Pin.
Es ist aber auch ein Kondensator zur Glättung vorhanden.
Habe auch schon ein Labornetzteil als Versorgung benützt um irgendwelche Einstrahlungen des Netzteiles auszuschließen.
Ist es irgendwie möglich die interne Referenzspannung von 3,3V zu verbessern? Habe ebenso die 3,3V des PC Netzteiles probiert als externe Referenzspannung, jedoch ergab dies auch keine Veränderung.
Bist Du sicher, dass der ADC das Problem ist? Mal mit einem Oszi geschaut, was mit und ohne angeschlossenem Due tatsaechlich an der Signalleitung ankommt?
Ich bin nicht der Elektronik Profi, aber 30 mV sind nicht viel - die kannst Du Dir schon bei mangelhafter Abschirmung auch vom parallelem 220V Kabel oder sonstwas einfangen.
Ist es wirklich ein Rauschen oder vielleicht auch etwas hochfrequentes? Neonroehre in der Naehe? Energiesparlampe?
Das Signal wurde direkt am Arduino, bei angestecktem Analogeingang, gemessen.
Das Rauschen hat einen Frequenzbereich von ~30-600Hz.
Habe gerade probiert den Arduino mit einer 9V Batterie zu versogren, jedoch hat sich das Rauschen nicht verbessert.
Muss ich eine spezielle Library einbinden, damit ich die DAC Auflösung mittels "adc_set_resolution(ADC, ADC_12_BITS);" umstellen kann? Denn mit "analogReadResolution(12);" funktioniert es einwandfrei. Jedoch mit adc_set_resolution nicht. Da bleibt er bei 10bit Auflösung.
Würde gerne probieren ob "adc_configure_power_save(ADC, ADC_MR_SLEEP_NORMAL, ADC_MR_FWUP_ON);" eine Besserung bringt.
Das mit den 220V Kabeln hab ich alles schon ausgeschlossen, da ich die Schaltung und den Arduino mit einem 2 meter entfernten Labornetzteil versogt habe.
xand:
Das Rauschen hat einen Frequenzbereich von ~30-600Hz.
Habe gerade probiert den Arduino mit einer 9V Batterie zu versogren, jedoch hat sich das Rauschen nicht verbessert.
Woran machst Du es denn fest, dass das Originalsignal "3mV Amplitude" hat und nicht mehr?
Eventuell gehst Du nur aufgrund einer anderen, fehlerhaften weil tiefpassgefilterten Messung davon aus, dass Dein Originalsignal nur 3mV Amplitude hat und in Wirklichkeit ist die Amplitude tatsächlich so groß wie der Arduino sie misst?
Schließe mal testweise zum Messen eine Batterie an einen Arduino-Analogeingang an, z.B. eine 1.5V Mignonzelle!
GND mit Minuspol der Batterie verbinden, Analogeingang mit Pluspol der Batterie und dann mit analogRead messen.
Wie hoch sind dann die Schwankungen in den Messwerten?
Ich habe auch schon probiert, eine konstante Spannung von 1.65V mit einem Labornetzteil direkt an den Arduino Eingang anzulegen.
Werde deine Idee mit der Batterie morgen probieren und die Werte vom ADC auslesen.
Sollte ja dann bei 12bit Auflösung um +-0.8 mV schwanken (3,3V/4095) richtig?
Kann es eventuell auch sein, dass es durch die serielle Übertragung zu solchen Schwankungen kommt?
Schau mal ins Datenblatt zu den ADC Eigenschaften gegen Ende. Da werden noch mehr Ungenauigkeiten drin sein. Die Quantisierung ist nicht die einzige Fehlerquelle