Unstabile AnalogPin - Werte bei langer Zuleitung oder bei Verwendung eines Schal

Hallo zusammen,

ich verwendete im Kfz einen Arduino Mega mit einem LC-Display als Anzeige-Instrument. Mit Hilfe von netten Forumsmitglieder "strickte" ich mir einen Sketch zusammen, in dem auf mehreren AnalogPins Analog Werte umformen und erfolgreich angezeigt wurden.

Dann, nach gewisser Zeit, hat sich jemand vorgestellt mit dem Namen EMV (ich denke zumindest, dass es EMV-Störungen waren).

Also Version 2 gestartet mit Arduino Micro, verkleinerten Gehäuse aus Aluminium, und masseseitig einseitig aufgelegten abgeschirmten Flachbandkabel.

Keiner will seine Glaskugeln benutzen, aber ich habe leider keine Dokumentation des Aufbaus, folgt natürlich, auch im eigenen Interesse. :slight_smile:

Im Moment läuft der Aufbau problemlos mit einem stabilisierten Netzteil ~230V -12V raus.

Verlängere ich allerdings die Leitungen, schwingen die ausgelesenen Werte. Lasse ich zwischen Platine und Netzteil die Leitungen kurz, und lege einen Kippschalter zum ausschalten, schwingt es ebenfalls.

Habe extra einen 2. Arduino Micro gekauft, um ihn als Fehlerquelle auszuschließen.

Spannungsversorgung des Arduino ist ein 7809 mit 100nF vor und dahinter. Ein 7805 "versorgt" zwei NTC Thermistoren, Luftdrucksensor und Spannungsmessung. Massenpotential ist gleich. Habe vorher auch den internen Spannungsregler des Arduino benutzt, brachte keine Änderung.

Soll ich die AnalogPins Werte Softwareseitig glätten wie hier analogRead liefert schwankende Werte - Deutsch - Arduino Forum
oder gibt es eine einfache Lösung im Schaltungsaufbau?
Schwingt ein Kondensator? Oder ähnliches?

Fällt jemanden auf die schnelle ein, was das sein könnte, bevor ich eine Skizze aufzeige?

Vorkenntnisse ist eine vor 3 Monaten begonnene Ausbildung zum Elektroniker für Betriebstechnik.
Und viel gefährliches Halbwissen! :slight_smile:

Wie lang ist die Zuleitung zu den Sensoren? Problem sind die Zuleitungen. Abgeschrimte Leitungen?

Vorschlag:

Nicht die AI des Arduino verwenden, sondern entsprechende Sensoren für I2C oder SPI.

Schon mal Glättungs-Kondensatoren eingebaut? Was in der Richtung von 10-100µF?

Temperatur-Messung geht zuverlässiger mit digitalen Sensoren. DS18B20.

Hallo Serenifly, Hallo sschultewolter,

habe nur für die Spannungsmessung 22uF zum glätten benutzt. Schaltung wie hier:
http://forum.arduino.cc/index.php?topic=214930.0

Kann ich gerne probieren, weitere Kondensatoren vor alle AnalogPins zu setzen.

Zuleitung zu den Sensoren ist im Moment nur 5 cm entfernt zu den Schraubterminals der Lochrasterplatine. Mit längerer Zuleitung meinte ich die Versorgungszuleitung vom Netzteil, später Autobatterie.

Was ist mit der AI des Arduino gemeint?

Arbeite mit NTC Thermistoren, weil ich davon ausgehe, dass Automotive Bauteile besser mit der groben Umgebung im Motorraum umgehen kann als digitale Sensoren. Dazu kommt noch, dass diese VDO NTC Sensoren direkt ein M10 Gewinde haben, die direkt z.B. in den Motorblock geschraubt werden können. Für einbaufertige, stabile digitale Sensoren bin aber offen, wenn
jemand einen Tipp hat.

Das war die Versorgungsspannung gedacht. Du sagst zwar dass du mal die interne Referenz probiert hast. Aber du versorgst ja die NTCs auch über die 5V. Wenn du dann Störungen auf den 5V hast, wirkst sich das darüber auf das Mess-Ergebnis aus. Auch wenn die Referenz konstant ist.

Aber Kondensatoren mit relativ niedriger Kapazität an den Analog Pins schaden da auch nichts. Das mit 22µF + 100nF hat schon seinen Sinn. Die Kapazität addiert sich da nicht nur einfach. Die sind für unterschiedliche Frequenzen.

