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))
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)])
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: