Forum: Mikrocontroller und Digitale Elektronik Autokalibrierung von Spannungs-Teiler


von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Lesenswert?

Wir brauchen eine Autokalibrierung für einige Spannungseingänge von 
Messmodulen, die +/-1V vertragen und mit +/-500 beschaltet werden 
sollen.

Der vorgesehene Spannungs-Teiler wird mit 0.1% Widerständen aufgebaut.
Eingangswiderstand sind 15kOhm +/- <1%.

Ich rechne einen Teiler 1k parallel den 15k und 470k.
Das sind ungefähr 0,002.

Um die Toleranzen einzufangen (die beiden ungünstigsten Kombinationen in 
beide Richtungen) muss der 1k-Widerstand zwischen 1002 und 1008 Ohm 
betragen. Der Einfachheit möchte ich einen 1k und einen 10Ohm in Serie 
betreiben. Der 10 soll dann einstellbar sein.

Die Idee ist, die 10 Ohm durch einen Microcontroller zu steuern. Ein 
Autoabgleich wäre machbar, durch Anlegen einer 175V-Referenz 
(PTB-Normal).

Nur wie lässt sich das machen? Wie fängt man die Hochspannung ab?

Leistungstransitor dazwischen stecken?

Ein digitales Poti scheidet wohl aus, oder?
Oder kann ich das irgendwie schützen und rechnen, dass dort wirklich nur 
10 / 471000 = 0, irgendwas anliegen?

Reichen zwei Dioden gegeneinander oben drüber?

Oder nimmt man gleich zwei Z-Dioden über dem gesamten Eingang?

Wie schaut es aus mit Rauschen? Rauschen diese digitalen Potis?

von Foobar (asdfasd)


Lesenswert?

Die heute übliche Methode wäre, den Abgleich in Software zu machen.  Das 
einfachste für eine Autokalibrierung dürfte ein Relais sein, dass vom 
Eingang auf die Referenzspannungsquelle umschaltet.  Den Rest macht der 
Proz.

von Wolf17 (wolf17)


Lesenswert?

Oh jeh da wäre noch einiges zu klären!
-Auflösung der Messmodule?
-Genauigkeit der Messmodule?
-Ri 15k, ist das resistiv? Bitte Datenblatt der Module posten
-Wie oft darf an 175VDC kalibriert werden, oder kann die Kalibrierquelle 
direkt an die Schaltung montiert werden?
-Einsatztemperaturbereich?
-470k 499V ist 0,5W, für Präzision ist das abzulehnen. Besser 10x 47k, 
(bei 0,14K/mW x 50mW= +8K bei TK25 = 0,02% Erwärmungsfehler) dann ist 
auch die Einzelspannung unproblematisch.
-47k 0,1% TK25 kostet 28ct, TK5 wird deutlich teurer.
-bei einem 10R Trimmer ist die Schleiferwiderstandskonstanz 
problematisch, besser eine hochohmige Parallelschaltung machen
-kann man den Abgleich nicht am Ende der Messkette in Software machen?

von Peter D. (peda)


Lesenswert?

Foobar schrieb:
> Die heute übliche Methode wäre, den Abgleich in Software zu machen.

So machen wird das auch nur.
Was ist denn für eine Genauigkeit und Temperaturgang gefordert?
Je nach Anforderungen reicht ein simpler Zweipunktabgleich nicht mehr 
aus und es sind die Koeffizienten für eine Spline-Interpolation zu 
ermitteln.

Die Zeiten der 25Gang Präzisionspotis sind lange vorbei und Digitalpotis 
kann man vergessen.

von Rainer W. (rawi)


Lesenswert?

K. F. schrieb:
> Rauschen diese digitalen Potis?

Natürlich rauschen die, jeder andere Widerstand auch.

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

K. F. schrieb:
> Ich rechne einen Teiler 1k parallel den 15k

Woher weisst du, dass die 15k nach Masse gehen und immer gleich sind ?

Du scheinst vor allem den Einfluss der 15k kompensieren zu wollen.

