Ich habe hier eine Schaltung mit vier Widerständen in Ringanordnung. Ich
würde gerne die Werte der Widerstände messen, ohne sie auszulöten. Ich
dachte ich könnte einfach mal schnell über alle vier Widerstände den
Wert messen und mit den vier Werten über den jeweiligen Ersatzwiderstand
die einzelnen echten Rs berechnen. Aber jetzt wo ich die Gleichungen
aufgestellt habe, scheint mir das Ganze doch nicht mehr so ganz trivial
zu sein...
Von den vier Gleichungen ausgehend müsste ich jetzt nach und nach in
einander einsetzen, aber das ergibt sehr schnell sehr unübersichtliche
Terme höherer Ordnung...
Übersehe ich etwas, oder gibt es da leider keinen leichteren Weg, die
einzelnen Widerstandswerte zu ermitteln? Auslöten würd ich aufgrund der
Bauteilgröße sehr gerne vermeiden.
Da ja auch jede Widerstandsmessung eine kleine Spannung an die
Widerstände anlegt, könnte man einfach eine Spannung über einen der
Widerstände legen und dann an die Spannungen über den aus den anderen 3
Widerständen gebildeten "Teiler" messen. Dann hat man das Verhältnis
dieser Widerstände zueinander. So kann man sich an die Bestimmung der
Widerstände leicht herantasten.
Lege 1V an R1. Dann kannst Du an R2, R3 und R4 die Spannung messen und
kennst deren Verhältnisse.
Miss genauso z.B. R1,R2 und R3. Dann hast Du alle Verhältnisse, also
R2=a*R1, R3=b*R1 und R4=c*R1. Es gilt dann:
* d = a+b+c
* R2+R2+R4 = R1*d
* R1 + R2+R2+R4 = R1(1+d)
Den gesamtwiderstand kannst Du dann mit einer Ohmmessung bestimmen. Z.B.
über Re1 = R1*(R2+R3+R4)/(R1+R2+R3+R4) = R1²*d / R1(1 + d) = R1*d/(1+d)
--> Re1(1+d)/d = R1
Lothar M. schrieb:> A. D. schrieb:>> Auslöten> Du musst ja nur 1 einzigen Pin auslöten, um den Stromkreis> aufzutrennen.
Oder an einer Stelle die Leiterbahn unterbrechen...
Ich danke euch allen für den Input. Ich hab noch etwas versucht über die
Verhältnisse zu gehen, aber im Endeffekt hab ich jetzt wirklich eine
Leiterbahn durchtrennt und konnte damit alle Rs einzeln messen. Das war
jetzt die schnellste Möglichkeit. Auch wenns mich etwas wurmt, das jetzt
nicht geschickter gelöst zu haben...
Es wurden ja bereits sehr gute Vorschläge gemacht, wie du durch eine
geschickte Vorgehensweise bei den Messungen die anschließende Berechnung
stark vereinfachen kannst.
Aber auch mit deinen Messungen von Re[1..4] kann man zu einem Ergebnis
kommen.
A. D. schrieb:> Von den vier Gleichungen ausgehend müsste ich jetzt nach und nach in> einander einsetzen, aber das ergibt sehr schnell sehr unübersichtliche> Terme höherer Ordnung...
So ein nichtlineares Gleichungssystem löst man deswegen am besten
numerisch. In Python mit der Scipy-Bibliothek geht das ganz leicht:
1
from scipy.optimize import fsolve
2
3
m = ( 1971, 1716, 1056, 2379 ) # Messungen
4
5
print(fsolve(lambda r,m: (r-m)*sum(r)-r*r, m, (m,), xtol=1e-9))
Ausgabe:
1
[2700. 2200. 1200. 3900.]
Der Code funktioniert auch für Ringe aus 3, 5 oder mehr Widerständen.
In Python wollte ich mich eh schon ewig mal reinfuchsen, vielleicht
nutze ich das mal als Motivation, mir das genauer anzuschauen ;)
Ich kann aber die Eingabe deiner Funktion nicht ganz nachvollziehen. Zum
Teil vermutlich, weil ich die Python-Syntax noch nicht kenne.
Was bedeuten lamda und r? Wo kommt ganz generell die verwendete Funktion
her?
A. D. schrieb:> Auch wenns mich etwas wurmt, das jetzt nicht geschickter gelöst zu haben...
Zu recht, auch wenn es im Einzelfall die schnellste Lösung ist.
Yalu X. schrieb:> So ein nichtlineares Gleichungssystem löst man deswegen am besten> numerisch. In Python mit der Scipy-Bibliothek geht das ganz leicht:
Selbst Excel oder LibreOffice Calc können das mit dem Solver-Tool.
Es wird die Nullstelle für die vier Messwerte x=1,2,3,4 gesucht:
1
print(fsolve(lambda r,m: (r-m)*sum(r)-r*r, m, (m,), xtol=1e-9))
Das Schlüsselwort "lambda" definiert eine anonyme Funktion mit den
Parametern r und m (die in diesem Fall Vektoren (Liste bzw. Array) mit 4
Werten sind), die Funktion folgt auf den Doppelpunkt, das m bezeichnet
den Startpunkt der Iteration (da man nichts Besseres weiß) und (m,) ist
das zweite Argument für die Funktion (so ist halt die Syntax), xtol
bestimmt die Genauigkeit, wann die Nullstellensuche abgebrochen wird.
Der Solver eiert dann die Zahlen durch, probiert ob es passt (im ersten
Versuch natürlich noch nicht) und modifiziert die Startwerte solange,
bis ein passend genaues Ergebnis herauskommt, das dann ausgegeben wird.
Das ist das ganze Hexenwerk.
Statt der anonymen Funktion könnte man auch eine benannte Funktion
definieren und im Solver aufrufen:
1
def funktion(r, m):
2
return (r-m)*sum(r)-r*r
3
4
print(fsolve(lambda r,m: funktion(r, m), m, (m,), xtol=1e-9))
Oh je, die Syntax von Python ist aber... gewöhnungsbedürftig^^
Aber vielen Dank für die ausführliche Erklärung, die Herleitung der
Funktion ist super nachvollziehbar!
Martin H. schrieb:> Statt der anonymen Funktion könnte man auch eine benannte Funktion> definieren und im Solver aufrufen:>> def funktion(r, m):> return (r-m)*sum(r)-r*r>> print(fsolve(lambda r,m: funktion(r, m), m, (m,), xtol=1e-9))
Wenn die Funktion einen Namen hat, lässt man das lambda natürlich weg
und übergibt die Funktion direkt als erstes Argument an fsolve:
1
print(fsolve(funktion, m, (m,), xtol=1e-9))
Den Lambda-Ausdruck habe ich nur verwendet, um die Anzahl der Codezeilen
zu verringern. Wenn der Funktionsrumpf kurz ist und die Funktion nur an
einer einzigen Stelle im Code verwendet wird, bietet sich das an, man
kann aber je nach Geschmack auch darauf verzichten.
A. D. schrieb:> Oh je, die Syntax von Python ist aber... gewöhnungsbedürftig^^
Der angehängte Code ist eine leichter nachvollziehbare und kommentierte
Version des Programms ohne Vektorarithmetik und Lambda für eine feste
Anzahl (4) von Widerständen.
Yalu X. schrieb:> Wenn die Funktion einen Namen hat, lässt man das lambda natürlich weg> und übergibt die Funktion direkt als erstes Argument an fsolve:
Du hast natürlich recht, ich war zu fix mit copy/paste, schreibe noch,
dass man lambda ersetzen kann und baue dann wieder ein lambda, peinlich.