Eliptyczne krawędzie płyt w KiCAD lub CircuitPro?

11

Próbuję użyć KiCAD do zaprojektowania płytki drukowanej, która musi pasować do istniejącej skrzynki. Jedna strona płytki musi być ukształtowana jako specyficzny eliptyczny segment łuku. Potrafię ustalić parametry pożądanej elipsy, ale nie widzę, jak narysować takie cięcie krawędzi w KiCAD.

Czy jest to możliwe w KiCAD, czy też używam do tego niewłaściwego oprogramowania? Płytka zostanie wykonana na LPKF ProtoMat, więc będę używać oprogramowania CircuitPro do tworzenia ostatecznych instrukcji dla plotera (jeszcze nie wiem, jak to działa).

Więc moje pytania brzmią, czy powinienem myśleć o zaprojektowaniu kształtu deski w KiCAD, czy zostawić to na późniejszym etapie?

Dziękuję Ci.

Val Blant
źródło
Jest to możliwe dzięki KiCad i wcześniej stworzyłem takie kontury planszy. Jestem teraz na telefonie komórkowym, ale mogę napisać odpowiedź, gdy będę dostępny.
abdullah kahraman
@abdullahkahraman: Doceniam twój wgląd.
Val Blant,

Odpowiedzi:

25

Myślę, że przykład wart milion słów, więc chciałem zrobić poradnik na ten temat.

Oto pole, dla którego utworzę zarys:

wprowadź opis zdjęcia tutaj

Oto przykładowy rysunek PCB z arkusza danych pudełka:

wprowadź opis zdjęcia tutaj

Po otwarciu Pcbnew wybierz warstwę dla krawędzi. W obecnej wersji programu KiCad (BZR4008) nazywa się on „Edge.Cuts”. Najpierw narysuję górną i dolną krawędź, która ma 62 mm. Następnie lewa i prawa krawędź, które mają 32 mm. Korzystam z narzędzia poniżej, które zawiera etykietkę „Dodaj linię graficzną lub wielokąt”.

wprowadź opis zdjęcia tutaj

Teraz, gdy wszystko jest w porządku, mogę narysować inne kształty:

wprowadź opis zdjęcia tutaj

Oto narzędzie, którego będziemy używać do tego:

wprowadź opis zdjęcia tutaj

To narzędzie jest w zasadzie częściowym okręgiem. Aby go użyć, kliknij punkt, który będzie środkiem twojego koła, a następnie myszką ustawisz promień za pomocą wizualnej pomocy KiCada. Bardzo pomocną rzeczą jest zmiana kursora, aby wyświetlał pełne współrzędne, za pomocą przycisku pokazanego poniżej:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Dla przykładu zróbmy krawędź skierowaną na zewnątrz:

wprowadź opis zdjęcia tutaj

Niestety nie można wykonać poprawnych elips za pomocą tej metody. Musisz do tego użyć osadzania grafiki lub metod przybliżania, o których wspomniał Nick Alexeev.

abdullah kahraman
źródło
4

Moim zdaniem zaletą programu KiCad jest to, że tworzone przez niego pliki są czytelne dla człowieka, a format pliku jest dość dobrze udokumentowany. Współrzędne X i Y są określone w dziesiętnych tysięcznych cala, w odniesieniu do (0,0) w lewym górnym rogu. Kontur planszy może być reprezentowany przez segmenty linii i łuki półkoliste.

Łatwo jest manipulować plikami .brd Kicada za pomocą wybranego języka skryptowego (np. Python). Gdybym był tobą, prawdopodobnie napisałbym skrypt, który oblicza segmentowe odcinki linii w celu przybliżenia twojego eliptycznego obrysu i zapisuję segmenty linii w twoim pliku .brd.

Obrabować
źródło
Właśnie to skończyłem. Dzięki, Rob! Wkrótce opublikuję pełny opis rozwiązania.
Val Blant,
4

Kilka dni zajęło mi przejrzenie wszystkich tych informacji, ale skończyłem z 2 rozwiązaniami tego problemu. Opiszę oba rozwiązania tutaj.

Chciałbym podziękować Lorenzo i Robowi Gilliomowi z forum użytkowników kicad, którzy dostarczyli mi wszystkie pomysły i informacje, których potrzebowałem, aby zebrać poniższe rozwiązania ( http://tech.groups.yahoo.com/ group / kicad-users / message / 15220 ).

= Opcja 1 =

Jeśli chcesz zaimportować pojedynczy segment eliptyczny i zaprojektować resztę płytki w KiCAD, ten skrypt Ruby jest prawdopodobnie najłatwiejszym sposobem:

#
# 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])
}

Aby użyć tego skryptu, po prostu zapisz pusty .kicad_pcbplik w Kicad, a następnie wstaw linie wygenerowane przez ten skrypt po ostatniej sekcji przed nawiasem zamykającym.

Otwórz nowy plik planszy w KiCAD i ciesz się elipsą interpolowaną przez segmenty linii :). Użycie 256 punktów sprawia, że ​​elipsa jest tak gładka, że ​​nie można powiedzieć, że składa się z linii w KiCAD.

Jeśli chcesz tylko część elipsy (na przykład jedną krawędź płytki drukowanej), banalne jest dodanie ramki ograniczającej do powyższego skryptu i odrzucenie wszystkich punktów znajdujących się poza ramką.