Was du sonst mal probieren kannst ist einen 100nF zwischen AREF und GND. Wobei das auch nur auf die Referenzspannung wirkt, aber nicht auf das Signal.

AI = analog in

Die 22uF und 100nF sind Hoch- und Tiefpassfilter, oder bringe ich da was durcheinander?

Wollte noch erwähnen, dass die Temperaturmessung im alten Aufbau (der im Kfz schon im Betrieb war), auch leicht schwankte, die anderen Werte jedoch nicht. Dort jedoch war keine Leitung geschirmt.

AREF ist im Moment nicht belegt. Nur GND als gemeinsame Masse, VIN mit 9V vom 7809, und die halt die A0 bis A3 Pins.

Wenn mit galvanisch getrennten DC/DC Wandlern arbeiten würde, hätte ich eine störungsfreiere Schaltung?

Habe Ratschläge befolgt, und habe folgende Dinge umgesetzt:

-100nF zwischen jeden AnalogPin und Masse
-Interne Spannungsreferenz auf externe (AREF) umgelegt, über den 7805

Dazu habe ich noch eine "Betriebszustand" LED eingesetzt.

Zum testen habe ich eine 4m Zuleitung genommen, und einen Sensor (1K NTC) über 3m gelassen. Die Werte zappeln eigentlich nun gar nicht mehr, mit etwas feinoptimierung in der Software kann ich die Rundungsfehler glätten.

Danke nochmal!

Was auch ziemlich suboptimal ist, das Schaltungsmasse und Fahrzeugmasse am Einschraub-NTC zusammenkommen. Die Fahrzeugmasse verläuft über die Karosserie und sämtliche Störungen breiten sich als Spannungsabfall darüber aus. Wenn du mit 1 mV Auflösung messen willst und da 50mV "rumeinern" kommt dabei nichts Vernüftiges bei raus.
Du kannst für den Mega einen 12/5V Wandler mit galvanischer Trennung verwenden, dann bist du dieses problem los - aber nur bei einem NTC, denn bei mehreren NTC, vielleicht noch an unterschiedlichen Stellen verbaut, hast du den gleichen Salat!
Egal was du nimmst, aber nichts, was galvanische Verbindung zur Fahrzeugmasse hat. Es wurden dir ja genug Alternativen aufgezeigt.

Gruß Gerald

Hallo Gerald!

Kann ich denn NTC Thermistoren nicht eine eigene Masse anlegen, so wie auch im KFZ Bereich üblich (zumindest kann ich es so in den Stromlaufplänen entnehmen)? Ich meine damit eine Masseanbindung in der Nähe.

Eventuell könnte man die Temperatur Darstellung so träge machen, das zappeln gar nicht erst wahrgenommen werden (denke an 1 Ausgabe an das LCD pro 2 Sekunden reicht - z.B mehrere Messungen davon den Mittelwert?).

Der Öldrucksensor z.B. hat nicht das gleiche Massepotential wie der Motorblock. War aber Zufallskauf zu meinem Glück! Dieser lief im vorherigen Aufbau wunderbar.

Was ich noch als dritte Möglichkeit erfragen wollte: Wenn ich NTC Sensoren (wie mein verwendeter Öldrucksensor) verwenden würde, mit seperaten Massenanschluss, könnte ich die Verunreinigungen in der Kfz Masse größtenteils umgehen?

Der Ansporn ist ja, dass es solche LC-Anzeigen es schon fertig zu kaufen gibt, für verständlicher Weise für relativ viel €€€, diese Anzeigen scheinen fehlerfrei zu laufen. Irgendwie haben die Leute diese ja auch zum laufen gebracht (natürlich mit viel mehr Know-How als meiner einer).

Diese fertige Module haben sicherlich nur eine Messstelle. Mit dem schon erwähnten DC-DC Wandler mit galvanischer Trennung von Fahrzeug- und Schaltungsmasse sind die aus dem Schneider.
"Interessant" wird es erst bei mehreren Messtellen in einer Schaltung und Masseverbindung.
Wenn die Sensoren nicht auf Fahrzeugmasse liegen, gibt es auch keine (bzw. weit weniger) Probleme, die sich recht easy lösen lassen.

Ohne Dokumentation ist es natürlich schwierig, Fehlerquellen zu finden.

aber ja, auch meine Vermutung geht in Richtung Masseproblem.

Ganz wichtig: Wo genau ist die Masse des Arduino mit der Masse des Fahrzeugs verbunden?
Sind die Sensoren Massefrei? (Bei KFZ Sensoren so üblich. mess mal, ob es eine elektrische Verbindung vom Sensorgehäuse zum den beiden Anschlusspins gibt. Sollte keine sein)
Wie sind die Massen der Sensoren verdrahtet?

