我正在尝试使用KiCAD设计必须适合现有外壳的PCB。PCB的一侧需要成形为特定的椭圆弧段。我可以弄清楚所需椭圆的参数,但看不到如何在KiCAD中实际绘制这样的Edge Cut。
在KiCAD中是否可能这样做,或者我为此使用了错误的软件?该板将在LPKF ProtoMat上制成,因此我将使用CircuitPro软件为绘图仪创建最终说明(尚不知道其工作原理)。
所以我的问题是我是否应该考虑在KiCAD中设计板的形状,还是将其留待以后进行?
谢谢。
我正在尝试使用KiCAD设计必须适合现有外壳的PCB。PCB的一侧需要成形为特定的椭圆弧段。我可以弄清楚所需椭圆的参数,但看不到如何在KiCAD中实际绘制这样的Edge Cut。
在KiCAD中是否可能这样做,或者我为此使用了错误的软件?该板将在LPKF ProtoMat上制成,因此我将使用CircuitPro软件为绘图仪创建最终说明(尚不知道其工作原理)。
所以我的问题是我是否应该考虑在KiCAD中设计板的形状,还是将其留待以后进行?
谢谢。
Answers:
我认为一个例子价值一百万个单词,所以我想为此编写一个教程。
这是我要为其创建轮廓的框:
这是包装盒数据表中的PCB图纸示例:
打开Pcbnew之后,选择边缘层。在当前版本的KiCad(BZR4008)中,它称为“ Edge.Cuts”。首先,我将绘制62mm的上下边缘。然后,左边缘和右边缘为32毫米。我正在使用下面的工具,其工具提示为“添加图形线或多边形”。
现在一切都很好,我可以绘制其他形状:
这是我们将用于此的工具:
该工具基本上是一个局部圆。要使用它,请单击将成为圆心的点,然后使用鼠标在KiCad的视觉帮助下设置半径。一个非常有用的事情是更改光标,使其显示完整的坐标,并显示以下按钮:
只是为了举例说明,让我们让边缘朝外:
不幸的是,您无法使用此方法制作正确的椭圆。您必须使用图形嵌入,或者近似的方法,这是Nick Alexeev提到的。
我花了几天的时间来消化所有这些信息,但是我以两种解决方案结束了这个问题。我将在这里描述两种解决方案。
我要感谢kicad用户论坛的Lorenzo和Rob Gilliom,他们为我提供了将下面的解决方案组合在一起的所有想法和信息(http://tech.groups.yahoo.com/组/ kicad用户/邮件/ 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的一个边缘),则在上面的脚本中添加一个边界框并舍弃位于该框之外的所有点是很简单的。
另一种方法是完全在Inkscape中(或任何其他可以导出矢量图形的)设计电路板,然后找到一种将其导入KiCAD的方法。
Lorenzo提供了一种可以从Inkscape到Gerber的解决方案,网址为:http : //tech.groups.yahoo.com/group/kicad-users/message/15229
然后,我能够基于Lorenzo的解决方案构建一个Ruby脚本,该脚本绕过Gerber阶段并直接生成KiCAD板文件行。
过程如下:
hp2xx -t -m gpt file.hpgl
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文件非常相似这一事实,从某种意义上说,它是一系列带有“ pen up”或“ pen down”的坐标,对应于Gerber中的D01和D02代码。
因此,在这种情况下,从贝塞尔曲线样条转换为线段的所有艰苦工作都是由Inkscape完成的。
=选项2的局限性=
这种方法有两个限制:
一段时间以前,我在Kicad上也遇到过类似的问题,它曾经对非标准形状提供了有限的支持,或者只是没有很好的记录。我最终要做的是用Gimp绘制形状(在我的情况下是非标准垫),并使用内置工具将其转换为模块。然后,我打开此模块文件,并将层更改为铜层。在Kicad中将其打开备份,您可以在任何层上选择非标准形状。不理想,但可以。
脚步:
4.保存更改并在Pcbnew中打开模块
结果(无法想到其他任何方法来制作未被焊料掩膜覆盖的圆形边缘,它实际上是一个内部带有组件的SMD焊盘):