$E_s$ = Secondary voltage
$E_p$ = Primary voltage
$I_s$ = Secondary current
$I_p$ = Primary voltage
$N_s$ = Secondary turns
$N_p$ = Primary turns
$Area_{effective}$ = core area (tongue width * stack height)
stackingFactor = use 0.92 for 1x1 interleave and 0.95 for butt stack
4.44 is a constant for sine wave operation
B = flux density in $\frac{lines}{inch^2}$
A = $Area_{effective}$
F = line frequency
lossFactor = factor to adjust turns to compensate for losses
$$T_{rise} = \frac{totalLoss}{0.1*{(\frac{weight}{1.073})}^\frac{2}{3}}$$$$\%_{regulation} = \frac{E_{noLoad} - E_{fullLoad}}{E_{fullLoad}} * 100\%$$
In [2]:
%matplotlib notebook
import Winding,Transformer
import matplotlib.pyplot as plt
import numpy as np
import math
Here are the default transformer parameter values
laminationVA = lamva
circularMilsPerAmp = 800.0
coreLoss = 0.66 # watts/lbs
efficiency = 0.90 # 1/1.11 in wolpert p10
# estimate w/o calculating primary leakage inductance
lineFrequency = 60.0
stackingFactor = 0.92 # stacking factor wolpert p11
# 0.92 1x1 interleave, 0.95 butt stack
lossFactor = 0.95 # 1/1.05 in wolpert p11
isolationThickness = 0.003 # 1 mil kapton
wrappingThickness = 0.015
weightExtra = 1.15 # percentage of extra: bells, brackets, screws
insulationLayers = 3
In [10]:
# Simple 12V 3A filament transformer
%reload_ext autoreload
primary = Winding.Winding('p',115.0,0.0)
secondary = Winding.Winding('s', 12.6,3.0,taps=[50])
t = Transformer.Transformer([primary,secondary],50,have=1)
t.circularMilsPerAmp = 600
#t.fluxDensity = 87000
t.fluxDensity = t.fluxFind(bmax=90000)
t.compute()
t.report()
t.fluxTable()
In [14]:
print t.gcode()
In [ ]:
# Simple 12V filament transformer
# now use fluxfind
%reload_ext autoreload
primary = Winding.Winding('p',115.0,0.0)
secondary = Winding.Winding('s', 12.6,3.0,taps=[50])
t = Transformer.Transformer([primary,secondary],50,have=0)
t.fluxDensity = t.fluxFind(bmax=100000,inc=100) # this scans through flux densities and finds minimal error for output voltage
t.compute()
t.report()
In [ ]:
# Simple 12V filament transformer
# now use fluxfind and force bigger wire gauge to improve regulation
%reload_ext autoreload
primary = Winding.Winding('p',115.0,0.0)
secondary = Winding.Winding('s', 12.6,3.0,taps=[50])
t = Transformer.Transformer([primary,secondary],50,have=0)
t.circularMilsPerAmp = 1000
t.fluxDensity = t.fluxFind(bmax=100000,inc=500) # this scans through flux densities and finds minimal error for output voltage
t.compute()
t.report()
In [ ]:
# Simple 12V filament transformer
# now use fluxfind and choose from wire I have
%reload_ext autoreload
primary = Winding.Winding('p',115.0,0.0,fill=0)
secondary = Winding.Winding('s', 12.6,3.0,taps=[50])
t = Transformer.Transformer([primary,secondary],50,have=1)
t.fluxDensity = t.fluxFind(bmax=100000,inc=500) # this scans through flux densities and finds minimal error for output voltage
t.compute()
t.report()
In [ ]:
t.plot(1)
In [ ]:
print t.gcode()
In [25]:
# 6V6GT Push-Pull AB2 Power Transformer, Fender Deluxe 5E3
# 1 12AX7, 1 12AY7, 2 6V6GT, 1 5Y3
%reload_ext autoreload
primary = Winding.Winding('p',115.0,0.0)
secondary5 = Winding.Winding('s', 5.0,2.0,fill=0) #filament rectifier
secondary6 = Winding.Winding('s', 6.3,1.7,taps=[50]) #filaments 6v6,12ax7, 12ay7
secondary325 = Winding.Winding('s',325.0,0.125,taps=[50]) #plate
secondary20 = Winding.Winding('s', 20.0,0.002,None) #fixed bias
t = Transformer.Transformer([secondary5,secondary6,primary,secondary325,secondary20],65) # windings order by gauge
t.coreLoss = 0.66 # watts/lb GOES lam
t.wrappingThickness = 0.005
t.insulationLayers = 2
t.circularMilsPerAmp = 650
#t.fluxDensity = 75000
t.fluxDensity = t.fluxFind(bmax=100000,inc=500) # this scans through flux densities and finds minimal error for output voltage
t.compute()
t.report()
t.fluxTable()
In [26]:
t.plot(0)
In [ ]:
print t.gcode()
In [ ]:
t.fluxTable()
t.fluxTable(sort='error')
In [ ]:
%reload_ext autoreload
# here's a filament transformer design using EI150 lamination
# I'm using this for a bench power supply
# 5.0V@5A, 6.3V@8A, 12.6V@6A
primary = Winding.Winding('p',115.0,0.0,None)
secondary5a = Winding.Winding('s',5.0 ,2.5,[50])
secondary5b = Winding.Winding('s',5.0 ,2.5,[50])
secondary6a = Winding.Winding('s',6.3 ,4.0,[50])
secondary6b = Winding.Winding('s',6.3 ,4.0,[50])
secondary12a = Winding.Winding('s',12.6,3.0,[50])
secondary12b = Winding.Winding('s',12.6,3.0,[50])
t = Transformer.Transformer([primary,secondary6a,secondary6b,secondary12a,secondary12b,secondary5a,secondary5b],160,have=1)
t.coreLoss = 0.8 # watts/lb, using AK DI-MAX M-13 at 12kG
t.isolationThickness = 0.003
t.wrappingThickness = 0.005
t.insulationLayers = 2
t.fluxDensity = t.fluxFind(bmax=100000,inc=500) # this scans through flux densities and finds minimal error for output voltage
t.compute()
t.report()
In [ ]:
print t.gcode()
In [ ]:
# grid bias transformer
primary = Winding.Winding('p',115.0,0.0,None)
secondary = Winding.Winding('s',100.0 ,0.020,[50])
t = Transformer.Transformer([primary,secondary],7)
t.coreLoss = 0.66 # watts/lbs, goes
t.fluxDensity = t.fluxFind(bmax=100000)
#t.fluxDensity = 90000
t.compute()
t.report()
t.fluxTable()
t.fluxTable(sort='error')
In [ ]:
# power transformer for a flyback tube output stage screen bias 200V
primary = Winding.Winding('p',115.0,0.0,None)
secondary5 = Winding.Winding('s',5.0,2.0,None)
secondary6 = Winding.Winding('s',6.3,2.0,[50])
secondary200 = Winding.Winding('s',200.0,0.05,None)
secondary500 = Winding.Winding('s',500.0,0.100,[50])
t = Transformer.Transformer([secondary5,secondary6,primary,secondary500,secondary200],90)
t.circularMilsPerAmp = 700
t.coreLoss = 0.88 # watts/lbs
t.wrappingThickness = 0.05
t.fluxDensity = t.fluxFind()
t.compute()
t.report()
t.fluxTable()
t.fluxTable(sort='error')
To Do
Calculate primary voltage drop using leakage inductance instead of efficiency estimate
if tap lands at route direction change, tap doesn't show up on plot
secondary VA calculation incorrect if secondary driving a rectifier, winding needs rectifier option
In [ ]: