KeeBee Créer son propre clavier USB à partir de zéro

Il y a quelques mois, mon projet de fabrication d'un clavier USB était terminé. Entre autres choses, j'ai terminé la conception des circuits électroniques, conçu une carte de circuit imprimé, programmé le firmware, fait une mise en page en CAO et assemblé l'appareil. Le résultat est un clavier confortable que j'utilise quotidiennement et que j'appelle affectueusement KeeBee:


KeeBee Keyboard Final

Plusieurs objectifs du projet:

  1. Auto-création du schéma.
  2. Écriture du firmware du clavier.
  3. Découvrez comment fonctionne le protocole USB.

Au travail, je développe principalement des logiciels pour les services cloud, où de nombreuses couches d'équipements réels manquent. Par conséquent, il est très agréable de se débarrasser de certaines abstractions et de descendre au niveau matériel: voici de vrais appareils électroniques que vous pouvez toucher et utiliser.

Étude et mise en page CAO


J'aime beaucoup les claviers minimalistes de style OLKB Planck et Preonic, qui, en raison de la disposition ortho-linéaire des touches, sont très compacts. J'ai également su tout de suite que je voulais utiliser les commutateurs Cherry MX Brown. Avec ces deux composants de conception à l'esprit, j'ai commencé à jouer avec les dispositions clés dans OpenSCAD . Il s'agit d'un excellent outil open source qui fonctionne plus comme un langage de programmation qu'une interface de souris WYSIWYG.

En prenant les tailles des éléments de la documentation Cherry MX, j'ai fait une disposition de la plaque supérieure , puis ajouté des commutateurs et des touches pour avoir une idée de ce à quoi ressemblerait le résultat final. La plaque supérieure est située au-dessus du PCB du clavier et sert de bon stabilisateur pour les commutateurs.

Conception de la plaque supérieure:



Après avoir ajouté les clés:





Prototypage de cartes et conception de micrologiciels


En tant que microcontrôleur principal, j'ai choisi STM32F042K6T6 . C'est environ trois dollars par puce, si vous prenez une seule pièce. Il a suffisamment de contacts pour la matrice de numérisation de 69 touches (32 contacts au total). Il fonctionne sur un processeur ARM Cortex M0 et contient des périphériques USB spéciaux pour envoyer un signal USB sans charger le processeur principal avec cette tâche. J'ai acheté une carte de développement prototype Nucleo avec cette puce avant de l'intégrer dans ma conception de PCB. Nucleo reposait très commodément sur une planche à pain et était alimenté via USB.

J'ai placé un petit circuit à quatre touches sur la planche à pain pour tester le circuit de diode que j'étudiais. Ignorant le côté USB de l'équation, la première étape a été de faire en sorte que les commutateurs Cherry allument et éteignent de manière fiable les quatre LED correspondantes lorsque les boutons ont été enfoncés.



La matrice de balayage est une telle technique que vous devez utiliser lorsque vous avez plus de commutateurs que de contacts sur le microcontrôleur.

Lorsque la matrice fonctionnait de manière satisfaisante , il était temps de travailler sur USB.

Le cycle de micrologiciel intégré est essentiellement le suivant:

  1. Scannez toutes les clés de la matrice.
  2. Faites correspondre l'emplacement des boutons avec les caractères correspondants dans la mise en page sélectionnée (QWERTY, Dvorak, etc.).
  3. Prenez le résultat de la comparaison, générez des paquets de rapport HID USB et envoyez-le au périphérique USB.
  4. Allumez la LED sur le clavier, si la touche est enfoncée, éteignez - sinon.

Depuis 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(); } } 

Le composant keyboard.SendReport transfère en fait des paquets vers l'hôte USB. J'ai fait de gros efforts pour que l'USB fonctionne correctement. Il existe de nombreuses couches non triviales dans ce protocole qui nécessitent un timing précis et une identification correcte du périphérique . À la fin, j'ai dû exécuter Wireshark pour écouter tous les paquets USB entrant dans mon ordinateur portable Linux et savoir où cela s'est perdu. Une recherche sur Internet n'a donné presque rien, la plupart des questions sont répondues à peu près comme ceci: "Probablement que votre périphérique USB est cassé, vous devez en acheter un nouveau." Si vous essayez de concevoir un périphérique USB, ces réponses ne sont pas très utiles. Je ne pouvais que me plonger dans les spécifications USB volumineuses avec beaucoup de terminologie inconnue.

