Analogeingang absichern

hk007:
So??

Ja, genau so!
Grüße Uwe

Hallo nochmal,

@Uwe:
Ich hab die Schaltung jetzt mal nachgebaut. Hab anstelle der gezeichneten 24V "nur" 12V als Spannungsquelle verwendet. Aber das sollte m.E kein Problem sein.
Leider komm ich nicht auf das erwartete Ergebnis. Ich hab den Drucksensor mit einem Fluke Kalibrator simuliert und eine Messreihe aufgenommen.
Dazu hab ich Ströme von 4-20mA vorgegeben, und dann die resultierende Spannung gemessen.
U1 = Spannungsabfall an R1
U2 = Spannungsabfall an der Z-Diode (wie das Messinstrument in der letzten Schaltung)

Was fällt mir auf:
U1: Ich erreiche keine 10V bei 20mA, sondern nur 8,6V ???
U2: Ist um 0,2V gegenüber U1 verschoben. Hat bei 20mA folgenden Wert: 4,9V. Da ist auch kein Knick bei 4,7V, sondern ein schleichender Übergang.

Hmmmm???????

Unbenannt.JPG

Und nochmal,

Da mir das mit den 0,2V Versatz etwas komisch vorkam, hab ich die Schaltung noch einmal extern aufgebaut. (die 3 Widerstände und die Z-Diode)
Diesmal hab ich keinen Sensor simuliert, sondern direkt 4-20mA vorgegeben.

Wenn ich die 4-20mA nur über die parallelSchaltung der beiden 1k-Widerstände laufen lasse, dann bekomm ich erwartungsgemäss 2-10V

Sobald ich dazu parallel den 3.Widerstand + die Z-Diode hänge (so wie im Schaltbild) dann fallen bei 20mA über die beiden 1k-Widerstände nur noch 8,2V ab.
Die Kurve gemessen an der Z-Diode sieht genauso aus, wie bei meinem ersten Versuch direkt in meiner Schaltung. Keine lineare Kennlinie im unteren Bereich und schleichender Übergang im Bereich der der Z-Spannung.

Dachte immer, bis zu den 4,7V sperrt die Z-Diode vollständig, und bricht dann durch,so daß an der Z-Diode maximal 4,7V abfallen.

Hallo,

eine Zenerdiode ist leider kein digitales Bauteil.

Eine 4,7V-Diode wird schon bei Spannungen ab (geschätzt) etwa 3,5V zu leiten beginnen, wenn auch zunächst nur schwach.
Auch bei Spannungen > 4,7V macht sich dann noch der differentielle Widerstand bemerkbar, will heißen, der Widerstand der Z-Diode sinkt nicht auf 0 Ohm ab.

Sicherer wäre, die Bürde für den Druckaufnehmer mit 250 Ohm auszulegen und auf Auflösung zu verzichten, Du hast dann immer noch eine theoretische Auflösung von 0,012 bar!

Wenn Du die hohe Auflösung brauchst, dann wäre die Alternative ein externer 12-bit-Wandler über SPI, dann allerdings auch sinnvollerweise mit einer Referenzdiode als präzise Referenzspannungsquelle.

Gruß

Martin

eine Zenerdiode ist leider kein digitales Bauteil.

Ja, das glaube ich ist wohl das Problem.

Der Zweig mit der Z-Diode macht sich als Parallelschaltung bemerkbar und verändert mir die 500Ohm.
Es wird wohl wirklich das beste sein, ich nehm nen 250R. Dann hab ich ne Spannung von 1-5V. Mit den 10 Bit reicht das immer noch.
Schadet es, wenn ich vor dem Eingang des µC noch einen, sagen wir mal, 10K Widerstand nehme, um den Eingang zu schützen?

Ach ja: Muss ich mich um den AREF kümmern? Der hängt ja m.E. in der Luft.

gruß/hk007

Hallo hk007

Da hab ich Dir nicht den besten Ratschlag gegeben. Ich habe den Spannungsabfall durch den Strom der Zenerdiode, wenn sie leitend wird, weil die Zenerspannung erreicht wird nicht bedacht. Entschuldige bitte meinen Fehler.

Die Lösung einen 250 Widerstand zu nehmen fine ich eine gute Lösung.
Da hättest Du 1V bei 0 bar und 2,6V bei 4 bar.
Um den ganzen A/D Bereich auszunutzen könntest Du die interne Referenz von 1,1V, die 3,3V des Spannungsstabilisators oder eine Spannungteiler um die 3,3V auf 2,6V zu bringen, verwenden.

Interne Referenz 1,1V : Widerstand zur Spannungsmessung (R1/R2) 100 Ohm; da hast Du auch noch ein wenig mehr als 4 bar messen (bis 4,375 bar).

