wararyo SoundWorks

DTMをガチでやりたいとある学生が、自身の経験と成長を記録していくメディア。

足元で横スクロールできるデバイスを作ります:回路編

time 2019/06/09

足元で横スクロールできるデバイスを作ります:回路編

ブレッドボード上で設計して動作テストまで行きます。wararyoです。

約一年前にこのような記事を投稿しました。

足元で横スクロールできるUSBデバイスを作ります:構想編

今回はこの記事の続編です。

今回はソフトウェアと電子回路を設計していきます。

もしあなたがDTM界隈の方なら、この記事の大半は意味がわからないかもしれません。
こんな界隈もあるんだと思いながらご覧ください。

sponsored link

V-USBでUSBマウスを作ろう

USBマウスを作るにあたって、今回はAVRマイコンのATTiny85と、AVR用USBライブラリのV-USBを用います。

V-USB

USBマウスはHIDデバイスの仲間なので、基本的には「V-USB HID」で検索すると出てくるソースと公式の回路図を参考にすれば作ることができます。

しかし一つだけ工夫しなければいけない点がありました。

横スクロール対応のHIDディスクリプタを作る

HIDディスクリプタとは、USB HIDデバイスがホストに対し「自分は何者なのか、何を送信して何を受信したいのか」を伝える自己紹介文のようなものです。

「私はキーボードです。キー情報を送信します。Caps LockがONかどうか教えて欲しいです」
「私はマウスとキーボードが合わさったデバイスです。左右移動とカーソル移動とキー情報を送信します」

みたいな感じです。

そして今回作るデバイスはこんなカンジにしたいですよね。

「私はマウスです。横ホイール回転を送信します」

ところが、(考えればわかる話ですが)
巷に溢れるUSBマウス用HIDディスクリプタのサンプルは縦スクロールばっかりです。

↓これは横スクロールできないUSBマウスのディスクリプタ

さらに、初期のUSB HIDの仕様には横スクロールが定義されておらず
MicrosoftがWindows Vistaで初めて導入したようです。

参考: Enhanced Wheel Support in Windows

HIDディスクリプタにおいては、
スクロールホイールのことをWheel
スクロールホイールのことをAC Panと呼ぶようです。

↓これは横スクロール対応したUSBマウスのディスクリプタです。ついでにスムーススクロールにも対応しておきました。

しかし、果たして現在USB HIDの公式仕様の中にAC Panが含まれているのかは不明です。
あと、AppleはWindows Vistaが出る前から横スクロール対応マウス出してましたよね?
あれはどうしてたんでしょうか。未だ謎は残ったままです。

ロータリーエンコーダーの調理法

壁はもう一つあります。ロータリーエンコーダーです。
ロータリーエンコーダーとは、回転を電気信号として読むための部品です。

ロータリーエンコーダーについて詳しく知りたい方はこちらが参考になります。

マイコンでロータリーエンコーダーを扱う方法は大きく2つに分けられるようです。

  • A相立ち上がり時に割り込んで回転が起こったことを検知、B相がHighかLowかで回転方向を見る
  • A相とB相を定期的に読みに行き、前回読んだ値との違いで回転したかどうか判断する

前者より後者の方が解像度が高い(4倍)上にチャタリングにも強いですが、後者は速く回しすぎると不安定になります。

とりあえず両方実装してみました。どっちを採用するかは筐体が完成してから考えます。

これにてソフトウェアは一旦完成です。

全体のソースコードはこちら

なぜかツェナーダイオードは使えず

とりあえずブレッドボード上に回路を組んで、動作実験です。

あれ…動作しない…

そもそもUSBデバイスとして認識してくれませんね。

結論から言うと、ツェナーダイオードを使わずに回路全体を3.3Vで動作させることで解決しました。

どういうことかと言うと、そもそもUSBの電源電圧は5Vですが、データ線の電圧は3.3Vです。

よってどこかで電圧を下げる必要があるのですが、今まではツェナーダイオードを用いてデータ線の電圧だけ下げる方法を取っていました。
しかしそれではなぜ動作せず、回路全体の電圧を3.3Vに下げることで動作しました。

理由はわかりません…できればツェナーダイオードを使いたいところなんですが…

平滑しすぎには気をつけろ

ロータリーエンコーダーも動作がおかしいようでした。全部ダメじゃねえか!

こちらの原因は念のために挿しておいたコンデンサーでした。
チャタリングを防ぐお守りとしてコンデンサーで平滑していたんですが、平滑しすぎて回転が取れていなかったみたいです。

これのせいで1日溶かしました。あぁ…

KiCadで設計

回路のテストも終わったので、KiCadで実際に組む回路を設計します。
といっても、プリント基板にするわけではなく、ユニバーサル基板で手ハンダ実装です。

前回軽く紹介した画像から少し変更を加えています。

こんな感じになりました

ブレッドボード上の配線を整理して動作実験。上手くできました!

次回予告

Fusion 360で筐体を作ります。実際に制作し始めるのはもうちょっと先です。

\シェアできます/

sponsored link

down

コメントする