KeeBee Erstellen Sie Ihre eigene USB-Tastatur von Grund auf neu

Vor einigen Monaten wurde mein Projekt zur Herstellung einer USB-Tastatur abgeschlossen. Unter anderem habe ich das Design elektronischer Schaltungen abgeschlossen, eine Leiterplatte entworfen, die Firmware programmiert, ein Layout in CAD erstellt und das Gerät zusammengebaut. Das Ergebnis ist eine komfortable Tastatur, die ich täglich benutze und liebevoll KeeBee nenne:


KeeBee Keyboard Finale

Mehrere Ziele des Projekts:

  1. Selbsterstellung des Schemas.
  2. Tastatur-Firmware schreiben.
  3. Erfahren Sie, wie das USB-Protokoll funktioniert.

Bei der Arbeit entwickle ich hauptsächlich Software für Cloud-Dienste, bei denen viele Schichten realer Geräte fehlen. Daher ist es sehr schön, einige Abstraktionen loszuwerden und auf die Hardware-Ebene zu gehen: Hier sind echte elektronische Geräte, die Sie berühren und verwenden können.

Studien- und CAD-Layout


Ich mag die minimalistischen Tastaturen im OLKB- Planck- und Preonic-Stil, die aufgrund der ortho-linearen Anordnung der Tasten sehr kompakt sind. Ich wusste auch sofort, dass ich die Cherry MX Brown-Schalter verwenden wollte. Mit diesen beiden Designkomponenten begann ich in OpenSCAD mit den wichtigsten Layouts zu spielen. Dies ist ein großartiges Open Source-Tool, das eher als Programmiersprache als als WYSIWYG-Mausschnittstelle funktioniert.

Ich nahm die Abmessungen der Elemente aus der Cherry MX-Dokumentation, erstellte ein Layout für die obere Platte und fügte dann Schalter und Schlüssel hinzu, um eine Vorstellung davon zu bekommen, wie das Endergebnis aussehen würde. Die obere Platte befindet sich über der Tastaturplatine und dient als guter Stabilisator für die Schalter.

Design der oberen Platte:



Nach dem Hinzufügen der Schlüssel:





Board Prototyping und Firmware Design


Als Hauptmikrocontroller habe ich STM32F042K6T6 gewählt . Dies sind ungefähr drei Dollar pro Chip, wenn Sie von einem Stück nehmen. Er hat genug Kontakte für die Scan-Matrix von 69 Tasten (insgesamt 32 Kontakte). Es läuft auf einem ARM Cortex M0-Prozessor und enthält spezielle USB-Peripheriegeräte zum Senden eines USB-Signals, ohne den Hauptprozessor mit dieser Aufgabe zu laden. Ich habe mit diesem Chip ein Nucleo-Prototyp-Entwicklungsboard mit diesem Chip gekauft, bevor ich es in mein PCB-Design integriert habe. Nucleo lag sehr bequem auf dem Steckbrett und wurde über USB mit Strom versorgt.

Ich legte eine kleine Vier-Tasten-Schaltung auf das Steckbrett, um die Diodenschaltung zu testen, die ich studierte. Der erste Schritt bestand darin, die USB-Seite der Gleichung zu ignorieren und die Cherry-Schalter beim Drücken der Tasten zuverlässig die vier entsprechenden LEDs ein- und auszuschalten.



Die Scan-Matrix ist eine solche Technik, die Sie verwenden müssen, wenn Sie mehr Schalter als Kontakte am Mikrocontroller haben.

Wenn die Matrix zufriedenstellend funktionierte , war es Zeit, an USB zu arbeiten.

Der eingebaute Firmware-Zyklus ist im Wesentlichen folgender:

  1. Scannen Sie alle Schlüssel in der Matrix.
  2. Passen Sie das Tastenlayout an die entsprechenden Zeichen im ausgewählten Layout an (QWERTY, Dvorak usw.).
  3. Nehmen Sie das Ergebnis des Vergleichs, generieren Sie USB-HID-Berichtspakete und senden Sie es an das USB-Peripheriegerät.
  4. Schalten Sie die LED auf der Tastatur ein. Wenn die Taste gedrückt wird, schalten Sie sie aus - wenn nicht.

Von main.cc :

static void scan_and_update() { scan_matrix.Scan(key_scans, row_count, column_count); keyboard.SendReport( key_pipeline.MapKeyScans(key_scans, key_count)); update_key_press_status(); } int main() { Init(); status_led.SetOk(true); while (true) { scan_and_update(); } } 

Die keyboard.SendReport Komponente überträgt tatsächlich Pakete an den USB-Host. Ich habe mich sehr bemüht, USB zum Laufen zu bringen. Es gibt viele nicht triviale Schichten in diesem Protokoll, die ein genaues Timing und eine ordnungsgemäße Identifizierung des Geräts erfordern . Am Ende musste ich Wireshark ausführen, um alle USB-Pakete in meinem Linux-Laptop abzuhören und herauszufinden, wo diese verloren gingen. Eine Suche im Internet ergab fast nichts, die meisten Fragen werden ungefähr so ​​beantwortet: "Wahrscheinlich ist Ihr USB-Gerät defekt, Sie müssen ein neues kaufen." Wenn Sie tatsächlich versuchen, ein USB-Gerät zu entwerfen , sind diese Antworten nicht sehr hilfreich. Ich konnte mich nur mit einer ungewohnten Terminologie in die umfangreichen USB-Spezifikationen stürzen.

