[自キ]磁気キーボードを作りたい。4週目

進捗ダイジェスト4週目

磁気キーボード話

 雑談です。
 磁気キーボードを作ろうとちょこちょこ遊んでいるわけですが、作り手目線で素晴らしいキースイッチとはなんでしょうね。いくつか挙げてみます。

  • 磁力が強い→逆2乗則より強いほうがsnがよさそうです。とはいえホールセンサの感度次第なので、強いほうが良いというより一定以上強いほうがいいという感じですかね。私はその一定を知りません。
  • 磁石が近い→逆二乗則より離れるとどんどん減衰していきます。離れるごとに、隣のキーとのアイソレーションが相対的に悪くなる(実害はほぼほぼないレベルだが)。
  • ショートストローク→逆二乗則より保証精度は底打ちに近いほど高くなります。ストロークが長いほど距離が離れますから、最高精度は同じでもストロークが短いほど最低精度が良くなります。
  • 軸ブレが少ない→作り手はスイッチの軸ブレを考慮せず精度を謳うものですが、それでも軸ブレが少ないほど実際の精度が良くなります。

 そんな製品が確かありましたね。ZENAIMさん、シンプルに正しいものを作っておられる。ただユーザー目線だと入手性(高価、スイッチ単品で買えない)やキーキャップの面で不利ではあります。スイッチとキーキャップの販売待ってます。

 その他でも、ユーザー目線で考えると真逆のことも多く、難しいものです。
 市販の磁気スイッチを見ると底が塞がる(→磁石が遠い)方向に進んでいます。打鍵音や底打ち精度のためだそうですが、いい面だけではないということです。

 またワッシャーのようなものをキー底に挿入するショートストロークMODも流行り、使用できる部品情報や、専用部品として販売されたりもしていますね。いろいろユーザーが開拓することは素晴らしいことですが、これはスイッチからの距離が離れる方向に行きますからリリースポイントの精度は悪化します。磁石との距離が遠くならないように天面側に加工を施す方向にするとプレスポイントの精度が向上しよりよくなります。構造的に難しそうですが、そういうmodもなんかできないかなあと考えたりなどします。
 zenaimやmod等ありますが、ショートストロークはそもそも強いのでしょうかと私は疑問に思うところも。ラピトリってストロークを無視して入力する機能なわけで、ストロークという要素とは完全に独立です。
 言い換えれば連打が早くても抜けないための機能なので音ゲーとかだと強そうです。
 インターフェースとしてショートストロークが使用感が良いというのは個人の好みですからどうぞであります。

 その点でいうと私はショートストロークは好みではありません。私の打鍵の仕方として、非入力時にもキートップに指がついていたいのです。なので、打鍵の瞬間のみ指が触れるノパソ等のようなキーボードは苦手です。なのでキーストローク=指の可動範囲となります。ショートストロークでは指の可動範囲が例えば2mm程度となり指が窮屈になります、予備動作が取れないのですよね。
 そもそもショートストロークとロープロファイルをごっちゃにしている人は恥なので滅びてください。ショートストロークのzenaimはそこまで低背でないし、低背スイッチは全然ストローク長いです。

温度特性

 相変わらず実験などはできるはずもないのですけど、ホールセンサのデータシートなど確認してみました。
 drv5053も温度補償あると思っていたのですけどなかったみたいです。「優れた温度安定性
– 温度範囲の全体で感度 ±10%」としか書かれていませんでした。そもそも本番で5053を使う予定はないですが、出力電圧固定で電源の揺れをもろ受けたり、あくまで規格ですが感度幅が100%あったり←???、緩い用途でしか使えないもので良く調べもせずに購入したこと自体が間違いでした。なんだこれ
 5053は省き、5056は5055とほぼほぼ同じなので5055を例に表や特性図を抜き出してみます。

 5055は磁気検知範囲が決まっていて、出力電圧と感度は電源電圧に比例します。ADCのrefと同電位であれば電源の揺れは考慮しなくてよく、これをレシオメトリックと言うそうです。以前温度特性を軽く見てみようとしたときの意味不明さは電源の揺れの可能性は高いです。経験上そういう変化の仕方でしたしね。

 磁石ない時の電圧の温度特性です。温度変化はほぼほぼ考慮せず良いみたい

 Aモデルは温度が上がると感度が上がります。これは温度が上がると120ppm/Kで磁石の磁力が下がるのを補償しているそうです。

 Zモデルは温度補償機能がないようです。低温では若干変化していますね。

 規格表も見てみます。あくまで規格なので、実際の仕様の範囲ではどの程度のレンジを取るのかは実験してみないとわかりません。
 Vqdtというのが磁石なしでの出力電圧です。+/-1%と、特性図で見た通り温度による変化はなさそうです。
 Vqを見ると温度関係なく7%程度幅を取って揺れるみたいです。また、sensitivityを見てみると、感度は10%程度の幅を持っています。
 スペック上の最大最小ですが、出力が7%, 感度が10%幅をもってばらつきがあります。この規格には個体差や使用時の揺れやら全部含んでいますから実力値はわからないですね。0.001mmとかの製品がある以上は出力の揺れというのはほぼほぼ無いんだろうなと思ってしまいますがどうなんでしょうね。
 とりあえず磁気キーボードはスイッチだけでなくホールセンサにも出荷時キャリブレーションが必要とか、手動キャリブレーションはホールセンサも含めてキャリブレーションしているということです。

 Stcが温度補償で、Aは磁石のTC0.12%を補償している。Zは補償しない。なので温度補正機能をウリにしているzenaimやらhm66やらはdrv5055でいうところのZのようなホールセンサを使用しているのでしょうね。
 面倒であればAのような勝手に補正してくれるものを使うのがよさそうですが、基板の裏側のスイッチの中の磁石の温度って、ホールセンサの温度とどれくらい一致するんでしょうか。一致せずともオフセットで済むならAで相殺すればいいですが、そこにずれがあるのならばZの方がよさそうな感じがありますね。どうなのでしょう、、

 ついでに消費電力を見てみると、5055は電流が2-4mA, 5056は6-10mAとなっています。5056の方が精度よく見れてよさそうと思っていたのですが、消費電力倍以上となると微妙ですね。60キーとして、ホールセンサだけで5055は120-240mA, 5056は360-600mAとなってしまいます。狂ってますね。
 スリープ機能付きのホールセンサを使用しているメーカーもありますが、順当だと思います。市販品をusbテスターで接続すると当然のように1W消費していますから、磁気キーボードって何なんだと思ってしまいますね。正気ではないと思います。

 データシートちゃんと読んだ方がいいなとなるわけですが、すると中華の安い部品を検討するとき詳細な情報が公開されていなくてどうしたものかとなるのですね。oh49とか半額以下です。

マルチプレクサ

 16chMUX、CD74HC4067SM96の動作確認は行いましたが、実力がどんな感じなのかオシロで観察してみようと思います。
 マルチプレクサはセレクトピンのhigh/lowでチャンネルを選択します。enableピンはピッチ変換基板作ったときにいらんやろと思っていたらしく使えません

 picoのgpioからセレクトピンを切り替え、分圧した様子を観察しています。
 arduino標準のだと高速で行えないらしく、#include “hardware/adc.h”#include “hardware/gpio.h”#include “pico/stdlib.h”してgpio_putして制御します。

 1usごとに切り替えています。切り替わり部分を拡大すると250ns程度何やら溜めがあり、次のchに切り替わり始めています。この部分でセレクトピンがカチカチしていると思うので、selectピンと合わせてみてみます。

 セレクトピンの切り替えの様子も見てみます。今回セレクトピンは(0000)→(1111)の切り替えを繰り返させています。

 多少バラバラしていますがセレクトピンは80nsぐらいで次のビットを切り替えているでしょうか。もし同時に出来たらだいぶ時間を短縮できそうです。

s0 vs s1→80ns程度

s0 vs s1→150ns程度

s0 vs s3→230ns程度

 muxの出力とセレクトピンとも並べてみます。最初に切り替えるs0 vs dataでは250ns程度差があります。最後に切り替えるs3 vs dataでは50ns程度の差があります。

s0 vs data

s3 vs data

 s3が切り替わってからdataが切り替わるまで50ns程度ですが、先ほどは長くてセレクトピンの切り替え間隔が80ns程度ありました。ふと思いますがこの時、50ns時点で切り替わり始めたりはしないものなのでしょうかね。

 0000→1111と4つすべて切り替えていましたが、0000→0001とs0だけの切り替えでも見てみました。この時は先ほどのs3 vs dataと同じように50ns程度で切り替わり始めています。うーん

s0 vs data

datasheetを見てみるとセレクトピン→出力の遅延はtypで20数nsなのですが、maxの値は電源電圧が高いほど良くなるようで、3.3Vだとあまりいいところで使えていないんじゃないかなと思ったりします。実際今回は50ns程度な感じでした。(どちらにせよセレクトピンの切り替えに80nsかかっているので足を引っ張ってはいないのですが)CD74HC4067SM96はch数が多いのは素晴らしいのですが、あまり性能的には向いていないかもしれない。

 次はホールセンサをマルチプレクサに接続してみたいと思います。2つのホールセンサを接続し、10us間隔で切り替えています。

 割とノイジーに見えますね。また大分立ち上がりがなまっており最低でも500nsは待たないとならなさそうです。

 マルチプレクサのオン抵抗が大きいようです。テスターで測定してみると150ohm程度ありました。ホールセンサ出力とmuxの間に100nFのコンデンサをバッファーに挟んでみました。だいぶ改善しています。しかしこれだとホールセンサの隣にデカップリングとバッファーとで2こコンデンサ入れないとならないですね、、、

 この状態で、切り替え間隔を2usにしてみました。次の切り替え直前を取得すれば、これぐらいの周波数でスキャンできそうです。

おわり

 なんかgptに部品案聞いて買ってきて試してみると駄目じゃんを各部品で繰り返している気がする、、、
 デモ用の基板起こしたのだけど部品評価しなおしからの作り直しだなあ。

 マルチプレクサがより速いものに変えたいなと思うのでTMUX1308とかを試してみたいと思います。16chのものはCD74HCT4067しかなく、8chでやる方が良いかなと思い始めました
 ホールセンサは消費電力考えなければ5056使いたいんですが5055が安定な感じです。デュアルセンサーとかやりたかったのですが遊びだけな気がします。左手デバイスだえあれば60%とかと比べて制約は少ないですがどうしたものか。こうなるとやはりメカニカルとのハイブリッドがよさそうな気はしてきます。これはこれで人に寄ったり色々面倒がありますが

 いろいろ考えさせられますね、、、磁気スイッチ採用する理由が非接触と流通性だけなのでまだいいですが、ふつうに60%とかの磁気キーボード開発しようとするとできる出来ない以前に諸々が馬鹿馬鹿しくて萎えそうです。

コメント

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