Forum: Platinen Kicad: Layerbasierte Constraints


von Simon H. (simi)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin gerade dabei, einen Vierlagenprint zu entwerfen, den ich bei 
seeedstudio fertigen lassen möchte. Nun haben die allerdings 
unterschiedliche Layer- und Width-Constraints für Innen- und Aussenlagen 
(6 mil aussen, 8 mil innen).

KiCad unterstützt solche layer-basierten Constraints leider nicht. Also 
habe ich mal Eclipse angeschmissen und ein bisschen daran rumgebastelt.
Nun ist es so, dass die bei Kicad (verständlicherweise) sehr 
zurückhaltend damit sind, Änderungen in den Release-Branch aufzunehmen, 
und ausserdem sind die gerade sehr stark mit anderen Dingen beschäftigt, 
und eine Diskussion mit den Verantwortlichen ergab auch, dass man dieses 
Thema lieber nicht auf die Schnelle angehen will, weil man sich nicht 
klar ist darüber, ob das Feature überhaupt notwendig ist, wie die 
Bedienung aussehen sollte, und, ob man vielleicht noch wesentlich 
komplexere Constraints implementieren sollte und was das sein könnte und 
wie das UI aussehen sollte. Dafür wollen sie sich erst mal Zeit lassen. 
Das verstehe ich auch.

Allerdings habe ich einen Prototyp, der wohl zwar noch nicht ganz 
fehlerfrei ist, aber doch schon soweit ist, dass ich ihn wohl produktiv 
einsetzen kann. Allerdings habe ich noch sehr wenig getestet. Da ich 
KiCad nur hobbymässig einsetze, kann ich es mir leisten, "produktive 
Arbeit" und "Beta-Testing" zu vereinen. :-)
Nun wollte ich Euch mal fragen, ob Ihr einen Blick drauf werfen 
könnt/wollt, resp. ob solch ein Branch vielleicht ausser mir noch 
jemandem hilfreich sein könnte. Also eigentlich sollte jeder, der bei 
seeedstudio Vierlagenprints bestellt, diesen Branch sehr gut einsetzen 
können.

Kurz zusammengefasst, was meine "Kicad-Spezialversion" anders macht als 
der Standard-Branch:

- Im Layer-Stack-Dialog kann man für jeden Layer eine minimale 
'Clearance' und eine minimale 'Width' eingeben. Diese zusätzlichen 
Constraints sind so zu verstehen: Die Constraints sowohl für das Netz 
(wie gehabt) als auch für den Layer müssen erfüllt sein. Wenn also das 
VCC Netz 1mm Minimalbreite und 2mm Abstand hat, und Layer zwei 1.5mm 
Minimalbreite und 0.5mm Abstand, dann gilt für einen VCC Track auf Layer 
zwei der jewilsgrössere Wert, also 1.5mm Minimalbreite und 2mm Abstand.

- Der DRC sollte eigentlich diese beiden Constraint-Klassen 
berücksichtigen. Habe ich aber noch nicht exzessiv getestet.

- Wenn man einen Track zeichnet, und die Leiterbahnbreite auf "standard" 
(mit Stern) gesetzt hat, wir die minimale für dieses Netz (wie gehabt) 
und den aktuellen Layer (neu) ausgewählt (eben: der grössere Wert gilt). 
Die angedeutete Clearance wird natürlich auch entsprechend gewählt.

- Wenn man nun die Lage wechselt, ändert sich ggf. die Leiterbahnbreite 
automatisch, so dass sie dem neuen Layerconstraint entspricht.

- Pads auf allen layern haben nun natürlich u.U. für jede Lage eine 
andere Clearance. Das habe ich visuell so gelöst, dass immer die 
Clearance gezeigt wird, die für den aktuellen Layer gültig ist.

- Um das Ganze konsistent zu halten, zeigen die Tracks und Pads, die nur 
auf einer Lage sind (SMD) nun ihre Clearance nur dann an, wenn man sich 
auf der selben Lage befindet. Das finde ich eigentlich ganz schön, da 
diese angedeuteten Clearances einerseits sehr praktisch sind 
andererseits auch ziemlich unübersichtlich werden können, besonders, 
wenn auf der Rückseite auch noch Pads sind. Und eigentlich interessiert 
mich ja immer nur gerade die Lage, auf der ich gerade route.

Was noch nicht so recht funktioniert, ist die Clearance-Anzeige der 
Vias. Das habe ich eben festgestellt; dem muss ich mal noch nachgehen.


Ach ja: Die Layer Clearances werden natürlich auch gespeichert. Das 
heisst aber, dass das File dann nicht mehr kompatibel mit dem 
Original-KiCad ist. Um die Kompatibilität wieder herzustellen, kann man 
entweder den zusätzlichen Eintrag (layer_constraints) rauslöschen, oder 
einfach alle layer constraints auf 0 setzen und dann nochmals speichern. 
Dann lässt er diesen Eintrag weg.

Ich habe mal ein Windows-Build gemacht. Gelegentlich werde ich einen 
Branch auf Launchpad raufladen, dann könnt Ihr Eure eigenen Builds für 
was auch immer machen.
Entweder pcbnew.exe direkt starten oder im Installationsverzeichnis von 
KiCad die Datei ersetzen.

Gruäss
Simon

von Simon H. (simi)


Angehängte Dateien:

Lesenswert?

Anbei ist noch der Patch. Er sollte mit (2013-mar-13)-testing laufen.


Gruäss
Simon

von Salewski (Gast)


Lesenswert?

Simon Huwyler schrieb:
> unterschiedliche Layer- und Width-Constraints für Innen- und Aussenlagen
> (6 mil aussen, 8 mil innen).

Zunächst sollte ich Dir meine Anerkennung aussprechen -- Du bist in 
diesem Forum wohl der erste, der an KiCAD mitarbeitet -- die anderen 
beschränken sich ja eher auf Meckern.

Zu KiCAD kann ich leider nichts sagen, ich nutzte eher gEDA/PCB.

Unterschiedliche minimale Leiterbahnbreite für innere und äussere Lagen 
habe ich bei anderen Firmen eigentlich noch nicht gesehen, mir fällt so 
spontan auch kein technischer Grund dafür ein

Wenn ich es recht verstanden habe willst Du also für das manuelle 
Routing stets die minimal zulässige Leiterbahnstärke/Clearance 
verwenden. Nun ja -- wobei ich ich eigentlich eher etwas gröbere 
Strukturen verwende, sofern genug Platz vorhanden ist. Und bei 
kontrollierter Impedanz hat man ja auch eher etwas breitere Leiterzüge. 
Wenn man die Fertigungstoleranzen ausreitzt hat man ja nicht immer 
völlig fehlerfreie Platinen.

>Nun ist es so, dass die bei Kicad (verständlicherweise) sehr
>zurückhaltend damit sind, Änderungen in den Release-Branch aufzunehmen

Das ist bei gEDA/PCB noch viel mehr der Fall -- ich dachte eigentlich, 
dass an KiCAD viele Kids herumbasteln.

Gruß

Stefan Salewski

von Uwe N. (ex-aetzer)


Lesenswert?

Salewski schrieb:
> Unterschiedliche minimale Leiterbahnbreite für innere und äussere Lagen
> habe ich bei anderen Firmen eigentlich noch nicht gesehen, mir fällt so
> spontan auch kein technischer Grund dafür ein

Ich hätte einen: Impedanzen.
Je nach Lagenaufbau macht es Sinn, ein und derselben Signalklasse
(z.B.50 Ohm) unterschiedliche LB Breiten zu geben, je nachdem, auf 
welcher Lage die geroutet werden soll/ muss.

von Simon H. (simi)


Lesenswert?

