Края эллиптической доски в KiCAD или CircuitPro?


11

Я пытаюсь использовать KiCAD для разработки печатной платы, которая должна вписаться в существующий корпус. Одна сторона печатной платы должна иметь форму определенного сегмента эллиптической дуги. Я могу выяснить параметры желаемого эллипса, но я не вижу, как на самом деле нарисовать такой Edge Cut в KiCAD.

Возможно ли это в KiCAD или я использую не то программное обеспечение для этого? Доска будет сделана на LPKF ProtoMat, поэтому я буду использовать программу CircuitPro для создания окончательных инструкций для плоттера (пока не знаю, как это работает).

Поэтому у меня вопрос: должен ли я думать о дизайне формы платы в KiCAD или оставить это до более позднего этапа?

Спасибо.


Это возможно с KiCad, и я создал такие схемы досок раньше. Я сейчас на мобильном телефоне, но могу написать ответ, когда буду доступен.
Абдулла Кахраман

@abdullahkahraman: Буду признателен за ваше понимание.
Вэл Блант

Ответы:


25

Я думаю, что пример стоит миллион слов, поэтому я хотел сделать учебник по этому вопросу.

Вот коробка, для которой я собираюсь создать схему:

введите описание изображения здесь

Вот пример чертежа печатной платы из таблицы данных блока:

введите описание изображения здесь

После открытия Pcbnew выберите слой для краев. В текущей версии KiCad (BZR4008) он называется «Edge.Cuts». Сначала я собираюсь нарисовать верхний и нижний края, которые составляют 62 мм. Тогда левый и правый края, которые составляют 32 мм. Я использую инструмент ниже, который имеет подсказку «Добавить графическую линию или многоугольник».

введите описание изображения здесь

Теперь, когда все в порядке, я могу нарисовать другие формы:

введите описание изображения здесь

Вот инструмент, который мы будем использовать для этого:

введите описание изображения здесь

Этот инструмент в основном неполный круг. Чтобы использовать его, нажмите на точку, которая будет центром вашего круга, затем с помощью мыши вы установите радиус с помощью визуальной помощи KiCad. Очень полезно изменить курсор так, чтобы он отображал полные координаты, с помощью кнопки, показанной ниже:

введите описание изображения здесь

введите описание изображения здесь

Просто для примера, давайте сделаем край, обращенный наружу:

введите описание изображения здесь

К сожалению, вы не можете делать правильные эллипсы этим методом. Для этого нужно использовать графическое вложение или методы аппроксимации, которые упоминал Ник Алексеев.


4

Изюминкой KiCad, на мой взгляд, является то, что создаваемые им файлы удобочитаемы, а формат файлов достаточно хорошо документирован. Координаты X и Y указываются в десятитысячных долях дюйма с указанием (0,0) в левом верхнем углу. Контур платы может быть представлен отрезками и полукруглыми дугами.

Управлять файлами .brd в Kicad просто, используя выбранный вами язык сценариев (например, Python). Если бы я был вами, я бы написал сценарий, который вычисляет кусочные отрезки, чтобы приблизить ваш эллиптический контур, и записать отрезки в ваш .brd файл.


Именно это я и сделал. Спасибо, Роб! Я выложу полное описание решения чуть позже.
Вэл Блант

4

Мне потребовалось несколько дней, чтобы переварить всю эту информацию, но я закончил с двумя решениями этой проблемы. Я опишу оба решения здесь.

Я хотел бы поблагодарить Лоренцо и Роба Гиллиома с форума пользователей kicad, которые предоставили мне все идеи и информацию, в которых я нуждался, чтобы собрать решения ниже ( http://tech.groups.yahoo.com/ group / 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.

Если вам нужна только часть эллипса (например, один край вашей печатной платы), добавить триггерную рамку к приведенному выше сценарию и отбросить все точки, находящиеся за пределами рамки, тривиально.


= Вариант 2 =

Другой подход заключается в том, чтобы полностью спроектировать вашу доску в Inkscape (или во всем, что может экспортировать векторную графику), и найти способ импортировать ее в KiCAD.

Лоренцо предоставил решение, которое может перейти от Inkscape к Герберу здесь: http://tech.groups.yahoo.com/group/kicad-users/message/15229

Затем я смог использовать решение Лоренцо для создания сценария Ruby, который обходит стадию Gerber и генерирует строки файла платы KiCAD напрямую.

Процесс идет так:

  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, в том смысле, что он представляет собой серию координат с «пером вверх» или «пером вниз», что соответствует кодам D01 и D02 в Gerber.

Таким образом, в этом случае Inkscape выполняет всю сложную работу по преобразованию из более простых сплайнов в отрезки.

= Вариант 2 Ограничения =

У этого подхода есть пара ограничений:

  1. Похоже, что Inkscape не может экспортировать прямоугольники в HPGL. Очевидно, вы можете обойти это, создав собственные прямоугольники.
  2. В настоящее время я не могу правильно определить размеры экспортируемых объектов. Объекты заканчиваются примерно в два раза больше в KiCAD. Я буду работать над решением этой проблемы в ближайшее время.

3

У меня была похожая проблема с Kicad некоторое время назад, она когда-либо имела ограниченную поддержку нестандартных форм или просто плохо документирована. В итоге я нарисовал свою форму (в моем случае нестандартный пэд) с помощью Gimp и преобразовал ее в модуль, используя встроенный инструмент. Затем я открыл этот файл модуля и изменил слой на медные слои. Откройте его обратно в Kicad, и у вас есть нестандартные формы на ваш слой на любом слое. Не идеально, но это работает.


шаги:

  1. Создать рисунок в Gimp
  2. Используйте bitmap2component, включенный в Kicad, чтобы преобразовать его в компонент
  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-панель с компонентами внутри):

введите описание изображения здесь


Хм - это выглядит как интересный подход, но я не уверен, что вы имеете в виду, когда «открыли этот файл модуля и изменили слой на медные слои». Я думал, что у пэдов есть целевой слой, а не сам модуль. Не могли бы вы немного рассказать о том, как перейти от модуля нужной формы к реальному рисунку на выбранном вами слое? Спасибо!
Вэл Блант

Ответ обновлен.
s3c

1
Вы можете создать круговую кромку только с помощью инструмента окружности, затем, так как область уже заполнена медью, вы можете удалить маску припоя, нарисовав круг, но на этот раз в слое Front Mask.
Абдулла Кахраман,

Это довольно хорошее предложение, я хотел модуль, который я мог бы быстро внедрить в различные проекты, хотя, думаю, оба сработают. +1
s3c

1

Я работал с OrCAD, Eagle, Altium. Не работал с KiCAD. Итак, следующее обоснованное предположение.

Как правило, программы разметки имеют функции для рисования дуг окружности, но не имеют встроенной функции для рисования эллипсов. Вы можете аппроксимировать эллипс круглыми дугами ( подробнее здесь ). Вы также можете нарисовать эллипс с программой для рисования и попытаться импортировать DXF в программу макета (не знаю, насколько хорошо KiCAD может это поддерживать).

В конце концов, фабрика PCB, вероятно, в любом случае будет приближаться к кривым с полигонами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.