KeeBee Membuat keyboard USB Anda sendiri dari awal

Beberapa bulan yang lalu, proyek saya untuk membuat keyboard USB selesai. Antara lain, saya menyelesaikan desain sirkuit elektronik, merancang papan sirkuit cetak, memprogram firmware, membuat tata letak dalam CAD dan memasang perangkat. Hasilnya adalah keyboard yang nyaman yang saya gunakan setiap hari dan memanggil KeeBee dengan penuh kasih:


Final Keyboard KeeBee

Beberapa tujuan proyek:

  1. Penciptaan skema ini sendiri.
  2. Menulis firmware keyboard.
  3. Pelajari cara kerja protokol USB.

Di tempat kerja, saya terutama mengembangkan perangkat lunak untuk layanan cloud, di mana banyak lapisan peralatan nyata hilang. Oleh karena itu, sangat bagus untuk menghilangkan beberapa abstraksi dan turun ke tingkat perangkat keras: berikut adalah perangkat elektronik nyata yang dapat Anda sentuh dan gunakan.

Belajar dan tata letak CAD


Saya sangat suka OLKB Planck minimalis dan keyboard gaya Preonic, yang, karena pengaturan orto-linear dari tombol, sangat kompak. Saya juga langsung tahu bahwa saya ingin menggunakan sakelar Cherry MX Brown. Dengan mempertimbangkan dua komponen desain ini, saya mulai bermain dengan layout kunci di OpenSCAD . Ini adalah alat open source yang hebat yang bekerja lebih seperti bahasa pemrograman daripada antarmuka mouse WYSIWYG.

Mengambil ukuran elemen dari dokumentasi Cherry MX, saya membuat tata letak pelat atas , lalu menambahkan sakelar dan tombol untuk mendapatkan gambaran seperti apa hasil akhirnya. Pelat atas terletak di atas papan ketik PCB dan berfungsi sebagai penstabil yang baik untuk sakelar.

Desain pelat atas:



Setelah menambahkan kunci:





Pembuatan prototipe papan dan firmware


Sebagai mikrokontroler utama, saya memilih STM32F042K6T6 . Ini sekitar tiga dolar per keping, jika Anda ambil dari satu potong. Dia memiliki cukup kontak untuk matriks pemindaian 69 kunci (total 32 kontak). Ini berjalan pada prosesor ARM Cortex M0 dan berisi periferal USB khusus untuk mengirim sinyal USB tanpa memuat prosesor utama dengan tugas ini. Saya membeli papan dev prototipe Nucleo dengan chip ini sebelum mengintegrasikannya ke dalam desain PCB saya. Nucleo dengan sangat nyaman berbaring di atas papan tempat memotong roti dan ditenagai melalui USB.

Saya menempatkan sirkuit empat kunci kecil di papan tempat memotong roti untuk menguji sirkuit dioda yang saya pelajari. Mengabaikan sisi USB dari persamaan, langkah pertama adalah membuat sakelar Cherry andal menghidupkan dan mematikan empat LED yang sesuai ketika tombol-tombol ditekan.



Matriks pemindaian adalah suatu teknik yang perlu Anda gunakan ketika Anda memiliki lebih banyak sakelar daripada kontak pada mikrokontroler.

Ketika matriks bekerja dengan memuaskan , tiba saatnya untuk bekerja pada USB.

Siklus firmware bawaan pada dasarnya adalah ini:

  1. Pindai semua kunci dalam matriks.
  2. Cocokkan tata letak tombol dengan karakter yang sesuai dalam tata letak yang dipilih (QWERTY, Dvorak, dll.).
  3. Ambil hasil perbandingan, hasilkan paket Laporan HID USB dan kirimkan ke perangkat periferal USB.
  4. Nyalakan LED pada keyboard, jika tombol ditekan, matikan - jika tidak.

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

Komponen keyboard.SendReport sebenarnya mentransfer paket ke host USB. Saya berusaha keras agar USB berfungsi dengan baik. Ada banyak lapisan non-sepele dalam protokol ini yang membutuhkan waktu yang akurat dan identifikasi perangkat yang tepat . Pada akhirnya, saya harus menjalankan Wireshark untuk mendengarkan semua paket USB yang masuk ke laptop Linux saya dan mencari tahu di mana itu hilang. Pencarian di Internet tidak menghasilkan apa-apa, sebagian besar pertanyaan dijawab seperti ini: "Kemungkinan perangkat USB Anda rusak, Anda perlu membeli yang baru." Jika Anda benar-benar mencoba merancang perangkat USB, jawaban ini tidak terlalu membantu. Saya hanya bisa terjun ke spesifikasi USB yang banyak dengan banyak terminologi yang tidak dikenal.

