Sonntag, 15. Februar 2015

Ein Blick auf KiCAD [Schaltplan]

KiCad ist ein FOSS Softwarepaket, dass zur Entwicklung von elektronischen Schaltungen und das Design der Leiterplatte verwendet werden kann. Es ist seit 2007 in Entwicklung und mittlerweile so weit, dass es zum professionellen Einsatz angewendet werden kann. Das Projekt wird vom CERN unterstützt, die einige neue Funktionen für den Schaltplaneditor, das Backend und den Layouter zur Verfügung gestellt hat.

Für meine kleineren Projekte, habe ich bis jetzt immer nur den Schaltplaneditor verwendet. Bei einem aktuellen Projekt, möchte ich allerdings auch die Leiterplatte herstellen lassen. Dabei soll die Platte im KiCad Layouter entwickelt werden. Diese Artikelserie wird sich mit den Abläufen und Tücken von der Erstellung einer Schaltung, bis hin zur fertigen Leiterplatte befassen. Die Aufteilung der Artikel wird sich an dem Workflow orientieren, den man bei der Erstellung einer Leiterplatte durchläuft. Es wird sich dabei nicht um eine Anleitung zum erstellen von Schaltungen handeln, sondern vielmehr ein Überblick darüber, wie die Arbeit mit KiCad abläuft.
Begonnen wird beim Erstellen des Schaltplans, danach wird die Netzliste erstellt. Diese enthält alle Informationen über die verwendeten Bauteile und deren Eigenschaften (Namen, Pinbelegung und Landepads) sowie Verbindungen. Nebenbei wird die Liste der Bauteile erstellt, die daraufhin zu beschaffen sind. Mit der Netzliste kann dann im dritten Teil die Leiterplatte entworfen werden. Neben der Platzierung der Bauteile werden wir auch die fertigungstechnischen Feinheiten betrachten und den Prozess der Bestellung durchführen. Wenn die Platte dann eingetroffen ist, wird der letzte Artikel, die Bestückung der Platte und das Löten im Reflow-Prozess beschrieben.

KiCad Installieren

Ähnlich wie bei anderen FOSS Projekten, wird KiCad ständig weiterentwickelt und man kann sich die aktuellste Version als Quellcode aus dem Internet herunterladen. Für viele Betriebssysteme gibt es bereits fertige Binärpakete, die installiert werden können. Zur Zeit sind neue Builds auf http://kicad.nosoftware.cz/ zu finden. Wer sich die Mühe machen möchte, das Programm selbst zu kompilieren, kann dafür den Winbuilder verwenden.

Ich beziehe mich in dieser Artikelserie auf die Version 2015-01-17 BZR 5376 aus dem nosoftware.cz Fundus. 

KiCad Manager

Nach dem Start von KiCad wird der Projektmanager gestartet. Dieser zeigt die verwendeten Dateien, des aktuellen Projekts an und bietet eine Schnellstartleiste für die benötigten Programme, wie Schaltplan- und Symboleditor, oder Layouter. Weiterhin sind noch einige kleine Tools, wie Bitmap zu Komponenten-Konvertierung, Berechnungs-Tools und Schaltplan-Layouteditor. 
Von diesem Fenster aus wird ein Projekt verwaltet. 

Der Schaltplaneditor

Der Schaltplan wird über den Editor Eeschema erstellt. Die Abbildung zeigt den fertigen Schaltplan eines Projekts. Die Übersichtsseite des Schaltplans, also die erste Seite ist hier wie ein Blockschaltbild zu betrachten. Verschiedene Funktionen sind in einzelne Blätter (Subsheets) aufgeteilt. Das muss man nicht unbedingt machen, es macht die Schaltung ab einer gewissen Größe allerdings übersichtlicher. Ich habe meine Schaltungen eigentlich immer auf A3-Größe festgelegt und gehe von dort aus in Subsheets um die Komplexität der einzelnen Komponenten geringer zu halten. Um Signale zwischen den einzelnen Blättern austauschen zu können, werden hierarchische Labels verwendet. Zwei unterschiedliche Netze, die mit einem gleichnamigen Label verbunden werden, sind danach das gleiche Netz. Auf dem Hauptblatt sieht man dann die Verbindungen der einzelnen Untergruppen. Somit wird die Logik abstrahiert und einfacher auf den ersten Blick zu verstehen.

