- Home
- 一覧
- 雑記
-
[自キ]磁気キーボードを作りたい。6週目
ダイジェスト⑥
テスト用の基板作る
各部品の挙動がなんとなくわかったし部品も決まってきたのでxiao rp2040を使ったテスト用の基板を作りました。
中身はこんな感じです。マイコンは家に余っていたxiaorp2040を使用します。
ADCの拡張に8portのmuxを2つ使います。muxの出力は共通のADCピンに接続し、enableピンでそれぞれのmuxのオンオフ切り替えながらデータを取得します。
各muxに4つのホールセンサを接続し、2×4のキーボードとしています。加えて用途は未定ですが余ったピンにdirect pinsでメカニカルスイッチ3つつけてます。
キー数少ないのでxiaoの電源から各部品の電源を取っていますが、30キーとかに増やすと別途LDOをのっけた方がよさそうですね。
arduinoでMUXを選択しポートを選択し8つのホールセンサから順に出力電圧を読み取り、シリアルポートに出力するように生成AIに作ってもらいました。
// MUXセレクトピン const int S0 = 27; const int S1 = 28; const int S2 = 29; // MUX有効化ピン(LOWで有効) const int E0 = 7; // mux1 const int E1 = 6; // mux2 // ADCピン(MUXの出力読み取り) const int ADC_PIN = A0; // 各センサの選択順(対応するセレクトビット) const uint8_t selectOrder[4] = {2, 1, 0, 3}; // P2, P1, P0, P3 //mux切替-読取遅延us const int muxdelay = 0; //mux平均サンプル数 const float avenum = 10.0; void setup() { Serial.begin(9600); analogReadResolution(12); // 12ビットADC // セレクトピン出力設定 pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); // MUX enableピン出力設定 pinMode(E0, OUTPUT); pinMode(E1, OUTPUT); // 初期状態ですべてオフ digitalWrite(E0, HIGH); digitalWrite(E1, HIGH); } void loop() { float keyValues[8]; // K1〜K8 // === mux1 読み取り === digitalWrite(E1, HIGH); // mux2無効 digitalWrite(E0, LOW); // mux1有効 for (int i = 0; i < 4; i++) { setMuxChannel(selectOrder[i]); delayMicroseconds(muxdelay); float sum = 0; for (int j = 0; j < avenum; j++) { sum += analogRead(ADC_PIN); } keyValues[i] = sum / avenum; } // === mux2 読み取り === digitalWrite(E0, HIGH); // mux1無効 digitalWrite(E1, LOW); // mux2有効 for (int i = 0; i < 4; i++) { setMuxChannel(selectOrder[i]); delayMicroseconds(muxdelay); float sum = 0; for (int j = 0; j < avenum; j++) { sum += analogRead(ADC_PIN); } keyValues[i + 4] = sum / avenum; } digitalWrite(E1, HIGH); // 最後にmux2も無効化 // === 結果出力 === // for (int i = 0; i < 8; i++) { // float kval=keyValues[i]; // Serial.print(kval,0); // if (i < 7) Serial.print(','); //} // Serial.println(); //delay(1); } void setMuxChannel(uint8_t channel) { // 3bitのセレクトをS0~S2に設定 digitalWrite(S0, (channel >> 0) & 1); digitalWrite(S1, (channel >> 1) & 1); digitalWrite(S2, (channel >> 2) & 1); }
シリアルポートにADC読み取り値が出てきました。
ずっとイライラしていたのはブレッドボードの不安定さだったので、そこらへんが解消されました。
ちょっと触っただけで値が動いたりブレッドボードの接触抵抗が大きかったり、、、読み取り値は安定し、muxはポート切り替え後に鈍ることなく切り替わるようになりました。
アイソレーションが
一行目左から1~4, 2行目左から5~8とします。
基板だけ(Vq)、スイッチ一つをそこにだけ載せる(top)、載せたスイッチを押す(bot)の時の各位置でのADC読み取り値です。使ったスイッチは同一のものです。
Vq ホールセンサごとに今回でいうと2027~2062と電圧がばらついています。個体差があります。
Vqが小さいとスイッチ乗せたときも小さい、大きい、の関係には完全には無いようです。ホールセンサ実装のズレ量とかなのでしょうかね。なんだろ載せた位置だけでなく、載せたときの他の場所がどうなっているかも見てみました。
わかりづらいのでVqとの差分を取っていますね。
黄色がスイッチを載せたところ、その行の緑がその隣、青は斜めの位置です。
スイッチを載せると300ぐらい大きくなります。スイッチを押すと1500ぐらい大きくなります。この時周りの箇所で変化がなければ素晴らしいのですが、実際には隣のキーや斜めのキーの読み取り値に干渉しているようです。
値がマイナスになっており、あるキーを押すとその隣や斜めのキーは実際よりも磁力が弱く、キーが離されて見えてしまいます。隣のホールセンサを貫く磁束が直下のホールセンサの逆向きなのでマイナスになるのは妥当な気がします。
実際に使用する際はすべてキーを載せるので、8か所キーを載せてひとつづつ押し込んだ時の差分です。
一つだけ載せたときは押し込んだ時隣が-8とか-9とかされていました。すべてキーを載せた状態では-3とか-4とかです。キースイッチを載せた分薄まっています。ちゃんとしようと思ったら、スキャンごとの判定に隣と斜めのキーの磁石に寄る干渉分も加味するべきと思います。
しかしまあこの程度であればいったん無視してもいいかなと思っています。平均サンプル数
muxのポート切り替え後に設ける遅延についてはブレッドボードでは2us程度欲しいという感じでしたが、ブレッドボードの抵抗分が原因でした。基板では遅延入れようが入れまいが変わらなかったです。arduinoのコード実行が遅いだけかもしれんので都度確認する必要はあると思いますがon抵抗の低いもの選んでおけば基本的に問題にはならなそう。
読み取ったADCの値はバラバラして幅を持つので、既製品の0.001mmだとかいうような高感度にしようと思うとキーに触れなくともばらつき分で勝手にキー入力がされてしまいます。
ので連続で何回か測定しその平均を取ることで安定したデータ取得を行おうと思います。その平均値をとるためのデータ取得数がいくつぐらいがいいのか見てみました。平均を取らず1個サンプルだと10程度ばらつきました。こんな取ってたらスキャンレートもったいないという感じですが50個サンプルだとばらつきは2程度に収まりました。平均を取ること速度を犠牲にはしますが有用そうです。
グラフを見るに10ぐらい取っていれば十分かなと思います。
実装する際は設定ソフトで平均サンプル数とスキャンレートのトレードオフで使用者に設定できるようにしとけばいいかなと思います。基板で磁力-距離特性測定
マイクロメータ等での精細な測定でなく、3dpでスペーサを作り、ある高さでの磁力を測定してみます。
スペーサは3種類、0, 1.8, 2.8mm+底上げ分 の高さのスペーサを作りました。これで楽にどのスイッチでも安定して測定できます。
こんな感じです。先ほども言いましたがやはり各高さで各場所との関係は同じではないようです。
KOMに加えJadeGamingでも見てみました。比べてみると3.8mm(top)では同じぐらいの値ですが0mm(bot)では100程度KOMの方が磁力が弱くなっています。
Jadeの方がそこでの磁力は強い、が押さない時の磁力はKOMと同じ、なのでJadeはKOMより減衰度合いが大きい感じでしょうか。しらんけど
そうとして振れ幅が大きい分botではJadeの方が精度よさそうですがそもそもbotは精度がいいです。topでは減衰度合いの小さいKOMの方が優秀そうです。また開封して磁石を見てみるとKOMの方が磁石が長かったです。磁石の磁力とか減衰度合いとかが何で決まるのか知らないですけど、そいう言うところでしょうか。そういえばzenaimの磁石はめちゃくちゃ長かったですね。減衰係数の小ささにも気を配っているのであれば素晴らしいですね。
以前検討した簡単な逆二乗則でのfittingをこの3点で取得した値から行ってみます。
KOMスイッチでのフィッティング結果です。d0が2.8, aが14000, y0が2000 程度となりました。こちらはJadegamingです。d0が3.4, aが23000, y0が1800 程度となりました。
もともと現実に合わせたモデルではないし合っていないのでそこはいいのですが、スイッチごとに定数の差が大きすぎます。これを見ると既製品のソフトウェアのようにスイッチ(磁石)ごとにプロファイルを作成しておきたくなってきます。 もちろん既製品のスイッチプロファイルが何をどうするために使用されているのかは知らないのですけど。
先ほども言ったように、減衰項を導入する必要があります。磁石ごとの減衰を補正しきると、y0=Vq磁石がない時の値になると思います。
過去のマイクロメータの測定記録からy0=Vqと固定、減衰係数kを追加しフィッティングを行ってみます。$$ y-y_0=\frac{a (1-e^{k(d+d_0)})}{( d + d_0 )^2}=aX $$
まずこれは減衰なし、y0=Vq固定での結果です。磁石とホールセンサの距離が離れると差が開いています。近似式は減衰を入れていないので実測よりも読み取り磁力が強いです。実際にはこの距離が短い実測点でもわずかな減衰は発生しているはずですがそこはいいです。
そこに減衰の指数関数を加えてフィッティングしたものがこちら、完璧には合いませんがまあいい感じな気がします。
ただ実際にこれをどうこうするかというとめんどくさくてやる気が起きないので、減衰は気にしないでy0=Vqとしてしまうのがいいかなと思ってきています。既製品のようにスイッチプロファイルを作成し適用するようにすればかなり一致度高くリニアな変換を行うことができますが、一生更新が必要ですし、ショートストローク化などいじっているスイッチでキャリブレーションを行うことができません。
なので私はこの減衰による差は確かにあるのだけど、無視してしまう方向で行こうかなと今は思っています。というのも、正直ユーザーの言う精度というのは磁力-距離変換のリニアさ正確さではなく押し始めの感度の高さと誤入力の少なさであることは明らかですよね。であればこの減衰のたるみは中腹で強く出るのですから、誰も文句は言わないし何なら言わなければ気づかないでしょう。
私は2mm押し込んだはずだが1.9mmしか押し込んだことになっていないからこれはどうだ、などという人はいなさそう。というわけでy0=Vqに固定し今回の基板のKOMとJadeとで再検討してみます。減衰は考慮しないので使用する値はtopとbotの2か所だけで計算を行います。その計算式と、1.8mm中腹での実測との差を見てみます。
KOMでは中腹で0.1mm程度計算からずれています。Jadeでは中腹で0.3mm程度計算からずれています。ここではこのズレ量は磁石の減衰によるものと見ます。グラフのようにこのズレはtopからbotにかけてのたるみ具合となります。topやbotでの正確さはそんなに変わらないんじゃないかなと思っている。
これであれば基板の校正はスイッチを載せずに値を読み取ったVqを保存し、スイッチの校正ではtopとbotの2点の値を与えてやれば得ることができます。そして減衰の少ない磁石を使用しているスイッチほど磁力-距離変換の正確さが出ます。
という感じにしようかしら。おわり
周囲のキーとのアイソレーション問題は美意識的には対応した方が良いのでしょうけど、誤動作起きないとは言い切れない大きさだけど、まあそこまで気にしなくてもいいレベルな気がする。
ほんとのところは知らないですけどスイッチのプロファイルを既製品で読み込む必要があるのは確かになというところ、そしてzenaimはやはり強い。
キャリブレーションの仕方、フィッティングの仕方、といろんなパターンを考えていたのですが、結局妥協ありで簡素なところに落ち着きそうです。すべてむだになった、、使う磁石各社そろえりゃいいのにね。それくらい
arduinoのスキャンレートが思ってたより遅くて、そういう作り方はしなきゃなのかなと思ったり。qmkがどうなのか知らんけど。ブレッドボードで色々確認するのは大事だけども、ブレッドボードだから見れてないものも多いのかもしれない。面倒だし金もかかるけどブレッドボードはほんとの最初だけにして、すぐ都度テスト基板作る方がいいのかもしれん。小さな電圧変化見なきゃいけないものですものね
いったんハード面は動作が確認できたのでいったん置いておいて、ソフトウェアの方に取り掛かりたいと思います。qmkに対応させたいのですが、根幹の部分は何もしなくていいのは楽なものの合わせながら実装しなければならないのでそこは面倒なところ。
ハード面もいろいろ見なければならないのですけど今までやってきたことの繰り返しみたいなもの
ここらで折り返し地点にしたいです。あとは数年前にも触っていましたが、磁気キーボードが電力食いなのでセルフパワーハブ必須なのでセルフパワーハブ作りましょう。そろそろ形にする。usbハブって不格好なものばかりじゃないですか。それがずっと納得いってないのですよね、、。DCプラグ給電、typeC接続、全ポートAとtypeC両対応、pc電源連動、各ポート電源スイッチつき、ぐらいはしたいですね。
-
2025年オーディオ環境あれこれ
2025年7月現在のオーディオ周りを紹介します。
メイン使い
基本的にはPC経由でデスク上に据え置きで使用しています。
トレードオフとなる部分では音質へのこだわりというよりは利便性を重視しています。使いづらいとそもそも使わなくなってしまうしピュアをやるような空間も金もないので、、、。
デスクの片隅で完結しているのでいい感じのコンパクトさなのではないかなと思います。DACはTOPPING E70を使用しています。元々はADI-2 DAC FSを使用していたのですが乗り換えました。ADI-2の方が好みな音でしたが、利便性の面で強みがありました。E70の方が現代的な音をしており音質でいうとそこまでの差はないように思います。機能的な面でいえば中華系のDACはどれも似たり寄ったりであるところ、なぜE70かというとこれは単にセールで27,000円で買えたからという理由です。
・複合機でなくラインアウト単機能なのでインタフェースがシンプル
・スリープ機能付きで電源操作が不要
・頻度高くないもののBT入力にも対応
電源操作不要なので奥に配置しても問題なし電源ケーブルはAINEXの0.5mものを使用しています。取り回しよいのでデスク上でもすっきり収まります。
アンプはThyris ElectronicsのHAS-0Sを使用しています。なかなか高価ですが唯一無二の音を鳴らしてくれます。そもそもADI-2を使用していた時になぜ外付けでHAS-0を購入したのかというとADI-2ではt60rpを全くもって制動できなかったからなのですよね。平面系のヘッドホンを緩い音でしか鳴らすことができず腐らせていました。そこでHAS-0はt60rpを緩くなく鳴らしてくれたわけです。これは非常に強みがあります。今ではHAS-0はモバイル機として別部屋で使用されています。
例えば真空管アンプなどは駆動することの他にアンプの味を載せることも大事な点と思います、対してHASシリーズの特徴はイヤホンやヘッドホンの持つ素の味を最大限引き出せることにあると私は感じています。
HAS-0と0Sを所有していますが0Sの方がより美しいサウンドと感じます。比べるとではありますが0の方が角の立ったサウンドに感じます。音以外の面でも非常に優秀でバッテリーの充電回路や電源周りの保護回路などしっかり搭載されているそうです。オーディオ機器に関しては高価なメーカー品で保護回路積んでいないものなど普通にありますから、そういった部分しっかりされているのはうれしいですね。
DACとの接続はonso 02 3.5-RCA 1m
を使用しています。onsoのケーブルは日本メーカーで、手の出せる価格で、見た目や取り回しもよく、線材も公開されているので手堅く選びやすいと思います。自作して線材比較しようとか思っていましたが、これでいいじゃんとなりますね。
アンプーホン間はエレコムのOFC延長ケーブルを使用しています。意図としてはジャックの抜き差し回数を増やしたくないのと、単純にイヤホンのケーブル短くて立ち上がったり椅子で反対方向に回ると突っ張るためです。デスクフレームにマグネットでプラグジャック部分を張り付けて、引っ張られたら突っ張らず外れるようにしています。
延長ケーブルは何使うか悩み中なのですが、自作部材だと結構ジャックがごつく重いのしかないので悩みます。アンプは3Dプリンタで出力した台に載せていて、下にケーブルを通せるようにしています。また上部にフックを設けてイヤホンをきれいに留めて置けるようにしています。
メイン使いしているイヤホンです。
final B1
finalのアニソン用に作りましたというハイブリッド機です。高解像度(解像感でなく)で、非常に柔らかなサウンドです。色々買ってきましたが音質、音作り、装着感とB1が一番好みだなと思います。final A6000
味付けの強いB1とは対照的に、余分な響きを削り落とした音作りで音源を楽しめるサウンドです。柔らかく細いケーブル、めちゃ軽量な筐体(マジで軽い)と取り回しにも優れています。
final二つ目ですがfinalのファンではありません。欲しいと思ったイヤホンがfinalだっただけです。でもこのIEM筐体のデザインは非常に優れていると思います。EtymoticResearch ER-4S, ER-4B
ネットワークを組み込んだ布巻の自作ケーブルを使用したものです。純正のケーブルは硬くタッチノイズがひどいため正直使えたものではないです。
DFカーブ系のフラットサウンドで、言わずと知れた名機です。リスニングにSを、分析的であったりASMRにBをと使い分けられます。メイン使いしているヘッドホンです。
Yamaha YH-5000SE
ヤマハのヘッドホンの音作りが好きだったこともあり、試聴してとてもよかったので購入しました。非常に高いですがハイエンドが欲しかったというよりはたまたま欲しくなったものが高かっただけです。音に関してはB1と同じく素の音質が高くかつ好みだったからというところが大きいです。
平面駆動ですがHASシリーズアンプがあれば制動に問題なしです。
音も素晴らしいですが音以外が素晴らしいです。そもそも高価なヘッドホンというのは重すぎるものがほとんどです。YH-5000SEは360gと比較的軽量で素晴らしいです。また装着感も素晴らしく、イヤーパッドの空間が広く深く耳を圧迫しません。つまり長時間使用しても耳が痛くなることはないです。この装着感だけでも売り出せると思うほどです。
純正のケーブルは非常に太く重く取り回しが悪いため、onso hpct_03_ub33を使用しています。細く軽く取り回しが良いです。
オーディオテクニカ ATH-R70x
もともとは無機質なモニターサウンドという印象でしたが、HASシリーズで鳴らすと途端に生っぽさが出てきて気に入り使用しています。素晴らしきトゥルーオープンエアーオーディオ、音源を聴くことを楽しめます。
210gと軽量で素晴らしいです。イヤーパッドがやや薄く、長時間使用していると耳が痛くなってきます。純正ケーブルは長すぎるため、短めのものに取り換えています。
R70xaが新型で出ていますね。どこか余裕のあるタイミングでお布施したい。正味メイン使いしている機種はメインであるがゆえによいです以外に言葉が出ないのですよね、これが基準になっているのですから、、、。
そのほか
メイン使いしていなくてもたまに取り出したり、何があっても手放すことはないと思っているホンを厳選して紹介します。
Moondrop KATO
中華系はすぐ値下げするわモデルチェンジするわでいい印象のない機種が多いですが加藤ホンことKATOは色褪せないイヤホンと思います。エントリー向け音のいいイヤホンから特徴的なボーカルに艶のあるボーカルホンまでずっと使い続けられます。AKG N40
これぞリスニングという音をしています。素晴らしく聴くたびに感動があります。
装着にやや難があり私は純正のフォームを使用しています。G4イヤホン Dracula
ネットワーク無しの1BAでこの豊かなサウンドが?!音作りの鬼です。この気持ちよくクリアなサウンドは圧巻であります。筐体はめちゃ小さくて軽量です。樹脂充填で質感もよしです。final A8000
トゥルーベリリウム振動版というやつ。非常に優れた応答性と滑らかな音をしています。シンプルに高音質で素晴らしいのですが継続的に使っているとB1とかの方がいいなという感じです。普段使いしませんが好きです。dacやアンプ、ケーブル等、音源の評価にも重宝しています。
生産終了しA10000がほぼほぼ上位互換として出ますが、純正ケーブルの太さとか見るといいかなと思ったり。A8000もあるので買わない気がします。Fostex T60RP
素晴らしき高音質さです。特徴的な面白味はないですが順当に上質なヘッドホンです。個人的にはyh5000seやr70xに好み的な軍配が上がり普段使いこそしていませんがさすがの名機です。
MK2が出ていて気になります。Sennheiser HD650
豊かで厚みのあるリスニングサウンドです。Sennheiser HD600
DFカーブ系のフラットサウンドで性癖に刺さります。HD650もですが側圧強めなのがちょいとですね。ここら辺のゼンハイザーは特徴がありいいです。660sとかより昔の機種の方が個性があり好きです。好みではありますが最近のは現代的の一言で音作りが表せてしまう機種が多いです。オーテクのadx3000とかもそう感じました。おわり
割とオーディオ周りは満足した感があります。上を見ればまだまだいい音があることは耳で理解していますしそれは大事ですが究極的には好みですしお金もないのでここらで船を降りると思います。自信をもって今の凝り固まった感性で生きていきます。
試聴に出向くこと自体年に数回なのでオーディオ周りは機会機会で新作を聴いたりする程度の頻度になりそうです。 -
工具入れ作った
重い腰を上げて道具工具入れ作りました。
何回か試してドライバーは刺して他突っ込む感じに
はさみとかはこんなんで
作ろう作ろうと思ってましたが今さらになり、便利なのでもっとさっさとやっておけばよかった
-
[自キ]磁気キーボードを作りたい。5週目
ダイジェスト⑤
消費電力
今手元にはmonsgeek fun60proしか磁気キーボード無いのですが、usbテスターみたいなのにつなぐと当然のように200mAを超えているんですよね。たかが文字入力デバイスが?
高速スキャンのためのマイコン、60個にも及ぶホールセンサ。そういうことです。200mA前半だと何かしら工夫している方だと思いますが、それでも100mA台を目指したいなとなんとなく思います。
ホールセンサを都度スリープしたりしているメーカーもありますよね。
ADCが強くスキャンも早いstm32f446reとかだと100mAちょい消費します。+ホールセンサx60個なわけですが、ホールセンサもdrv5055だと2-4mA, 5056だと6-10mAです。それぞれ間を取って60掛けると180mAとか480mAとかになります。(5056は使いたくても使えないですね!)この組み合わせだと300mAは覚悟しなければならないですね。
その面ではアケコンは文字入力デバイスでないですしスイッチ数も少ないですから、磁気スイッチを採用するのは向いていると思います。一個一個の自己発熱はそこまで大きくなさそうなので基板に逃げそうな感じはありますが全体としてみたときの消費電力は1Wを超えてきますからなかなかであります。
あと動作が不良で電圧が~という人がまちまちにいますが細かいことを言うとで電流です。まあ電力と言ってしまえば間違いがないわけですが200~300mAも食うわけですから磁キはセルフパワーのUSBハブにつなぐべきかなあと思います。ケーブル付きusbハブ改めスプリットケーブルというものが流通していますが、消費電力大きいものを一方に接続すると不足しそうです。古い、安い、マザーボードや電源だとそもそも500mAきっちり出力できませんしね。当初はトップアウト付近検出用とボトムアウト付近検出用でホールセンサ2個使うデュアルセンサー磁キとか面白そうでやりたかったのですが、悩みます。試作でウェイって言って終わりかもしれない、
別にセルフパワーにつなげばよいのだし、問題は何もないのですが私の気持ちとしては消費電力大きなまま完成とするのは非常に葛藤があります。しかし、省電力にするとパーツもやや高いものになってしまうし実装もワンクッション挟んでめんどくさい、、、というところがありますね。
測定治具
JLCPCBに磁力測定用の治具を発注しました。アルミで11200円でした。アルミだと軽そうなのですがこの体積あると十分重量感がありその点十分です。
金をケチってワンピースでデザインしたわけですが、今になると結局基板がたわんでしまい、以前よりはしっかりとれるとはいえ完ぺきではなかったです。基板が押されてたわむというよりは。そもそも反っているわけです。金をケチらず最初から2ピースで発注した方が安く済むし満足度も高いし時間も無駄にならなかったかもしれないです、、、写真はネジとかついてないですが使うときはねじもスペーサも取り付けています。この測定で思ったことは、そもそもこれで基板のたわみが問題になるのですから、キーボードの状態での0.01mmとか0.001mmの精度ってどれだけの意味を持つのでしょうかということです。もちろんこれでちゃんと測定できていないのは私のミスなわけですが、実際の使用場面ではもっとめちゃくちゃな状態なわけです。
人の指は1umの変位を検知できると私は信じていますが、ケースにフォームに基板にプレート、キーキャップと取り付けられたものを押したところで指とホールセンサの関係はいたるところにばねが挿入されめちゃくちゃな気がしています。この磁力測定でも、スイッチ押すんじゃなくてヘッドに磁石張り付けて、基板と接触せずにやるべきですよね。再測定①
基板を固定して実際に近い環境で測定してみました。およそ以前と同じです。
逆二乗式でフィッティングしたかったのですが、この環境だとbottom付近、押し込んだところで磁力減衰がおきてしまう結果となりました。
実際は磁力が減衰しているのでなく、基板等々がたわんでしまっていることで発生しています。実際のキーボードの状態に即していると言えばそうなのですが、あまり正しい状態ではないと思います。この場合、補正値としてcos(定数項/磁極距離)を割合としてかけることで結構合ってきます。組み立て後の精度を考慮するならばこういうこともありかなと思います。
再測定②
基板にスイッチを載せて押すと基板のたわみが邪魔ですから、結局スイッチから磁石を取り出しマイクロメータヘッドに取り付けることにしました。これなら非接触なのでそういった外的要因を無視できます。これはこれで色々あるのですが
これは一つ測定結果です。
磁力 – 磁極距離-^2特性です。
磁力 – 距離特性です。
マイクロメータ上での距離と近似式から逆算した距離の差です。
この場合で最大0.025mm程度のズレです。
読み取り距離の安定度とはまた別なので市販品でいう精度とはまた別ですが、この程度フィッティングできそうです。温度特性②
drv5055の温度補正機能付きのA2に加えて温度補正機能のないZ2も購入し、比較してみました。
方法としてはホットプレート上に基板、スイッチを載せ磁力を測定します。一般に磁石は0.12%/Kで磁力が下がるそうです。A2のホールセンサはそれを補正するために出力が0.12%上乗せされるそうです。加熱し、その後放置し冷却しています。基板はホットプレートに乗っているだけなので、ホットプレートの温度と基板とスイッチ内の磁石の温度は同一ではありませんが、実際のキーボードでも基板の温度とスイッチ内の磁石の温度が同一とは思えないので、これが正しいとは思いませんが、恒温槽で実施するのが実際的であるとも言えません。
とはいえ恒温槽で試験した方がわかりやすいのでやるべきなのですが借りたりしないといけないしとりあえずホットプレートで、、start 常温
700 40heat
1100 50heat
1500 60heat
1900 70heat
2300 80heat
3000 90heat
3800 100heat
4300 downADC出力を1secごとに100サンプルの平均を読んでいます。初期値を0としています。
A2は温度上昇とともに読み取り磁力が強くなっていきます。これはホールセンサの温度が磁石の温度より高いため補正が過度に働いているためと思われます。
Z2は温度上昇とともに読み取り磁力が弱くなっていきます。これは温度上昇で磁石の磁力が低下しているためと思われます。
そしてどちらも冷却後、初期値より読み取り磁力が弱い値で安定しています。調べてみるとネオジム磁石は高温に弱く80で以下で使用するべきのようですね。そのせいか。。。?温度補償のあるモデルを使用するべきなのか、温度補償をするべきなのか、
A2モデルもZ2モデルもどちらも温度による変動量は同じぐらいで明確にどちらを使うべきとかはなさそうです。A2を使用し温度補正を行うならば、補正を補正することになるのでなんだかなというところがあります。
磁石の温度は室温に近いのかなと思うので、暑い時寒い時とでその分補正はした方がいいように思います。
室温が変わらないのなら起動時に補正できそうな気はします。そもそもいろいろが安定するのかどうかというところ、、おわり
スリープ機能付きのホールセンサ買ってみたりもしたのですが出力が安定しないとか、そもそも動かない原因不明とかなのでsot23タイプでいいかとなっているこの頃。
mcuのADCピンとfetスイッチとでマトリクスを組むのが60%とかキー数多いものではひとまず考えたい。それは置いといてまずrp2040で簡単に作れるようにしておきたい。ので今までの結果からrp2040zeroを使ったラピトリマクロパッド作る、qmkに対応する、設定ソフト作る、のが次やること
仕事忙しいし疲れてるしでやる気出ないしちょこちょこ進めたいやる気がないのでテキトウ
いろいろ手は動かしてるのですけどめんどくさいのでこんなんで、、 -
[自キ]磁気キーボードを作りたい。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%とかの磁気キーボード開発しようとするとできる出来ない以前に諸々が馬鹿馬鹿しくて萎えそうです。