9/30(月)-10/9(水) つくば駅前で自動運転車に試乗できます☆彡(トナリエ前/エキスポセンター前)

7-61. キーマトリクスとアンチゴーストの仕組み

やること

自作キーボードに関して、「なぜ整流ダイオードが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端子の走査チェック」「ダイオードの役割」の両方が頭に入っていなかったから。分かると楽しいですね!

SNS等でお気軽にご連絡ください

※当ブログに関することは何でもご相談・ご依頼可能です(Servicesになくても)
※TwitterはFF外の場合はDMではなく返信orメンションでお願いしますm(_ _)m

情報発信しています

質問・コメントはSlackやDiscordでお気軽に

勉強会の告知はこちらで

Raspberry Pi / Arduino
この記事を書いた人

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

この記事をシェアする
Vignette & Clarity(ビネット&クラリティ)
タイトルとURLをコピーしました