Externe Referenz 3,3V: Widerstand zur Spannungsmessung 317 Ohm; weiß jetzt nicht auswendig welcher 1% Widerstandswert am nächsten kommt. Falls Du keine Verbraucher an 3,3V hast solltest Du einen Widerstand hinschalten damit ca 5mA fließen und so der Spannungsstabilisator besser arbeitet.

Bei 2,6V Spannungsteiler braucht Du 250 Ohm. Der Spannungteiler muß aber auch mit 1% Widerstände gemacht werden und kann etwas niederohmig sein damit an den 3,3V etwas Strom fließt und so der Spannungsstabilisator besser arbeitet.

In allen 3 Fällen kann der Analogeingang bei 5V Spannungsversorgung des ATmega ohne Probleme 5V bekommen. Der ADC-Wert wird zwar 1023 sein, aber der Eingang geht nicht kaput. Die Schaltung kann gleich bleiben ( außer anderen Widerstandswert für R1/R2)

Grüße Uwe

Ein so hochwertiger Sensor hat doch fast schon einen kaufbaren I/U Wandler (4-20mA/0-5V) verdient... :stuck_out_tongue:

Da hab ich Dir nicht den besten Ratschlag gegeben. Ich habe den Spannungsabfall durch den Strom der Zenerdiode, wenn sie leitend wird, weil die Zenerspannung erreicht wird nicht bedacht. Entschuldige bitte meinen Fehler.

Du brauchst dich doch dafür nicht entschuldigen. Ich (und auch viele andere) sind um jeden Ratschlag von dir froh. Dafür opferst du auch viel Freizeit.
Hätt auch selber drauf kommen können, bevor ich rumlöte.

Aber nochmal zur Referenz. Das hab ich noch nicht so ganz kapiert. Da ist viel graues Halbwissen bei mir.
In dem AnalogInput-Beispiel wird mit der Referenz gar nix gemacht, und da sieht es aus, als ob mit dem Poti 0-5V eingelesen werden, und die ergeben dann 0-1023 digits

Hab grad den "analogReference(type)" Befehl entdeckt. Jetzt versteh ich wenigstens, wie man dem Mega mitteilt, welche Referenz er verwenden soll

Seh ich das jetzt richtig:
Fall 1:

analogReference(INTERNAL2V56): a built-in 2.56V reference (Arduino Mega only)

Würde bedeuten, keine externe Spannung an AREF. Ich verwende einen 250R Widerstand um 1-5V an den Arduino Analogeingang zu bekommen.
Und ich bekomme: 0..2,56V = 0-1023 digits sowie 2,57..5V werden immer als 1023 dargestellt

Fall2:

analogReference(default)

Würde bedeuten, keine externe Spannung an AREF. Ich verwende einen 250R Widerstand um 1-5V an den Arduino Analogeingang zu bekommen.
Und ich bekomme: 0..5V = 0-1023 digits

Aber die Referenzeinstellung gilt für alle Kanäle gleich, oder kann man die selektiv einstellen. (Wohl nicht)

Externe Referenz 3,3V: Widerstand zur Spannungsmessung 317 Ohm

Das haut aber nicht hin oder? WorstCase-Betrachtung: 20mA über 317R sind 6,34V :fearful:

fckw:
Ein so hochwertiger Sensor hat doch fast schon einen kaufbaren I/U Wandler (4-20mA/0-5V) verdient... :stuck_out_tongue:

Ich hab die Widerstände (4x1K) ja auch gekauft. :stuck_out_tongue:
OK,ok damit könnte ich die untere Grenze von 1V nach 0V runterziehen. Aber ehrlich gesagt, ist das mir das Geld nicht wert.

"Hochwertiger Sensor" Ja, mag sein, aber ich hab ihn halt günstig in der Bucht geschossen.

hk007:

Da hab ich Dir nicht den besten Ratschlag gegeben. Ich habe den Spannungsabfall durch den Strom der Zenerdiode, wenn sie leitend wird, weil die Zenerspannung erreicht wird, nicht bedacht. Entschuldige bitte meinen Fehler.

Du brauchst dich doch dafür nicht entschuldigen. Ich (und auch viele andere) sind um jeden Ratschlag von dir froh. Dafür opferst du auch viel Freizeit.
Hätt auch selber drauf kommen können, bevor ich rumlöte.

Danke :wink: :wink:

hk007:
Aber nochmal zur Referenz. Das hab ich noch nicht so ganz kapiert. Da ist viel graues Halbwissen bei mir.
In dem AnalogInput-Beispiel wird mit der Referenz gar nix gemacht, und da sieht es aus, als ob mit dem Poti 0-5V eingelesen werden, und die ergeben dann 0-1023 digits

Standartmäßig sind die 5V Versorgungspannung als Referenzspannung für den AD-Wandler aktiviert. Braucht nicht extra angegeben werden.

hk007:
Hab grad den "analogReference(type)" Befehl entdeckt. Jetzt versteh ich wenigstens, wie man dem Mega mitteilt, welche Referenz er verwenden soll

Hab nicht mitgekriegt, daß Du einen Mega hast.

hk007:
Seh ich das jetzt richtig:
Fall 1:

analogReference(INTERNAL2V56): a built-in 2.56V reference (Arduino Mega only)

Würde bedeuten, keine externe Spannung an AREF. Ich verwende einen 250R Widerstand um 1-5V an den Arduino Analogeingang zu bekommen.
Und ich bekomme: 0..2,56V = 0-1023 digits sowie 2,57..5V werden immer als 1023 dargestellt

Ja, richtig.

hk007:
Fall2:

analogReference(default)

Würde bedeuten, keine externe Spannung an AREF. Ich verwende einen 250R Widerstand um 1-5V an den Arduino Analogeingang zu bekommen.
Und ich bekomme: 0..5V = 0-1023 digits

Ja, richtig, aber dann kannst Du die Schutzschaltung nicht so verwenden wie beschrieben, da sie ab ca 4V nicht mehr linear ist.

hk007:
Aber die Referenzeinstellung gilt für alle Kanäle gleich, oder kann man die selektiv einstellen. (Wohl nicht)

Ja, für alle Kanäle gleich, Du kannst sie aber im Programm vor jeder Messung ändern, falls Du nur interne Referenzspannungen verwendest und die ersten 2 ADC-Read nach dem Umschalten verwirfst.

hk007:

Externe Referenz 3,3V: Widerstand zur Spannungsmessung 317 Ohm

Das haut aber nicht hin oder? WorstCase-Betrachtung: 20mA über 317R sind 6,34V :fearful:

Das war für 4 bar maximal gemessener Druck berechnet (4 bar entsprechen 3,3V). Habe ich da wieder etwas falsch verstanden oder wolltest Du nicht nur 4 bar messen?

Grüße Uwe

analogReference(default)
Würde bedeuten, keine externe Spannung an AREF. Ich verwende einen 250R Widerstand um 1-5V an den Arduino Analogeingang zu bekommen.
Und ich bekomme: 0..5V = 0-1023 digits
Ja, richtig, aber dann kannst Du die Schutzschaltung nicht so verwenden wie beschrieben, da sie ab ca 4V nicht mehr linear ist.

??? Bei 250R brauch ich doch keine Schutzschaltung, da bei 20mA nicht mehr als 5V am Widerstand abfallen.

Aber die Referenzeinstellung gilt für alle Kanäle gleich, oder kann man die selektiv einstellen. (Wohl nicht)
Ja, für alle Kanäle gleich, Du kannst sie aber im Programm vor jeder Messung ändern, falls Du nur interne Referenzspannungen verwendest und die ersten 2 ADC-Read nach dem Umschalten verwirfst.

Ja, hab mir gestern auch noch überlegt, ob man die Einstellung im Loop nicht immer wieder änden kann. Aber wieso muss/soll ich die ersten 2 ADC-Read verwerfen? Dauert das Umschalten so lange? Müssen es genau 2 ADC-Read sein?
Die Variante gefällt mir am besten.
An den ersten ADC häng ich meinen Drucksensor mit 250Ohm und ziehe den unteren Messbereich mit interner Ref von 2,56V auf. Wenn der Druck größer als "2,56V" wird, dann lauf ich halt in die Begrenzung des AD-Wandlers. Das ist kein Problem, da dies nicht dem normalen Zustand der Anlage entspricht.
An den zweiten kann ich dann noch ein "normales" 0-5V Signal hängen und da mit der "Standard-5V-Referenz" wandeln.
Es sind eh nur niederfrequente Signale (Druck / Temperatur).

Externe Referenz 3,3V: Widerstand zur Spannungsmessung 317 Ohm
Das haut aber nicht hin oder? WorstCase-Betrachtung: 20mA über 317R sind 6,34V smiley-eek-blue
Das war für 4 bar maximal gemessener Druck berechnet (4 bar entsprechen 3,3V). Habe ich da wieder etwas falsch verstanden oder wolltest Du nicht nur 4 bar messen?

Ja richtig. Ich bin aber davon ausgegangen, daß der Sensor max 10bar bei 20mA liefert. Mir war dann der Schutz des ADC wichtiger als die Auflösung. Sonst hätte ich mir das ja alles sparen können, und den Sensor an 500R hängen und hoffen, daß ich nicht über 5bar (=12mA->5V) komme.

