コントローラーはなぜドリフトするのか:カギは抵抗膜の摩耗とADC

最近、ドリフトしないコントローラーとして、ホールセンサータイプのジョイスティックが持て囃されてますね。
米国でのJoy-con集団訴訟らへんから一気に注目され始めた気がします。
僕もSwitchのJoy-conのドリフトには苦しめられてます。

なんで普通のジョイスティックってドリフトするんでしょうか?
設計ミスだろって論調も見かけますけど、避けられないんでしょうか?
ホールセンサータイプって本当にドリフトしないんでしょうか?

ということで、今回はジョイスティックがなんでドリフトするかについて、シミュレーションも交えながら書いてみました。
ドリフトはジョイスティックの摩耗が原因ですというよく聞く説明から、さらに一歩踏み込んで解説してます。
この記事を読むと、ジョイスティックのドリフトが起こる原理が理解できると思います。

目次

普通のジョイスティックの原理

ドリフトの原理を理解するために、まずは普通のジョイスティックの原理から考えていきましょう。

普通のジョイスティックというのは、可変抵抗タイプのジョイスティックです。

普通のジョイスティック

ジョイスティックは、スティックの傾きに応じて内部の抵抗値が変わる可変抵抗器ということです。

以下シミュレーションのジョイスティックを掴んで動かしてみてください。

ジョイスティックをドラッグして左右に傾けてください
GND Vcc = 5V 抵抗膜 (全抵抗 10kΩ) R1 R2 Vout X軸 (ゲーム認識値) -128 -64 0 +64 +127
R1 (左側)
5.00 kΩ
出力電圧 Vout
2.50 V
R2 (右側)
5.00 kΩ
ゲーム上の傾き (-128〜127)
0

ジョイスティックを傾けると、抵抗膜の上を赤い点が移動して、R1とR2の抵抗値が変わります。
それに応じて、出力電圧が変化しています。
この出力電圧をマイコンのADC(アナログデジタル変換)ポートとかで読み取ることで、ゲーム内でジョイスティックの傾きを認識しています。

ドリフトが起こる原因

ドリフトが起こる原因としてよく説明されるのが、ジョイスティックの摩耗です。
これは正しいのですが、では摩耗とは何のことを言ってるのでしょうか?
何が摩耗して、その結果なぜドリフトが起こるのでしょうか?

何が摩耗しているのか

まずは何が摩耗しているのか知るために、ジョイスティックを分解してみましょう。
こちらが、ジョイスティックを少し分解した写真です。

右の部品の少しくぼんでる部分が抵抗膜です。
そして、さっきのシミュレーションで左右に動いてた赤い点が、真ん中の金属部品(摺動子)です。
ジョイスティックを傾けると、この摺動子が抵抗膜上を接触しながら滑って移動し、出力される電圧が変化します。

で、よく聞く摩耗というのは、この摺動子が抵抗膜上を移動することにより発生する摩耗のことです。
何千回、何万回と摺動子が抵抗膜上を移動することで、抵抗膜と摺動子が摩耗していきます。

摩耗した結果どうなるのか

摩耗した結果、次のようなことが起こりえます。

  1. 抵抗膜が削れることで、その部分の抵抗値が大きくなる。
  2. 抵抗膜と摺動子の接触が不安定になり、接触抵抗が上がる・ふらつく。

順に説明していきます。

抵抗膜が削れることで、その部分の抵抗値が大きくなる

1つ目は、抵抗膜が削れて、その部分の抵抗値が上がります。
抵抗膜の抵抗値は厚みが小さいほど大きくなる1ので、削れて薄くなったエリアの抵抗値は、他のエリアより高くなります。

これがどうドリフトにつながるのか、シミュレーションで見てみましょう。
さっきの正常なジョイスティックは、ニュートラルポジションでR1=R2=5kΩと左右対称、出力電圧も最大電圧(今回は5V)のちょうど半分の2.5Vでした。
一方、削れて一部の抵抗値が高くなったジョイスティックは、左右対称じゃなくなります
このときの動作をシミュレーションすると、↓のようになります。
抵抗膜の色が薄くなっているエリアが、抵抗値が高くなっている状態です。

ジョイスティックをドラッグして左右に傾けてください
GND Vcc = 5V 抵抗膜 抵抗膜が削れて 抵抗値が上昇 R1 R2 Vout X軸 (ゲーム認識値) -128 -64 0 +64 +127 本来の認識値 ズレた認識値
R1 (左側)
5.00 kΩ
出力電圧 Vout
2.50 V
R2 (右側)
5.00 kΩ
ゲーム上の傾き (-128〜127)
0