Ein Schaltplan besteht aber nicht nur aus Subsheets, sondern auch aus Komponenten, die die eigentliche Schaltung darstellen. Diese werden über das 'Bauteil hinzufügen' Menü ausgewählt und in den Schaltplan eingefügt. Das Menü erscheint, wenn man das Bauteil-Werkzeug ausgewählt hat und in den Schaltplan klickt. Hier sind alle Bauteile, die in der Bibliothek abgelegt sind zu finden. Über die Filter Eingabe kann nach eine bestimmten Teil gesucht werden, über das Auswahlmenü können die einzelnen Bibliotheken durchsucht werden. Der untere Bereich dient als Vorschau für die Komponente und gibt zusätzliche Informationen zu dem Bauteil, sofern diese bei der Erstellung hinterlegt wurden. Das gewählte Bauteil kann nach dem Drücken des OK-Buttons in den Schaltplan eingefügt werden. 

Sollte ein Bauteil nicht in der Bibliothek zu finden sein, muss es neu angelegt werden. Es sind zwar mittlerweile eine Vielzahl von Bauteilbibliotheken im Internet zu finden, doch es kann vorkommen, dass es dieses eine Bauteil mit diesem Gehäuse und diesem Pinout eben noch nicht gibt. Der Bauteil-Editor von KiCad ist allerdings einfach zu benutzen, wenn man das System hinter den Bibliotheken einmal verstanden hat. Eine Bibliothek ist eine Datei. In dieser Datei befinden sich Beschreibungen für eine oder mehrere Bauteile. Die Bibliotheksdatei muss in einem KiCad bekannten Verzeichnis liegen und zusätzlich noch als aktive Bibliothek ausgewählt werden. Erst dann ist sie in der Bauteil-Auswahl verfügbar. Die erzeugten Biblioteks-Dateien sind im Textformat gespeichert. Diese Eigenschaft machen wir uns später zu Nutze, wenn es darum geht verschiedene Versionen zu verwalten.

Das neue Bauteil bekommt einen Namen. Es wird festgelegt, welche Bezeichner für das Bauteil verwendet werden soll (R für Widerstände, L für Induktivitäten, C für Kondensatoren, V für Dioden, usw.) und die Anzahl der Komponenten pro Bauteil (bspw. für Dual-FETs oder Widerstandsarrays).
Daraufhin kann das Bauteil gezeichnet werden und die Pins eingefügt, benamt und benummert werden. Wichtig ist festzulegen, wie der Energiefluss der Pins ist. Hier sollte Jeder Versorgungspin (VCC, GND, ...) als Eingang, jeder Ausgangspin als Ausgang (Vout, ...) und jeder Controller-Pin als Bidirektional festgelegt werden. Man kann hier noch weiter ins Detail gehen, wenn man das möchte. Die grobe Festlegung des Energieflusses ist aber wichtig um spätere Fehler im Design Rule Check (DRC) zu vermeiden.


In den Eigenschaften des Bauteils, können für später wichtige Informationen hinterlegt werden. Einmal grundsätzliche Eigenschaften zur Darstellung des Symbols, ähnlich der Einstellungen beim Erstellen des neuen Symbols. Eine Beschreibung das Bauteils und das Datenblatt sollten nicht fehlen, so kann während der Schaltplaneingabe schnell auf das Datenblatt zugegriffen werden. Für viele Bauteile gibt es unterschiedliche Beschreibungen, die mit der eigentlichen Funktion des Bauteils nicht viel zu tun haben (Gehäuseform, Verpackungseinheiten, ...). Außerdem gibt es Bauteile, die von verschiedenen Herstellern geliefert werden, aber die gleiche Beschaltung und Funktion aufweisen. So können dem Bauteil Aliase vergeben werden, um es unter diesen Namen in der Liste der Komponenten zu finden. Obwohl im Schaltplaneditor keine fixe Verbindung von Schaltplakomponente und physikalischem Bauteil besteht, kann dem Bauteil eine Reihe von Landungspads (Footprints) für die Leiterplatte mitgegeben werden. Das erleichtert später die Zuweisung von Bauteilform zu Bauteil. 

Bauteile-Bezeichner

