AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Berechnung eines Wertes aus Widerstandsreihe

Berechnung eines Wertes aus Widerstandsreihe

Ein Thema von _frank_ · begonnen am 29. Dez 2006 · letzter Beitrag vom 2. Jan 2007
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#1

Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 13:01
Moin,
ich wollte meinen Elektrorechner mal um eine häufig gefragt Funktion erweitern...die genormten Widerstandsreihen (E3,E6,E12,E24,E48,E96,E192).

als Dokumentation hab ich da u.a.
http://www.elektronik-kompendium.de/...au/1109071.htm

laut dieser und anderer Quellen lassen sich die werte berechnen aus der (n-ten Wurzel aus 10)^(position-1). Leider habe komme ich teilweise nicht auf die richtigen Werte (trotz runden).
z.B.
Reihe E6 => k=1,4677 (6.wurzel aus 10)
der 4.wert sollte also ~3,3 sein
ich komme jedoch auf 3,161636106733 was ich nicht wirklich auf 3,3 runden kann...

kennt sich damit evtl jemand aus?

Gruß Frank
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
4.825 Beiträge
 
Delphi XE Starter
 
#2

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 13:34
Wenn Du einmal in diesem Dokument auf die Seite 16 gehst, da werden
Deine Berechnungen bestätigt.

Und viellecht hilft das noch zur Erklärung (Quelle Wiki):
Zitat:
Da die Reihen E3, E6, E12 und E24 schon 1948 und 1950 und damit vor der Entstehung der DIN IEC 63 festgelegt wurden, entsprechen in der E24 Reihe die Werten von 2,7 bis 4,7 nicht den Rundungsregeln, was aber auf Grund der Verbreitung nicht mehr geändert werden konnte.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von TwoFace
TwoFace

Registriert seit: 21. Jun 2003
Ort: Uffenheim
26 Beiträge
 
#3

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 13:38
Servus

ich kann mich da nur anschließen, weil die E6 Reihe eine ziemlich große Toleranz hat (20%).

Ich hab das mal durchgerechnet (siehe Bild) und ich komm dabei auf einen Toleranzbereich von 2,52982 bis 3,79473 Ohm. Da passen die 3,3 Ohm locker rein .

Wenn interesse am Sourcecode besteht, muß ich ihn erstmal aufräumen und poste ihn dann gern.

Greetz
Miniaturansicht angehängter Grafiken
widerstand_616.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 13:48
es geht mir nicht darum die 3,3 abzudecken, sondern den Wert für ein Bauteil (welches sich an eine der E-Reihen hält) zu einem berechneten Widerstandswert zu bekommen.

wenn ich einen widerstand von 3,2 Ohm ausgerechnet habe, müsste ich z.b. nach E6-Reihe einen 3,3 Ohm verbauen. und diese 3,3 will ich haben.
//edit
da diese rundungsfehler bekannt sind muss ich das ganze wohl so in etwa machen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  //r3:array[0..2] of double=(1.0,2.2,4.7);
  //r6:array[0..5] of double=(1.0,1.5,2.2,3.3,4.7,6.8);
  //r12:array[0..11] of double=(1.0,1.2,1.5,1.8,2.2,2.7,
                                3.3,3.9,4.7,5.6,6.8,8.2);
  r24:array[0..23] of double=(1.0,1.1,1.2,1.3,1.5,1.6,1.8,2.0,2.2,2.4,2.7,
                              3.0,3.3,3.6,3.9,4.3,4.7,5.1,5.6,6.2,6.8,7.5,8.2,9.1);
  r192:array[0..191] of double=(1.00,1.01,1.02,1.04,1.05,1.06,1.07,1.09,
                               1.10,1.11,1.13,1.14,1.15,1.17,1.18,1.20,
1.21,1.23,1.24,1.26,1.27,1.29,1.30,1.32,
1.33,1.35,1.37,1.38,1.40,1.42,1.43,1.45,1.47,1.49,
1.50,1.52,1.54,1.56,1.58,1.60,1.62,1.64,1.65,1.67,1.69,
1.72,1.74,1.76,1.78,1.80,1.82,1.84,1.87,1.89,1.91,1.93,1.96,1.98,
2.00,2.03,2.05,2.08,2.10,2.13,2.15,2.18,2.21,2.23,2.26,2.29,
a2.32,2.34,2.37,2.40,2.43,2.46,2.49,
    2.52,2.55,2.58,2.61,2.64,2.67,2.71,2.74,2.77,2.80,2.84,2.87,2.91,2.94,2.98,
    3.01,3.05,3.09,3.12,3.16,3.20,3.24,3.28,3.32,3.36,3.40,3.44,3.48,
    3.52,3.57,3.61,3.65,3.70,3.74,3.79,3.83,3.88,3.92,3.97,
    4.02,4.07,4.12,4.17,4.22,4.27,4.32,4.37,4.42,4.48,
    4.53,4.59,4.64,4.70,4.75,4.81,4.87,4.93,4.99,
    5.05,5.11,5.17,5.23,5.30,5.36,5.42,5.49,
    5.56,5.62,5.69,5.76,5.83,5.90,5.97,
    6.04,6.12,6.19,6.26,6.34,6.42,6.49,
    6.57,6.65,6.73,6.81,6.90,6.98,
    7.06,7.15,7.23,7.32,7.41,
    7.50,7.59,7.68,7.77,7.87,7.96,
    8.06,8.16,8.25,8.35,8.45,
    8.56,8.66,8.76,8.87,8.98,
    9.09,9.20,9.31,9.42,
    9.53,9.65,9.76,9.88
  );