Elektronische Potis haben einen Schleiferwiderstand deutlich grösser als 
2 Ohm, das wird so also nichts.
.Warum nicht an den 470k/1k Spannungsteiler einen OpAmpBuffer. Der 
blendet den Effekt der 15k aus und bildet gleichzeitig einen 
Eingangsschutz: er liefert nicht mehr als seine Betriebsspannung.


Die 470k an 500V machen 0.53W. Damit sind Präzisionswiderstände nicht 
mehr präzise. Ich würde 2MOhm nehmen, oder in Anlehnung an Multimeter 
10MOhm. Gerade durch hochohmige OpAmp Eingänge (effektiv hast du ja nur 
4k Quellwiderstand) reicht der geringe Strom. Und wenn dich 
Widerstandsrauschen stört: durch einen Kondensator kannst du das 
absenken, je weniger schnell die Schaltung reagieren muss, je grösser 
darf er sein.

Und falls dir 0.1% nicht reichen: es gibt auch präzisere 
Spannungsteiler, und die bleiben sogar präzise über Temp und Alter.

von Motopick (motopick)


Lesenswert?

Bei einem DC Signal kaeme eine PWM in Frage, um einen Teil des
Spannungsteilers abgleichbar zu machen.

von Purzel H. (hacky)


Lesenswert?

Einen Spannungsteiler auf genau 1:500.00 abzugleichen macht doch eher 
weniger Sinn. Ich persoenlich waere mit 1:470 +- 1% oder 0.1% zufrieden. 
Den Rest macht man in Software. ist ein Faktor 1.063. Dazu braucht man 
nicht floating point. ( * 8715/8192) Aber meist is man eh nicht in 
Absolutewerten von Zwischenresultaten interessiert. Sondern kalibriert 
auf Endwerte

: Bearbeitet durch User
von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Angehängte Dateien:

Lesenswert?

Michael B. schrieb:
> Woher weisst du, dass die 15k nach Masse gehen und immer gleich sind ?
Weil der ein 0,1% ist und sich aus dem Rest der Schaltung maximal 0,5% 
Fehler ergeben. Abgeschätz und angegeben wird der mit 1%.

Purzel H. schrieb:
> Einen Spannungsteiler auf genau 1:500.00 abzugleichen macht doch eher
> weniger Sinn.
Soll aber so sein. Siehe Schaltung. Geht das so?

Mal abgesehen davon, dass ungeklärt ist, wie die 10Ohm eingestellt 
werden.

P.S. Den Vorschlag mit den mehrfachen 47k, um die Leistungs zu schaffen, 
ist ein guter Punkt. Habe ich aufgenommen.

von Bruno V. (bruno_v)


Lesenswert?

Wenn Du 0,1% Widerstände hast und nur auf 0,5% genau sein willst, dann 
brauchst Du nicht Kalibrieren. Der 15k 1% geht doch nur mit 0,15% ein, 
in Summe also 0,35%

Genau das, was Du ja auch raus hast.

Wenn Du Kalibrieren willst: statt 0-10 R kannst Du auch 100 k oder so 
parallel schalten und dazu 1k in Reihe, die justiert werden. Ist 
einfacher als 10R

von Harald W. (wilhelms)


Lesenswert?

K. F. schrieb:

> Anlegen einer 175V-Referenz (PTB-Normal).

Was ist das für eine seltsame Referenz? Bei der PTB gibts
m.W. Josephson-Normale zu kaufen, aber die haben nicht eine
derart hohe Spannung

von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Lesenswert?

Harald W. schrieb:
> Was ist das für eine seltsame Referenz?

Ist die Baugruppe eines Lieferanten, der ein eigenes PTB-zertifiziertes 
Kali-Lab hat.

von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Lesenswert?

Bruno V. schrieb:
> kannst Du auch 100 k oder so
> parallel schalten und dazu 1k in Reihe,
dann bekommt diese Anordnung aber gemäß des Vorwiderstandes eine sehr 
viel höhere Spannung ab. Wenn es ein digitales Poti sein soll, dann kann 
das sicher keine 100V. So wären es etwa 10V.