Après avoir bricolé pendant un certain temps, j'ai toujours fait que le clavier à quatre touches s'identifie correctement comme USB HID (Human Interface Device) et tous les clics ont été correctement transférés sur l'ordinateur portable:



L'enregistrement en tant que fournisseur USB et l'obtention d'un identifiant officiel de l'appareil coûte cher . Si vous venez de réaliser un projet amateur, vous devez saisir l'identifiant d'un appareil similaire . Je pensais que «Gear Head» avait l'air cool, surtout depuis qu'ils sortent des claviers, alors je les ai choisis.



Circuit et PCB


Ayant reçu un firmware plus ou moins fonctionnel et un prototype fonctionnel, il est temps d'élaborer le circuit et la conception de la carte de circuit imprimé dans KiCAD et d'en faire une véritable carte de circuit imprimé. Quand je me suis assuré que le circuit pour 4 boutons fonctionne, la tâche relativement simple était de tout connecter ensemble:



Après avoir développé le circuit et installé les plots pour les composants, vous devez faire un modèle d'une véritable carte de circuit imprimé:



KiCAD peut magnifiquement rendre la future carte en 3D:





Il existe de nombreux super tutoriels KiCAD. J'ai commencé avec l'excellente série de vidéos Getting to Blinkey 4.0 de Chris Gammel, où il explique en détail toutes les étapes de la création d'un circuit de liaison LED dans KiCAD du début à la fin.

Commander des PCB et des composants


Ayant apporté la conception et la conception de la carte de circuit imprimé à un niveau satisfaisant, j'ai commencé à passer un tas de commandes:

  1. Tous les composants de la liste des matériaux : commutateurs, LED, diodes, microcontrôleurs, etc. Je commande généralement ces choses sur DigiKey .
  2. Le circuit imprimé lui-même. Beaucoup de services sont prêts à vous faire un prototype à peu de frais. J'ai une excellente expérience avec OshPark et JLCPCB . Pour ce projet, j'ai choisi JLCPCB à cause du prix pour une telle taille, et aussi parce qu'ils m'ont permis de choisir un revêtement bleu.
  3. Tous les autres détails: couvertures et autres. Pour ce projet, mon beau-frère a aidé à découper au laser les plaques supérieure et inférieure du clavier à partir de feuilles acryliques de 1/4 ”. Pour les pièces restantes, vous pouvez utiliser les services de découpe laser et d'impression 3D en ligne si vous n'avez pas accès à l'équipement.

Le jour où le colis est arrivé est le meilleur:





JLCPCB est un service très abordable. Cette conception avec livraison DHL depuis la Chine a coûté moins de 30 $, et le processus complet, du téléchargement des fichiers à l'arrivée du colis, a pris un peu plus d'une semaine.

Shurin a pris les fichiers DXF d'OpenSCAD et les a jetés dans le cutter laser:



Assemblage final


Après avoir reçu tous les détails, j'ai commencé à assembler. La première étape consiste à assembler les composants de la carte de circuit imprimé: un fer à souder pour les gros composants électroniques et une station de soudage pour le montage en surface de petits composants, comme le microcontrôleur STM32.

Le temps total d'assemblage de la carte était d'environ trois heures - la plupart consistait à souder 70 diodes et commutateurs.

J'ai ajouté un en-tête pour le débogage JTAG, à travers lequel j'ai connecté JLINK Edu mini pour le firmware du microcontrôleur à l'aide d' OpenOCD .

Ensuite, il est temps pour le test final et l'assemblage final:







Le fils a décidé que c'était un excellent train pour ses animaux:





Résumé


De l'idée initiale à l'assemblage final, le projet a duré environ trois mois. C'était un hobby extrêmement utile de faire ce que j'utilise encore tous les jours au travail.

Tous les fichiers de projet sont publiés sur GitHub , y compris les sources de firmware, les cartes de circuits imprimés, une liste de matériaux et de modèles CAO.

Merci d'avoir lu et profitez des hacks!

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


All Articles