= Opcja 2 =

Innym podejściem byłoby zaprojektowanie tablicy w całości w Inkscape (lub czegokolwiek innego, co może eksportować grafikę wektorową) i znaleźć sposób na jej zaimportowanie do KiCAD.

Lorenzo dostarczył rozwiązanie, które może przejść z Inkscape do Gerbera tutaj: http://tech.groups.yahoo.com/group/kicad-users/message/15229

Byłem wtedy w stanie wykorzystać rozwiązanie Lorenza, aby stworzyć skrypt Ruby, który omija etap Gerbera i generuje bezpośrednio wiersze pliku tablicy KiCAD.

Proces przebiega następująco:

  1. Zaprojektuj swoją tablicę w Inkscape
  2. Eksportuj do HPGL
  3. Konwertuj HPGL na GnuPlot Ascii: hp2xx -t -m gpt file.hpgl
  4. Generuj wiersze pliku tablicy: gpt2pcbnew file.hpgl.gpt

Oto źródło gpt2pcbnewskryptu:

#
# 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]}")
  }  
}

Tak jak w Opcji 1, wygenerowane linie przechodzą do pustego pliku tablicy zapisanego w KiCAD.

To rozwiązanie wykorzystuje fakt, że format HPGL jest bardzo podobny w swojej konstrukcji do plików Gerber, w tym sensie, że jest to szereg współrzędnych z „pisakiem w górę” lub „pisakiem w dół”, co odpowiada kodom D01 i D02 w Gerber.

Tak więc w tym przypadku cała ciężka praca polegająca na konwersji splajnów Beziera na segmenty linii jest wykonywana przez Inkscape.

= Ograniczenia opcji 2 =

Podejście to ma kilka ograniczeń:

  1. Wygląda na to, że Inkscape nie może eksportować prostokątów do HPGL. Możesz oczywiście obejść ten problem, konstruując własne prostokąty.
  2. Obecnie nie jestem w stanie uzyskać prawidłowych rozmiarów eksportowanych obiektów. W KiCAD obiekty te są około dwa razy większe. Wkrótce będę pracował nad rozwiązaniem tego problemu.
Val Blant
źródło
3

Miałem podobny problem z Kicad jakiś czas temu, zawsze miał ograniczone wsparcie dla niestandardowych kształtów lub po prostu nie jest dobrze udokumentowany. Skończyło się na tym, że narysowałem swój kształt (w moim przypadku niestandardowy pad) i przekonwertowałem go na moduł za pomocą wbudowanego narzędzia. Następnie otworzyłem ten plik modułu i zmieniłem warstwę na warstwy miedzi. Otwórz go ponownie w Kicad, a będziesz mieć niestandardowe kształty do wyboru na dowolnej warstwie. Nie idealne, ale działa.


Kroki:

  1. Utwórz rysunek w Gimp
  2. Użyj bitmap2component dołączonego do Kicada, aby przekonwertować go na komponent
  3. Otwórz moduł w gedit / notatniku i edytuj informacje o warstwie zgodnie z następującym dokumentem (sekcja 3.4):

https://bazaar.launchpad.net/~kicad-developers/kicad/doc/view/head:/doc/help/file_formats/file_formats.pdf

4. Zapisz zmiany i otwórz moduł w Pcbnew

Wyniki (nie mogłem wymyślić żadnego innego sposobu wykonania okrągłej krawędzi nieobjętej soldermaską, w rzeczywistości jest to pad SMD z elementami wewnątrz):

wprowadź opis zdjęcia tutaj

s3c
źródło
Hmm - to wygląda na ciekawe podejście, ale nie jestem pewien, co masz na myśli przez „otworzyłem ten plik modułu i zmieniłem warstwę na warstwy miedzi”. Myślałem, że pady mają warstwę docelową, a nie sam moduł. Czy mógłbyś nieco rozwinąć sposób przejścia z modułu o pożądanym kształcie do rzeczywistego rysunku na wybranej warstwie? Dzięki!
Val Blant,
Odpowiedź zaktualizowana.
s3c
1
Możesz utworzyć okrągłą krawędź tylko za pomocą narzędzia koła, a ponieważ obszar jest już wypełniony miedzią, możesz usunąć maskę lutowniczą, rysując okrąg, ale tym razem na warstwie maski przedniej.
abdullah kahraman
To całkiem dobra sugestia, chciałem modułu, który mógłbym szybko upuścić w różnych projektach, ale chyba oba by działały. +1
s3c
1

Pracowałem z OrCAD, Eagle, Altium. Nie współpracowałem z KiCAD. Poniżej znajduje się pouczone przypuszczenie.

Zazwyczaj programy układu mają funkcje do rysowania łuków kołowych, ale nie mają wbudowanej funkcji do rysowania elips. Elipsę można przybliżyć za pomocą łuków kołowych ( więcej tutaj ). Możesz także narysować elipsę za pomocą programu kreślącego i spróbować zaimportować plik DXF do programu układowego (nie wiem, jak dobrze KiCAD może to obsługiwać).

W końcu fab fab PCB prawdopodobnie i tak aproksymuje krzywe z wielokątami.

Nick Alexeev
źródło