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 KeeBeeBeberapa tujuan proyek:
- Penciptaan skema ini sendiri.
- Menulis firmware keyboard.
- 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:
- Pindai semua kunci dalam matriks.
- Cocokkan tata letak tombol dengan karakter yang sesuai dalam tata letak yang dipilih (QWERTY, Dvorak, dll.).
- Ambil hasil perbandingan, hasilkan paket Laporan HID USB dan kirimkan ke perangkat periferal USB.
- 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:
- Semua komponen dari daftar bahan : sakelar, LED, dioda, mikrokontroler, dll. Saya biasanya memesannya di DigiKey .
- 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.
- 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!