Nachdem ich eine Weile gebastelt hatte, ließ ich die Tastatur mit vier Tasten immer noch korrekt als USB HID (Human Interface Device) identifizieren und alle Klicks wurden korrekt auf den Laptop übertragen:



Die Registrierung als USB-Anbieter und das Abrufen einer offiziellen Geräte-ID ist teuer . Wenn Sie nur ein Amateurprojekt haben, müssen Sie die Kennung eines ähnlichen Geräts abrufen . Ich fand, dass „Gear Head“ cool klingt, vor allem, weil sie Tastaturen veröffentlichen, also habe ich sie ausgewählt.



Schaltung und Leiterplatte


Nachdem wir mehr oder weniger funktionierende Firmware und einen funktionierenden Prototyp erhalten haben, ist es Zeit, die Schaltung und das Design der Leiterplatte in KiCAD zu erstellen und eine echte Leiterplatte herzustellen. Als ich sicherstellte, dass die Schaltung für 4 Tasten funktioniert, bestand die relativ einfache Aufgabe darin, alles miteinander zu verbinden:



Nachdem Sie die Schaltung entwickelt und die Pads für die Komponenten installiert haben, müssen Sie ein Modell einer echten Leiterplatte erstellen:



KiCAD kann das zukünftige Board wunderschön in 3D rendern:





Es gibt viele großartige KiCAD-Tutorials. Ich begann mit der hervorragenden Videoserie Getting to Blinkey 4.0 von Chris Gammel, in der er alle Schritte zum Erstellen einer LED-Linker-Schaltung in KiCAD von Anfang bis Ende ausführlich erklärt.

Leiterplatte und Komponenten bestellen


Nachdem ich das Design und das Design der Leiterplatte auf ein zufriedenstellendes Niveau gebracht hatte, begann ich eine Reihe von Bestellungen aufzugeben:

  1. Alle Komponenten aus der Materialliste : Schalter, LEDs, Dioden, Mikrocontroller usw. Normalerweise bestelle ich diese Dinge bei DigiKey .
  2. Die Leiterplatte selbst. Viele Services sind bereit, Sie kostengünstig zu einem Prototyp zu machen. Ich habe ausgezeichnete Erfahrungen mit OshPark und JLCPCB . Für dieses Projekt habe ich mich wegen des Preises für eine solche Größe für JLCPCB entschieden und auch, weil ich eine blaue Beschichtung wählen konnte.
  3. Alle anderen Details: Cover und so. Bei diesem Projekt half mein Schwager beim Laserschneiden der oberen und unteren Tastaturplatten aus 1/4 ”Acrylplatten. Für die restlichen Teile können Sie die Online-Dienste für Laserschneiden und 3D-Druck nutzen, wenn Sie keinen Zugriff auf die Geräte haben.

Der Tag, an dem das Paket ankam, ist der beste:





JLCPCB ist ein sehr erschwinglicher Dienst. Dieses Design mit DHL-Lieferung aus China kostete weniger als 30 US-Dollar, und der gesamte Vorgang vom Herunterladen der Dateien bis zum Eintreffen des Pakets dauerte etwas mehr als eine Woche.

Shurin nahm die DXF-Dateien von OpenSCAD und warf sie in den Laserschneider:



Endmontage


Nachdem ich alle Details erhalten hatte, begann ich mit dem Zusammenbau. Der erste Schritt besteht darin, die Komponenten der Leiterplatte zusammenzubauen: einen Lötkolben für große elektronische Komponenten und eine Lötstation für die Oberflächenmontage kleiner Komponenten wie des STM32-Mikrocontrollers.

Die gesamte Montagezeit der Platine betrug ungefähr drei Stunden - das meiste davon löte 70 Dioden und Schalter.

Ich habe einen Header für das JTAG-Debugging hinzugefügt, über den ich JLINK Edu mini für die Firmware des Mikrocontrollers mit OpenOCD verbunden habe .

Dann ist es Zeit für die Endprüfung und Endmontage:







Der Sohn entschied, dass dies ein großartiger Zug für seine Tiere ist:





Zusammenfassung


Von der ersten Idee bis zur Endmontage dauerte das Projekt etwa drei Monate. Als Hobby war es äußerst nützlich, das zu tun, was ich jeden Tag bei der Arbeit benutze.

Alle Projektdateien werden auf GitHub veröffentlicht , einschließlich Firmware-Quellen, Leiterplatten, einer Liste von Materialien und CAD-Modellen.

Danke fürs Lesen und viel Spaß beim Hacken!

Source: https://habr.com/ru/post/de441032/


All Articles