Salewski schrieb:
> Zunächst sollte ich Dir meine Anerkennung aussprechen -- Du bist in
> diesem Forum wohl der erste, der an KiCAD mitarbeitet

Zumindest ein Name ist mir, glaube ich, vom diesem Forum bekannt: 
Hauptmech. :-)

Salewski schrieb:
> mir fällt so
> spontan auch kein technischer Grund dafür ein

ich habe auch ein bisschen blöd geschaut, als ich das gesehen habe.

Salewski schrieb:
> Wenn ich es recht verstanden habe willst Du also für das manuelle
> Routing stets die minimal zulässige Leiterbahnstärke/Clearance
> verwenden.

Ja. Wobei ich sagen muss, dass die Idee nich von mir ist, sondern von 
KiCad schon so angeboten wird. Ich habe das Feature einfach entprechend 
erweitert.

Salewski schrieb:
> Wenn man die Fertigungstoleranzen ausreitzt hat man ja nicht immer
> völlig fehlerfreie Platinen.

Die bei Seeedstudio bieten umsonst 100% elektrischer Test an.
Aber grundsätzlich hast Du natürlich recht. Ich meine mich zu erinnern, 
dass Protel (resp. Altium) drei Breitenangaben zulässt: Minimal, maximal 
und Standard. Das sollte man Kicad vielleicht auch mal beibringen. 
Sollte sehr einfach sein.

Salewski schrieb:
> ich dachte eigentlich,
> dass an KiCAD viele Kids herumbasteln.

uuhh, da tust Du KiCad aber unrecht! :-) Im Gegenteil. Der 
Chefentwickler ist ein sehr mürrischer Typ, der in guter amerikanischer 
Manier sehr direkt sagt, was er von einem Beitrag hält. Leider oft in 
einer extrem "schnudrigen" und arroganten Art. Ich habe mich erst 
kürzlich in die Mailingliste eingetragen, und seither hat er schon 
einige, zum Teil professionelle (sprich mit bezahlter Arbeitszeit 
beitragende) Leute ziemlich arg vor den Kopf gestossen.

Uwe N. schrieb:
> Ich hätte einen: Impedanzen.

Richtig. Nur leider ist für diesen Fall mein Patch nicht geeignet. Mein 
Patch zielt wirklich auf FERTIGUNGSTECHNISCHE Constraints. Und dafür ist 
der Approach m.E. perfekt (Eigenlob stinkt, ich weiss :-).

Aber für etwas, das eine Chance haben sollte, ins Release zu kommen, 
muss man das wohl ganz anders aufsetzen. Netzklassen Layer zuordnen oder 
so.
Ich denke, ich werde mal einen Blueprint starten. Hat jemand Lust, 
mitzumachen?

Gruäss
Simon

von Reinhard Kern (Gast)


Lesenswert?

Simon Huwyler schrieb:
> Richtig. Nur leider ist für diesen Fall mein Patch nicht geeignet.

Das ist aber schade (und wieso eigentlich), denn das ist das 
Hauptanwendungsgebiet layerspezifischer Constraints. Im Prinzip werden 
zwar Aussenlagen tatsächlich anders erstellt als Innenlagen, aber kaum 
ein Hersteller gibt dafür andere fertigungstechnisch bedingte 
Mindestmasse an, vielmehr werden die Prozesse so eingerichtet, dass 
bestimmte Grenzwerte eben überall eingehalten werden. Ist auch das 
vernüftigste.

Bei definierter Impedanz ist das anders, aus physikalischen Gründen, die 
zu einer Impedanz notwendige Leiterbahnbreite hängt vom Lagenaufbau ab 
und kann auf jedem Layer anders sein. Allerdings ist es bei erwachsenen 
Layoutprogrammen so, dass das nicht als lagenspezifisch nach aussen in 
Erscheinung tritt - vielmehr gelten die 50 Ohm Impedanz für das Netz und 
dass dafür auf einer Lage 0,3 auf einer anderen 0,5 mm erforderlich sind 
wird intern geregelt. Der Router fährt bei einem Lagenwechsel auf der 
anderen Lage mit der dort für 50 Ohm definierten Breite fort. Ob es bei 
Kicad sowas gibt weiss ich allerdings nicht.