Ideal ist folgendes:
Alle Sensoren werden mit Ihrer Masse am Arduino GND angeschlossen und haben sonst keinen elekrischen Kontakt zum Fahrzeug.
Alle Verbraucher wie Displays, leds etc habe ihre Masseverbindung nur zum GND des Arduino.
Der GND des Arduino hat nur verbindung zum GND der Stromversorgung des Arduino.
der GND der Stromversorgung geht am besten zum Fahrzeugmassepunkt.

Die 5V-Versorgung der Sensoren sollte unbedingt identisch sein mit der 5V Referenzspannung des AD, sonst gibts Messfehler.

Und, zu guter letzt: die gemessenen Signale über einen Softwarefilter jagen. Im KFZ wirst du immer Störungen haben.

nix_mehr_frei:
Diese fertige Module haben sicherlich nur eine Messstelle.

Laut Dokumentation des Herstelles (als PDF-Format) gehen alle NTC Thermistoren an "irgendeine" Masse am Motorblock (also da, wo sie arbeiten), und werden dann am Steuergerät des Moduls einfach aufgelegt. Also die Sensoren nutzen die Motorblockmasse/Chassis-Masse Wäre das eine gemeinsame Messstelle?

Mit 230V Netzteil, im Auto lose eingebaut, und bei laufenden Motor lose eingebaut funktioniert der Arduino mit dem LCD schonmal, auch mit übertriebener langer Zuleitung für den NTC Sensor (3m, 0,5mm² FLRY). Habe das geschirmte Kabel sogar extra zum testen über die laufende Zündspule gelegt, das LCD lässt sich so nicht stören (hatte viel Probleme in einem vorherigen Aufbau).

guntherb:
Ganz wichtig: Wo genau ist die Masse des Arduino mit der Masse des Fahrzeugs verbunden?
Sind die Sensoren Massefrei? (Bei KFZ Sensoren so üblich. mess mal, ob es eine elektrische Verbindung vom Sensorgehäuse zum den beiden Anschlusspins gibt. Sollte keine sein)
Wie sind die Massen der Sensoren verdrahtet?

Die Masse lag zum testen direkt am Minus-Pol der Batterie auf, genau wie die Zuleitung.
Werde mir original Stecker vom Fahrzeughersteller besorgen, sodas ich einfach nur Masse auf ein "Massestern" an der Zentralelektrik und Klemme 15 (geschaltetes Plus bei Zündung) ebenfalls auf einen Potentialverteiler aufstecke.

Momentan habe ich einen Absolutdrucksensor direkt auf der Platine, Spannungsmessung direkt auf der Platine, Öldruckmessung (massefrei, mit GND vom Arduino verbunden) und einen NTC, den ich allerdings durch einen Massefreien tauschen möchte. Alle Massen laufen im Gehäuse zusammen, alle Massen der Schraubklemmen sind untereinander verbunden, mit allen Massen der Spannungsregler, und GND vom Arduino, der Schirm des LCD ist ebenfalls damit durchverbunden. Die Logik des LCD läuft über den Spannungsregler vom Arduino.
Alle Massepunkte sind im EMV geschützen Gehäuse verbunden, und gehen dann erst über eine Schraubklemme aus dem Gehäuse.

guntherb:
Die 5V-Versorgung der Sensoren sollte unbedingt identisch sein mit der 5V Referenzspannung des AD, sonst gibts Messfehler.

Und, zu guter letzt: die gemessenen Signale über einen Softwarefilter jagen. Im KFZ wirst du immer Störungen haben.

Das habe nach Ratschlag gemacht, und läuft auch schom viel stabiler. Der AREF bekommt 5V vom 7805, im Sketch ist AREF auf EXTERNAL "gestellt".

Die Software möchte ich eh noch verfeinern, die Temperaturerfassung träger machen, und/oder mehrmals auslesen lassen, und den Durchschnittswert ausgeben lassen.

Laut Dokumentation des Herstelles (als PDF-Format) gehen alle NTC Thermistoren an "irgendeine" Masse am Motorblock (also da, wo sie arbeiten), und werden dann am Steuergerät des Moduls einfach aufgelegt. Also die Sensoren nutzen die Motorblockmasse/Chassis-Masse Wäre das eine gemeinsame Messstelle?

Am Motorblock niemals, wenn der Anlasser beim Motorstart seine 200A zieht haste du oft einen Spannungsabfall zwischen Chassis und Motor von 0,5 Volt.

