KeeBee Criando seu próprio teclado USB a partir do zero

Alguns meses atrás, meu projeto para fabricar um teclado USB foi concluído. Entre outras coisas, completei o design de circuitos eletrônicos, projetei uma placa de circuito impresso, programei o firmware, fiz um layout em CAD e montei o dispositivo. O resultado é um teclado confortável que eu uso diariamente e carinhosamente chamo de KeeBee:


KeeBee Keyboard Final

Vários objetivos do projeto:

  1. Auto-criação do esquema.
  2. Escrevendo o firmware do teclado.
  3. Aprenda como o protocolo USB funciona.

No trabalho, desenvolvo principalmente software para serviços em nuvem, onde muitas camadas de equipamentos reais estão ausentes. Portanto, é muito bom se livrar de algumas abstrações e descer para o nível de hardware: aqui estão dispositivos eletrônicos reais que você pode tocar e usar.

Layout de estudo e CAD


Gosto muito dos teclados minimalistas do estilo OLKB Planck e Preonic, que, devido à disposição orto-linear das teclas, são muito compactos. Também soube imediatamente que queria usar os interruptores Cherry MX Brown. Com esses dois componentes de design em mente, comecei a brincar com os principais layouts do OpenSCAD . Essa é uma ótima ferramenta de código aberto que funciona mais como uma linguagem de programação do que como uma interface de mouse WYSIWYG.

Tomando o tamanho dos elementos da documentação do Cherry MX, fiz um layout da placa superior e , em seguida, adicionei interruptores e chaves para ter uma idéia de como seria o resultado final. A placa superior está localizada acima da placa de circuito impresso do teclado e serve como um bom estabilizador para os comutadores.

Design da placa superior:



Depois de adicionar as chaves:





Prototipagem de placa e design de firmware


Como microcontrolador principal, eu escolhi o STM32F042K6T6 . Isso significa cerca de três dólares por chip, se você retirar de uma peça. Ele tem contatos suficientes para a matriz de varredura de 69 teclas (32 contatos no total). Ele roda em um processador ARM Cortex M0 e contém periféricos USB especiais para enviar um sinal USB sem carregar o processador principal com esta tarefa. Comprei uma placa de desenvolvimento de protótipo Nucleo com esse chip antes de integrá-la ao meu design de PCB. Núcleo muito convenientemente deitado em uma placa de ensaio e alimentado via USB.

Coloquei um pequeno circuito de quatro teclas na placa de ensaio para testar o circuito de diodos que estava estudando. Ignorando o lado USB da equação, o primeiro passo foi fazer com que os interruptores Cherry ligassem e desligassem com segurança os quatro LEDs correspondentes quando os botões foram pressionados.



A matriz de varredura é uma técnica que você precisa usar quando tiver mais comutadores do que contatos no microcontrolador.

Quando a matriz funcionou satisfatoriamente , estava na hora de trabalhar com USB.

O ciclo do firmware embutido é essencialmente este:

  1. Digitalize todas as chaves na matriz.
  2. Combine o layout do botão com os caracteres correspondentes no layout selecionado (QWERTY, Dvorak, etc.).
  3. Pegue o resultado da comparação, gere pacotes de relatório USB HID e envie-o para o dispositivo periférico USB.
  4. Ligue o LED no teclado, se a tecla estiver pressionada, desligue - se não estiver.

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

O componente keyboard.SendReport realmente transfere pacotes para o host USB. Eu tentei muito fazer o USB funcionar corretamente. Existem muitas camadas não triviais neste protocolo que requerem tempo preciso e identificação adequada do dispositivo . No final, tive que executar o Wireshark para ouvir todos os pacotes USB que chegavam ao meu laptop Linux e descobrir onde isso se perdia. Uma pesquisa na Internet produziu quase nada, a maioria das perguntas é respondida aproximadamente assim: "Provavelmente o seu dispositivo USB está quebrado, é necessário comprar um novo". Se você está realmente tentando projetar um dispositivo USB, essas respostas não são muito úteis. Eu só podia mergulhar nas especificações USB volumosas com muita terminologia desconhecida.

Tendo mexido um pouco, ainda fiz o teclado com quatro teclas se identificar corretamente como um USB HID (Dispositivo de Interface Humana) e todas as impressoras foram transferidas corretamente para o laptop:



Registrar-se como fornecedor de USB e obter uma identificação oficial do dispositivo é caro . Se você apenas tem um projeto amador, precisa pegar o identificador de algum dispositivo semelhante . Eu pensei que "Gear Head" parece legal, especialmente porque eles lançam teclados, então eu os escolhi.



Circuito e PCB


Tendo recebido mais ou menos firmware de trabalho e um protótipo de trabalho, é hora de elaborar o circuito e o design da placa de circuito no KiCAD e criar uma placa de circuito real. Quando garanti que o circuito para 4 botões funcionasse, a tarefa relativamente simples era conectar tudo:



Depois de desenvolver o circuito e instalar os blocos para os componentes, você precisa fazer um modelo de uma placa de circuito impresso real:



O KiCAD pode renderizar lindamente o futuro quadro em 3D:





Existem muitos tutoriais excelentes sobre o KiCAD. Comecei com a excelente série de vídeos Getting to Blinkey 4.0 de Chris Gammel, onde ele explica em detalhes todas as etapas envolvidas na criação de um circuito de vinculador de LED no KiCAD do início ao fim.

Peça PCB e componentes


Tendo levado o design e o design da placa de circuito a um nível satisfatório, comecei a fazer vários pedidos:

  1. Todos os componentes da lista de materiais : interruptores, LEDs, diodos, microcontroladores, etc. Normalmente, solicito essas coisas no DigiKey .
  2. A própria placa de circuito. Muitos serviços estão prontos para fazer de você um protótipo barato. Tenho excelente experiência com OshPark e JLCPCB . Para este projeto, escolhi o JLCPCB por causa do preço desse tamanho e também porque eles me permitiram escolher um revestimento azul.
  3. Todos os outros detalhes: capas e outras coisas. Para este projeto, meu cunhado ajudou a cortar a laser as placas superior e inferior do teclado a partir de folhas de acrílico de 1/4 ”. Para as peças restantes, você pode usar os serviços on-line de corte a laser e impressão 3D, se não tiver acesso ao equipamento.

O dia em que o pacote chegou é o melhor:





JLCPCB é um serviço muito acessível. Esse design com entrega da DHL na China custou menos de US $ 30, e todo o processo, desde o download dos arquivos até a chegada do pacote, levou pouco mais de uma semana.

Shurin pegou os arquivos DXF do OpenSCAD e os jogou no cortador a laser:



Montagem final


Tendo recebido todos os detalhes, comecei a montar. O primeiro passo é montar os componentes da placa de circuito: um ferro de solda para grandes componentes eletrônicos e uma estação de solda para montagem em superfície de pequenos componentes, como o microcontrolador STM32.

O tempo total de montagem da placa foi de cerca de três horas - a maioria soldava 70 diodos e interruptores.

Adicionei um cabeçalho para depuração JTAG, através do qual conectei o JLINK Edu mini para firmware de microcontrolador usando o OpenOCD .

Então é hora do teste final e da montagem final:







O filho decidiu que este é um ótimo trem para seus animais:





Sumário


Desde a ideia inicial até a montagem final, o projeto levou cerca de três meses. Foi extremamente útil como hobby fazer o que ainda uso todos os dias no trabalho.

Todos os arquivos do projeto são publicados no GitHub , incluindo fontes de firmware, placas de circuito, uma lista de materiais e modelos CAD.

Obrigado pela leitura e aproveite os hacks!

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


All Articles