von Bruno V. (bruno_v)


Lesenswert?

K. F. schrieb:
> dann bekommt diese Anordnung aber gemäß des Vorwiderstandes eine sehr
> viel höhere Spannung ab. Wenn es ein digitales Poti sein soll, dann kann
> das sicher keine 100V. So wären es etwa 10V.

Das Digitale Poti bekommt immer nur einen Bruchteil von 1 V ab, bzw. 
einen Bruchteil der Spannung am 1k.

Beispiel jetzt: Der TO möchte 1,000k.. 1,010k haben. Statt 1k + 10R kann 
er auch 1k1 nehmen und dazu parallel etwa 11k+1k Poti (in Summe also 
11..12k parallel zu den 1k1). (Bitte genau nachrechnen, aber in etwa 
sollte das hinkommen´)

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

K. F. schrieb:
> Wenn es ein digitales Poti sein soll, dann kann
> das sicher keine 100V. So wären es etwa 10V.

Sag mal, hasst du dir überhaupt mal ein Datenblatt eines Digitalpotis 
angesehen? Die sind der letzte Murks.

Ich persönlich würde mal einen genauen Blick auf das Budget werfen und 
zusätzlich überschlagen was der ganze Aufwand zum Abgleich pro Stück 
kostet. Dann wäre ich ganz schnell bei so was wie 
https://www.digikey.de/de/products/detail/vishay-techno/CDMM2M00F5000DET/16894384. 
Der spezielle Typ hat eine Verhältnistoleranz von +/- 0,5% (das "D" 
drittletzter Buchstabe in der Typbezeichnung).

Ja, teuer. Dazu ein OpAmp als Puffer. Dafür fällt der Abgleich und damit 
das Digitalpotentiometer weg. Es bleibt, wenn nötig, eine 
Softwarekalibrierung.

von M. K. (sylaina)


Lesenswert?

Purzel H. schrieb:
> Dazu braucht man
> nicht floating point.

Ohne Floating Point macht dir ein Compiler aus

Purzel H. schrieb:
> ( * 8715/8192)

ziemlich genau 1 aber ob das das ist, was du erwartest? Ich wage es mal 
zu bezweifeln ;)

von Purzel H. (hacky)


Lesenswert?

Die Operation zum Kalibrieren geht natuerlich mit Integern.
Am besten 32 bit :

 1)  * 8715
 2)  shr 13    = div 8192

Hin und wieder muss man dem Compiler sagen, was man will.

: Bearbeitet durch User
von Michi S. (mista_s)


Lesenswert?

M. K. schrieb:
> Ohne Floating Point macht dir ein Compiler aus
>
> Purzel H. schrieb:
>> ( * 8715/8192)
>
> ziemlich genau 1

Hmm... also wenn man das exakt so (also inkl. der Klammern) in den 
Quelltext schreibt, würde ich doch eher auf einen (Syntax)-Error tippen; 
läßt man die Klammern weg, sollten gleichrangige Operatoren doch left to 
right ausgewertet werden, oder? - Dann würde das schon funktionieren; 
falls left to right nicht zwingend im C-Standard steht, dann müßte man 
die Multiplikation klammern.

Außerdem könnte es auf Systemen Probleme geben, auf denen int nur 16Bit 
und der Eingangswert >12Bit breit ist; dann sollte einer der Faktoren 
ein long sein, damit das Zwischenergebnis nicht überläuft.

von M. K. (sylaina)


Lesenswert?

Michi S. schrieb:
> Hmm... also wenn man das exakt so (also inkl. der Klammern) in den
> Quelltext schreibt, würde ich doch eher auf einen (Syntax)-Error tippen;
> läßt man die Klammern weg, sollten gleichrangige Operatoren doch left to
> right ausgewertet werden, oder?

Es kommt auf die Einstellungen an. Steht da sowas wie
1
 myValue = getValue * 8715 / 8192;

kann es durchaus passieren (sogar wahrscheinlich), dass der Compiler die 
Konstanten erkennt und schon im Vorfeld ausrechnet da sich diese ja nie 
ändern werden. Und da kann es durchaus passieren, dass er daraus
1
 myValue = getValue;

