KiCAD 或 CircuitPro 中的椭圆板边缘?

电器工程 电路板 基卡德
2022-01-31 06:46:14

我正在尝试使用 KiCAD 设计一个必须适合现有案例的 PCB。PCB 的一侧需要成形为特定的椭圆弧段。我可以找出所需椭圆的参数,但我不知道如何在 KiCAD 中实际绘制这样的边缘切割。

这在 KiCAD 中是否可行,还是我为此使用了错误的软件?该板将在 LPKF ProtoMat 上制作,因此我将使用 CircuitPro 软件为绘图仪创建最终说明(还不知道它是如何工作的)。

所以我的问题是我应该考虑在 KiCAD 中设计电路板形状,还是留到后面的步骤?

谢谢你。

4个回答

我认为一个价值一百万字的例子,所以我想做一个关于这个的教程。

这是我要为其创建大纲的框:

在此处输入图像描述

这是盒子数据表中的示例PCB图:

在此处输入图像描述

打开 Pcbnew 后,选择边缘层。在当前版本的 KiCad (BZR4008) 中,它被称为“Edge.Cuts”。首先,我将绘制上边缘和下边缘,它们是 62 毫米。然后是左右边缘,即 32 毫米。我正在使用下面的工具,它的工具提示为“添加图形线或多边形”。

在此处输入图像描述

现在一切都很好,我可以绘制其他形状:

在此处输入图像描述

这是我们将要使用的工具:

在此处输入图像描述

这个工具基本上是一个部分的圆圈。要使用它,请单击将成为圆心的点,然后用鼠标在 KiCad 的视觉辅助下设置半径。一个非常有用的事情是改变光标,使其显示完整的坐标,按钮如下所示:

在此处输入图像描述

在此处输入图像描述

仅出于示例的目的,让我们将边缘朝外:

在此处输入图像描述

不幸的是,您无法使用此方法制作正确的省略号。您必须使用 Nick Alexeev 提到的图形嵌入或近似方法。

我花了几天的时间来消化所有这些信息,但我以 2 个解决方案结束了这个问题。我将在这里描述这两种解决方案。

我要感谢 kicad 用户论坛的 Lorenzo 和 Rob Gilliom,他们为我提供了将以下解决方案组合在一起所需的所有想法和信息(http://tech.groups.yahoo.com/组/kicad-users/message/15220)。

= 选项 1 =

如果您想导入单个椭圆段并在 KiCAD 中设计电路板的其余部分,那么这个 Ruby 脚本可能是最简单的方法:

#
# 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])
}

为了使用这个脚本,只需.kicad_pcb在 Kicad 中保存一个空白文件,然后在右大括号之前的最后一部分之后插入由该脚本生成的行。

在 KiCAD 中打开新的电路板文件,享受由线段插值的椭圆:)。使用 256 个点使椭圆如此平滑,以至于您无法分辨它是由 KiCAD 中的线组成的。

如果您只想要椭圆的一部分(例如 PCB 的一个边缘),那么在上面的脚本中添加一个边界框并丢弃位于框外的所有点是很简单的。


= 选项 2 =

另一种方法是完全在 Inkscape 中设计您的电路板(或任何其他可以导出矢量图形的东西),然后找到一种将其导入 KiCAD 的方法。

Lorenzo 提供了一个可以从 Inkscape 到 Gerber 的解决方案:http: //tech.groups.yahoo.com/group/kicad-users/message/15229

然后,我能够在 Lorenzo 的解决方案的基础上制作一个绕过 Gerber 阶段并直接生成 KiCAD 板文件行的 Ruby 脚本。

过程是这样的:

  1. 在 Inkscape 中设计您的电路板
  2. 导出到 HPGL
  3. 将 HPGL 转换为 GnuPlot Ascii:hp2xx -t -m gpt file.hpgl
  4. 生成板文件行:gpt2pcbnew file.hpgl.gpt

这是gpt2pcbnew脚本的来源:

#
# 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]}")
  }  
}

就像在选项 1 中一样,生成的行进入保存在 KiCAD 中的空白板文件。

该解决方案利用了 HPGL 格式在构造上与 Gerber 文件非常相似的事实,从某种意义上说,它是一系列带有“上笔”或“下笔”的坐标,对应于 Gerber 中的 D01 和 D02 代码。

因此,在这种情况下,将贝塞尔样条曲线转换为线段的所有艰苦工作都是由 Inkscape 完成的。

= 选项 2 限制 =

这种方法有几个限制:

  1. 似乎 Inkscape 无法将矩形导出到 HPGL。您显然可以通过构建自己的矩形来解决此问题。
  2. 我目前无法正确获取导出对象的大小。这些对象最终在 KiCAD 中大约是两倍大。我会尽快解决这个问题。

在我看来,KiCad 的可取之处在于它创建的文件是人类可读的,并且文件格式具有合理的文档记录。X 和 Y 坐标以千分之一英寸为单位指定,参考左上角的 (0,0)。板的轮廓可以用线段和半圆弧来表示。

使用您选择的脚本语言(例如 Python)可以直接操作 Kicad 的 .brd 文件。如果我是你,我可能会编写一个脚本来计算分段线段以近似你的椭圆轮廓并将线段写入你的 .brd 文件。

不久前我在 Kicad 上遇到过类似的问题,它对非标准形状的支持有限,或者只是没有很好的文档记录。我最终做的是用 Gimp 绘制我的形状(在我的情况下是非标准垫),并使用内置工具将其转换为模块。然后我打开这个模块文件并将层更改为铜层。在 Kicad 中打开它,您可以在任何图层上选择非标准形状。不理想,但它有效。


脚步:

  1. 在 Gimp 中创建绘图
  2. 使用 Kicad 附带的 bitmap2component 将其转换为组件
  3. 在gedit/notepad中打开模块,根据以下文档(3.4节)编辑图层信息:

https://bazaar.launchpad.net/~kicad-developers/kicad/doc/view/head:/doc/help/file_formats/file_formats.pdf

4.保存更改并在Pcbnew中打开模块

结果(想不出任何其他方法可以制作不被阻焊层覆盖的圆形边缘,它实际上是一个内部带有组件的 SMD 焊盘):

在此处输入图像描述