Skip to content

Commit

Permalink
Merge pull request #30 from spitzlbergerj/development
Browse files Browse the repository at this point in the history
Newsletter eingefügt; Spannungsteiler-Berechnung erweitert
  • Loading branch information
spitzlbergerj committed Jul 14, 2024
2 parents 7e693c5 + 686a68f commit 3dc2657
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 29 deletions.
Binary file not shown.
62 changes: 33 additions & 29 deletions analogSignals/spannungsteilerErrechnen.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,43 +5,47 @@
#
# -----------------------------------------------------------------

def finde_spannungsteiler(widerstaende, Vin, Vout_ziel):
beste_differenz = Vin # Startwert für die kleinste gefundene Differenz, unrealistisch hoch
beste_kombination = None
def konvertiere_eingabe(eingabe):
return float(eingabe.replace(',', '.'))

def finde_top_spannungsteiler(widerstaende, Vin, Vout_ziel, top_n=5):
kombinationen = []

for R1 in widerstaende:
for R2 in widerstaende:
Vout = Vin * (R2 / (R1 + R2))
differenz = Vout_ziel - Vout
if 0 < differenz < beste_differenz: # Vout soll knapp unter Vout_ziel sein
beste_differenz = differenz
beste_kombination = (R1, R2, Vout)
differenz = abs(Vout_ziel - Vout) # Absolutwert der Differenz, um Nähe zur Zielspannung zu messen
if Vout <= Vout_ziel: # Vout darf nicht über Vout_ziel sein
kombinationen.append((R1, R2, Vout, differenz))

# Sortiere die Kombinationen basierend auf der Nähe zu Vout_ziel und wähle die top_n Kombinationen
kombinationen = sorted(kombinationen, key=lambda x: x[3])[:top_n]

beste_kombinationen = []
for R1, R2, Vout, _ in kombinationen:
I = Vin / (R1 + R2) # Stromstärke in A
P_R1 = (I ** 2) * R1 # Leistung an R1 in W
P_R2 = (I ** 2) * R2 # Leistung an R2 in W
beste_kombinationen.append((R1, R2, Vout, I, P_R1, P_R2))

return beste_kombination
return beste_kombinationen

# Vorhandene Widerstände in Ohm
widerstaende = [10, 20, 47, 82, 100, 150, 220, 470, 560, 1000, 2200, 4700, 10000, 22000, 47000, 100000, 220000, 470000, 1000000]

# Benutzereingaben
Vin = float(input("Bitte geben Sie die Eingangsspannung (Vin) ein: "))
Vout_ziel = float(input("Bitte geben Sie die gewünschte Ausgangsspannung (Vout) ein: "))

# Beste Kombination finden
beste_kombination = finde_spannungsteiler(widerstaende, Vin, Vout_ziel)

if beste_kombination:
R1, R2, Vout = beste_kombination
print(f" ")
print(f" ")
print(f"an vorhandenen Widerständen wurden dabei angenommen: {widerstaende}")
print(f" ")
print(f" ")

print(f"Beste Kombination: R1 = {R1} Ohm")
print(f" R2 = {R2} Ohm")
print(f" Eingangsspannung = {Vin:.2f} V")
print(f" erw. Ausgangsspannung = {Vout:.2f} V")
print(f" ")
print(f"Schema: {Vin:.2f} V ----- {R1} Ohm ----- {Vout:.2f} V ----- {R2} Ohm ----- GND")
# Benutzereingaben mit Konvertierung
Vin_eingabe = input("Bitte geben Sie die Eingangsspannung (Vin) ein: ")
Vin = konvertiere_eingabe(Vin_eingabe)

Vout_ziel_eingabe = input("Bitte geben Sie die gewünschte Ausgangsspannung (Vout) ein: ")
Vout_ziel = konvertiere_eingabe(Vout_ziel_eingabe)

# Beste Kombinationen finden
beste_kombinationen = finde_top_spannungsteiler(widerstaende, Vin, Vout_ziel, 5)

if beste_kombinationen:
print("Top 5 Kombinationen (R1, R2, Vout, Stromstärke I):")
for R1, R2, Vout, I, P_R1, P_R2 in beste_kombinationen:
print(f"R1 = {R1} Ohm, R2 = {R2} Ohm, Vout = {Vout:.2f} V, I = {(I * 1000):.2f} mA, P_R1 = {(P_R1 * 1000):.4f} mW, P_R2 = {(P_R2 * 1000):.4f} mW")
else:
print("Keine geeignete Kombination gefunden.")

0 comments on commit 3dc2657

Please sign in to comment.