Некоторое время назад я задался вопросом равномерной круговой расстановки элементов на печатной плате. Сначала расставлял вручную через полярные координаты, потом сгенерировал последовательность команд для всех 30 элементов и разом выполнил все в командной строке Орла. Сегодня же я затрону тему написания собственного ULP скрипта Eagle Cad для равномерной и автоматической расстановки элементов по кругу.


Для удобства написания скрипта, все элементы должны иметь последовательные индексы, проследите за этим на этапе составления принципиальной схемы. Как вы уже, наверное, догадались из «картинки для привлечения внимания», я буду работать с диодами ws2812b. Необходимо расставить 30шт равномерно по радиусу 40мм.



Команды в Орле выполняются либо относительно начала координат, либо относительно маркера Mark. Выставляем маркер в нужном месте. Для наглядности я нарисовал вспомогательную окружность радиусом 40мм.



Для начала нам необходимо разобраться с синтаксисом двух команд. Их можно выполнять в командной строке Орла. Потренируйтесь.

Команда перемещения элемента:
move <имя> (<параметр>)

Команда поворота:
rotate =r<угол> <имя>

<имя> — имя нашего элемента L1..L30
<параметр> — в нашем случае параметром будет полярная координата (p <радиус> <угол>).
<угол> — соответственно угол, на который ворочаем элемент.

Если перед значением угла поворота стоит знак “=”, то мы установим абсолютный угол поворота для детали. Если без знака “=”, то угол приплюсовывается к текущему значению угла детали.

Далее необходимо создать файл *.ulp, в котором разместится наш скрипт. Приведу весь скрипт целиком, благо он небольшой.

int  N = 30; //количество элементов
int  Radius  = 40 ; //радиус нашей расстановки
int  Step = 360/N; //угол между элементами и соответственно угол поворота каждого элемента ( 360 / количество элементов )

string cmd = ""; //итоговая строка команды на выполнение
string h = ""; //вспомогательная строка

for (int Count = 1; Count <= N; Count++) { //перебираем наши N элементов
	sprintf(h, "move L%d (p %d %d); rotate =r%d L%d;", Count, Radius, Step*Count, Step*Count+90, Count); //составляем строку команд, с подстановкой наших значений в местах %d
	cmd += h; //суммарная строка, содержащая все команды
}

exit(cmd); //выплняем наши команды

Все просто, в цикле от 1 до 30 формируем попарно команды move и rotate. В качестве угла полярной координаты и угла поворота используется угол Count*360/N, где Count — номер итерации, а N — количество элементов. Обращу внимание, что к углу поворота добавляется 90°. Это чтобы диоды располагались вдоль кольца, а не поперек.

Выполняем скрипт через кнопочку ULP в редакторе печатной платы.



Результат незамедлительно. Отменяя результат сочетанием клавиш Ctrl+Z, можно увидеть последовательность выполнения команд.

Всем бобра!

Комментарии (11)


  1. koltykov
    03.04.2015 18:07
    -3

    Не знал, что в Eagle нет такой функции «из коробки». В популярном спринте и то есть такая возможность.


  1. Firsto
    03.04.2015 18:28

    Как вы уже, наверное, догадались из «картинки для привлечения внимания», я буду работать с диодами ws2812b.

    Долго собирать такую «цветомузыку» для не умеющего в микроконтроллеры? Посоветуете толковые мануалы? А лучше сразу в DIY пишите, наверняка не мне одному интересно. :)

    P. S. : Оффтопик
    Увидел в коде скрипта название переменной Shag и подумал: а вдруг это не транслитерация русского перевода слова step, а какой-то технический термин. Google Translate улыбнул. :)


    1. oWart Автор
      03.04.2015 20:31

      Ну не знаю, я конечно попробую, но думаю заминусят… Про управление ws2812b уже много было.
      P/S Исправил Shag на Step от греха подальше :)


  1. FishDude
    03.04.2015 20:56
    +1

    Оффтопик. Возможно, вам пригодится: в новом Альтиуме есть радиальные сетки привязки.


    1. RZK333
      04.04.2015 16:03

      в www.circuitmaker.com/ не смотрели, втащили? это полуобрубок от altium.


  1. Melz
    03.04.2015 23:36

    Есть такая ULP
    irq5.io/2013/03/30/circular-layout-ulp-for-eagle/
    Иглу уже давно пора навести порядок в скриптах, там много есть, но под странными именами.
    Обязательно пишите дальше :)


    1. andy_p
      04.04.2015 00:11

      > Иглу уже давно пора навести порядок в скриптах

      Да, мы это планируем сделать


    1. Jban
      04.04.2015 00:32

      Более того, есть файл прямо «из коробки» cmd-draw.ulp.
      С скриптами согласен, хоть бы сделали отдельный скриптовой хелп.


  1. yvm
    03.04.2015 23:45

    Для ленивых ) www.adafruit.com/products/1768


  1. andy_p
    04.04.2015 00:09

    Можно было генерацию скрипта не на ULP сделать, а, скажем, на C.


  1. resetnow
    04.04.2015 14:44

    То же самое для Kicad (pcbnew)