Raspberry pi picoを使ったトラックボールモジュール設計1(基板・筐体編)

2024/05/11に公開

はじめに

この記事では、トラックボールを二つ搭載したキーボードのトラックボールモジュール部分の実装例について解説したいと思います。
マイコンボードにはraspberry pi pico、センサーはPMW3360を使用しています。

2024/11/07 加筆

  • 回路の見直しを実施しました。
  • Vial対応のファームウェアを追加しました。
  • SPI設定を「1」から「0」に変更しました。
    2025/1/13 加筆
  • トラックボール回路図のレギュレーターが、センサーの動作電圧範囲に対し下限だったので、TLV70018DDCR→TLV70019DDCRに変更しました。

基板設計

pinout(pico)

SPI通信を行うは場合、ピンの組み合わせに制限があります。
割り当ては下記になり、SPI0、1は使用するところに応じて接続する必要があります。
NCS:CSn
SCLK:SCK
MISO:RX
MOSI:TX
今回はGP4、GP5、GP6、GP7 GP9、GP12、GP13、GP14、GP15を使っていきます。

回路図

データシート を参考にしました。

  • pico側の回路の接続はFirmWearのReadmeに記載しました

  • sensor側の回路になります。
    データシートで見落としていたパスコンのなどを追加しました。
    パスコンについては色々な記事が出ていると思うので知らない方は検索してください。



基本的には上下同じですが、NCSの接続先が違います。

PCB

メイン基板とトラックボール基板は切り離して使います。
コンデンサ(キャパシタ)はバイパスコンデンサとしての機能のため、
電源側はセンサー→コンデンサー→マイコンとなるようにし、なるべくセンサーに近づけました。
幅を狭くしたかったので、パッドや部品は上下に配置しています。

筺体

TB基板の固定方法

  • 基板はボールケースの土台にねじ止めしてます。
    ※添付写真は初めて制作した試作品になります。
    形は変わりますが、最新の物でも同じような思想で設計しています。
    ~XHコネクタと配線を使って、パームレスト内部で接続できるようにしています。
    圧着工具はこちらの物が、お値段の割に使いやすく失敗もなくできているので、重宝しています。

ボールケース

  • ボールサイズは22mmと44 55mmを使用しています。
  • 内側の隙間はケースサイズにより微妙に変えています。
  • 支持にはそれぞれセラミック球とベアリングを使用し、均等になるように3箇所配置しています。
  • センサとの距離はデータシート通り7.4mmとしました・データシートでは7.4mmとなっていますが7mmとしています。
  • ケースでセンサーのレンズを抑え脱落しないようにしています。

右手側は大きいボールを掌の中に収めるため、左手側は親指キーが押せるように、可能な限りボールが低くなるようにしています。



  • 組み立てるとこんな感じです。

ベアリングについて

  • ベアリングの軸はh7のシャフトを使用しています。用途的には-公差の軸ならなんでもいいと思います。
  • ベアリング内輪のみ当たるように溝の側面を凸形状にしています。
  • ケースへの取り付けいい感じにスナップフィットに出来ないか検証中です。
    (現状きつめの溝に押し込んでいます。)
    スナップフィット対応しました! 上手く書けないので、どんな感じか見たい方はイベントなどでお声がけください。
  • ベアリングはシールドor非接触シールがよいと思います。
    私は今の所シールドを使用しています。
    シール無しはごみがはいる環境なので良くなさそうですし、接触シールは静摩擦が大きくなるのでベアリングにしたメリットが薄れてしまいます。

まとめ

この記事では、自作キーボードのトラックボールモジュール部分で設計中に調べたり試行錯誤したところを中心にまとめました。
ファームウェアに関しては、後日まとめたいと思います、Vial対応のファームをこちら
に公開しました。
記事に不備などあれば、コメントやX(旧Twitter)にDM頂けると助かります。

参考資料

データシート

RaspberryPiPico
PMW3360

さいごに

  • 今は試作が一旦完成したところなので、進捗等はX(旧Twitter)でもつぶやいて行きます。よければフォローしてください。
  • 不明点などあればお気軽にコメントやDMいただければと思います。
  • このブログ記事の内容によって生じた損害等の一切の責任を負いかねますので、ご了承ください。使用の際は問題ないことを確認の上ご利用ください。
  • この記事はomni CS 47で加筆しました。
GitHubで編集を提案

Discussion