machen wird. Dinge wie diese sind es, die die meiste Zeit bei der 
Fehlersuche frisst: Man denkt nicht wie der Compiler und sucht sich nen 
Wolf wo der Fehler steckt. Da hilft dann nur in die entsprechenden 
Dateien zu schauen um zu sehen, was hat denn der Compiler aus meinem 
Code gemacht.

von Bruno V. (bruno_v)


Lesenswert?

M. K. schrieb:
> dass der Compiler die
> Konstanten erkennt und schon im Vorfeld ausrechnet da sich diese ja nie
> ändern werden. Und da kann es durchaus passieren, dass er daraus

Egal, ob er sie erkennt, er muss sich an die Auswertereihenfolge halten 
und kann die nicht "optimieren".

Aber ja, eine Klammer macht es für andere Leser des Codes leichter.

von M. K. (sylaina)


Lesenswert?

Bruno V. schrieb:
> Egal, ob er sie erkennt, er muss sich an die Auswertereihenfolge halten
> und kann die nicht "optimieren".

Ich mag mich irren aber ob ich bei
1
myValue = getValue * 8715 / 8192;

dürfte es recht egal sein ob du
1
myValue = (getValue * 8715) / 8192;

oder
1
myValue = getValue * (8715 / 8192);

rechnest. Und da sollte jeder Compiler ein Optimierungspotential sehen. 
* und / sind gleichwertig, die Auswertereihenfolge recht beliebig.

von Bruno V. (bruno_v)


Lesenswert?

M. K. schrieb:
> Und da sollte jeder Compiler ein Optimierungspotential sehen.
> * und / sind gleichwertig, die Auswertereihenfolge recht beliebig.

Soweit ich weiß ist vorgeschrieben von links nach rechts.

Beliebig ist die Reihenfolge des Aufrufs der Funktionen, falls die 
Faktoren (bzw. Dividend, Divisor) Funktionen sind (oder z.B. ++, --). 
Die Rechnung selber ist es nicht.

Dementsprechend ist

M. K. schrieb:
> myValue = getValue * 8715 / 8192;

äquivalent zu

M. K. schrieb:
> myValue = (getValue * 8715) / 8192;

und ergibt bei getValue=16 halt 17 (statt 16)

: Bearbeitet durch User
von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Lesenswert?

Hannes J. schrieb:
> Sag mal, hasst du dir überhaupt mal ein Datenblatt eines Digitalpotis
> angesehen? Die sind der letzte Murks.

Ja und daher meine eingangs gestellte Frage ob und wie man das machen 
könnte.

P.S. Eine reine Softwarelösung kommt in diesem spezielle Fall leider 
nicht in betracht. Die Einheit soll in einem kritischen Umfeld verbaut 
werden und muss einen Spannungsausgang liefern. Es darf keine SW laufen.

von Falk B. (falk)


Lesenswert?

M. K. schrieb:
> Ich mag mich irren aber ob ich bei

Du irrst.

> myValue = getValue * 8715 / 8192;
>
> dürfte es recht egal sein ob du
> myValue = (getValue * 8715) / 8192;

So rechnet der Compiler, die beide oberen Zeilen sind identisch.

> oder
> myValue = getValue * (8715 / 8192);

FAIL! Durch die Festkommaarithmetik verliest du hier MASSIV an 
Genauigkeit! Denn 8715/8192 = 1!!!, die korrekte Rechnung liefert aber * 
1,063, d.h. durch deine falsche Klammer liegst du 6% zu tief. Da kann 
man sich die Kalibierung auch sparen ;-)

> rechnest. Und da sollte jeder Compiler ein Optimierungspotential sehen.
> * und / sind gleichwertig, die Auswertereihenfolge recht beliebig.

NEIN! Nicht bei realen Rechnungen mit Integervariablen! Bei Float 
teilweise, aber auch da nicht immer, Stichwort Endliche Auflösung.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

