Forum: Platinen Kicad / pcb / Layout - Mehrere identische Schaltungen auf einer LP


von Sven L. (lemming)


Lesenswert?

Hallo Leute,

wer kann mir mal einen Tipp geben, wie ich möglichst effizent ein Layout 
mit Kicad entwerfe, das aus vielen identischen Schaltungen besteht? Soll 
heißen, 16 gleiche Schaltkreise (Slaves), die mit einem Master über SPI 
verbunden sind, auf einer Leiterplatte.

Die Slaves sollen als 4x4 Matrix auf der LP angeordnet werden und der 
Master etwas abseits davon, aber ebenfalls auf derselben Leiterplatte. 
Allerdings hat jeder Slave seine eigene Seite im hierarchischen 
Schaltplan und auch eigene Bauteilbezeichnungen.

Jemand ne Idee, wie ich den Place&Route-Aufwand klein halten kann?


Ich hoffe, dass das nicht zu verwirrend war und klar ist, was gemeint 
ist..?

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Sven L. schrieb:

Hallo Sven.

> wer kann mir mal einen Tipp geben, wie ich möglichst effizent ein Layout
> mit Kicad entwerfe, das aus vielen identischen Schaltungen besteht? Soll
> heißen, 16 gleiche Schaltkreise (Slaves), die mit einem Master über SPI
> verbunden sind, auf einer Leiterplatte.

Für den Schaltplan solltest Du Dir einmal 
http://www.mikrocontroller.net/wikifiles/4/41/BuildingBlocksKiCAD-EXPERIMENTELL.zip 
über "Building blocks" durchlesen.

Für das Layout empfehle ich Dir, einen Slave separat zu routen und auf 
einem "extra Board" abzuspeichern. Dieses importierst Du wieder 16 mal 
(mit "Append Board" unter File/Datei) in Dein Board mit dem Master, und 
plazierst sie. Beachte, dass das importierte Board brutal an seinen 
ursprünglichen Platz gesetzt wird. Vieleicht darum das "Slave-Board" vor 
dem Abspeichern etwas ausserhalb plazieren. Jetzt noch die Annotation 
von Hand neu machen, wobei Du die schon vorhandenen Module löschen 
musst. Das ist leider etwas umständlich. Dann liest Du die originale 
Netzliste in PCBnew ein. Dabei werden dann die Verbindungen hergestellt, 
entsprechend den Referenzen im Schaltplan und im Layout. Natürlich 
kannst Du anschliessend auch weitere Änderungen an den Slaves 
dürchführen, gemäß Schaltplan.

> Die Slaves sollen als 4x4 Matrix auf der LP angeordnet werden und der
> Master etwas abseits davon, aber ebenfalls auf derselben Leiterplatte.
> Allerdings hat jeder Slave seine eigene Seite im hierarchischen
> Schaltplan und auch eigene Bauteilbezeichnungen.

Gut, das Du dafür schon hierarschiche Schaltpläne verwendet hast. ;O)
Das macht das ganze einfacher.
Trotzdem solltest Du Dir obiges über "Building blocks" durchlesen. Die 
Denkweisen kannst Du vergleichbar in PCBnew einsetzten.

Das Routen des Slave kannst Du machen, indem Du einen der hierarschichen 
Slave Schaltpläne aus dem Projektordner verwendest, um eine separate 
Netzliste zu erstellen, und für die dann routest.

> Jemand ne Idee, wie ich den Place&Route-Aufwand klein halten kann?

s.o.

> Ich hoffe, dass das nicht zu verwirrend war und klar ist, was gemeint
> ist..?

Ich hoffe, ich habe es begriffen.

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

von Sven L. (lemming)


Lesenswert?

Bernd Wiebus schrieb:
> Sven L. schrieb:
>
> Hallo Sven.

Hallo Bernd, da hätte ich mir die separate Nachricht an dich ja fast 
sparen können. ;D

> Für den Schaltplan solltest Du Dir einmal
> 
http://www.mikrocontroller.net/wikifiles/4/41/BuildingBlocksKiCAD-EXPERIMENTELL.zip
> über "Building blocks" durchlesen.

Werde ich gleich nochmal machen, ja.

> Für das Layout empfehle ich Dir, einen Slave separat zu routen und auf
> einem "extra Board" abzuspeichern. Dieses importierst Du wieder 16 mal
> (mit "Append Board" unter File/Datei) in Dein Board mit dem Master, und
> plazierst sie. Beachte, dass das importierte Board brutal an seinen
> ursprünglichen Platz gesetzt wird. Vieleicht darum das "Slave-Board" vor
> dem Abspeichern etwas ausserhalb plazieren. Jetzt noch die Annotation
> von Hand neu machen, wobei Du die schon vorhandenen Module löschen
> musst. Das ist leider etwas umständlich. Dann liest Du die originale
> Netzliste in PCBnew ein. Dabei werden dann die Verbindungen hergestellt,
> entsprechend den Referenzen im Schaltplan und im Layout. Natürlich
> kannst Du anschliessend auch weitere Änderungen an den Slaves
> dürchführen, gemäß Schaltplan.

Eben genau dieses "manuelle" Gewurschtel wollte ich möglichst vermeiden. 
Aber wenn auch Du keine andere Lösung hast, dann werd ich es wohl so 
machen müssen.


Ich glaube, jemand hatte schon für genau diese Problematik ein neues 
Projekt ins Leben gerufen (gerade erst gefunden):

http://code.google.com/p/kicadocaml/

Man beachte die Beschreibung "hiding modules based on schematic sheet, 
module placement based on schematic location or simulated annealing, and 
arraying of components that are on duplicated schematic sub-sheets"


Bei Altium nennt sich die Geschichte "multi-channel design":

http://wiki.altium.com/display/ADOH/Creating+a+Multi-channel+Design

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Sven L. schrieb:

Hallo Sven.
>
> Hallo Bernd, da hätte ich mir die separate Nachricht an dich ja fast
> sparen können. ;D

;O)
Ich gehe aber mal davon aus, das hier jede Menge Leute sind, die sich 
viel besser damit auskennen als ich. Vieleicht meldet sich davon ja 
einer.

> Eben genau dieses "manuelle" Gewurschtel wollte ich möglichst vermeiden.
> Aber wenn auch Du keine andere Lösung hast, dann werd ich es wohl so
> machen müssen.
> Ich glaube, jemand hatte schon für genau diese Problematik ein neues
> Projekt ins Leben gerufen (gerade erst gefunden):
>
> http://code.google.com/p/kicadocaml/

Danke für den Tip. Mit Ocam kenn ich mich nun überhaupt nicht aus...

Es ist wäre eh einfacher, die Reannotation nicht in PCBnew zu machen, 
sondern mit einem Texteditor im File direkt, es fehlt aber etwas die 
Übersicht....darum gärt in mir schon eine dumpfe Idee eines Python 
Skriptes, dass das Renaming per Liste erlaubt.
Jedenfalls halte ich eine vollautomatische Zuweisung ohne ein paar 
Absicherungen für nicht sinnvoll machbar. D.h. das Programm/Skript 
müsste dafür davon Ausgehen können, dass ein Bestimmtes Layout auch für 
andere Subschaltpläne EXACT gelten soll.
Eine Liste könnte zwar automatisch erstellt werden, sollte aber von Hand 
überprüft und gegebenenfalls geändert werden können.

Leider hab ich gar nicht so viel Zeit, wie ich Ideen habe.


> Man beachte die Beschreibung "hiding modules based on schematic sheet,
> module placement based on schematic location or simulated annealing, and
> arraying of components that are on duplicated schematic sub-sheets"
>