Salewski schrieb:
> ich dachte eigentlich,
> dass an KiCAD viele Kids herumbasteln.

Das soll doch auch Kids CAD heissen, oder nicht?

Gruss Reinhard

von Simon H. (simi)


Lesenswert?

Reinhard Kern schrieb:
> Das ist aber schade (und wieso eigentlich)

finde ich auch. :-) Warum? Die technische Antwort ist: Weil ich nur 
einen Constraint für den gesamten Layer machen kann. Ok, in den meisten 
Fällen sollte es schon gehen. Wenn man halt als Minimal Width die Dicke 
angibt, die für die gewollte Impedanz stimmt. Dann sind einfach alle 
Leitungen so dick oder dicker (die, bei denen ein Net-Constraint 
zuschlägt).
Motivationstechnische (ui, was'n'Wort) Antwort: Weil das eben mein 
Problem war/ist :-)

Aber eben, Du hast natürlich vollkommen recht.

Bezüglich den fertigungstechnischen Toleranzen: Man könnte natürlich 
auch argumentieren, dass mich ja niemand zwingt, auf den Aussenlagen 
runterzugehen. Nur leider habe ich ein 0.5mm-Pitch-Käferchen drauf. Und 
mit 8mil passt das nicht. Natürlich könnte man einfach die Fehler 
gezielt ignorieren, aber das ist ein Murks. Darum habe ich das so 
gelöst.

Aber die schöne Erkenntnis ist, dass ich mit vernünftigem Aufwand KiCad 
beibringen konnte, bei Constraintsberechnungen die Lage 
miteinzubeziehen. Ich denke, wie die Lage jetzt da reinkommt, global wie 
beim Status Quo oder über Zuordnungen der Netz-Constraints, ist ja 
eigentlich sekundär.

Also ich denke, da könnte man einiges verbessern. Übrigens noch ein 
"Insider-Tip": KiCad wird wohl bald Push-and-Shove beherrschen! :-) 
Leute vom CERN arbeiten wohl gerade daran. Mir wurde auch schon 
nahegelegt, da ja nichts kaputtzumachen. :-) Aber ich denke, das passt 
wunderbar aneinander vorbei.

Gruäss
Simon

von Verwirrter (Gast)


Lesenswert?

> Constraint ???

Könnte ihr Lieben mal auf Deutsch erklären, was damit gemeint ist?

von Simon H. (simi)


Lesenswert?

Gerne: Constraint = wörtlich: Einschränkung.

Hier: Designregel. Also z.B. "Track etc.  mit dem Netz VCC und GND 
müssen mindestens 1mm breit sein und 0.5mm Abstand von anderen Netzen 
haben."

von Verwirrter (Gast)


Lesenswert?

Simon Huwyler (simi) schrieb:

> Gerne: Constraint = wörtlich: Einschränkung.

Jaja (Loriotartiges Zustimmen meinerseits) ich weiß schon.

> Hier: Designregel. Also z.B. "Track etc.  mit dem Netz VCC und GND
> müssen mindestens 1mm breit sein und 0.5mm Abstand von anderen Netzen
> haben."

Sowas verorte ich linguistisch eigentlich eher unter Designrules. Aber 
jetzt weiß ich bescheid.

Danke Simon fürs Bescheidgeben. ;-)

von Simon H. (simi)


Lesenswert?

Hast natürlich recht. :-)

Design Regeln heisst im KiCad auch "design rules". Und eine Regel kann 
z.B. sein, dass es eine Einschränkung der Leiterbahnbreite gibt. Das 
Wort "Constraint" kommt tatsächlich im Dialog gar nie vor. Ist mir nicht 
aufgefallen. Aber man spricht hier üblicherweise von Width- und 
Clearance-Constraints.

Jetzt haben wir's zusammen. :-)

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Verwirrter.


>> Gerne: Constraint = wörtlich: Einschränkung.

> Sowas verorte ich linguistisch eigentlich eher unter Designrules. Aber
> jetzt weiß ich bescheid.

Nun, eine Design Regel muss nicht zwangsläufig eine Einschränkung sein, 
auch wenn es im allgemeinen darauf hinausläuft. ;O)

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.dl0dg.de

von Reinhard Kern (Gast)


Lesenswert?

Hallo Verwirrter.

um alle restlichen Klarheiten zu beseitigen: Design Rules sind im 
üblichen Sprachgebrauch was allgemeingültiges, z.B. der Mindestabstand. 
Constraints sind dagegen spezielle Eigenschaften aller möglichen 
Designobjekte, z.B. Impedanz > 47 und < 53 Ohm ist eine Eigenschaft 
eines bestimmten Netzes. In meiner Zuken-Software gibt es daher einen 
Constraint-Manager, der in allen verfügbaren logischen Ebenen 
Constraints definieren kann, vom Board über Layer und Bauteile bis zu 
Pads und Connections. Natürlich kann man Constraints für ein Netz 
definieren, aber auch für eine Netzklasse, oder für alle Netze, das ist 
dann eher sowas wie eine Design Rule.

Insofern sind Constraints eine Erweiterung der Rules, aber die 
Constraint-matrix einer Hitec-Platine kann durchaus tausende von 
Einträgen haben. Es ist daher nicht unbedingt einfach damit umzugehen. 
Ein einziges Netz kann Limits enthalten für Länge, Widerstand, 
Kapazität, Impedanz, Breite und in Kombination mit anderen Netzen 
Übersprechen, Längendifferenz usw. ohne Anspuch auf Vollständigkeit.

Beim Arbeiten im Team sind das sozusagen die Leitplanken, die der 
Hardwareentwickler dem Layouter vorgibt, und angeblich ein Ersatz für 
technische Besprechungen, aber das würde ich so nicht unterschreiben. 
Jedenfalls wird das Gedächtnis entlastet.

Gruss Reinhard

von Verwirrter (Gast)


Angehängte Dateien:

Lesenswert?

@ Bernd Wiebus

klar ;)

@ Reinhard Kern

Das da viel geht an speziellem Regelwerk ist mir schon klar. Nur der 
Begriff "Constraints" war mit bis dato fremd (bzw. eher von FreeCad 
bekannt). Kommt halt bei eagle oder Diptrace nicht vor (jedenfalls bis 
jetzt nicht). Netze mit bestimmten Vorgaben geht in Diptrace auch, aber 
bisher nicht in der von dir beschrieben Form. Längen lassen sich über 
Kontextmenü für einzelne Leiterzüge dauerhaft zuschalten (siehe 
Screenshot; man muss nicht unbedingt mit der Maus drüberfahren wie ich 
das hier gerade tat). Aber mit einer Impedanzvorgabe routen gibt es dort 
bisher nicht. Das müsste man schon "zu Fuß" über das Formelwerk 
berechnen oder annähern. In kommenden Versionen soll das aber möglich 
sein. Wobei die Freeware nur zwei Routinglagen unterstützt. Innenlagen 
können aber als Plane-Layer für Versorgungslagen (Power) auch breits in 
der Freeware hinzugefügt und genutzt werden. Will man dort auch noch 
routen braucht man eine Lizenz für die Standardversion. Dann hat man 
echte 4 Lagen.

Die von dir genannten Layoutsysteme sind halt eine andere Liga und 
nichts für Gelegenheitsbenutzer.

Danke dir!

(Verwirrter entwirrt) ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.