begin
  if spinedit1.value<(3 shl Combobox1.itemindex) then //maximalwert prüfen E3=2,E6=5,...
  begin
    if combobox1.itemindex<4 then
      showmessage(FloatToStr(r24[(1 shl (Combobox1.Items.count-(Combobox1.itemindex+4))*Spinedit1.value)]))
    else
      showmessage(FloatToStr(r192[(1 shl (Combobox1.Items.count-(Combobox1.itemindex+1))*Spinedit1.value)]));
  end else
    showmessage('Position zu hoch');
end;
Gruß Frank

[edit=Phoenix]Umbrüche wegen Layout eingefügt Mfg, Phoenix[/edit]
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 14:04
Zitat von _frank_:
Moin,
ich wollte meinen Elektrorechner mal um eine häufig gefragt Funktion erweitern...die genormten Widerstandsreihen (E3,E6,E12,E24,E48,E96,E192).

als Dokumentation hab ich da u.a.
http://www.elektronik-kompendium.de/...au/1109071.htm

laut dieser und anderer Quellen lassen sich die werte berechnen aus der (n-ten Wurzel aus 10)^(position-1). Leider habe komme ich teilweise nicht auf die richtigen Werte (trotz runden).
z.B.
Reihe E6 => k=1,4677 (6.wurzel aus 10)
der 4.wert sollte also ~3,3 sein
ich komme jedoch auf 3,161636106733 was ich nicht wirklich auf 3,3 runden kann...

kennt sich damit evtl jemand aus?

Gruß Frank
Hallo,

das mit der n-ten Wurzel ist die Theorie für E192, in der Praxis wird aber jede abgeleitete Reihe auf möglichst wenige Stellen gerundet und in sich abgeglichen. Eine Formel gibt es für die resultierenden Zahlenreihen nicht, sie sind einfach nach EIA genormt. Man kann auch nicht nach der eigentlich naheliegenden Regel vorgehen, jeder 8. Wert aus E192 gäbe den Wert in E24 usw.

Du wirst also wohl oder übel ALLE Reihen E6 bis E912 abtippen müssen, z.B. hier:
http://www.logwell.com/tech/componen...or_values.html

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von TwoFace
TwoFace

Registriert seit: 21. Jun 2003
Ort: Uffenheim
26 Beiträge
 
#6

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 14:11
Hat er ja schon

Jetzt muß er ja nur noch den nächstgrößeren Widerstandswert aus der zugehörigen E-Reihe herausholen.
Wird wohl die einzige Lösung sein, wenn mans nicht berechnen kann
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 14:14
ich habe die reihen miteinander verglichen und festgestellt, dass ich eigentlich nur die reihe 24 und 192 abtippen muss.
Die Werte der dazwischenliegenden Reihen sind in den beiden vorhanden.
d.h. alle werte der reihen E3, E6 und E12 sind in gleich abständen in der E24 enthalten, gleiches für E48, E96 in E192, wenn ich nicht irgendetwas übersehen habe...

