?

Log in

No account? Create an account

[sticky post] Что тут есть

А тут есть нафигация. Это, если кто нипонял, чтобы сразу свалить и не мучить моск. Каждая ссылка отсюда ведет на какую-то тему. В конце многих записей есть ссылка "дальше", для тех, кому интересно и чей моск еще не сломан. Caveat emptor.

gEDA, KiCAD - системы проектирования электроники и печатных плат
LibreCAD - 2D черчение. Простая замена AutoCAD для плоских чертежей
UNIX way


Офис в Linux
Не используя платных программ. Для многих это проблема. Один чувак поставил исцеленный SolidWorks и после этого, каждый раз, когда он пытается выходить в сеть, его модем видится как "неизвестное устройство". ("Тебя посодют, а ты не воруй!") Геморрой? Для большинства геморрой. Купить солид стоит немеряных бабок. Геморрой? Опять. А всего-то надо нарисовать несколько 3D корпусов радиоэлементов, - в готовых библиотеках вечно что-нибудь не так. Это охота на воробья, так зачем здесь атомная бомба?


Как пример решения, возьмем простую задачу. Сделаем транзистор в корпусе TO-92:



Это задача простая и непростая - в ней есть кривые. Ноги иногда изгибают и это надо изобразить. Обычно транзисторы в таком корпусе устанавливают как "треножник", и средняя нога изгибается под посадочное место.

Используем тулчейн: librecad, openscad, scadstl, wings. Пойдем по порядку. Кроме третьего пункта все есть в репозиториях линуксовых дистрибутивов (а лучше в ppa у разработчиков, ибо в репах обычно старье), но это не очень большая проблема, я скажу, где взять и как собрать.

LibreCAD

В этой программе мы нарисуем проекции тел, которые требуется выдавить. (Как пользоваться librecad можно найти на сайте программы. И в моем бложике тоже кое-что об этом есть.)



Мы рисуем контуры в слое, отличном от нулевого. Тот по умолчанию, и его нельзя удалить. Я использую его только как вспомогательный, для разного рода направляющих. Также необходим слой для нанесения размеров. Размеры нужны для контроля сделанного построения. Размеры в данном случае указаны в миллиметрах, хотя обычно я использую единицу mil - тысячную долю дюйма, ибо США, ндравится это кому или нет, как и прежде, рулят в области электроники.

Сделав обе проекции, сохраняем их как блоки и экспортируем в отдельные файлы dxf: я назвал их can - бочонок корпуса, и pin - вывод.

Откроем оба файла и создадим из их содержимого блоки снова, так как в исходном состоянии после экспорта они разорваны. Это приведет к ошибкам при импорте в openscad и поэтому их надо снова преобразовать в блоки, а затем эти файлы можно сохранить и закрыть.

OpenSCAD

Это компилятор трехмерной графики, в нем не рисуют мышкой, а программируют. Это совсем не сложно, если правильно подойти к делу. В самом деле, транзистор в корпусе TO-92 как трехмерный графический объект состоит из четырех тел: корпуса и трех ножек квадратного сечения. Каждое из них можно получить выдавливанием плоского контура. Затем нужно сориентировать каждое тело: это композиция поворотов и параллельных переносов, - и описать это на функциональном языке программирования openscad. И все, пиздец. Разложив задачу на простые операции, переходим к делу.

В OpenSCAD пишем следующее:

// to-92.scad - модель корпуса TO-92

module pins() { // выводы
    color([0.8,0.8,0.8]) { // серебристый
        rotate([0,90,0]) 
            translate([0,0,-0.25])
                linear_extrude(0.5)
                    import("pin.dxf", $fn=60);
                translate([-0.25-1.27,-0.25,-8])
                    cube([0.5,0.5,8]);
                translate([-0.25+1.27,-0.25,-8])
                    cube([0.5,0.5,8]);
    }
}

module can()  { // корпус
    color([0.4,0.4,0.4]) { // темно-серый
        linear_extrude(5)
            import("can.dxf", $fn=60);
    }
}

pins(); // показать выводы
can();  // показать корпус


Модули импортируют данные из файлов, выдавливают контуры на заданную толщину, поворачивают кривую ногу и смещают прямые выводы, которые мы выдавливаем из самого openscad. Переменная $fn определяет степень скругления дуг. Ее следует брать компромиссной, слишком много - будут тяжеловатые файлы, слишком мало - дуга будет выглядеть ломаной линией.

Результат должен выглядеть как показано на следующем рисунке:



Он получается клавишей F5.

Теперь нужно экспортировать результат в файлы .stl, но сделать это по раздельности, поскольку так будет легче работать с цветами в дальнейшем.

Комментируем строку с вызовом модуля pins и делаем рендер клавишей F6. Остается только корпус. При этом, информация о цвете у нас исчезает. Выбираем в меню экспорта тип файла и имя: can.stl и нажимаем ОК. Повторяем ту же процедуру для модуля pins. Раскомментируем обращение к pins, а can, наоборот, закомментируем. Снова делаем рендер и экспортируем выводы в файл pins.stl

Теперь можно закрыть openscad и продолжить работу с другой программой.

scadstl

OpenSCAD создает stl-файлы в текстовом виде. Программа Wings3D, к сожалению, поддерживает только двоичный формат этих файлов (есть и такой). К счастью, спецификацию для формата stl я нашел. Поскольку других способов не было, то я написал консольную утилиту scadstl, которая конвертирует текстовый файл stl в его двоичный эквивалент.

Программа написана на языке C. Ее исходники лежат в архиве здесь. Компиляция в Linux очень простая:

cc -s scadstl.c -o scadstl

Как обстоят дела в Windows, я не знаю. В любом случае, программу достаточно легко перенести в среду Windows. Если в комментах будут такие просьбы, то я займусь этим и обновлю архивчик с исходниками. Проверяйте код, сканируйте на вирусы, юзайте, все открыто и "как есть", а также все под вашу ответственность. Как автор программы, после этого предупреждения я не несу никакой ответственности за любой вред, причиненный вашим данным, оборудованию и интересам третьих лиц, возникший в результате использования вами данной программы. Никакого пафоса тут нет, обычная, но необходимая формальность.

В общем, scadstl - это небольшой бинарник, вы можете его запускать из рабочего каталога, а лучше сделать в домашнем каталоге подкаталог bin и закинуть его туда. И не забудьте добавить путь к этому каталогу в переменную окружения PATH.

Запускаем в рабочем каталоге терминал и выполняем команды:

scadstl pins.stl
scadstl can.stl


В результате получатся два новых файла: b_pins.stl и b_can.stl. Это оно и есть, - двоичные файлы с данными о корпусе транзистора и его выводах.

Wings3D

Теперь поработаем в программе wings. Мы собираемся раскрасить модель. Для этого нужно создать материал, вид которого наиболее соответствует поверхности. У нас столько частей, сколько поверхностей: черный (темно-серый) пластик и луженые выводы.

Кликнем в рабочей области окна правой кнопкой и выберем пункт Material... из меню. Появится окошечко для задания имени материала. Назовем материал Can. Появится новое окно, где движком Diffuse затемним белый цвет до темно-серого. Можно поработать остальными движками, но наша графика, скорее, техническая. Так что, особо изощряться в художествах нет смысла. Сохраним материал.

Также создадим новый материал Pins. Сделаем его с металлическим блеском и чуть-чуть золотистого оттенка. Для этого кликнем по кнопке Diffuse и подберем цвет и оттенок. А затем подвигаем ползунки настроек, подбирая подходящий вид.

Материалы готовы. Заодно можно сохранить проект в файле, скажем, TO-92.wings.

Теперь загрузим, в меню это называется импорт, файлы b_can.stl и b_pins.stl, в результате чего получим серую модель транзистора:



Этого и следовало ожидать - раскраска в openscad была, так сказать, просто концептуальной. Вообще-то, формат stl поддерживает атрибут цвета, но приложения, с ним работающие, внимания на него не обращают. На всякий случай, я оставил в утилите scadstl параметр командной строки для передачи значения этого атрибута.

Выделим корпус как тело (не как поверхность!). Это сделать очень легко, благодаря тому, что корпус состоит из двух независимых частей. В окне Outliner кликнем по материалу Can правой кнопкой. Выберем из меню пункт Assign to Selection.

Отменим выделение, например, просто нажав клавишу пробела. Корпус окрашен. Выделим (тоже как тело!) выводы - это делается одним кликом по любому из них. Назначим им материал Pins. Снимем выделение.

Пока наша модель выглядит так:



Теперь следует немного "разгладить" корпус, чтобы при тонировке он не вглядел как граненый стакан с черной краской. Выделим корпус, правой кнопкой мыши вызовем контекстное меню выделения и выберем оттуда команду Auto-Smooth. Применим ее, кликнув левой кнопкой мыши. Снимем выделение и посмотрим на результат. С виду ничего не произошло, но на самом деле... просто поэкспериментируйте.

Теперь выделим все и выберем команду экспорта в файл WMRL. Модель будет экспортирована в файл с расширением wrl.

Тест полученной модели

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



или, при включении координатной сетки, так:



Не очень хорошо. Что нужно изменить? Во-первых, повернуть модель на 90 градусов относительно оси Z. Во-вторых, изменить масштаб модели, взяв его около 1:2.5 (или 40%). Это легко определить по линиям сетки. В третьих, переместить модель по оси z вверх, чтобы поднять корпус над поверхностью платы, и согнутая нога опиралась на плату и проходила через отверстие.

Для этого, не закрывая просмотр 3D, запускаем wings снова и открываем наш проект с моделью. Начинаем правку.

Во-первых, выделим обе части модели и выберем и применим в меню преобразований команду Combine. Это можно было сделать раньше, но я упустил это из виду. После этого мы получаем возможность манипулировать моделью без того, чтобы ее части разъезжались в разные стороны.

Выбираем команду Rotate, ось Z и кликаем колесиком мыши, чтобы модель вращалась точно вокруг оси Z. Нажимаем Tab и задаем числовое значение 90, нажимаем ОК. Модель повернулась.

Выбираем команду Scale Uniform и тоже задаем числовое значение 40%.

Выбираем команду Move, ось Z и перемещаем модель мышью, так, чтобы визуально она была чуть над плоскостью XY, горизонтальной плоскости, или, как говорят строители, "нулевой отметкой".

Не забываем время от времени сохранять проект wings, так как приложение может упасть!

Может оказаться, что в процессе редактирования модели ее придется двигать в одной из плоскостей. Поскольку в 3D-программах легко ошибиться в изометрическх видах, то надо переключаться в меню View и затем в подменю View Along на ту или другую направляющую ось. Это будет нормаль к той плоскости, в которой мы хотим двигать модель. Исключением тут можно считать случай, когда мы двигаем модель по высоте - тут нам помогает ориентироваться наша координатная плоскость XY:



Экспортируем модель снова в файл TO-92.wrl. Посмотрим, что получилось. Если мы повернули корпус не в ту сторону, а масштаб чуть великоват, то запоминаем эти недостатки и возвращаемся к окну wings. Поворачиваем модель на 180 градусов и чуть уменьшаем. Я беру 98%. Это будет по отношению к текущему масштабу. Экспортируем модель и обновляем вид платы. Если выводы пересекают отверстия по материалу платы, то модель в wings нужно немного уменьшить и/или сдвинуть по оси Y или X, ориентируясь на координатную сетку в окне просмотра 3D в KiCAD. В результате мы получим вот такой вид:

k9.png<>

Теперь все в порядке. Так выглядит модель платы при быстром просмотре в KiCAD:





В MeshLab модель платы, экспортированная в формат WRML выглядит лучше:

k12.png

k13.png

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

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

Удачного моделирования!