¿Bordes de la placa elíptica en KiCAD o CircuitPro?

11

Estoy tratando de usar KiCAD para diseñar una PCB que debe encajar en un caso existente. Un lado del PCB debe tener la forma de un segmento de arco elíptico específico. Puedo averiguar los parámetros de la elipse deseada, pero no veo cómo dibujar realmente un Edge Cut en KiCAD.

¿Es esto posible en KiCAD o estoy usando el software incorrecto para esto? La placa se realizará en LPKF ProtoMat, así que usaré el software CircuitPro para crear las instrucciones finales para el plóter (aún no sé cómo funciona).

Entonces, mi pregunta es si debería estar pensando en el diseño de la forma de la tabla en KiCAD, o dejarlo para un paso posterior.

Gracias.

    
pregunta Val Blant

5 respuestas

4

Me tomó un par de días para digerir toda esta información, pero terminé con 2 soluciones a este problema. Describiré ambas soluciones aquí.

Me gustaría agradecer a Lorenzo y Rob Gilliom del foro de usuarios de kicad, que me han proporcionado todas las ideas e información que necesitaba para reunir las soluciones a continuación ( enlace ).

= Opción 1 =

Si desea importar un solo segmento elíptico y diseñar el resto de la placa en KiCAD, este script de Ruby es probablemente la forma más fácil de hacerlo:

#
# Generates an ellipse for Kicad. You have to copy the 
# generated lines into an existing template inside a .kicad_pcb file
#

Xo = 200.0
Yo = 150.0
MAJOR = 60.0
MINOR = 40.0
N = 256 # Number of points on the ellipse

TEMPLATE = "(gr_line (start %.2f %.2f) (end %.2f %.2f) (layer Edge.Cuts) (width 0.15))\n"

step = Math::PI * 2 / N
points = Array.new

# Calculate coordinates for all N points
(0..N).each {|s|
  x = Xo + MAJOR * Math::cos(step * s)
  y = Yo - MINOR * Math::sin(step * s)
  points << [x, y]
}

# For each pair of points, print a gr_line
points.each_cons(2) { |line| 
  printf(TEMPLATE, line[0][0], line[0][1], line[1][0], line[1][1])
}

Para usar este script, simplemente guarde un archivo .kicad_pcb en Kicad y luego inserte las líneas generadas por este script después de la última sección antes de la llave de cierre.

Abra el nuevo archivo de placa en KiCAD y disfrute de su elipse interpolada por segmentos de línea :). El uso de 256 puntos hace que la elipse sea tan suave que no se puede decir que consiste en líneas en KiCAD.

Si solo desea una parte de la elipse (un borde de su PCB, por ejemplo), es trivial agregar un cuadro delimitador al script anterior y descartar todos los puntos que se encuentran fuera del cuadro.

= Opción 2 =

Otro enfoque sería diseñar su tablero completamente en Inkscape (o cualquier otra cosa que pueda exportar gráficos vectoriales), y encontrar una manera de importarlo a KiCAD.

Lorenzo ha proporcionado una solución que puede ir de Inkscape a Gerber aquí: enlace

Entonces pude desarrollar la solución de Lorenzo para hacer un script Ruby que pase por alto la etapa de Gerber y genere líneas de archivos de la placa KiCAD directamente.

El proceso es así:

  1. Diseña tu tabla en Inkscape
  2. Exportar a HPGL
  3. Convierta HPGL en GnuPlot Ascii: hp2xx -t -m gpt file.hpgl
  4. Generar líneas de archivo de placa: gpt2pcbnew file.hpgl.gpt

Aquí está la fuente de gpt2pcbnew script:

#
# Convert a GPT file created by hp2xx to Pcbnew gr_lines
#

# That's the line we'll write into the board file
TEMPLATE = "(gr_line (start %.5f %.5f) (end %.5f %.5f) (layer Edge.Cuts) (width 0.15))\n"


gpt_file = ARGV.shift

segments = Array.new