Setelah bermain-main sebentar, saya masih membuat keyboard dengan empat tombol dengan benar mengidentifikasi dirinya sebagai USB HID (Perangkat Antarmuka Manusia) dan semua mesin press dipindahkan dengan benar ke laptop:



Mendaftar sebagai vendor USB dan mendapatkan id perangkat resmi itu mahal . Jika Anda hanya memiliki proyek amatir, maka Anda harus mengambil pengidentifikasi dari beberapa perangkat serupa . Saya pikir "Kepala Gigi" terdengar keren, terutama karena mereka melepaskan keyboard, jadi saya memilih mereka.



Sirkuit dan PCB


Setelah menerima kurang lebih firmware yang berfungsi dan prototipe yang berfungsi, saatnya untuk menggambar sirkuit dan desain papan sirkuit di KiCAD dan membuat papan sirkuit nyata. Ketika saya memastikan bahwa rangkaian untuk 4 tombol berfungsi, tugas yang relatif sederhana adalah menghubungkan semuanya bersama-sama:



Setelah mengembangkan sirkuit dan memasang bantalan untuk komponen, Anda perlu membuat model papan sirkuit cetak sungguhan:



KiCAD dapat dengan indah membuat papan masa depan dalam 3D:





Ada banyak tutorial KiCAD yang hebat. Saya mulai dengan seri video Getting to Blinkey 4.0 yang sangat baik dari Chris Gammel, di mana dia menjelaskan secara terperinci semua langkah yang terlibat dalam membuat sirkuit linker LED di KiCAD dari awal hingga selesai.

Memesan PCB dan komponen


Setelah membawa desain dan desain papan sirkuit ke tingkat yang memuaskan, saya mulai menempatkan banyak pesanan:

  1. Semua komponen dari daftar bahan : sakelar, LED, dioda, mikrokontroler, dll. Saya biasanya memesannya di DigiKey .
  2. Papan sirkuit itu sendiri. Cukup banyak layanan yang siap murah membuat Anda prototipe. Saya memiliki pengalaman luar biasa dengan OshPark dan JLCPCB . Untuk proyek ini, saya memilih JLCPCB karena harga untuk ukuran seperti itu, dan juga karena mereka memungkinkan saya untuk memilih lapisan biru.
  3. Semua detail lainnya: sampul dan barang-barang. Untuk proyek ini, ipar saya membantu memotong laser pelat keyboard atas dan bawah dari 1/4 "lembaran akrilik. Untuk komponen lainnya, Anda dapat menggunakan layanan pemotongan laser dan 3D online jika Anda tidak memiliki akses ke peralatan.

Hari paket tiba adalah yang terbaik:





JLCPCB adalah layanan yang sangat terjangkau. Desain dengan pengiriman DHL dari China ini harganya kurang dari $ 30, dan seluruh proses mulai dari mengunduh file hingga kedatangan paket membutuhkan waktu lebih dari seminggu.

Shurin mengambil file DXF dari OpenSCAD dan melemparkannya ke dalam pemotong laser:



Perakitan akhir


Setelah menerima semua detail, saya mulai berkumpul. Langkah pertama adalah merakit komponen PCB: besi solder untuk komponen elektronik besar dan stasiun solder untuk pemasangan permukaan komponen kecil seperti mikrokontroler STM32.

Total waktu perakitan papan adalah sekitar tiga jam - sebagian besar adalah menyolder 70 dioda dan sakelar.

Saya menambahkan header untuk debug JTAG, di mana saya menghubungkan JLINK Edu mini untuk firmware mikrokontroler menggunakan OpenOCD .

Maka saatnya untuk pengujian akhir dan perakitan akhir:







Putranya memutuskan bahwa ini adalah kereta yang hebat untuk hewan-hewannya:





Ringkasan


Dari ide awal hingga perakitan akhir, proyek ini memakan waktu sekitar tiga bulan. Itu sangat berguna sebagai hobi untuk melakukan apa yang masih saya gunakan setiap hari di tempat kerja.

Semua file proyek diterbitkan di GitHub , termasuk sumber firmware, papan sirkuit, daftar bahan dan model CAD.

Terima kasih telah membaca dan menikmati retasan!

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


All Articles