Nachdem der Schaltplan in den Editor eingegeben wurde, oder schon währenddessen kann der Komponente ein Bezeichner zugewiesen werden. Beim Erstellen des Symbols haben wir gesehen, dass jedes Symbol einen Prefix besitzt, der die Art des Bausteins beschreibt (R, L, C, V, ...). Dazu kommt dann meistens noch eine Nummer, die das Bauteil eindeutig kennzeichnet. So entsteht dann der Widerstand R100 oder der Kondensator C371. Die Bezeichnung kann manuell beim Hinzufügen des Symbols erfolgen, oder automatisch mit dem Annotation-Tool. Dieses Tool erlaubt es uns entweder alle, oder alle noch nicht benannten Bauteile mit den nächsten freien Nummern zu benennen. Dabei kann der aktuelle Schaltplan, oder alle Schaltpläne des Projekts beachtet werden. Die nächstmögliche freie Zahl ist aber auf das ganze Projekt bezogen, denn jeder Bezeichner darf nur einmal vorkommen.
Das Annotationstool besitzt die Möglichkeit, die zu benennenden Bauteile entweder waagerecht, oder senkrecht zu ermitteln und zu bezeichnen. Ich habe eigentlich immer die senkrechte Reihenfolge gewählt. Der nächste Punkt, die Annotationsauswahl, lässt es zu, dass wir Blatt abhängig die Bezeichnung der Bauteile erhöhen. So wird der erste Widerstand auf Blatt 3 mit 300 bezeichnet, der zweite mir R301 usw. Später hilft das den Widerstand von der Leiterplatte wieder in den Subsheets zu finden. Das ist vor allem im Fehlerfall praktisch.

DRC

Der Design Rules Check ist ein sehr hilfreiches Tool beim verifizieren der Schaltung. Er schaut sich den kompletten Schaltplan an und bestimmt anhand von gegebenen Bedingungen, ob der Schaltplan so regelkonform ist. Diese Regeln werden in den Optionen festgelegt. Das Bild zeigt einen typischen Fehler; Ein Pin eines Bauteils ist nicht angeschlossen und der Pin wurde nicht explizit, als nicht verbunden gekennzeichnet. Im Schaltplan wurde die Stelle markiert und wird beim Klick auf den Fehler in der Fehlerliste hervorgehoben. Allerdings ist das nur ein Warnhinweis und kann ignoriert werden. In den Optionen des DRC kann festgelegt werden, wie mit verschiedenen Bedingungen umgegangen werden soll. Beispielsweise ist es OK zwei Eingangspins oder Tri-State-Pins miteinander zu verbinden, aber wenn zwei Ausgangspins verbunden werden, wird ein Fehler erzeugt. Diese Regeln sind nicht verpflichtend, können aber helfen, dass beim eingeben des Schaltplans keine Fehler gemacht wurden.

Zusammenfassung

Der Schaltplan wird in EEschema eingegeben. Dabei werden Symbole aus einer Bibliothek verwendet. Diese Symbole sind nicht zwangsweise an ein Physikalisches Bauteil gebunden. Die Bibliothek ist eine Textdatei in der alle zu dieser Bibliothek gehörenden Symbole hinterlegt sind.
Komplexe Schaltungen können auf Subsheets ausgelagert werden. Diese können Signale mit hierarchischen Labels austauschen. Das Bezeichnen von Komponenten kann manuell oder mit dem Annotationstool gemacht werden. Am Ende kann mit dem DRC ermittelt werden, ob noch grobe Fehler im Schaltplan zu finden sind.

Wie die virtuellen Komponenten im Schaltplan zu ihren physikalischen Gegenstücken umgewandelt werden, warum ein Widerstand auch ein wichtiges Bauteil ist, warum es sinnvoll ist Schaltplansymbol und physikalisches Bauteil zu trennen und was die Netzliste macht, betrachten wir dann im nächsten Beitrag.

Dienstag, 10. Februar 2015

Und da warens nur noch Text

Ich habe gestern ein neues Android Telefon in Betrieg benommen. Google Konto angemeldet, Synchronisation gestartet. Nebenbei hat es dann alle meine 4000 Bilder von der Speicherkarte zu Google+ hochgeladen und angefangen irgendwelche Filter auf Bilder zu legen, die ich über Programme wie WhatsApp geschickt bekommen habe. Also habe ich auf der Google+ Webseite alle Bilder wieder gelöscht. Ergebnis davon? Keine Bilder mehr im Blog.

Alle weg und nicht mehr herstellbar.

Danke Google, das ist eine sehr sinnvolle Funktion. Nicht.

Donnerstag, 5. Februar 2015

USB Geräte über IP tunneln (usbip)

Das usbip Projekt ist seit kurzem als stabiler Bestandteil des Linuxkernels bestimmt worden. Das bedeutet, dass die Funktionalität standartmäßig in die Kernels der großen Distributionen kompiliert werden. Es herrscht allerdings noch einige Unklarheiten wie das Paket ausgeliefert werden soll. Der aktuelle (3.16) Kernel des Ubuntu 14.10 (Utopic Unicorn) hat die Module für usbip bereits dabei. Es draf bloß nicht der Fehler gemacht werden und das 'usbip' Paket aus dem Paketmanager isntalliert werden; dieses enthält eine sehr alte Version des Projekts. Vielmehr muss nur das Paket 'usbip-utils' installiert werden.