抵抗値が高くなったエリアのせいで左右のバランスが崩れて、ニュートラルポジションなのに出力電圧が中央からズレています
その結果、ゲーム上ではスティックが傾いていると誤認識されてしまいます。
こうしてドリフトが起こります。

抵抗膜と摺動子の接触が不安定になり、接触抵抗が上がる・ふらつく

2つ目は、摺動子と抵抗膜の接触そのものが不安定になることです。
削れた面の荒れや、摺動子のへたり・摩耗で、摺動子と抵抗膜の接触抵抗が大きくなったり、ふらついたりします。

ふらつきについては、そのままジョイスティックの値のふらつきとして現れるので分かりやすいですね。

接触抵抗が大きくなる点がどうドリフトになるかについては、マイコンがジョイスティックの出力電圧をどう読み取っているかを知ることがポイントです。

出力電圧はマイコンのADCポートで読み取ります。
ADCポートの内部は小さなコンデンサがあり、そのコンデンサに取り込んだ電気の量を測ることで、電圧が何ボルトかを読み取ります。
ただ、マイコンには他の仕事もあるので、電気の取り込みに使える時間はごくわずかだったりします。
もし、ジョイスティックの接触抵抗が大きいと、短い取り込み時間では本来の電圧までコンデンサに取り込めず、読み取り値がずれて出てしまいます
これが、接触抵抗の上昇でドリフトが起きる仕組みです。

接触抵抗とADCのサンプリング時間(取り込み時間)をいじれるシミュレーションを用意したので、触ってみてください。

ジョイスティックをドラッグして左右に傾けてください
GND Vcc = 5V 抵抗膜 R1 R2 Rw ワイパー接点の 接触抵抗 Rw Vout X軸 (ゲーム認識値) -128 -64 0 +64 +127 本来の認識値 ズレた認識値
接触抵抗 Rw
94 kΩ
真値 Vout
2.50 V
ADC読み値
2.50 V
ゲーム認識値
0
接触抵抗 Rw:94 kΩ
健全:数Ω〜数百Ω / 摩耗して劣化:数kΩ〜数十kΩ。接触抵抗が大きいほど、コンデンサの充電が遅くなります。
ADC サンプリング時間 t_s
マイコンは他の仕事もあるので、1回の取り込みに使える時間はごくわずか。時間が短いほど、本来の電圧まで充電しきれずに読み取り値がズレます。
ON にすると、片側の抵抗膜が削れて抵抗値が上がった状態(もう一つのドリフト原因)を重ねます。ニュートラルでも「本来の認識値(白)」から赤がズレます。

接触抵抗が大きかったり、サンプリング時間が短かったりすると、端までスティックが倒れにくくなることがわかるかと思います。2

ちなみに、米国のJoy-con集団訴訟でも、原告側がJoy-conを分解して電子顕微鏡で摩耗を調査し、摩耗で内部の電気抵抗が変わっていることも主張してました

そして実際には、この2つに加えて、本体バネのへたりなんかも同時に進んでいきます。
これらの摩耗やへたりは元に戻らないので、こうなったらジョイスティックを交換するしかありません。
ただ交換はそれなりに難しいので、普通はコントローラーごと交換かメーカー修理になってしまいます。
無線コントローラーだと技適の問題もあり、個人での修理はグレー…
もったいないなあ。

どれくらいでドリフトが発生するのか

さて、どれくらいでドリフトが発生するのかについても考えてみましょう。

一つの目安として、ジョイスティックの寿命がメーカーのデータシートに載っています。
例えば、ジョイスティックといえばアルプスアルパインですが、アルプスアルパイン製ジョイスティック (RKJXV122400R)の寿命は200万回となっています。
https://tech.alpsalpine.com/j/products/detail/RKJXV122400R/

ただ、この寿命の基準は「全抵抗値変化が20%以内」なので、実際にドリフトの症状が出始めるのはもっと早い可能性もあります。
逆に、こういうのってマージン持って設定していると思うので、200万回でも全然元気ってこともあるかなと思います。

出典:https://www.lcsc.com/datasheet/C918854.pdf

あと、抵抗膜の削れ方が左右もしくは上下均一なら一つ目に説明したドリフトは理論的には発生しません
抵抗膜の抵抗値が非対称なことがドリフトの原因ですからね。
なので、上下・左右均等にスティックを倒すゲームをメインでやってるなら、意外とドリフトが起こらない可能性があります。

上下・左右均等にジョイスティックを倒すゲームって何がありますかね。
シューティング系が比較的均等でしょうか。

逆に横スクロールアクションとか、3Dアクションとかは要注意ですね。
横スクロールアクションをする人なら右側が多く削れて左側にドリフトするでしょうし、3Dアクションなら上側が多く削れて下側にドリフトすることになると予想してます。