K. F. schrieb:
> Wir brauchen eine Autokalibrierung für einige Spannungseingänge von
> Messmodulen, die +/-1V vertragen und mit +/-500 beschaltet werden
> sollen.
>
> Der vorgesehene Spannungs-Teiler wird mit 0.1% Widerständen aufgebaut.

Ist gar nicht nötig, wen man so oder so kalibrieren will/muss. Viel 
wichtiger ist der Temperaturkoeffizient, kurz Tk.

> Ich rechne einen Teiler 1k parallel den 15k und 470k.
> Das sind ungefähr 0,002.

Wie meinen? Ein Schaltplan sagt mehr als 1000 Worte, siehe 
Netiquette.

> Um die Toleranzen einzufangen (die beiden ungünstigsten Kombinationen in
> beide Richtungen) muss der 1k-Widerstand zwischen 1002 und 1008 Ohm
> betragen. Der Einfachheit möchte ich einen 1k und einen 10Ohm in Serie
> betreiben. Der 10 soll dann einstellbar sein.

Naja, man kann es auch übertreiben. Typische Kalibrierbereiche sind 
+/-5%, ggf. auch +/-10% und mehr.

> Die Idee ist, die 10 Ohm durch einen Microcontroller zu steuern. Ein
> Autoabgleich wäre machbar, durch Anlegen einer 175V-Referenz
> (PTB-Normal).

Wozu automatisch? Wenn du das nicht bei hunderten Geräten machen willst, 
ist das sinnlos.

> Nur wie lässt sich das machen? Wie fängt man die Hochspannung ab?

Welche Hochspannung? Deine 500V sind Restspannung für Leute, die 
WIRKLICH nicht Hochspannung arbeiten ;-)

> Leistungstransitor dazwischen stecken?

Quark. Was soll da überhaupt "abgefangen" werden? Der Vorwiderstand muss 
ausreichend spannungsfest sein, das ist alles.

> Ein digitales Poti scheidet wohl aus, oder?

Nimm ein normales, qualitativ hochwertiges Poti und gut.

> Reichen zwei Dioden gegeneinander oben drüber?

-> Schaltplan!

> Oder nimmt man gleich zwei Z-Dioden über dem gesamten Eingang?

Nein. Die schützen nicht so, wie es die meisten glauben. Bei +/-1V am 
Messeingang nimmt man leckstromarme Klemmdioden nach +/-1V. Aber bei 
500k Vorwiderstand passiert da nicht viel, eigentlich gar nichts.

Siehe Anhang.

von M. K. (sylaina)


Lesenswert?

Falk B. schrieb:
> FAIL! Durch die Festkommaarithmetik verliest du hier MASSIV an
> Genauigkeit! Denn 8715/8192 = 1!!!, die korrekte Rechnung liefert aber *
> 1,063, d.h. durch deine falsche Klammer liegst du 6% zu tief. Da kann
> man sich die Kalibierung auch sparen ;-)

Das ist doch genau das, was ich oben schon anmerkte? Ich glaub, wir 
reden hier alle aneinander vorbei.

von Foobar (asdfasd)


Lesenswert?

> * und / sind gleichwertig, die Auswertereihenfolge recht beliebig.

Nein.  Der C-Standard gibt vor, dass (linksassoziative) Operatoren mit 
gleicher Präzedenz von links nach rechts ausgewertet werden.  a*b/c wird 
immer als (a*b)/c ausgewertet.

Falk's FAIL bezog sich auf die explizite Klammerung a*(b/c).

Wie Michi aber schon schrieb, ein Fehlerpotential hat
   myValue = getValue * 8715 / 8192;
aber trotzdem noch: Overflow.

Durch einen long-Operand könnte man long-Arithmetik erzwingen, z.B.:
   myValue = getValue * 8715l / 8192;

: Bearbeitet durch User
von Bauform B. (bauformb)


Lesenswert?

Nach 10 Tagen und 22 Beiträgen
K. F. schrieb:
> Die Einheit soll in einem kritischen Umfeld verbaut
> werden und muss einen Spannungsausgang liefern. Es darf keine SW laufen.

von Klaus F. (klaus27f)


