Forum: Platinen Autorouter mit integriertem Autoplacer


von Simon S. (-schumi-)


Lesenswert?

Hallo,

ich mache meine Schaltpläne und Layouts schon immer in KiCAD, und auch 
wenn es an der einen oder anderen Ecke noch hapert wird es stetig besser 
und ich arbeite sehr gerne damit.

Aber was mir (und wohl vielen anderen) auf den Senkel geht sind der 
Autoplacer & -router. Früher war der Autorouter ja total schrecklich, 
inzwischen ist er mit "FreeRouting" relativ gut. Den Autoplacer kann man 
allerdings immer noch wegwerfen.. Und was ich garnicht verstehe ist, 
warum der Autorouter nicht Bauteile dreht/verschiebt. Das ist ja einer 
der größten Vorteile die man beim Routen im Handbetrieb hat - und meines 
Erachtens ein großer Faktor für die schlechte Autorouter-Ergebnisse. 
(Ich hab das aber noch nirgends bei irgend einem CAD gesehen/gefunden, 
gibts denn sowas überhaupt garnicht?)

Ich würde den Prozess bis zur kompletten Platine so vorstellen:
 - Schaltplan zeichnen
 - Im Schaltplan die Bauteile Gruppieren, die später nah beieinander 
liegen sollen
 - Spezielle Attribute vergeben, z.B. möglichst kurze Leitungen 
(Abblock-C) oder welche Leitungen gleich lang sein sollen
 - Die Üblichen Paramter wie Leiterbahnbreite von bestimmten Netzen, 
Duko-Größe etc.
 - Bauformen zuordnen. Wobei einem Bauteil auch mehrere mögliche 
Bauformen zugewiesen werden können
 - Platinenumriss zeichnen
 - Bauformen importieren
 - Bauteilen wie Stecker, Bohrlöcher oder Sperrflächen eine Position 
zuweisen und sperren
 - Autoplacer: Die Bauteile werden automatisch nach ihrer Gruppierung 
angeordnet. Zusätzlich kann sich am Schaltplan orientiert werden, wo der 
Schaltplan-Zeichner ja schon Bauteile die zusammengehören nebeneinander 
gezeichnet hat. Die Baugruppen kann man auch noch als ganzes selbst 
herumschieben, um eine grobe Platzierung vorzugeben. Zum Schluss werden 
die Bauteile noch gleichmäßig verteilt, wobei Bauteile mit vielen Pins 
mehr Platz bekommen
 - Autorouter: Wie die üblichen Autorouter, nur dass Bauteile noch 
zusätzlich verschoben, gedreht, auf die andere Platinenseite gelegt und 
Bauformen getauscht werden können (Engstellen, Bauteile als Brücken oder 
Duko). Auch sollte der Stufenweise arbeiten, also zuerst die möglichst 
kurzen Leitungen, dann die Stromversorgung, dann den Rest (ausgehend von 
Bauteilen mit vielen Pins)

Gibt es sowas noch garnicht? Wenn nicht, warum? Zu kompliziert zu 
programmieren?

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Vermutlich, da steckt ja ne Menge Erfahrung drin wenn man das per Hand 
macht.
Zumindest können einige Router Gattertausch. Sieht aus als hättest du 
Gattertausch und Pintausch in deiner Liste vergessen.
Gibt ja auch noch mehr, z.B. Routen über unbenutzte Pins um dann links 
und rechts zu den anderen Pins Platz zu haben für ne weitere Leiterbahn 
zwischen den Pins. usw. Tricks.

Also wenn, dann wohl als Ansatz mit zufälliger Geometrie und die beste 
Lösung gewinnt.

Diptrace hat einen Auto-Placer. Weiß aber nicht so recht, nach welchen 
Regeln der arbeitet. Sowas mache ich per Hand.

von Hardy F. (hardyf)


Lesenswert?

Interessanter Autorouter und -Placer :

Topo-R von Eremex

von Stefan S. (Gast)


Lesenswert?

Simon S. schrieb:
> Ich würde den Prozess bis zur kompletten Platine so vorstellen:

Ja dann mach mal...

Aber im Ernst, so etwas hätte ich auch ganz gerne und meine Gedanken 
gehen in die gleiche Richtung. In wie weit es das bei den teuren 
EDA-Lösungen gibt weiss ich nicht -- viele sind ja der Meinung das kann 
alles nicht funktionieren und man solle eben alles per Brain 2.0 machen. 
(Vor einigen Jahrzehnten wollte man ja auch alles noch in Assembler 
machen...) Nun ja, zu einigen Punkten habe ich Ideen, zu anderen eher 
nicht. Mein Rubberband Router funktioniert ja schon mal nicht ganz 
schlecht -- all das andere müsste man auch mal angehen, wenn Zeit und 
Motivation vorhanden sind -- und sonst nichts dazwischen kommt.

von Simon S. (-schumi-)


Lesenswert?

Abdul K. schrieb:
> Tricks.
Ja, das ist mir nicht eingefallen. So viel Erfahrung hab ich mit 
Autoroutern auch nicht ;-)