jetzt brauche ich nur noch einen algo um möglichst schnell zu dem passenden wert zu kommen.
1. müsste ich auf 1 Stelle vor dem komma kommen (könnte zwar solange /10 machen, bis dieser punkt erreicht ist, aber gibt sicherlich bessere Varianten)
2. dann innerhalb der dekade den jeweiligen wert finden, was aber in Reihe 192 sehr rechenintensiv ist.

naja, abgetippt hab ich die nicht, copy&paste ins excel, spalte in scite und per search&replace (teils mit regex) das array zusammengebastelt.

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von TwoFace
TwoFace

Registriert seit: 21. Jun 2003
Ort: Uffenheim
26 Beiträge
 
#8

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 14:57
Wie wärs damit:
Mein erster Code-Post hier im Forum Hoffentlich passt alles *schwitz*

Hab mir mal die Freiheit genommen, deine schönen Arrays zu verwenden

Delphi-Quellcode:
var
  a: integer;
  // ist die verwendete E_Reihe z.B. 6
  e_Reihe : integer;
  // das Array das zum bestimmen verwendet wird
  Ex_Reihe : array[0..200] of double;
  // der Widerstand, den du berechnet hast z.B. 3.1 Ohm
  widerstand: real;
  // der Widerstand, der dem nächstgelegenen in der E-Reihe entspricht; hier 3.3 Ohm
  widerstand_nach_e : real;
begin
  // Berechneten Widerstandswert festlegen
  widerstand := 7.0;
  // E-Reihe festlegen
  E_reihe := 6;

  // deine schönen Arrays in eins zum berechnen übertragen
  for a := 0 to E_reihe-1 do
  case e_reihe of
    3: ex_reihe[a] := r3[a];
    6: ex_reihe[a] := r6[a];
    12: ex_reihe[a] := r12[a];
    { .. }
    24: ex_reihe[a] := r24[a];
    192: ex_reihe[a] := r192[a];
   end;

  // Sollte der Widerstandswert größer sein, als der größte der E-Reihe, so ist die Ausgabe
  // 1.0 Ohm mit einem größeren Multiplikator
  if widerstand > Ex_Reihe[e_reihe-1] then
    widerstand_nach_e := 10
  else
  // Eigentliche Auswahlroutine
  for a := E_Reihe-1 downto 0 do
  begin
    if widerstand < Ex_reihe[a] then
        widerstand_nach_e := ex_reihe[a];
   end;
   label4.caption := 'Nächter Widerstand nach E'+inttostr(e_reihe)+
                     ': '+floattostrf(widerstand_nach_e,fffixed,10,5);
Habs paarmal getestet und müsste funktionieren. Ich hab allerdings alle E-Reihen verwendet, weil es ja in der E24 Reihe Widerstände gibt, die in der E6 Reihe nicht auftauchen.

greetz
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 29. Dez 2006, 16:13
Hallo,

es gibt noch einen thread zum gleichen Thema, an den ich mich noch erinnere: auf einen standartisierten wert aufrunden

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#10

Re: Berechnung eines Wertes aus Widerstandsreihe

  Alt 30. Dez 2006, 11:21
danke marabu, werde mir das mal genauer anschauen. was mir gleich auffällt, ist die Verwendung von Integers statt floats (welches sicherlich schneller geht). Ich werde daher auch floats verwenden (=100er Dekade).
Gibt es eine Möglichkeit einen Wert schneller auf diese dekade zu kommen als so in der Art (ungetested):

Delphi-Quellcode:
function tohundreddecade(value:double;var dir:integer):integer;
var
  ftmp:double;
  itmp:integer;
begin
  //direction zur rückrechnung in ursprünglichen Wert
  //result ist natürlich der dekadenwert
  //itmp ist die temporäre integer-var;ftmp die für floats
  dir:=0;
  result:=0;
  ftmp:=value;
  if value <100 then
  begin
    while ftmp<100 do
    begin
      ftmp:=ftmp*10;
      inc(dir);
    end;
  end else if value>999 then
  begin
    itmp:=trunc(ftmp);
    while ftmp>999 do
    begin
      itmp:=itmp div 10;
      dec(dir);
    end;
    result:=itmp;
  end;
  if result=0 then
    result:=trunc(ftmp);
end;
Gruß Frank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf