Sl-Alex домашняя лаборатория

3D модели для KiCAD. Часть 1 - OpenSCAD

Просмотров: 4908Комментарии: 2
Статьи

Перевод: EN
3D модели для KiCAD. Часть 1 - OpenSCAD

Если вы разрабатываете электронику и искали подходящее свободное ПО, наверняка вы уже знакомы с проектом KiCAD. Он предназначен для проектирования электрических схем и печатных плат. Меня он покорил своей кроссплатформенностью, лёгкостью в освоении и стабильностью работы. Одной из отличительных свойств этого проекта является поддержжка 3D моделей компонентов, а это даёт замечательную возможность посмотреть, как ваша плата будет выглядеть после сборки. К сожалению, многие считают создание 3D моделей сложной задачей. Кроме того, KiCAD поддерживает только модели, созданные в Wings3D. Нарисовать там что-то для начинающего довольно сложно. К счастью, есть более красивые пути. Один из них мы сегодня и рассмотрим. Речь пойдёт об OpenSCAD.

В качестве примера для написания этой статьи я решил взять корпус SSOP28. Почему? Да просто потому, что он понадобился в одном из моих проектов. Кстати, в процессе создания модели мы параметризуем все размеры и сможем путём изменения нескольких параметров сгенерировать любой корпус от µSOP до LFQP.

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

  • Создание вывода
  • Создание корпуса
  • Создание массива выводов
  • Создание выемки в корпусе
  • Компоновка массивов выводов вокруг корпуса

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

Нарисуем вывод в виде полигона. Здесь можно пойти двумя путями: вручную прописать координаты всех восьми точек, либо задать несколько размеров и считать остальные точки автоматически. Первый путь проще для эксперимента, но гораздо сложнее, если потребуется что-то изменить, поэтому мы пойдём правильным путём и зададим следующие размеры:

Чертёж вывода Рисунок 1: Чертёж вывода

Учитывая, что толщина пина - величина постоянная, вычислим координаты всех точек и создадим пин:

// Bended pin
// _L - whole pin length
// _l - length of bottom part
// _H - whole pin height
// _th - pin thickness
// _a - bending angle
// _W - pin width
module pin(_L,_l,_H,_th,_a,_W)
{
    // Internal variables
    _d1 = _th*sin(_a) / (1-cos(_a));
    _d2 = (_th-_H)*cos(_a) / sin(_a);

    rotate([90,0,90])
        // Extrude the following polygon
        linear_extrude(height = _W, center = true, convexity = 10, twist = 0)
            polygon([[0,0],
                     [_l,0],
                     [_l+_d2,_H-_th],
                     [_L,_H-_th],
                     [_L,_H],
                     [_l+_d2-_d1,_H],
                     [_l-_d1,_th],
                     [0,_th]]);
}

// Example of usage
pin(2,1,1,0.2,115,0.5);

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

В итоге должно получиться следующее:

Вывод Рисунок 2: Вывод

Созданный нами модуль может быть использован сколько угодно и где угодно, в том числе и в других компонентах.

Массив выводов делается гораздо проще:

// Array of pins
// _cnt - number of pins
// _distance - distance between pin centres
module pins_array(_cnt, _distance)
{
    if (_cnt>0)
    {
        for (_i = [0:_cnt-1])
        {
            translate([_distance*_i,0,0])
            pin(pin_L,pin_l,pin_H,pin_th,pin_a,pin_W);
        }
    }
}

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

// Simple case with notch
module case(){
    difference() {
        cube([case_x,case_y,case_z]);
        translate([dot_radius+dot_off_x,dot_radius+dot_off_y,case_z])
            cylinder(h=dot_depth*2, r = dot_radius, center= true, $fn = 10);
    }
}

Всё, что нам осталось - это скомпоновать массивы выводов вокруг корпуса:

// Complete model
union()
{
    // Top pins
    translate([(side1_pins-side3_pins)*pin_distance/2,case_y+pin_L*2,0])
        mirror([0,1,0])
            pins_array(side3_pins, pin_distance);

    // Bottom pins
    pins_array(side1_pins, pin_distance);

    // Left pins
    translate([-(case_x-(side1_pins-1)*pin_distance)/2 - pin_L,pin_L+case_y/2-(side4_pins-1)*pin_distance/2,0])
        mirror([1,0,0])
            rotate([0,0,90])
                pins_array(side4_pins, pin_distance);

    // Right pins
    translate([-(case_x-(side1_pins-1)*pin_distance)/2-pin_L+case_x+2*pin_L,pin_L+case_y/2-(side2_pins-1)*pin_distance/2,0])
        mirror([0,1,0])
            mirror([0,1,0])
                rotate([0,0,90])
                    pins_array(side2_pins, pin_distance);

    // Case
    translate([-(case_x-(side1_pins-1)*pin_distance)/2,pin_L,0])
        case();
}

Получится вот такая красота:

Результат Рисунок 3: Результат

Заметьте, что эта модель полностью параметризуема и путём модификации параметров может быть легко превращена практически в любой SMD корпус с гибкими выводами (µSOP, SSOP, SO, TQFP,LQFP, и т.д.) При необходимости, изменив модель вывода и компоновку, можно сделать и другие корпуса, например PLCC или DIP. В такой параметризации и заключается, на мой взгляд, главнейшее преимущество OpenSCAD над любыми другими программами 3D моделирования.

В заключение, полный код модели (можете поиграться с параметрами и создать свой корпус):

Показать...

Немного улучшенная модель, которую я и использую, можно скачать здесь. В отличие от нашей учебной модели она использует polyhedron вместо куба и поддерживает фаски.

Выглядит она следующим образом:

Улучшенная модель Рисунок 4: Улучшенная модель

В следующей статье мы рассмотрим альтернативный метод создания моделей - при помощи FreeCAD. И, наконец, в заключительной части мы добавим красок нашим моделям и подключим модели в KiCAD.