Das ist die sog. Sensormasse, alle Massepins der Sensoren werden im Kabelbaum zusammengeklemmt und gehen als einzelne Leitung an einen Pin der ECU.
Wenn man nun den Widerstand mit eingestecker ECU misst ist diese Sensormasse sehr niederohmig mit der Fahrzeugmasse (Chassis) verbunden.

Ich glaube, ich habe das falsch oder missverständlich erklärt - ich würde ja ein Screenshot der Anschlussanleitung posten, aber ich denke, das gibt Ärger wegen Copyright. (Oder darf ich´s doch?)

Die Senoren (VDO) sind im Motorblock eingeschraubt, haben als gleiche Masse wie der Motorblock, Getriebe, und alles, was da halt so dranhängt.

Der andere Pin der Sensoren, also Öldrucksensoren, Thermistoren etc. geht dann einfach in das Steuergerät der LC-Anzeige.

Genau so wollte ich das eigentlich auch realisieren, aber wie von vielen geraten, werde ich so gut es geht, massefreie Sensoren verbauen dieses mal.

Ich hab mal schnell was zusammengeschustert: (So arbeitet die LC-Anzeige einer Firma, die Kunden sollen das Steuergerät so anklemmen)

Anschluss LCD Steuergerät.jpg

ja, da hat Rudirabbit recht: Sensormasse am Motorblock und Ardu-GND an der Batterie ist so ziehmlich die schlechteste Lösung. Du hast auf Grund der sehr vielen Verbraucher am Motor immer einen Masseversatz zwischen Motorgehäuse und Batterie-. Selbst wenns nur ein paar hundert Millivolt sind die versauen dir die ganzen Messwerte.

Massefreie Sensoren sind sicherlich die beste Möglichkeit, so wird das auch in modernen Fahrzeugen gemacht. Alternativ kannst du den GND des Arduino auch an den Motorblock legen. Das ist aber die schlechtere Variante.
Welche Sensoren hast du denn?

Der AREF bekommt 5V vom 7805, im Sketch ist AREF auf EXTERNAL "gestellt".

Dann mußt die Vorwiderstände der Sensoren auch damit versorgen.

Die Software möchte ich eh noch verfeinern, die Temperaturerfassung träger machen, und/oder mehrmals auslesen lassen, und den Durchschnittswert ausgeben lassen.

Filtern kannst du die Messwerte einfach über eine Tiefpassfunktion, die bildet einen gleitenden Durchschnitt mit beliebig starker Filterung bei minimalem Speicherverbrauch:

float Val;
int Eingangswert,j;

void setup() {  
  Serial.begin(115200);
  Serial.print("IN\t"); Serial.print("OUT\t\n"); 
}

void loop() {    
  Serial.print(Eingangswert); Serial.print("\t"); 
  Filtern(Val, Eingangswert, 100);
  Serial.print(Val); Serial.print("\t\n"); 
  if (j++ > 10) Eingangswert=1;  // nach 10 Werten Sprung auf 1  
}


/*************************************************************************************************
** Funktion Filtern()  by GuntherB								**
**************************************************************************************************
** Bildet einen Tiefpassfilter (RC-Glied) nach.							**
** FF = Filterfaktor;  Tau = FF / Aufruffrequenz						**
**  												**
**  												**
**  											   	**
**  Input: FiltVal der gefilterte Wert, NewVal der neue gelesene Wert; FF Filterfaktor		**
**  Output:	FiltVal										**
**  genutzte Globale Variablen: 	keine							**
**************************************************************************************************/
void Filtern(float &FiltVal, int NewVal, int FF){
  FiltVal= ((FiltVal * FF) + NewVal) / (FF +1);  
}

Hallo zusammen!
Habe über die Feiertage den Aufbau nochmals überarbeitet. Habe nun den AREF extern im Sketch gesetzt, und lasse die A/D Wandler nicht mehr über den internen 5V Spannungsregler laufen.
(Hoffe, das ist so richtig ausgedrückt)
Der Thermistor, die beiden Drucksensoren und die interne Spannungsmessung laufen nun über einen eigenen Spannungsregler. Somit läuft der Aufbau wesentlich weniger nervös. :slight_smile:

Aufgrund dieser Kenntnisse kann ich nun den Aufbau weiter erweitern.
Nächstes Level wäre das Auslesen eines Typ-K Thermoelement für Abgastemperaturmessung mit einem AD595 Verstärker.

Vielen Dank für die Hilfe!