Lesenswert?

K. F. schrieb:
> Microcontroller

K. F. schrieb:
> Es darf keine SW laufen.


Bauform B. schrieb:
> Nach 10 Tagen und 22 Beiträgen

Ja, da hat er recht, Bauform B.
Unglaublich.
Obwohl der Fragesteller selbst das o.g. zitierte Wort > Microcontroller
in seiner Ausgangsdrage reingeschriben hat.

Was soll man dazu sagen?
   Setzen, 6.

Neu anfangen.
Erst nachdenken was es werden soll.

> Die Einheit soll in einem kritischen Umfeld verbaut werden
Ojeoje.
Hoffentlich ist es das "kritische Umfeld" nicht wirklich wahr.
Evtl. über anderen Beruf nachdenken.

Gruss

von Frank K. (fchk)


Lesenswert?

K. F. schrieb:
> Hannes J. schrieb:
>> Sag mal, hasst du dir überhaupt mal ein Datenblatt eines Digitalpotis
>> angesehen? Die sind der letzte Murks.
>
> Ja und daher meine eingangs gestellte Frage ob und wie man das machen
> könnte.
>
> P.S. Eine reine Softwarelösung kommt in diesem spezielle Fall leider
> nicht in betracht. Die Einheit soll in einem kritischen Umfeld verbaut
> werden und muss einen Spannungsausgang liefern. Es darf keine SW laufen.

Sowas schreibt man gleich in die Fragestellung rein.

Für Deine Problemstellung fällt mir nur eine praktikable Lösung ein, die 
auch tatsächlich in der Industrie angewendet wird:

Du nimmst Dickfilmwiderstände, die Du vorher ausmisst und dann per Laser 
abgleichst, indem Du einen Schlitz in die Widerstandsschicht 
reinbrennst.

So z.B.:

https://www.aci-laser.com/de/anwendungen/lasertrimmen/

Das ist dauerhaft, unabhängig von den verwendeten Spannungen, und - ganz 
wichtig - es kommen keine zusätzlichen Störungen oder 
Temperaturabhängigkeiten durch zusätzliche Bauteile rein. Das 
Widerstandsrauschen und die Temperaturabhängigkeit der Widerstände ist 
ja eh durch die Schaltung vorgegeben.

Dieser Ansatz wird in der Halbleiter und der Hybridmodulfertigung in der 
Massenfertigung tatsächlich vielfach angewendet.

fchk

von K. F. (Firma: Dipl.-Ing.*in) (ntguser)


Lesenswert?

M. K. schrieb:
> Ich glaub, wir
> reden hier alle aneinander vorbei.

Vor allem hat es immer wenger mit der Frage zu tun.

Klaus F. schrieb:
> Obwohl der Fragesteller selbst das o.g. zitierte Wort > Microcontroller
> in seiner Ausgangsdrage reingeschriben hat.
Die Kalibrierung soll mit einem Mikrocontroller erfolgen. Der Wert für 
den dann einzusetzenden Spannungsteiler muss aber statisch festgelegt 
werden. Es gibt selbstredend Mikrocontroller auf den Hauptplatinen des 
Kunden, nur haben wir auf diese keinen Dauerzugriff. Vor allem können 
wir keine Software dort unterbringen, welche dann im Betrieb aktiv 
Rechnungen durchführt.

Die Kalibrierung ist für den Power-Up Fall vorgesehen - oder 
meinetwegen, wenn eine Kunde meint, es wiederholen zu müssen.

Ich möchte hier auch nicht weiter in die technischen und funktionellen 
Details eintauchen, daher nur soviel:

Wenn es möglich wäre, eine Soft-Kalibrierung durchzuführen, wäre das 
drin.

Beitrag #7656597 wurde vom Autor gelöscht.
von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

K. F. schrieb:
> Die Einheit soll in einem kritischen Umfeld verbaut
> werden und muss einen Spannungsausgang liefern. Es darf keine SW laufen.

Und da könnt ihr euch keinen richtigen Entwickler leisten?

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
Noch kein Account? Hier anmelden.