2014/06/11

G300におけるレポートレートとレジスタアクセスの考察

個人的に推しているG300ですが、X、Y変位がオーバーフローするのを見てみたいので、ちょっとした実験をしました。

実験方法

1.マウスをぶんぶん振り回してログを取る。レポートレートは125Hzと1000Hzで行う。
2.最大値を最小値を抜き出し、考察する。

結果

・125Hz : -2032 ~ 2048
・1000Hz : -254 ~ 256

なるほどなるほど。色々と判明しました。

考察 

・センサの向き
最小値と最大値がそもそもおかしいです。ADNS系センサは、右方向を正の数として-128~127の値を取るはずなので最小値の絶対値は最大値の絶対値より大きいはずなのです。これから考えられるのはセンサが逆向きに付いているということ。

→ 確認した所、実装方向が逆向きでした。リファレンスデザインでは奥にあるはずのロゴが手前に来ています。このままだと出力がおかしいのでMCU的に正負を逆転しているのでしょう。こういった実装の意図は不明。
ユーザ的には、上下逆だろうが1カウントしか違わないのでほとんど関係ないです。


・レジスタへのアクセス間隔
あり得ないですが、「カウントをソフトウェア補間で倍にしている」という最悪のケースを考慮しなければ、1000Hzにおいては1レポート当たり2回、125Hzにおいては1レポート当たり16回でしょう。要するに毎秒2000回。

こうすることである程度のオーバーフローは防げますね。


・レポートレートの実装
アクセス間隔から考えるに、2000回のアクセスは全てのレポートレートで固定です。
センサから値を取得する度にMCU内の変数に加算しておき、レポート時は変数値を転送するような感じでしょうか。


・オーバーフロー対策
ローセンシプレイヤーは2500DPI等の高DPIでは使わない。1000DPI程度にすれば並の人間が振れる速度でオーバーフローはしないので問題ありません。
ハイセンシプレイヤーは、2500DPIでオーバーフローするような速度で振ったらキャラクタが何周もするはず。なので、その速度域は使用しないはずなので問題ない。

最も問題なのがマウスが高DPIでゲーム内のセンシティビティが低いようなプレイヤー。
この場合はバランスを見ながらDPIを落とし、ゲーム内センシティビティを上げる。

2 件のコメント:

  1. G300が実用速度域で飽和するのに気づきませんでした。
    瞬間的に250cm/sを越えるような速度で動かす必要があるので気合を入れないと飽和させれませんね:p

    しかしあえて8msPollingも検証することで
    MCU⇒センサーへのPolling頻度まで予測することができるというのは
    とても勉強になりました。

    systemaさんの実験を踏まえて
    一つ気になったのは、センサーとMCUがG300と同じような構成のG100sだと
    2msPollingのとき±512カウント辺りではクリップしないことです。
    MCU⇒センサーへのPolling頻度がG300より高められているか
    またはセンサーの⊿X⊿Yレジスタのビット拡張がなされて
    同時にオーバーフロー耐性も上がったとかでしょうか?

    現在でも十分高性能なG300ですがもう一つ変身を残している状態ですね:)
    G302出て欲しいです!

    返信削除
  2. rafaさん

    コメントありがとうございます。
    確かにプレイ中に100IPS超えるのは至難の業ですね。
    そう考えると、2500DPIでも良いのかもしれません。

    仰るとおり、G100系の場合センサがA3055→AM010に変わった時に、XY変位用のレジスタがHとLに増えた可能性はありますね。rafaさんのブログを見る限り、Tracking性能やセンサの見た目も変更されているようですし、十分有り得そうです。
    ポーリング数の増加に関しても、毎秒3000回にするのは(恐らく)可能ですので、どちらもあり得るかと思います。

    G302、良いですね。物凄く欲しいです。

    返信削除