やること
自作キーボードに関して、「なぜ整流ダイオードが80個も必要なのか?」という質問がありました(もちろん嘘)。自分でも調べていて混乱することがあったので、キーマトリクスの仕組みとアンチゴーストの仕組みを整理して説明します。
なお、これまでのメキ沼シリーズは以下のとおりです。
7-49. オリジナルキーボード作り(PCB設計編)
7-52. オリジナルキーボード作り(ファームウェア編)
7-53. オリジナルキーボード作り(はんだ付け編)
7-54. オリジナルキーボード作り(スタビライザー編)
7-55. オリジナルキーボード作り(寄り道:メンブレンの基板は利用できる?)
7-59. オリジナルキーボード作り(キーキャップ編)
7-60. 科学教室用ミニ自作キーボードの試作品
キーマトリクスとは
PCB設計編で見た通り、メカニカルキーボードの回路はこのように格子状になっています。(クリックで拡大)
80キーを個別にマイコンに繋ぐと160端子も必要になってしまいます。もちろんマイコンにはそんなに端子がありません。そこで上の例では6行15列の格子状にすることで21端子に節約することができます。この格子状配置のことをキーマトリクスと呼びます。
ところが、この節約を行うと「ゴースト」と呼ばれる困った現象が起きてしまいます。これを克服するために一つ一つのキースイッチの隣に整流用ダイオードをくっつけるわけです。
ゴーストのメカニズム
分かりやすく2行2列のキーマトリクスを考えます。電流はcolから来てrowに向かいます。キースイッチが押されたとき、どのcolとどのrowが導通したかを検出してキーが判定されます。
1つのキーを押したときは問題ありません。2つのキーを同時押したときも問題ありません。ところが次のように「0」「1」「2」の3つのキーを同時押ししたときに問題が起きます。
導通チェックはcol端子を走査する形で行われます。(高速スキャン)
まずcol0のチェックタイム。row0とrow1で検出したため、「0」と「2」のキーが押されたと判定されます。次にcol1のチェックタイム。row0とrow1で検出したため、「1」と「3」のキーが押されたと判定されます。よってこれらを総合して0,1,2,3のキーが押されたと判定されます。しかし実際には0,1,2のキーしか押していません。このようなメカニズムで、押していないキーが検出される現象を「ゴースト」と呼びます。
アンチゴーストの仕組み
そこで「0」キーの後ろに整流用ダイオードを追加します。
先ほどと同様に「0」「1」「2」の3つのキーを同時押します。
col0のチェックタイムは先程と同じです。一方、col1のチェックタイムではrow0だけが検出されました。これらを総合すると0,1,2のキーが押されたと正しく判定されます。このように整流ダイオードを追加して意図しない導通を防ぐことを「アンチゴースト(アンチゴースト機能)」と呼びます。
全てのキーの組み合わせでアンチゴーストするにはダイオードが80個必要ということなんですね。どうしてもダイオードを節約したければ、「まあここは絶対に同時押ししないだろうな」という組み合わせを捨てる手はあります。でも1個1~2円だし全部付けとくか、みたいな。
動作確認
ダイオードがない場合とある場合で動作を確認してみました。理論通りですね!
おわりに
ネットで調べても微妙に分からなかった原因は、「col端子の走査チェック」「ダイオードの役割」の両方が頭に入っていなかったから。分かると楽しいですね!