> Also wenn, dann wohl als Ansatz mit zufälliger Geometrie und die beste
> Lösung gewinnt.
Du meinst beim platzieren? Ich glaube das könnte bei vielen Bauteilen 
sehr problematisch werden... (Ich habe mal ein Programm geschrieben, 
dass sich evolutionär weiterentwickelt (also mehrere Programme ändern 
sich zufällig und die besseren dürfen sich reproduzieren). Ziel: Ein 
Brainfück-Programm (ü=Spamerkennung) soll entstehen, das eine bestimmte 
Zahl ausgibt. -> sehr langsam, und von der Komplexität noch weit 
drunter)


Hardy F. schrieb:
> Topo-R von Eremex
Sieht (auf Youtube) gut aus, aber ich kann nichts Weltbewegendes 
erkennen..(?) Wobei ich nur den Autorouter gesehen habe (gut, kurvige 
Leiterbahnen sind schon toll), von dem Autoplacer habe ich kein Video 
gefunden.

Stefan S. schrieb:
> Ja dann mach mal...
Wenn ich die Kenntnisse und Zeit dazu hätte, würde ich sofort ein 
Github-Repo aufmachen und loslegen ;-)

> Aber im Ernst, so etwas hätte ich auch ganz gerne und meine Gedanken
> gehen in die gleiche Richtung.
Ja, denke auch schon länger drüber nach. Trigger für das Posting war 
dann der Thread: Beitrag "FreeRouting @ GPLv3"


Um ehrlich zu sein bezweifle ich auch, dass es so "einfach" ist quasi 
einen Autopilot für die Erstellung von Platinen zu machen, aber das ein 
oder andere nützliche Tool sollte sich ja eigentlich gut realisieren 
lassen.

Z.B. denke ich da a die Zerstreuungsfunktion in den CAD-Systemen. KiCAD: 
Man importiert die Netzliste -> alles auf einem Haufen. Dann wählt man 
"Spread out all footprints" -> Haufen verteilt, aber nur nach 
Bauteilenummern sortiert.
Hier könnte man so gut es geht den Schaltplan nachbilden, damit die 
Bauteile schon mal grob sortiert sind was dem User die Sache sehr 
erleichtern würde..
Oder man lässt das Programm selbst anordnen:
1. Bauteil mit den meisten benutzten Anschlüssen suchen (z.B. IC1)
2. Für alle anderen Bauteile ausrechnen: (Anzahl der Verbindungen mit 
IC1)/(andere Verbindungen)
3. Bauteile anhand der Werte aus 2. absteigend sortieren, wobei Bauteile 
ohne Verbindung zu IC1 weggelassen werden
4. Bauteile aus 3. um das IC1 anordnen (Richtung: in die der Pin von IC1 
zeigt an dem das Bauteil angeschlossen wird; Abstand: (Anzahl der 
benutzten Anschlüsse)-(Anzahl der Verbindungen mit IC1)+(fester Wert))
5. Kollisionsprüfung + evlt. Verteilung auf größere Fläche
6. Von den schon angeordneten Bauteilen wird wieder das nächste mit den 
meisten Anschlüssen gesucht und es geht vom Prinzip her wieder bei 1. 
los

Wenn man jetzt noch haben möchte:
 - Gruppierungen: Das anordnen wird für jede Gruppe einzeln gemacht
 - Besonders kurze Leitungen: Beim Sortieren bekommen diese Bauteile 
einen Bonusauffschlag und kommen früher mit anordnen dran. Zudem wird 
der "(fester Wert)" beim platzieren kleiner gemacht

Ich schätze, dass sich das auch mit der Python-scripting-Schnittstelle 
in KiCAD machen lassen sollte. Aber leider hab ich dazu noch keine gute 
Doku gefunden.. Sonst könnte man ja mal etwas probieren

von Floh (Gast)


Lesenswert?

Also ich persönlich empfinde das Layouten von Platinen als sehr schöne 
Arbeit. Man beschäftigt sich mit der Materie, kann seine Gedanken da mit 
reinbauen und kreativ tätig werden.
Ich persönlich habe daher lieber ein schönes Layout als einen schönen 
Schaltplan, denn das Layout entscheidet, ob die Platine später gut, 
mittelmäßig, schlecht oder kaputt ist. Ein Schaltplan ist für mich nur 
ein Mittel, um die Gedanken fürs Layout zu sortieren.

von Philip P. (nosuchnick)


Lesenswert?

Ich persönlich bin auch eher ein Anhänger des händischen platzieren und 
routens.

Aber ich würde hier einfach mal
http://en.wikipedia.org/wiki/Force-directed_graph_drawing
in den Raum werfen. Im Grunde is ein Schaltplan ja auch nur ein Graph 
(evtl. mit ein paar Meta-Informationen). Und das sinnvolle darstellen 
von Graphen in 2D ist schon seit längeren ein Thema in der Informatik.

von Salewski, Stefan (Gast)


Lesenswert?

Philip Peter schrieb:
> Aber ich würde hier einfach mal

Ja, das könnte schon hilfreich sein -- ich werde mal versuchem mir den 
Link zu merken.

Laufzeit O(n^3) -- na ja, war wohl irgendwie zu erwarten.

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.