Files
metabuilder/pcbgenerator/boardforge/circuits.py
2026-01-21 17:18:12 +00:00

129 lines
4.1 KiB
Python

from .Board import Board, TOP_SILK, BOTTOM_SILK
def create_voltage_divider():
"""Return a board with a simple voltage divider (two resistors)."""
board = Board(width=7, height=5)
board.set_layer_stack(["GTL", "GBL", TOP_SILK, BOTTOM_SILK])
vin = board.add_component("VIN", ref="J1", at=(0.5, 2.5))
vin.add_pin("VCC", dx=0, dy=0)
vin.add_pin("GND", dx=0, dy=-1)
vin.add_pad("VCC", dx=0, dy=0, w=1, h=1)
vin.add_pad("GND", dx=0, dy=-1, w=1, h=1)
r1 = board.add_component("RES", ref="R1", at=(2.5, 2.5))
r1.add_pin("A", dx=-0.5, dy=0)
r1.add_pin("B", dx=0.5, dy=0)
r1.add_pad("A", dx=-0.5, dy=0, w=1, h=1)
r1.add_pad("B", dx=0.5, dy=0, w=1, h=1)
r2 = board.add_component("RES", ref="R2", at=(4.7, 2.5))
r2.add_pin("A", dx=-0.5, dy=0)
r2.add_pin("B", dx=0.5, dy=0)
r2.add_pad("A", dx=-0.5, dy=0, w=1, h=1)
r2.add_pad("B", dx=0.5, dy=0, w=1, h=1)
vout = board.add_component("VOUT", ref="J2", at=(6.4, 2.5))
vout.add_pin("OUT", dx=0, dy=0)
vout.add_pad("OUT", dx=0, dy=0, w=1, h=1)
board.trace(vin.pin("VCC"), r1.pin("A"))
board.trace(r1.pin("B"), r2.pin("A"))
board.trace(r2.pin("B"), vout.pin("OUT"))
board.trace(r2.pin("B"), vin.pin("GND"))
return board
def create_led_indicator():
"""Return a board with a battery, resistor and LED."""
board = Board(width=7, height=5)
board.set_layer_stack(["GTL", "GBL", TOP_SILK, BOTTOM_SILK])
bat = board.add_component("BAT", ref="BT1", at=(0.5, 2))
bat.add_pin("VCC", dx=0, dy=0)
bat.add_pin("GND", dx=0, dy=-1)
bat.add_pad("VCC", dx=0, dy=0, w=1, h=1)
bat.add_pad("GND", dx=0, dy=-1, w=1, h=1)
r = board.add_component("RES", ref="R1", at=(2.5, 2))
r.add_pin("A", dx=-0.5, dy=0)
r.add_pin("B", dx=0.5, dy=0)
r.add_pad("A", dx=-0.5, dy=0, w=1, h=1)
r.add_pad("B", dx=0.5, dy=0, w=1, h=1)
led = board.add_component("LED", ref="D1", at=(4.7, 2))
led.add_pin("A", dx=-0.5, dy=0)
led.add_pin("K", dx=0.5, dy=0)
led.add_pad("A", dx=-0.5, dy=0, w=1, h=1)
led.add_pad("K", dx=0.5, dy=0, w=1, h=1)
board.trace(bat.pin("VCC"), r.pin("A"))
board.trace(r.pin("B"), led.pin("A"))
board.trace(led.pin("K"), bat.pin("GND"))
return board
def create_rc_lowpass():
"""Return a board with a resistor and capacitor configured as a low-pass filter."""
board = Board(width=7, height=5)
board.set_layer_stack(["GTL", "GBL", TOP_SILK, BOTTOM_SILK])
j1 = board.add_component("IN", ref="J1", at=(0.5, 2.5))
j1.add_pin("VIN", dx=0, dy=0)
j1.add_pin("GND", dx=0, dy=-1)
j1.add_pad("VIN", dx=0, dy=0, w=1, h=1)
j1.add_pad("GND", dx=0, dy=-1, w=1, h=1)
r = board.add_component("RES", ref="R1", at=(2.5, 2.5))
r.add_pin("A", dx=-0.5, dy=0)
r.add_pin("B", dx=0.5, dy=0)
r.add_pad("A", dx=-0.5, dy=0, w=1, h=1)
r.add_pad("B", dx=0.5, dy=0, w=1, h=1)
c = board.add_component("CAP", ref="C1", at=(4.8, 2.5))
c.add_pin("A", dx=0, dy=0)
c.add_pin("B", dx=0, dy=-1)
c.add_pad("A", dx=0, dy=0, w=1, h=1)
c.add_pad("B", dx=0, dy=-1, w=1, h=1)
j2 = board.add_component("OUT", ref="J2", at=(6.3, 2.5))
j2.add_pin("VOUT", dx=0, dy=0)
j2.add_pad("VOUT", dx=0, dy=0, w=1, h=1)
board.trace(j1.pin("VIN"), r.pin("A"))
board.trace(r.pin("B"), j2.pin("VOUT"))
board.trace(r.pin("B"), c.pin("A"))
board.trace(c.pin("B"), j1.pin("GND"))
return board
def create_bent_trace(path=None):
"""Return a board demonstrating a trace with a bend.
Parameters
----------
path : list, optional
Sequence of coordinates or Pin objects representing the trace path.
If omitted, a default 90-degree bend is used.
"""
board = Board(width=5, height=5)
board.set_layer_stack(["GTL", "GBL", TOP_SILK, BOTTOM_SILK])
j1 = board.add_component("IN", ref="J1", at=(0.5, 2.5))
j1.add_pin("SIG", dx=0, dy=0)
j1.add_pad("SIG", dx=0, dy=0, w=1, h=1)
j2 = board.add_component("OUT", ref="J2", at=(4.5, 2.5))
j2.add_pin("SIG", dx=0, dy=0)
j2.add_pad("SIG", dx=0, dy=0, w=1, h=1)
if path is None:
path = [j1.pin("SIG"), (2.5, 4.0), j2.pin("SIG")]
board.trace_path(path)
return board