File.open(gpt_file, "r") do |file|
  # Start a new segment
  segment = Array.new 

  while (line = file.gets)
    unless ( line.strip! =~ /^#/ ) # Skip comments
      if ( line =~ /([0-9.]+) *([0-9.]+)/ )
        # Found coordinates. Save this point in the current segment
        #
        segment << line.split
      else
        # No numbers on a line means that we are done drawing the segment,
        # so we need to "lift up the pen" and move to the next segment
        #

        # Add current segment to the list of segments
        segments << segment unless segment.empty?

        # Start a new segment
        segment = Array.new
      end
    end
  end

  # Add the last segment we read
  segments << segment unless segment.empty?
end


# Print out gr_lines for all the segments
segments.each { |segment|  
  # For each pair of points print a line
  segment.each_cons(2) { |line| 
    printf(TEMPLATE, line[0][0], "-#{line[0][1]}", line[1][0], "-#{line[1][1]}")
  }  
}

Al igual que en la Opción 1, las líneas generadas van a un archivo de tablero en blanco guardado en KiCAD.

Esta solución aprovecha el hecho de que el formato HPGL es muy similar en su construcción a los archivos de Gerber, en el sentido de que es una serie de coordenadas con "pluma arriba" o "pluma abajo", que corresponde a los códigos D01 y D02. en gerber.

En este caso, todo el arduo trabajo de conversión de splines bezier a segmentos de línea lo realiza Inkscape.

= Limitaciones de la opción 2 =

Hay un par de limitaciones con este enfoque:

  1. Parece que Inkscape no puede exportar rectángulos a HPGL. Obviamente, puedes solucionar esto construyendo tus propios rectángulos.
  2. Actualmente no puedo obtener el tamaño correcto de los objetos exportados. Los objetos terminan aproximadamente el doble de grande en KiCAD. Estaré trabajando en una solución para esto pronto.
respondido por el Val Blant
24

Creo que un ejemplo vale más que un millón de palabras, así que quería hacer un tutorial sobre esto.

Aquí está el cuadro para el que voy a crear un esquema:

AquíhayunejemplodedibujodePCBdelahojadedatosdelacaja:

Después de abrir Pcbnew, selecciona la capa para los bordes. En la versión actual de KiCad (BZR4008), se llama "Edge.Cuts". Primero, voy a dibujar los bordes superior e inferior, que son 62 mm. Luego los bordes izquierdo y derecho, que son 32 mm. Estoy usando la herramienta a continuación que tiene una descripción de "Agregar línea gráfica o polígono".

Ahoraquetodoestábien,puedodibujarlasotrasformas:

Aquí está la herramienta que vamos a utilizar para eso:

Estaherramientaesbásicamenteuncírculoparcial.Parausarlo,hagaclicenelpuntoqueseráelcentrodesucírculo,luego,conelmouse,estableceráelradioconunaayudavisualdelKiCad.Unacosamuyútilescambiarelcursorparaquemuestrelascoordenadascompletas,conelbotónquesemuestraacontinuación:

Soloporunejemplo,hagamosqueelbordequedehaciaafuera:

Desafortunadamente, no puede hacer puntos suspensivos correctos con este método. Tienes que usar la incrustación gráfica, o los métodos de aproximación para eso, que fueron mencionados por Nick Alexeev.

    
respondido por el abdullah kahraman
4

La salvación de KiCad, en mi opinión, es que los archivos que crea son legibles y el formato del archivo está razonablemente bien documentado. Las coordenadas X e Y se especifican en diez milésimas de pulgada, referidas a (0,0) en la parte superior izquierda. Un contorno de tablero puede representarse por segmentos de línea y arcos semicirculares.

Es sencillo manipular los archivos .brd de Kicad usando el lenguaje de scripting de su elección (por ejemplo, Python). Si yo fuera tú, probablemente escribiría un guión que calcula los segmentos de línea por partes para aproximar tu contorno elíptico y escribir los segmentos de línea en tu archivo .brd.

    
respondido por el Rob
3

Hace un tiempo tuve un problema similar con Kicad, siempre ha tenido un soporte limitado para formas no estándar o simplemente no está bien documentado. Lo que terminé haciendo fue dibujar mi forma (almohadilla no estándar en mi estuche) con Gimp y convertirla en un módulo usando la herramienta incorporada. Luego abrí este archivo de módulo y cambié la capa a las capas de cobre. Ábralo de nuevo en Kicad y tendrá formas no estándar de su elección en cualquier capa. No es ideal pero funciona.

Pasos:

  1. Crea un dibujo en Gimp
  2. Use bitmap2component incluido con Kicad para convertirlo en un componente
  3. Abra el módulo en gedit / notepad y edite la información de capa de acuerdo con el siguiente documento (Sección 3.4):

enlace

4. Guarde los cambios y abra el módulo en Pcbnew

Resultados (no se puede pensar en ninguna otra forma de hacer un borde circular que no esté cubierto por la máscara de soldadura, en realidad es una almohadilla SMD con componentes en su interior):

    
respondido por el s3c
1

He trabajado con OrCAD, Eagle, Altium. No he trabajado con KiCAD. Por lo tanto, la siguiente es una conjetura educada.

Normalmente, los programas de diseño tienen funciones para dibujar arcos circulares, pero no tienen una función incorporada para dibujar puntos suspensivos. Puede aproximar una elipse con arcos circulares ( más aquí ). También puede dibujar una elipse con un programa de dibujo e intentar importar un DXF en el programa de diseño (no sé qué tan bien puede soportar esto KiCAD).

Al final, la fab de PCB, probablemente, se aproximará a las curvas con polígonos de todos modos.

    
respondido por el Nick Alexeev

Lea otras preguntas en las etiquetas