Das mehrfache einlesen könnte auch per Python Skript passieren. Nur wenn 
Du für jeden Slaveblock schon ein extra Schematic hast, würde ich als 
Programm davon ausgehen, dass sie sich schon "irgendwie" unterscheiden, 
abgesehen von der Referenz/Annotation. WAS ist also für ein 
Programm/Skript das Kriterium, dass das zulässig ist, und das gleiche 
Positionen (Was ist, wenn ein Schematic leicht verändert/verschoben 
ist?) auch gleiche Module, gleiches Routing bedeuten?

Vollautomatisch ist also etwas Problematisch, aber ein halbautomatisches 
Verfahren mit Listen ist vermutlich recht problemlos machbar, und mit 
Sicherheit sehr flexibel.
Ausserdem könnte man dann auch ein komfortableres Annotationsverfahren 
vorsehen, das weit über die jetzigen Kicad Möglichkeiten hinausgeht, 
z.B. mit längeren alphanumerischen Pre- und Suffixen.



>
> Bei Altium nennt sich die Geschichte "multi-channel design":
>
> http://wiki.altium.com/display/ADOH/Creating+a+Multi-channel+Design

Danke für den Tipp!
Leider kenne ich Altium nicht. Aber wenn Du das aus dem Programm heraus 
direkt vorsiehst, sieht die Sache anders aus. Es ist vermutlich 
einfacher zu implementieren, weil die passenden Informationen vom 
Schaltplan mitgeliefert werden. Wenn Du irgendwo fixiert hast, das 
Subschaltplan B bis auf die Annotation eine exakte Kopie von 
Subschaltplan B ist, kannst Du auch einfacher sagen, dass das Layout in 
dem Bereich auch eine Kopie ist....das gilt aber nur für das erste 
Anlegen. Wenn Du irgendein Bauteil leicht versetzt, um z.B. einer 
Befestigungsbohrung auszuweichen, ist das ganze schon eine 
Einbahnstrasse.


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

von Sven L. (lemming)


Lesenswert?

Bernd Wiebus schrieb:

> ;O)
> Ich gehe aber mal davon aus, das hier jede Menge Leute sind, die sich
> viel besser damit auskennen als ich. Vieleicht meldet sich davon ja
> einer.

Ich denke, dass Du schon ein recht kompetenter Ansprechpartner dafür 
bist, da Du ja auch Tutorials zu Kicad geschrieben hast. Daher vertrau 
ich deinen Ausführungen voll und ganz. ;P


>> http://code.google.com/p/kicadocaml/
>
> Danke für den Tip. Mit Ocam kenn ich mich nun überhaupt nicht aus...

Naja, ich hatte es auch nur ergoogelt und noch nicht ausprobiert. Zu 
schade, dass sich Leute so viel Arbeit machen (OpenGL Unterstützung) und 
das ganze Projekt dann einschläft bzw. nicht in Kicad importiert werden 
kann (Ocaml/C++).

Das gilt m.E. auch für GEDA PCB und Kicad. Welch eine Verschwendung von 
Manpower... naja, Auswahl ist auch immer gut.


> Leider hab ich gar nicht so viel Zeit, wie ich Ideen habe.

Ja, das Problem kommt mir verdammt bekannt vor... ^^


>> Bei Altium nennt sich die Geschichte "multi-channel design":
>>
>> http://wiki.altium.com/display/ADOH/Creating+a+Multi-channel+Design
>
> Danke für den Tipp! Leider kenne ich Altium nicht.

Tja, da sind wir schon zu zweit. Welcher Hobbyist hat schon die Kohle 
dafür? D.h. im Studium hatten wir mal was mit Altium gemacht, aber keine 
Layouts, nur nen FPGA damit programmiert.


Andererseits bin ich "fast" voll zufrieden mit den Möglichkeiten, die 
Kicad bietet. Es fehlen eben nur noch so "Kleinigkeiten", wie eine 
Unterstützung beim Routing von differenziellen Signalen (Impedanzen, 
Laufzeiten).... @_@

Das wäre doch mal was für Googles "Summer of Code" Initiative.


Grüße,
Sven

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.