KeeBee Hacer su propio teclado USB desde cero

Hace unos meses, mi proyecto para fabricar un teclado USB se completó. Entre otras cosas, completé el diseño de circuitos electrónicos, diseñé una placa de circuito impreso, programé el firmware, hice un diseño en CAD y ensamblé el dispositivo. El resultado es un teclado cómodo que uso a diario y cariñosamente llamo KeeBee:


KeeBee Keyboard Final

Varios objetivos del proyecto:

  1. Autocreación del esquema.
  2. Escribir el firmware del teclado.
  3. Aprenda cómo funciona el protocolo USB.

En el trabajo, desarrollo principalmente software para servicios en la nube, donde faltan muchas capas de equipos reales. Por lo tanto, es muy agradable deshacerse de algunas abstracciones y bajar al nivel de hardware: aquí hay dispositivos electrónicos reales que puede tocar y usar.

Estudio y diseño CAD


Realmente me gustan los teclados minimalistas de estilo OLKB Planck y Preonic, que, debido a la disposición orto-lineal de las teclas, son muy compactos. También supe de inmediato que quería usar los interruptores Cherry MX Brown. Con estos dos componentes de diseño en mente, comencé a jugar con diseños clave en OpenSCAD . Esta es una gran herramienta de código abierto que funciona más como un lenguaje de programación que una interfaz de mouse WYSIWYG.

Tomando las dimensiones de los elementos de la documentación de Cherry MX, hice un diseño para la placa superior , luego agregué interruptores y teclas para tener una idea de cómo sería el resultado final. La placa superior se encuentra sobre la PCB del teclado y sirve como un buen estabilizador para los interruptores.

Diseño de placa superior:



Después de agregar las claves:





Diseño de prototipos y firmware de placa


Como microcontrolador principal, elegí STM32F042K6T6 . Esto es aproximadamente tres dólares por chip, si toma de una pieza. Tiene suficientes contactos para la matriz de escaneo de 69 teclas (32 contactos en total). Se ejecuta en un procesador ARM Cortex M0 y contiene periféricos USB especiales para enviar una señal USB sin cargar el procesador principal con esta tarea. Compré una placa de desarrollo prototipo de Nucleo con este chip antes de integrarlo en mi diseño de PCB. Nucleo se acuesta muy convenientemente en una placa de pruebas y se alimenta a través de USB.

Coloqué un pequeño circuito de cuatro teclas en la placa para probar el circuito de diodos que estaba estudiando. Ignorando el lado USB de la ecuación, el primer paso fue hacer que los interruptores Cherry enciendan y apaguen de manera confiable los cuatro LED correspondientes cuando se presionaron los botones.



La matriz de escaneo es una técnica que necesita usar cuando tiene más interruptores que contactos en el microcontrolador.

Cuando la matriz funcionó satisfactoriamente , llegó el momento de trabajar en USB.

El ciclo de firmware incorporado es esencialmente este:

  1. Escanee todas las claves en la matriz.
  2. Haga coincidir el diseño del botón con los caracteres correspondientes en el diseño seleccionado (QWERTY, Dvorak, etc.).
  3. Tome el resultado de la comparación, genere paquetes de informes HID USB y envíelos al dispositivo periférico USB.
  4. Encienda el LED en el teclado, si se presiona la tecla, apague, si no.

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

El componente keyboard.SendReport realmente transfiere paquetes al host USB. Intenté que el USB funcionara correctamente. Hay muchas capas no triviales en este protocolo que requieren una sincronización precisa y una identificación adecuada del dispositivo . Al final, tuve que ejecutar Wireshark para escuchar todos los paquetes USB que entraban en mi computadora portátil Linux y averiguar dónde se perdieron. Una búsqueda en Internet no arrojó casi nada, la mayoría de las preguntas se responden aproximadamente de la siguiente manera: "Probablemente su dispositivo USB se haya roto, debe comprar uno nuevo". Si realmente está tratando de diseñar un dispositivo USB, estas respuestas no son muy útiles. Solo pude sumergirme en las voluminosas especificaciones USB con mucha terminología desconocida.

Después de jugar un rato, todavía hice que el teclado con cuatro teclas se identificara correctamente como un USB HID (Dispositivo de interfaz humana) y todos los clics se transfirieron correctamente a la computadora portátil:



Registrarse como proveedor de USB y obtener una identificación oficial del dispositivo es costoso . Si solo tiene un proyecto de aficionado, debe tomar el identificador de algún dispositivo similar . Pensé que "Gear Head" suena genial, especialmente porque lanzan teclados, así que los elegí.



Circuito y PCB


Habiendo recibido más o menos firmware y un prototipo en funcionamiento, es hora de trazar el circuito y el diseño de la placa de circuito en KiCAD y hacer una placa de circuito real. Cuando me aseguré de que el circuito para 4 botones funciona, la tarea relativamente simple fue conectar todo:



Después de desarrollar el circuito e instalar las almohadillas para los componentes, debe hacer un modelo de una placa de circuito impreso real:



KiCAD puede renderizar maravillosamente el futuro tablero en 3D:





Hay muchos excelentes tutoriales de KiCAD. Comencé con la excelente serie de videos Getting to Blinkey 4.0 de Chris Gammel, donde explica en detalle todos los pasos involucrados en la creación de un circuito enlazador de LED en KiCAD de principio a fin.

Solicitar PCB y componentes


Habiendo llevado el diseño y la placa de circuito a un nivel satisfactorio, comencé a hacer un montón de pedidos:

  1. Todos los componentes de la lista de materiales : interruptores, LED, diodos, microcontroladores, etc. Por lo general, solicito estas cosas en DigiKey .
  2. La placa de circuito en sí. Muchos servicios están listos para hacerte un prototipo a bajo costo. Tengo una excelente experiencia con OshPark y JLCPCB . Para este proyecto, elegí JLCPCB por el precio de tal tamaño, y también porque me permitieron elegir un revestimiento azul.
  3. Todos los demás detalles: portadas y demás. Para este proyecto, mi cuñado ayudó a cortar con láser las placas superior e inferior del teclado de hojas acrílicas de 1/4 ”. Para las partes restantes, puede utilizar los servicios en línea de corte por láser e impresión 3D si no tiene acceso al equipo.

El día que llegó el paquete es el mejor:





JLCPCB es un servicio muy asequible. Este diseño con entrega de DHL desde China costó menos de $ 30, y todo el proceso desde la descarga de archivos hasta la llegada del paquete tomó un poco más de una semana.

Shurin tomó los archivos DXF de OpenSCAD y los arrojó al cortador láser:



Montaje final


Habiendo recibido todos los detalles, comencé a armar. El primer paso es ensamblar los componentes de la placa de circuito: un soldador para componentes electrónicos grandes y una estación de soldadura para el montaje en superficie de componentes pequeños, como el microcontrolador STM32.

El tiempo total de ensamblaje de la placa fue de aproximadamente tres horas; la mayor parte soldaba 70 diodos e interruptores.

Agregué un encabezado para la depuración de JTAG, a través del cual conecté JLINK Edu mini para el firmware del microcontrolador usando OpenOCD .

Entonces es hora de la prueba final y el ensamblaje final:







El hijo decidió que este es un gran tren para sus animales:





Resumen


Desde la idea inicial hasta el ensamblaje final, el proyecto tomó cerca de tres meses. Fue un pasatiempo extremadamente útil para hacer lo que todavía uso todos los días en el trabajo.

Todos los archivos de proyecto se publican en GitHub , incluidas las fuentes de firmware, placas de circuitos, una lista de materiales y modelos CAD.

Gracias por leer y disfrutar de los hacks!

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


All Articles