あなたのコントローラーはどうですか?
どんなゲームをいっぱいやってて、ドリフトはしてるでしょうか、してないでしょうか?
してるならどちら向きでしょうか?
よろしければコメント欄で教えてください。

ホールセンサータイプのジョイスティックはドリフトが起こらないか

ということで、残念ながら普通のジョイスティックではどうやらドリフトは避けられないようです。

Nintendo Switchの開発者も摩耗は避けられないと言ってます。
https://www.nintendo.com/jp/interview/switch-oled/04.html

では、近年よく聞くホールセンサータイプのジョイスティックはどうでしょう?
記事が長くなってしまうので、原理の解説は控えめにしておきます。

ホールセンサータイプのジョイスティックは抵抗膜の代わりにホールセンサーという部品を使っています。
抵抗膜だと摺動子の位置で電圧を変化させていましたが、ホールセンサータイプの場合はホールセンサーから磁石までの距離で電圧を変化させます。
ここで重要な点は、磁石とホールセンサーは接触がないということです。

接触ゼロなので、削れる部品がありません。
当然、摩耗由来のドリフトは起こりません
これが、「ホールセンサータイプのジョイスティックはドリフトが起こらない」と言われる所以ですね。

ただし、ドリフトが絶対に起こらないというわけではないのは注意が必要です。
ホールセンサーで防げるのは、抵抗膜や摺動子が摩耗していたことで発生していたドリフトです。
でも、ドリフトっていうのは機械的要因によるものもあります。
スティックのバネがヘタるとか、樹脂が削れてニュートラルがずれるとか、削れた樹脂やごみが挟まるとかですね。
そういうドリフトは残念ながら防げないです。

ニンテンドー64のコントローラーはぐりぐりしすぎてばねがゆるゆるになったり、樹脂がボロボロになった人も多いんじゃないでしょうか。
64のは可変抵抗タイプじゃなくて光学タイプですが、タイプによらずああいうのは起こりうるということです。

とはいえ、ドリフトの根本原因の大きいところを潰せてるわけだから、ホールセンサータイプは圧倒的にドリフトが起こりにくいと言っていいと思います。

ホールセンサータイプのコントローラー

そんなにいいなら、全部ホールセンサータイプにすればいいじゃないって思うかもしれません。
でも、ホールセンサータイプはコストが高くなりがちだったり、設計が複雑になりがちだったりします。

ホールセンサータイプのジョイスティックと言えばセガサターンマルチコントローラー(通称マルコン)がありますが、ジョイスティックの構造はこのようになっています。

ジョイスティック側には磁石を貼付、基板側にはホール素子とアンプ等を用いた検出回路を設置と、かなり面倒な作りです。

このおかげもあり、マルコンはおよそ30年前のコントローラーにも関わらず、驚異の耐久力を誇っています。
マルコンUSB拡張ユニットを使ってPCやSwitchに接続して遊んでますが、ジョイスティックの劣化を全く感じずに軽快に使えています。
機械的な強さもあるかとは思いますが、これは本当にすごいですね。

終わりに

今回はコントローラーのドリフトの起こる仕組みについて解説しました。
可変抵抗タイプのジョイスティックはドリフトが避けられないということが知れたかと思います。
実際にはここにキャリブレーションとかもあるから、もう少し複雑だったりします。

今回は解説しませんでしたが、ドリフトもゴミが入って詰まるタイプとかバネがヘタってニュートラルに戻らなくなるタイプとかもあります。
こういうのは理由が明らかなので解説を省きました。

ちなみに、僕の持ってるSwitch プロコンは、ジョイスティックとシェルが引っかかるようになってしまって、うまくニュートラルに戻らなくなりました。
加えて、端まで倒れないと判定されてるため、Switch内のキャリブレーションツールではキャリブレーションできなくて困っております。
うーむ。

ホールセンサータイプのジョイスティックの話はかなりあっさり書きましたが、また別で解説記事も書こうかなと思います。たぶん。
気長に待っててください。

今回はこれで終わります。
読んでくれてありがとうございました。

  1. 抵抗膜の抵抗値Rは次の式で書けます。
    R = ρ L / (w t)
    分母に厚みtが入っており、抵抗膜が削られて厚みが減ると抵抗値が上がります。
    (Lが抵抗膜の端から摺動子との接点部までの長さ、wは抵抗膜の幅、ρは抵抗率という物質によって決まる定数。)
    ↩︎
  2. 実際には一つのADCを複数の軸に割り当てているかなどで、耐性やどの方向に倒れにくくなるかは変わります。 ↩︎
シェアして応援お願いします
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次