Software de diseño de PCB no gráfico

3

Para el modelado de CAD en 3D, existe un software llamado OpenSCAD que le permite crear diseños en 3D exclusivamente en código y luego renderizarlos.

Me pregunto si existe algo similar para el diseño de PCB donde pueda "escribir" un PCB y luego compilarlo en archivos gerber o similares que luego podrían enviarse a un sitio fabuloso como easyEDA.

Editar: Debería especificar que por "en código", me refiero a algún lenguaje con soporte para constantes con nombre, funciones, bucles, etc. Por ejemplo, en OpenSCAD, puedo hacer cosas como

  for(i = [0 : num_planks-1]) {
       translate([i * plank_w, bb_w, top_height]) cube([plank_w, plank_l, top_thickness]);
  }

y, al cambiar las constantes, puedo alterar rápidamente los parámetros de un modelo.

Lo que estoy tratando de hacer es crear una PCB para un teclado, pero me gustaría poder modificar fácilmente el diseño sin tener que mezclar manualmente cada interruptor de llave. Agregar o eliminar una fila de teclas, cambiar el escalonamiento de las filas, etc. Parece que este tipo de cosas podrían ser fáciles si la placa se describiera correctamente en el código en lugar de en un editor gráfico.

    
pregunta Matt

1 respuesta

7

Aunque EAGLE es un editor gráfico, puede controlarse completamente a través de la línea de comando, que es la única línea de entrada sobre el área de dibujo. Los comandos también se pueden escribir en un archivo de secuencia de comandos, y aunque no lo he buscado, es seguro que es posible iniciar EAGLE desde la línea de comandos del sistema operativo y decirle que ejecute la secuencia de comandos y luego haga un trabajo CAM para generar los archivos de Gerber.

Este es el diseño del conocido multivibrador astable simple:

yesteesunscript(limpiado)quelodibujaría.(Lohedibujadoyexportadoatravésdeexport-board.ulpde aquí ):

GRID INCH 0.005

ADD 'C1' C025-024X044@rcl R0.000 (0.300 0.700);
ADD 'C2' C025-024X044@rcl R0.000 (0.600 0.700);
ADD 'GND' P1-13@testpad R0.000 (1.000 0.150);
ADD 'R1' 0204V@rcl R90.000 (0.100 0.750);
ADD 'R2' 0204V@rcl R90.000 (0.350 0.900);
ADD 'R3' 0204V@rcl R90.000 (0.550 0.900);
ADD 'R4' 0204V@rcl R90.000 (0.800 0.750);
ADD 'T1' TO92@transistor R270.000 (0.800 0.400);
ADD 'T2' TO92@transistor R270.000 (0.100 0.400);
ADD 'VCC' P1-13@testpad R0.000 (1.000 0.950);


LAYER 20
WIRE 0.000 (0.000 0.000) (1.187 0.000);
WIRE 0.000 (1.187 0.000) (1.187 1.100);
WIRE 0.000 (1.187 1.100) (0.000 1.100);
WIRE 0.000 (0.000 1.100) (0.000 0.000);

LAYER 1
SIGNAL 'N$1' R1 1 C1 1 T2 3;

WIRE 'N$1' 0.016 (0.100 0.450) (0.100 0.700);
WIRE 'N$1' 0.016 (0.100 0.700) (0.250 0.700);

SIGNAL 'N$2' C1 2 R2 1 T1 2;
WIRE 'N$2' 0.016 (0.350 0.850) (0.350 0.700);
LAYER 16
WIRE 'N$2' 0.016 (0.875 0.400) (0.450 0.400);
WIRE 'N$2' 0.016 (0.450 0.400) (0.350 0.500);
WIRE 'N$2' 0.016 (0.350 0.500) (0.350 0.700);
LAYER 1

SIGNAL 'N$3' R3 1 C2 1 T2 2;
WIRE 'N$3' 0.016 (0.550 0.850) (0.550 0.700);
WIRE 'N$3' 0.016 (0.175 0.400) (0.450 0.400);
WIRE 'N$3' 0.016 (0.450 0.400) (0.550 0.500);
WIRE 'N$3' 0.016 (0.550 0.500) (0.550 0.700);

SIGNAL 'N$4' C2 2 R4 1 T1 3;
WIRE 'N$4' 0.016 (0.650 0.700) (0.800 0.700);
WIRE 'N$4' 0.016 (0.800 0.700) (0.800 0.450);

SIGNAL 'N$5' R1 2 R2 2 R3 2 R4 2 VCC TP;
WIRE 'N$5' 0.016 (0.100 0.800) (0.100 0.850);
WIRE 'N$5' 0.016 (0.100 0.850) (0.200 0.950);
WIRE 'N$5' 0.016 (0.200 0.950) (0.350 0.950);
WIRE 'N$5' 0.016 (0.350 0.950) (0.550 0.950);
WIRE 'N$5' 0.016 (0.550 0.950) (0.800 0.950);
WIRE 'N$5' 0.016 (0.800 0.950) (1.000 0.950);
WIRE 'N$5' 0.016 (0.800 0.800) (0.800 0.950);

SIGNAL 'N$7' T2 1 T1 1 GND TP;
WIRE 'N$7' 0.016 (0.100 0.350) (0.100 0.250);
WIRE 'N$7' 0.016 (0.100 0.250) (0.200 0.150);
WIRE 'N$7' 0.016 (0.200 0.150) (0.800 0.150);
WIRE 'N$7' 0.016 (0.800 0.150) (1.000 0.150);
WIRE 'N$7' 0.016 (0.800 0.350) (0.800 0.150);

Uno podría simplificar esto, pero aún así, eso es algo para alguien con demasiado tiempo ...

    
respondido por el sweber

Lea otras preguntas en las etiquetas