Meine Altium Open-Source-Bauteilbibliothek enthält Hunderte von Schaltplan-Symbolen und mehr als 100.000 Bauteile. Oft sind Anwender überrascht, wenn ich sage, dass das Erstellen eines Schaltplansymbols mit Altium nur ein paar Minuten dauert, selbst bei Bauteilen mit vielen Anschlüssen. In diesem Artikel zeige ich Ihnen, wie Sie die Werkzeuge in Altium nutzen können, um Ihre eigenen Symbole einfach und schnell zu erstellen.
Für den Anfang benötigen Sie ein paar Dinge:
Als Bauteil-Beispiel für diesen Artikel wählte ich bei Digi-Key in der Kategorie Embedded-Mikrocontroller einen vorrätigen ARM Cortex-M-Mikrocontroller der M-Serie mit integriertem FLASH und über 100 GPIO-Pins. Meine Wahl fiel auf einen NXP MK64FN1M0VLQ12, einen Mikrocontroller im LQFP-144-Gehäuse. Das Kopieren und Einfügen der Pin-Beschreibungen für jeden Gehäuseanschluss wäre zeitaufwendig, langweilig und fehleranfällig. Also lassen wir das!
Sieht man sich das Bauteil-Datenblatt genauer an, ist die Pin-out-Tabelle (5.1, Seite 68) für mein Vorgehen nicht ideal, aber das ist OK – Datenblätter sind selten ideal für die Erstellung von Symbolen.
Vor dem Verfassen dieses Artikels habe ich das Bauteil selbst erstellt, um sicherzustellen, dass ich beim Schreiben keine Schritte auslasse. Es dauerte etwas mehr als 7 Minuten, um dieses 144-Pin-Bauteil zu erstellen – für mich etwas langsam. Hätten die Datenblattangaben nicht so stark bereinigt werden müssen, hätte es etwa 4–5 Minuten gedauert. Ich selbst habe bereits fast 500 solcher Symbole erstellt. Ich habe also bereits etwas Erfahrung.
Zunächst erstellen wir in Altium eine neue Schaltplanbibliothek und gehen dafür zu File -> New -> Library -> Schematic Library..
In dem neuen Bauteil platzieren wir zunächst ein Rechteck für den Bauteilkörper und vermeiden so, dass wir es später hinter die Anschlusspins verschieben müssen – das spart ein wenig Zeit. Die Größe des Rechtecks spielt dabei keine Rolle.
Nun erstellen wir den ersten Pin, der als Vorlage für alle anderen dienen wird.
Vorzugsweise sollten die Pin-Eigenschaften so definiert werden, dass sie später leicht weiterverwendet werden können. Daher setze ich einfach die Pin-Nummer (Designator) auf „1“ und den Namen auf „P1“. Der Ziffernteil des Namens kann automatisch inkrementiert werden, und der Buchstabe P zeigt lediglich an, dass es sich um einen Anschluss handelt.
Ihr Bauteil sollte jetzt ungefähr so aussehen:
Uns fehlen allerdings noch 143 Pins – lassen Sie uns das beheben. Dazu kopieren wir zuerst den Pin.
Jetzt verwenden wir die Funktion „Paste Array“ aus dem Menü „Edit“.
Unter „Item Count“ geben wir die benötigten 143 weitere Bauteilanschlüsse ein und überprüfen, dass „Vertical“ auf „-100mil“ gesetzt ist. Es werden 143 Pins autogeneriert – und zwar nach unten fortlaufend an der Stelle, an der Sie klicken.
Da wir eine Menge Pins erstellen, zoomen wir heraus und klicken irgendwo bei 7000 mil unterhalb es schematischen Symbols!
Ich habe die Pins in Spalten angeordnet, aber jetzt haben wir 144 Pins zur Verfügung!
All diese Pins nützen uns noch nicht viel, da wir ihnen erst nach Namen geben müssen. Dazu gehen wir zum Datenblatt.
Markieren Sie die Pin-Tabelle, kopieren Sie die Daten in die Zwischenablage und fügen Sie sie in eine Notepad++-Datei ein.
Wie schon erwähnt, ist dieses Datenblatt nicht ideal. Bevor wir weitermachen können, müssen die eingefügten Daten bereinigt werden. Zunächst einmal wurden viele Funktionen auf mehrere Zeilen verteilt, wobei sie ein / oder _ im Namen tragen.
Mithilfe der „Replace“-Funktion suche ich nun nach _\r\n
, und ersetze es durch _
. Der erweiterte Suchmodus findet die Namen, bei denen das _
-Zeichen die Funktion in zwei Zeilen aufteilt und ersetzt es durch ein einzelnes _
. Klicken Sie auf Replace All um alle Änderungen in einem Durchgang durchzuführen.
Verfahren Sie nun mit /\r\n
, genauso und ersetzen Sie es durch /
.
Das Datenblatt hat auch viele Spalten mit dem Wort „DISABLED“, also suche und ersetze ich „DISABLED“ (mit Leerzeichen am Ende) und ersetze es durch nichts („“).
Kommen wir nun zu den regulären Ausdrücken, um diese Zeichengruppe eine Tabelle mit Pin-Nummern und Beschreibungen zu sortieren. Glücklicherweise haben wir den Gehäusetyp in der ersten Spalte der Pin-Tabelle, das vereinfacht den regulären Ausdruck etwas.
Ich benutze RegexStorm zum Testen meines Codes, um die Pin-Liste zu verarbeiten. Falls Sie Ihr Wissen über die Syntax auffrischen möchten, finden Sie eine Beschreibung in der Regular Expression Reference.
Bevor wir mit dem Abgleich der Daten beginnen, wäre es schön, alle Pin-Beschreibungen in einer einzigen Zeile statt auf mehrere Zeilen verteilt zu haben. Dazu verwenden wir in RegexStorm den Ausdruck \r\n(\D)
, um alle neuen Zeilen zu finden, denen keine Ziffer folgt (\D
ist der RegEx-Operator für „keine Ziffer“. Er muss als Gruppe angegeben werden (was durch die Klammern geschieht), sodass die Sequenz genau mit dem Zeichen ersetzt wird, welche die Sequenz gefunden hat. Der Ersatz ist dann $1
; $1
steht für die erste Gruppe, die angepasst wurde.)
Sobald wir auf „Replace“ klicken, enthält das Context-Tab die korrigierten Eingabedaten. Wir können sie also aus dem Context-Tab in das Input-Feld kopieren, um damit weiterzuarbeiten.
Es gibt noch viele (127) Stellen, an denen Pin Name, Default und ALT0 gleich sind. Schließlich wollen wir Pin 5 nicht „VDD VDD VDD VDD“ nennen, oder? „VDD“ genügt völlig.
Um diese doppelten Namen zu bereinigen, verwenden wir folgenden Ausdruck:\b([A-Z\d/_]{3,})\s*\1\s*\1? *
Dabei wird mit dem Ausdruck \b eine Wortgrenze aufgefunden und darin nach einer Gruppe von drei oder mehr Großbuchstaben, Ziffern (\d
), Schräg- oder Unterstrich gesucht ([A-Z\d/_]
). Dann suchen wir nach einer optionalen Anzahl von Leerzeichen mit \s*, gefolgt von der gleichen Gruppe wie die erste (\1
), einem weiteren optionalen Leerzeichen und schließlich optional (?) wieder die erste Gruppe, gefolgt von einer beliebigen Anzahl von Leerzeichen. Auf diese Weise findet der Ausdruck keine wiederholten Pins wie „EE EE“, jedoch 2–3 gleiche Pins in einer Reihe, wie z. B. „VDD VDD VDD“.
Wir können dies dann, genau wie beim letzten Mal, durch $1 ersetzen, jedoch mit einem Leerzeichen nach dem $1, und in das Eingabefeld kopieren.
Suchmuster
Wir suchen jetzt nach einem Muster, das folgendes findet:115 C7 C6 82 PTC10 ADC1_SE6b
ADC1_SE6b
PTC10 I2C1_SCL FTM3_CH6 I2S0_RX_FS
FB_AD5
Oder
89 F10 D11 — PTB8 PTB8 UART3_RTS_b
FB_AD21
Der Unterschied zwischen den beiden Beispielen besteht im Zeichen –. Es ist immer dort zu finden, wo das Gehäuse keinen Pin hat.
Mein Ausdruck hierfür ist:
(?:(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,2}\s+){2}(?:[\d—]{1,3}\s+)
)
Dies passt gut in die Tabellenansicht. Ich habe jetzt eine Pin-Tabelle mit allen Anschlussnummern aus dem Datenblatt, gefolgt von der jeweiligen Beschreibung.
Ich nutze reguläre Ausdrücke seit etwa 20 Jahren, als ich als Teenager in PERL programmiert habe, und fühle mich daher damit recht wohl! Lassen Sie uns einmal diesen Ausdruck näher untersuchen.
(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+))
(?:)
bedeutet, dass es sich um eine Gruppe ohne spätere Bezugsmöglichkeit handelt. Damit kann ich alles zusammenfassen, ohne dass es in der Tabellenansicht von RegexStorm landet. Dinge zusammenzufassen ist hier ziemlich wichtig, um unser Ziel zu erreichen!
\b
ist eine Wortgrenze, z. B.: eine neue Zeile, ein neues Leerzeichen, einen neueren Tab usw. Dadurch verhindern wir, wie in diesem Beispiel:LPTMR0_ALT1
74 L12 J11 52
dass die 1 am Ende von ALT1 gefunden und die ersten drei Bezeichner als übereinstimmend erkannt werden.
(?<Pin>\d{1,3})
erfasst eine Gruppe namens „Pin“ mithilfe des ?<Pin> Ausdrucks. Nicht alle Regular-Expression-Engines unterstützen solche benannten Gruppen; dies ist einer der Gründe, warum ich RegexStorm verwende. Diese Gruppe weist zwischen 1 und 3 ({1,3})
Ziffern (\d) auf. Unsere Anschlussnummer hat immer zwischen 1 und 3 Ziffern (1 bis 144).
\s+
findet jede Gruppe von einem oder mehreren aufeinanderfolgenden Leerzeichen. Wenn die aus dem Datenblatt kopierten Daten ein Leerzeichen, einen Tabulator oder einen Zeilenumbruch zwischen den Pins enthalten, werden sie auf diese Weise alle angepasst.
Als Nächstes gleichen wir die beiden Pin-Bezeichner des BGA-Gehäuses ab. (?:[A-Z\d—]{1,3}\s+){2}
tut genau dies, wobei der Quantifier am Ende ({2})
angibt, dass wir zwei der nicht erfassten Gruppe suchen. Diese Gruppe wiederum findet ein bis drei Elemente des in den eckigen Klammern angegeben Ausdrucks. Die eckigen Klammern in regulären Ausdrücken bedeuten Treffer für „alles, was darin steht“. In unserem Fall sind das alle Großbuchstaben (A-Z), Zahlen (\d), und der Bindestrich, der, wie im Datenblatt angegeben, anzeigt, dass die Funktion in dieser Gehäuseversion nicht enthalten ist. Schließlich gibt es noch ein oder mehrere Leerzeichen, ähnlich wie nach dem Pin-Beispiel.
(?:[\d—]{1,3}\s+)
entspricht unserer endgültigen Pin-Nummer. Es ist im Grunde dasselbe wie unser Pin-Match, aber wir müssen auch den em-dash (Geviertstrich) berücksichtigen, falls diese Funktion nicht im Gehäuse angeboten wird.
Falls Sie noch keine Erfahrung mit regulären Ausdrücken haben, machen Sie sich keine Sorgen: alles eine Frage der Übung!
Auffinden der Pin-Beschreibung
Um die zum Pin passende Beschreibung zu finden, können wir die aktuelle Syntax so ergänzen, dass alles in einer Gruppe erfasst wird. Etwa so:
(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+)(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b)))
Der hinzugefügte Ausdruck für die Beschreibung lautet wie folgt:(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b))
Endlich haben wir eine Tabelle mit 144 Übereinstimmungen und relativ sauberen Daten. Jetzt kann ich sie in mein Google Spreadsheet kopieren.
Zurück in Altium Designer übertragen wir nun einige Daten in das von uns erstellte Pin-Array. Wählen Sie dazu alle Pins (aber nicht das Rechteck) im Schaltplansymbolfenster aus.
Öffnen Sie das „SCHLIB List“-Panel, indem Sie auf die Schaltfläche „Panels“ im unteren rechten Fenster von Altium klicken.
Jetzt sehen Sie alle ausgewählten Pins im Schaltplansymbol.
Wenn Sie mit der rechten Maustaste auf eine beliebige Stelle des Rasters klicken, können Sie in den Bearbeitungsmodus wechseln.
Klicken Sie nun auf das Raster und drücken Sie
Kopieren Sie nun alles in Ihr Arbeitsblatt, und zwar etwas weiter unter Ihrer Tabelle mit den Daten aus RegexStorm.
Nun, da wir beide Daten in der Tabellenkalkulation haben, können Sie die Spalte mit den Pin-Nummern aus RegexStorm über die Pin-Nummern aus Altium Designer kopieren. Wiederholen Sie dann dasselbe für die Spalte mit den Beschreibungen. Dieses Symbol hat zufällig alle Pins für das Gehäuse, an dem wir arbeiten, in der richtigen Reihenfolge – das ist nicht oft der Fall. Einfacher ist es, beide Spalten zu ersetzen, damit Beschreibung und der Anschlussname weiterhin übereinstimmen.
Bevor ich diese Daten zurück in Altium Designer® übertrage, korrigiere ich noch schnell die Namensspalte, indem ich alle Leerzeichen durch „/“ ersetze, um der Konvention in meiner Bibliothek zu folgen. Markieren Sie dazu die gesamte Spalte in der Tabelle in Altium Designer und ersetzen Sie mit Suchen und Ersetzen alle Leerzeichen durch einen Schrägstrich. Klicken Sie auf „replace all“, nachdem Sie sich vergewissert haben, dass die Suche auf den spezifischen Bereich der von Ihnen ausgewählten Zellen eingestellt ist.
Jetzt haben wir eine Tabelle mit allen Namen und Bezeichnern der Bauteilanschlüsse, die wir wieder in Altium Designer einfügen können. Markieren Sie dazu die gesamte Tabelle und fügen Sie sie wieder in Ihre „SCHLIB List“ ein. Dadurch wird alles in der Tabelle überschrieben, was zu einem riesigen Durcheinander in Ihrem Schaltplan-Symboleditor führt!
Entscheidend ist jedoch, dass wir die Daten in Altium Designer haben, und es war viel weniger Arbeit und weniger fehleranfällig als der Versuch, alle Details aus dem Datenblatt Pin für Pin zu übernehmen.
Ich möchte nun alle Pins im Schaltplansymbol gruppieren, damit ich entscheiden kann, ob ich das Symbol als einzelnes Teil beschreiben will oder ein mehrteiliges Symbol erstellen muss. (Für dieses 144-polige Bauteil muss es ein mehrteiliges Symbol sein. Ich werde dennoch alles zusammenfassen, um Gruppen von Pins zu erhalten, die ich kopieren und in jedes neue Bauteil einfügen kann.)
Wir verwenden das „SCHLIB Filter“-Panel, um Gruppen von Anschlüssen auf einmal auszuwählen. Zwar existiert kein Werkzeug, mit dem man die Pins schnell gemeinsam anordnen kann, aber sobald alle Pins ausgewählt sind, kann man sie auf einen freien Bereich des Schaltplans ziehen, um sie manuell zu sortieren.
Um alle Pins wie „VSS“ oder „VSSA“ zu finden, filtere ich nach „Name LIKE 'VS*'“.
Wiederholen Sie dies mit dem Filter „Name LIKE 'VD*'“, um die anderen Versorgungsanschlüsse zu erfassen. Die Anschlusspins der Ports dieses Bauteils beginnen mit PTA, PTB, PTC usw., sodass Sie den gleichen Filter nutzen können, um diese Pins zu finden.
Nach kurzer Sortieraktion habe ich nun alle meine Pins gruppiert.
Nun lege ich alle ADC-, DAC-, Spannungs-, Masse-, USB- und Quarz-Pins auf dem Hauptbauteil. Also verschiebe ich sie in das Rechteck, das ich im ersten Prozessschritt erstellt hatte, und passe die Größe des Rechtecks so an, dass alle Pins hineinpassen. Ich platziere meine VDD-Pins immer oben links und die VSS/GND-Pins unten links und gruppiere die Pins nach ihrer Funktion und nicht nach ihrer Position im Symbol. Ich denke, dass dies zu einem praktischeren Schaltbild führt, statt zu versuchen, das physische Layout nachzuahmen.
Nun, da das Hauptbauteil fertig ist, müssen wir dem Schaltplansymbol untergeordnete Bauteile hinzufügen. Sie fügen ein neues Bauteil zum Schaltplansymbol hinzu, indem Sie Tools -> New Part wählen.
Das neue Teil wird im „SCH Library“-Panel unter Ihrer Hauptkomponente angezeigt.
Sobald Sie die Unterbauteile erstellt haben, müssen Sie nur noch in jedem ein Rechteck hinzufügen, dann die Pins aus dem übergeordneten Bauteil ausschneiden und im untergeordneten Bauteil einfügen. Die Zerlegung eines komplexen Mikrocontrollers in logische Teile ermöglicht es dem Entwickler, einen saubereren und übersichtlicheren Schaltplan zu erstellen, statt den ganzen Schaltplan mit einem einzigen riesigen Symbol zu überfrachten.
Das oben erstellte Symbol mag für Ihre Bibliothek völlig ausreichend sein, doch ich übertreibe gern etwas. Ich habe ein paar weitere reguläre Ausdrücke zusammengestellt, auf die Sie zurückgreifen können, wenn Sie die Namen weiter bereinigen wollen; etwa, wenn Sie in Funktionen, die mit n_ beginnen oder mit _b enden, zusätzliche Unterstriche hinzufügen möchten.
Wenn Sie diese Ausdrücke griffbereit haben, können Sie mit nur ein oder zwei Minuten zusätzlicher Aufwand qualitativ hochwertigere Symbolnamen erzeugen. Zudem lassen sie sich als Grundlage für Ihre eigenen Aufräumarbeiten verwenden.
Ich habe doppelte Funktionen auf den Pins in den obigen Screenshots manuell entfernt, aber Sie können dies auch automatisch tun.
Entfernen Sie zunächst die Duplikate der Ausgangsfunktion, z. B. „PTA12“
. Verwenden Sie den regulären Ausdruck^([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
mit der Option Options -> Multiline. Dadurch wird jede Zeile im Eingabefeld als eigene Einheit behandelt, damit das Zeichen ^ dem Zeilenanfang entspricht.
Ersetzen Sie die Treffer durch:$1/${inbetween}
Ersetzen Sie dann alle Funktionen nach der ersten Funktion durch den regulären Ausdruck:/([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
Sie können die mehrzeilige Option wieder deaktivieren. Wenn sie eingeschaltet bleibt, funktioniert der Ausdruck jedoch trotzdem. Ersetzen Sie die Treffer wieder durch:/$1/${inbetween}
Ersetzen Sie die Treffer so lange, bis keine mehr gefunden werden. Für diesen Teil musste ich es dreimal ausführen, um alle Duplikate zu entfernen.
Es gibt zwei Ausdrücke zum Ersetzen von Duplikaten, da der Ausdruck wissen muss, wo er mit der Suche nach einer Übereinstimmung beginnen soll. Sie sollten „/RMII0_RXER/MII0_RXER/“ nicht einfach durch „/RMII0_RXER/“ ersetzen, da beide Funktion (bis auf das „R“) gleich sind. Da wir zwei Funktionen haben, können wir das „/“ als Startzeichen oder als Zeilenanfang verwenden.
Das Hinzufügen von Aktiv-low-Balken zum Namen einer Funktion entspricht eher dem Standard im Altium Designer als die Angabe von „n_“ oder „_b“ in der Funktion. Sie können dies erreichen, indem Sie ein „\“ nach jedem Zeichen hinzufügen. Ein regulärer Ausdruck findet diese Zeichen dann mithilfe von Vorausschau-Gruppen.
Für Funktionen, die mit“ _b“ enden, verwenden Sie den Ausdruck:([^/](?=[A-Z\d_]*_b[/\r]))
Und ersetzen Sie alle Übereinstimmungen mit: $1\
Verwenden Sie dann den Ausdruck:\_b
Und ersetzen Sie alle Übereinstimmungen mit: \
Für Funktionen, die mit „n_“ beginnen, verwenden Sie diesen Ausdruck:((?<=/n_[A-Z\d_]*)[^/])
Und ersetzen Sie alle Übereinstimmungen mit: $1\
Danach müssen Sie mit dem Ausdruck suchen:n_(\w)
Und ersetzen durch: $1
Um das „n_“ am Anfang des Funktionsnamens zu entfernen.
Reguläre Ausdrücke sind ein sehr mächtiges Werkzeug, wenn Sie in Altium-Designer-Symbole aus Datenblättern erstellen. Mit nur wenigen Ausdrücken können Sie aus verwirrendem Textkopieren aus einem PDF-Dokument eine brauchbare Tabelle erstellen. Neueinsteiger sagen mir, dass die Syntax auf sie sehr einschüchternd wirkt, da sie auf den ersten Blick nur ein Wust aus Symbolen und Zahlen sind. In Wirklichkeit handelt es sich jedoch um eine sehr gut definierte Syntax, die recht einfach zu erlernen ist. Schon nach wenigen Stunden, in denen Sie kopierten Text aus dem Datenblatt in Pintabellen umwandeln, werden Sie mit der Syntax vertraut sein.
Dieses Bauteil wurde zufällig ausgewählt, um diesen Artikel zu erstellen. Die Daten mussten zwar noch bereinigt werden (und das kann mehr Zeit in Anspruch nehmen, als die Daten dann in Altium Designer zu übertragen), aber ich hoffe, ich konnte Ihnen auf diese Weise einige neue Wege zur Arbeit mit Schaltplansymbolen aufzeigen.
Wenn Sie Vorschläge zur schnelleren Erstellung von Schaltplansymbolen haben, hinterlassen Sie doch einen Kommentar mit Ihren Vorschlägen, damit andere von Ihren Erfahrungen profitieren können.
Sehen Sie sich weitere Altium-Leitfäden an oder lesen Sie weitere Beiträge des Branchenexperten Mark Harris. Möchten Sie mehr darüber erfahren, wie Altium Ihnen bei Ihrem nächsten PCB-Design helfen kann? Sprechen Sie mit einem Experten von Altium.