Esempio n. 1
0
def calculate():
    if flask.request.values.get('download', type=bool, default=False):
        return footprint()
    try:
        args = parse_spiral_request()
    except Exception as e:
        return dict(success=False, error=str(e))
    args['width'] -= args['trace_width']
    args['height'] -= args['trace_width']
    coil = ((x, y, 0) for x,y in squarespiral(args['width']/2, args['height']/2,
        args['pitch'], args['turns']))
    try:
        impedance = coil_impedance(coil, args['trace_width'],
        args['trace_height'],
        args['frequency'], 
        './fasthenry')
    except TimeoutExpired:
        return dict(success=False, error='Calculations took too long')
    angfreq = 2 * math.pi * args['frequency']
    resistance = format_si_prefix(impedance.real) + 'Ω'
    inductance = format_si_prefix(impedance.imag / angfreq) + 'H'
    qfactor = '{:.2g}'.format(impedance.imag / impedance.real)
    capacitance = format_si_prefix(1 / (angfreq * impedance.imag)) + 'F'
    args.update(resistance=resistance, inductance=inductance, qfactor=qfactor,
            capacitance=capacitance)
    return dict(success=True, resistance=resistance, inductance=inductance,
            qfactor=qfactor, capacitance=capacitance,
            download=flask.url_for('footprint', **args))
Esempio n. 2
0
if args.thickness is not None:
    trace_height = args.thickness * args.scale
else:
    # 1 oz/ft² copper is 1.5 mils thick = .03406 mm
    trace_height = args.weight * .03406

if args.shape == 'square':
    coil = spiral.squarespiral(side1, side2, pitch, args.turns)
else:
    coil = spiral.ellipticalspiral(side1, side2, pitch, args.turns,
            args.vertices_per_turn)
coil = list((x * args.mirror, y) for x,y in coil)

if args.fasthenry:
    angfreq = 2 * math.pi * args.frequency
    Z = coil_impedance(((x,y,ii*zpitch/4) for ii, (x,y) in enumerate(coil)),
            trace_width, trace_height, args.frequency)
    L = Z.imag / angfreq
    C = 1 / (angfreq * Z.imag)
    Q = Z.imag / Z.real
    print('Analysis of {}m x {}m {}-turn {}m pitch {}m trace inductor at {}Hz\n'.format(
        si_prefix_format(side1*2e-3), si_prefix_format(side2*2e-3), args.turns,
        si_prefix_format(pitch*1e-3), si_prefix_format(trace_width*1e-3),
        si_prefix_format(args.frequency)))
    print('          Inductance: {}H'.format(si_prefix_format(L)))
    print('Resonant capacitance: {}F'.format(si_prefix_format(C)))
    print('                   Q: {:.1e}'.format(Q))

if args.kicad_mod is not None:
    text_effects = SExpression('font', [
        SExpression('size', [1, 1]),
        SExpression('thickness', .15)])
Esempio n. 3
0
    trace_height = args.thickness * args.scale
else:
    # 1 oz/ft² copper is 1.5 mils thick = .03406 mm
    trace_height = args.weight * .03406

if args.shape == 'square':
    coil = spiral.squarespiral(side1, side2, pitch, args.turns)
else:
    coil = spiral.ellipticalspiral(side1, side2, pitch, args.turns,
                                   args.vertices_per_turn)
coil = list((x * args.mirror, y) for x, y in coil)

if args.fasthenry:
    angfreq = 2 * math.pi * args.frequency
    Z = coil_impedance(
        ((x, y, ii * zpitch / 4) for ii, (x, y) in enumerate(coil)),
        trace_width, trace_height, args.frequency)
    L = Z.imag / angfreq
    C = 1 / (angfreq * Z.imag)
    Q = Z.imag / Z.real
    print(
        'Analysis of {}m x {}m {}-turn {}m pitch {}m trace inductor at {}Hz\n'.
        format(si_prefix_format(side1 * 2e-3), si_prefix_format(side2 * 2e-3),
               args.turns, si_prefix_format(pitch * 1e-3),
               si_prefix_format(trace_width * 1e-3),
               si_prefix_format(args.frequency)))
    print('          Inductance: {}H'.format(si_prefix_format(L)))
    print('Resonant capacitance: {}F'.format(si_prefix_format(C)))
    print('                   Q: {:.1e}'.format(Q))

if args.kicad_mod is not None: