Add LVSolarBuck64 firmware and debug console with uv support
STM32G474RB firmware for solar buck converter with MPPT, CC control, Vfly compensation, and adaptive deadtime. Includes Textual TUI debug console for real-time telemetry, parameter tuning, and SQLite logging. Added pyproject.toml for uv: `cd code64 && uv run debug-console` Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import csv
|
||||
import re
|
||||
|
||||
I = 45.0 # A
|
||||
|
||||
def parse_rds(s):
|
||||
m = re.match(r'([\d.]+)\s*mOhm', s)
|
||||
if m:
|
||||
return float(m.group(1)) * 1e-3
|
||||
return None
|
||||
|
||||
def parse_price(s):
|
||||
try:
|
||||
return float(s)
|
||||
except:
|
||||
return None
|
||||
|
||||
results = []
|
||||
|
||||
with open(r'C:\Users\janik\Downloads\single_fets__mosfets.csv', 'r', encoding='utf-8-sig') as f:
|
||||
reader = csv.reader(f)
|
||||
header = next(reader)
|
||||
for row in reader:
|
||||
if len(row) < 25:
|
||||
continue
|
||||
part = row[3].strip()
|
||||
mfr = row[4].strip()
|
||||
price = parse_price(row[8].strip())
|
||||
vdss = row[16].strip()
|
||||
rds_str = row[19].strip()
|
||||
qg_str = row[21].strip()
|
||||
pkg = row[30].strip()
|
||||
rds = parse_rds(rds_str)
|
||||
if rds is None:
|
||||
continue
|
||||
p_cond = I * I * rds
|
||||
# Extract Qg for reference
|
||||
m = re.match(r'([\d.]+)\s*nC', qg_str)
|
||||
qg_nc = float(m.group(1)) if m else 0
|
||||
fom = price * rds * 1e3 # $ * mOhm
|
||||
results.append({
|
||||
'part': part,
|
||||
'mfr': mfr,
|
||||
'vdss': vdss,
|
||||
'rds_mohm': rds * 1e3,
|
||||
'p_cond': p_cond,
|
||||
'price': price,
|
||||
'fom': fom,
|
||||
'pkg': pkg,
|
||||
})
|
||||
|
||||
results.sort(key=lambda x: x['fom'])
|
||||
|
||||
print(f"MOSFET FOM = Price($) x Rds(on)(mOhm) [lower is better] | P_cond @ {I:.0f}A")
|
||||
print(f"{'='*115}")
|
||||
print(f"{'#':>3} {'Part Number':<28} {'Mfr':<15} {'Vdss':>6} {'Rds':>7} {'Price':>7} {'FOM':>8} {'P_cond':>7} {'Package':<20}")
|
||||
print(f"{'':>3} {'':28} {'':15} {'':>6} {'mOhm':>7} {'$':>7} {'$*mOhm':>8} {'W':>7}")
|
||||
print(f"{'-'*115}")
|
||||
|
||||
for i, r in enumerate(results):
|
||||
print(f"{i+1:>3} {r['part']:<28} {r['mfr']:<15} {r['vdss']:>6} {r['rds_mohm']:>7.2f} {r['price']:>7.2f} {r['fom']:>8.2f} {r['p_cond']:>7.2f} {r['pkg']:<20}")
|
||||
Reference in New Issue
Block a user