Wenn die benötigten Pakete geladen sind kann der usbip Server gestatet werden. Dieser lautet 'usbipd' und kann entweder als Programm oder im Hintergrund geladen werden.

basti@localhost:~$ sudo usbip

oder

basti@localhost:~$ sudo usbipd -D 

Um  USB Geräte über diesen Server zur Verfügung zu stellen, müssen die Kernelmodule 'usbip_core' und 'usbip_host' sowie 'vhci_hcd' geladen werden.

basti@localhost:~$ sudo modprobe usbip_core
basti@localhost:~$ sudo modprobe usbip_host
basti@localhost:~$ sudo modprobe vhci_hcd

Die Liste der verfügbaren USB Geräte kann mit 'basti@localhost:~$ usbip list -l' angezeigt werden. Die Ausgabe sieht dann zum Beispiel so aus:


 - busid 1-2 (05dc:b051)
   Lexar Media, Inc. : unknown product (05dc:b051)


Um das gewünschte Gerät zu exportieren wird dem Kernelmodul das USB Gerät übergeben. 

basti@localhost:~$ usbip bind -b 1-2

Wenn ein USB Gerät an den usbip Treiber weitergegeben wurde, steht es dem System nicht mehr zur Verfügung. Es kann allerdings mit usbip auch lokal wieder eingebunden werden. Und genau das müssen wir zuerst tun, bevor wir mit Windows die Interfaces des USB Gerätes sehen können. Weshlab das so ist, ahbe cih noch nicht herausgefunden, lediglich dass es so ist.

basti@localhost:~$ usbip list -r 127.0.0.1
Exportable USB devices
======================
 - 127.0.0.1
        1-2: Lexar Media, Inc. : unknown product (05dc:b051)
           : /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
           : (Defined at Interface level) (00/00/00)

basti@localhost:~$ sudo usbip attach -r 127.0.0.1 -b 1-2
basti@localhost:~$ usbip list -r 127.0.0.1
Exportable USB devices
======================
 - 127.0.0.1
        1-2: Lexar Media, Inc. : unknown product (05dc:b051)
           : /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
           : (Defined at Interface level) (00/00/00)
           :  0 - Mass Storage / SCSI / Bulk-Only (08/06/50)

 
Wie man an der Ausgabe sieht, erscheint das Interface erst, nachdem das Gerät einmal eingebunden wurde. Um es auf einem anderen Computer einzubinden muss es aus dem lokalen Rechner gelöst werden.


basti@localhost:~$ sudo usbip detach -p 0

Damit wird das Gerät wieder frei um von der Windows Seite her eingebunden zu werden. Das ReactOS Projekt hat für Windows signierte Treiber erstellt. Diese können auf der Webseite des usbip Projektes heruntergeladen werden. Die mit den Treibern ausgelieferte Version 0.2.0.0 von usbip.exe ist allerdings zu alt um mit dem aktuellen usbip-Server zu arbeiten. Die Quellcodes sind allerdings offen und man kann sich eine Version kompilieren, oder ihr könnt euch meine kompilierte Version von hier herunterladen. Es handelt sich dabei um die aktuellste Version des SVN Repositories.

Unter Windows muss der usbip Enumerator Treiber installiert werden. Unter Windows 7 kann das über den Gerätemanager erfolgen. Im Gerätemanager klickt man auf den lokalen Computer mit der rechten Maustaste und wählt Legacyhardware hinzufügen.
Im folgenden Dialog wählt man die manuelle Metode aus und 'Alle Geräte anzeigen'. Der Button 'Datenträger...' lässt dann zu den Ordner der usbip-Treiber auszuwählen. Installiert nun den 'USB/IP Enumerator'.
Der Treiber kann jetzt verwendet werden. Über die Kommandozeite (cmd.exe) führen wir die usbip.exe aus und binden das entfernte USB-Gerät ein.

C:\Release>usbip -l 192.168.0.1
- 192.168.0.1
   1-2: Lexar Media, Inc. : unknown product (05dc:b051)
        :
/sys/devices/pci0000:00/0000:00:06.0/usb1/1-2
        : (Defined at Interface level) (00/00/00)
        :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)



C:\Release>usbip -a 192.168.0.1 1-2
new usb device attached to usbvbus port 1

Receive sequence:    46600



Das Gerät wird von Windows wie ein lokal angestecktes Gerät gesehen und die Treiber werden lokal installiert. Um das Gerät wieder freizugeben wird mit 'usbip.exe -d 0' das Gerät entbunden und kann andersweitig wieder verwendet werden.

Zu beachten ist, dass ein Gerät immer nur an einem PC eingebunden sein kann.