An den ersten ADC häng ich meinen Drucksensor mit 250Ohm und ziehe den unteren Messbereich mit interner Ref von 2,56V auf. Wenn der Druck größer als "2,56V" wird, dann lauf ich halt in die Begrenzung des AD-Wandlers. Das ist kein Problem, da dies nicht dem normalen Zustand der Anlage entspricht.

Wenn der Druck zu hoch ist und übersteuert kannst Du immernoch den Druck mit 5V Referenz messen und so den genza Meßbereich haben. Aber Achtung: Die 5V sind nicht so sicher 5V. Je nach Spannungsversorgung kann das ein wenig varieren und zu Meßfehlern führen. Udo Klein hat letzten Monat einen Sketch gepostet um intern die Versorgungsspannung zu messen. Alternativ kannst Du mit einem Spannungsteiler die 5V halbieren und mit einem weiteren analog-Eingang mit 2,56V Referenz messen. So kennst Du dann genau den Wert der 5V Spannung.

Aber wieso muss/soll ich die ersten 2 ADC-Read verwerfen? Dauert das Umschalten so lange? Müssen es genau 2 ADC-Read sein?

Sicher ist die erste Messung falsch. Die 2. müßte richtig sein, aber was kostet es dich auch diese zu ignoriern und ein 3. Mal messen. Es ist sowieso zu erwägen mehrere Messungen der Analogwerte zu machen (5 oder 10) und den Mittelwert zu nehmen.
Du kannst ja mal ein kleines Beispiel programmieren und sehen wie es sich verhält.

??? Bei 250R brauch ich doch keine Schutzschaltung, da bei 20mA nicht mehr als 5V am Widerstand abfallen

.
Vom Meßwert her nicht.

Grüße Uwe

Hallo,

abschliessende Betrachtung:
Ich habe jetzt die Variante 250Ohm und die interne Referenz von 5V genommen. Das gibt (wie schon von marau prognostiziert) eine Auflösung von 12mbar. Das ist für meine Messaufgabe mehr als ausreichend.
Den Analogeingang hab ich dann an 2 Punkten (1V und 5V) kalibriert.
Um Schwankungen zu vermeiden habe ich eine Art PT-Glied eingebaut (Na ja es ist keine richtige e-Funktion, aber ihr wisst schon was ich meine). Da ich nur alle Sekunden messe und keine schnellen Druckänderungen erwarte ist dies m.E. optimal.

void DruckSensor (){
   int val = analogRead (0); 
   val = map(val, 200, 1019, 0, 10000); // Normierung in mbar
   Druck = (Druck * 2.0 + (float)val /1000.0) / 3.0; //Umwandlung in bar und Signaldämpfung.
}

Ach ja: Wer mit Analogwertverarbeitung rumbastelt, dem sei der map-Befehl empfohlen. Ich kannte den noch nicht, und habe gerade an einem entsprechenden Skaliertreiber programmiert, als ich ihn zufälligerweise gefunden habe.

Danke noch mal an alle für eure Ideen und Hilfe

Die Spannung an den Eingängen darf um 0.6V höer als die Betriebsspannung sein, somit ist eine Absicherung ganz einfach zu lösen.
Ein Vorwiderstand und eine Shotkydiode reichen allemal. Der Eingangwiderstand der Analogeingänge ist sehr Hochohmig, also ein Widerstand so zwischen 10k und 100k in serie zum
Eingang und die Diode nach Plus. Vor dem Vorwiderstand kann man so ziemlich alles machen wenn die Spannung nicht sehr zu hoch wird (bis so 15-20V).
Viel Erfolg bei euren Basteleien.

Karl (OE1KLA)

Habe das mal nachgebaut Software mässig der umgerechnete wert wird aneinen pwm ausgang ausgegben Wenn ich aber am eingang weniger als 2V anlege bekomme ich negativ werte am ausgang.
Wie kann ich das ändern .
Gruß bello12

das ist logisch
val = map(val, 200, 1019, 0, 10000); // Normierung in mbar
Sieht keine Werte unter 200 vor ( ca 1V mit spannungsteiler 2V).

oder welchen Sketch verwendest Du?

Grüße Uwe

Habe noch einen pwm ausgang hinzugfügt. Wenn ich jetzt aber den messunformer abklemme bekomme ich am pwm ausgang eine negtiven wert den kann ich dort nicht gebrauchen. Gibts da noch ein trick.
Gruß bello12

Du könntest schreiben
if(val <0) val=0;

grüße Uwe

Dnke für die Lösung funktioniert.
Gruß bello12