2/28(金) 大岡山のカフェ「ToiToiToi」で小規模なトークイベントを開催します(大学生/院生/若手エンジニア向け)☆彡
Raspberry Pi / Arduino

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

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

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

タイトルとURLをコピーしました