USB keyboardのテスト

2008/08/28工作::USBimport

USB keyboardの話

HIDとして,キーボードとマウスは抑えておきたいところである.そこで,キーボードについて,仕様ではよくわからなかった動作について確認する.PCやOSに依存するかもしれないので,ここで記述する事項は実際に試したこと,推測(妄想)事項であることを明記しておく.
何らかの明確な動作に関する資料が開示されているのであれば,ポインタを教示いただきますと幸いです.

実験と確認

先日の疑問について,実装して確認する.
デバイス側のマイコンから,キーコード(usage ID)を送信し,PC側でどういう挙動を示すかを調べる.

(1)	{0x00, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(2)	{0x01, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(3)	{0x00, 0, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A },
(4)	{0x00, 0, 0x07, 0x08, 0x09, 0x0A, 0x05, 0x06 },
(5)	{0x00, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // nothing
(6)	{0x00, 0, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00 }, // space

	結果.
	"abcdefg "の繰り返しとなる.
	 456789a

	"押している"情報であることがわかる.
	(1)-(2)で 'a'を2回送っていることになるはず.(2回数はshift押下)
	(3),(4)で並びを変えてみたが, 反応ナシ.
	(5)で全部離したと認識して, "bcdefg"をinput.
	このとき,押下情報(3)の若い順に入力されたと考えられる.(並びを変えて確認要)

	また,別キーボードにてshiftを押下したところ,押下中は文字サイズが変わった.

# 教訓.スキップせずにコツコツと進みましょう:)

"abcdefg "....

(1)	{0x01, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(2)	{0x00, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(3)	{0x00, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // nothing
(4)	{0x00, 0, 0x07, 0x08, 0x09, 0x0A, 0x05, 0x06 },
(5)	{0x00, 0, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00 },
(6)	{0x00, 0, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00 },

	"adefgbc "で繰り返された.
	(1) 'a'を押下,
	(2) 'a'を押下しながら shift押下
	(3) 'a'とshiftを同時に離す. 
	 → (shiftはキーの前後でon状態を保つ必要がある? 少なくとも入力時に同時か一つ前?)
	(4) d,e,f,g,b,c を押下
	(5) 'g'だけ離す...
	(6) b-fを離して, spaceを押す.


(1)	{0x01, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(2)	{0x01, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // shift入れてみる
(3)	{0x01, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(4)	{0x00, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // shift入れてみる
(5)	{0x00, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // nothing
(6)	{0x00, 0, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00 },
(7)	{0x00, 0, 0x05, 0xC6, 0xC4, 0x00, 0x00, 0x00 },
(8)	{0x00, 0, 0x05, 0xC6, 0x00, 0x00, 0x00, 0x00 },
(9)	{0x00, 0, 0x05, 0xC6, 0xC4, 0x00, 0x00, 0x00 },
(A)	{0x00, 0, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00 },

	^a
	^a
	def
	0xC4/0xC6は無視されたぽいな..
	b
	<space>


!ここでReport descriptorのUsage Maxが 0x65なのに気づく.
0xE7とすることで,定義値全て有効になるはず..

(1)	{0x02, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(2)	{0x02, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // shift入れてみる
(3)	{0x02, 0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 },
(4)	{0x00, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // shift入れてみる
(5)	{0x00, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // nothing
(6)	{0x00, 0, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00 },
(7)	{0x00, 0, 0x05, 0xC6, 0xC4, 0x00, 0x00, 0x00 },
(8)	{0x00, 0, 0x05, 0xC6, 0x00, 0x00, 0x00, 0x00 },
(9)	{0x00, 0, 0x05, 0xC6, 0xC4, 0x00, 0x00, 0x00 },
(A)	{0x00, 0, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00 },

	ならなかったなぁ.
	AAdefb "Shift"は同時に離しても,跡で開放でも良いみたい.

min.max.を 0x80 - 0x7Fにしてみた.
	→値全部無視された.SHIFTのみに反応して,"固定キー機能"ダイアログが出てくる.

0x00 - 0x00E7にしてみたが,駄目だな. 
keypadになると,usage sub-IDが変わってくるので,無視されるのだろう.
table中,keyboard/keypadと明記されていたのはコレによるものと思われる.
分けてくれよ...

utility関数の作成

usage IDとASCIIコードとはテーブル引きするしかなさそう.US keyboardをベースにしているらしく,日本語keyboardとは異なるマップと考えるしかない.また,SHIFT/CTRL等の情報は文字とは別です.
前述の結果より,本I/FでPCが受信するのはキーの押下情報であり,入力された文字情報ではないです.文字入力の肩代わりをさせる場合,ほかのキーボードとの干渉を考慮する必要がありそうです.
ゲームの入力装置として考える場合は,押下情報であったことは良いことでしょう.同時押し6つまで認識してくれそうです.(SHIFT/ALT/CTRLは別腹で同時押し可)

ASCII文字 - 0x20を index0として,下記のIDを送ると良い.
ただし,"SHIFT+"は,SHIFTを押下しながら文字を入力した場合であり,単純に1倍との送信では実現できない.

0x2C, SHIFT+0x1E, SHIFT+0x34, SHIFT+0x20, SHIFT+0x21, SHIFT+0x22, SHIFT+0x24, 0x34, SHIFT+0x26, SHIFT+0x27, SHIFT+0x25, SHIFT+0x2E, 0x36, 0x2D, 0x37, 0x38,
	// 0x20~0x2F, → <SPC>!"#$%&'()*+,-./
0x27, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, SHIFT+0x33, 0x33, SHIFT+0x36, 0x2E, SHIFT+0x37, SHIFT+0x38
	// 0x30~0x3F, → 0123456789:;<=>?
SHIFT+0x1F, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
	// 0x40~0x4F, → @ABCDEFGHIJKLMNO
	// 0x89 : Keyboard International3(17) => '\'キー
0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x2F, 0x31 ,0x30, SHIFT+0x23, SHIFT+0x2D,
	// 0x50~0x5F, → PQRSTUVWXYZ[\]^_
0x34, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
	// 0x60~0x6F, → `abcdefghijklmno
0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, SHIFT+0x2F, SHIFT+0x31, SHIFT+0x30, SHIFT+0x32, 0x2A
	// 0x70~0x7F, → pqrstuvwxyz{|}~<DEL>


複合デバイスの作成

作り方

PSoC環境を使う限り,自動的にInterface数を把握して,standard requestに応答してくれる模様.便利ですな.. *1

  1. Descriptorにinterfaceを追加する.
  2. EPを追加する.
  3. Report descriptorを追加する.

メモ
PSoCのEPは,入出力で同じIDが使えない?simple IOの実装でEPを1/1または3/3としたときに,IN応答が無かった.OUTを受けてからIN transactionを起こしていたので,先に処理したモン勝ちか?詳細はPSoCのTRMで確認する予定.
【宿題】の結果,下記の記述が見つかりました.

PSoC TRM, Document No. 001-14463 Rev. **
34. Full-Speed USB

The SIE supports five endpoints including a control endpoint (endpoint 0) and four data endpoints (endpoint 1, 2, 3, and4).
The control endpoint can be configured to support SETUP, IN, and OUT requests.
The data endpoints can be individually configured to respond to Interrupt, Bulk, or Isochronous IN or OUT requests.

ということで,EP1~4は,INかOUTのいずれか1つしか取れません.したがって,インタフェースIN/OUTを2つ用いるデバイスでは,EPも2つ消費します.入出力対応しているEPであれば,EP数を削減できたのですが.まぁ,物理的な制約であり,仮に入出力OKでも,IDが経るなら同じなので,こんなもんなんでしょう.
キーボード,マウス,+α(入出力)とするならば,キーボードのLED出力は受け取れないということですね.

デバッグ・お試し時のメモ

PID/VIDが同じだと,Windows Device ManagerがInterfaceを覚えているようだ.
複合→単純に変えたとき,2度目以降は複合として扱われた.
Device Manager → USBコントローラ の 該当するVID/PIDの複合デバイスを削除することで,再度認識してくれるみたいです.


*1 : 仕組みを理解する上では,手抜きになってしまうなぁ.

参考サイト



wiki機能でコンテンツにしているけれども,まとまってないな...
日々書き散らかしてまとめていないからかなぁ.使い方間違ってる?w

USB関連覚書

2008/08/26工作::USBimport

資料入手先等

仕様書関連

個人サイト等実装例

  • The HID Page, Jan Axelsonさん, [http://www.lvr.com/:Jan Axelson's
    ある意味総本山?ホスト側ソフトも充実していて,さらにリンクも良い.

Lakeview Research]

2008/08/26(火)[USB][HID] キーボードとマウスと.(その1)

USB接続のキーボード・マウス・GPIOを増設する

という目的をあげました.いろいろ着手しかかりで,どれも完結してないのはご愛嬌:)

コレも2年ほど前にGPIO+CapSenceやろうとして,頓挫したままになっていたプロジェクトです.せっかく復帰したので,基本的なUIのキーボードとマウスの機能も持たせたいと思います.

前提条件と手順は,以下のとおりとします.

  • ホストは Windows XP,開発環境は...任意w
  • cypress のPSocであるところの,CY8C24894を使う
  • マイコンとPCとをつないで,デバイスの認識を行う
  • HIDデバイスとして認識させ,Windows標準ドライバを用いることでドライバの開発を避ける
  • キーボード押下情報の送達確認
  • マウス操作情報の送達確認
  • 汎用IOとしての,マイコンとのデータ授受確認(非USB-UART Bridge)

注:正しい用語を使って説明できていないです.作業メモとしてざっと書いているのでご容赦を.もし万が一,パクられる参照される時は,ものの本を見ながら単語の修正をしたほうがいいです.


マイコンとPCとをつないで,デバイスの認識を行う

何もナシだと辛いので,とりあえず検索してみましょう.ただし,手元に資料も欲しいので,後述する資料をそろえておくことを推奨いたします.*1

HIDとしてテキトウIOデバイスを作る

まずは,参照場所-個人(1)を追いかけてみます.
PSoC Designer ver.5でnew projectを作って,USBFSモジュールを追加, Wizardでdescriptorを記述していきます.本家のツール*2よりも使いやすくてイイデスネ.
サクサクと終わるかと思いきや,PCからHIDデバイス,という認識まではされたけれども,ドライバがinstallされない事態に.デバイスマネージャでUSB/HIDのアタリをあさってみると,黄色いびっくりマークがついてます.propertyでVID/PIDを見ると,確かに作ったデバイスです.Setupは飛んでいるみたいですが,どこかで調子悪くなっているようです.昔々に同じことになっていた記憶が・・・.

packetが見たい

さて,何もいわずに黄色いびっくりマークを出すだけで,何を言いたいのかわかりません.そこで,USBのプロトコルアナライザーでもあればスイスイ?なのですが,(検閲削除)なので,ソフト的に対処してしまいます.
探してみると,USB Snoopy Proというフリーソフトが出てきました.使い方は解凍してでてくるREADME.TXTのとおりです.見ずにやるとうごかねぇぞゴルァとなるかもしれません:)

結果,どうやらHID Report descriptorを受けたあとで,RESET PIPEなるコマンドが飛んでいます.Descriptorの記述に不満がるようです...HIDの面倒なところはココですね.
参照個人サイト(1)の,絵を見ながらまねていたのですが,下記2点のミスによるものでした.

  1. 見落としがあったこと
  2. 見ているうちにマウススクロールでHID-ReportではなくHID-Physicalになっていた

これに気づくまでにいろいろと検索したり,本を見たりして時間を費やしてしまいましたわ.まぁ,次の予習になったので結果オーライってところでしょうかね.


キーボードとマウスもつけたい

汎用IOだけだと面白くない.せっかくなので,キーボードとマウス機能もつけてしまいましょう.
どうやって複数機能を持たせるのかナァと不思議に思っていましたが,今は納得.

同じように疑問を持っている人がいた*3ので,さくっと解決.HID Report Descriptorで,複数の機能を宣言するだけでよい.それにあわせて,EndPointもしっかりと割り振ってやる必要があるけれども..

やり方がわかったら早速実験.PSoC DesignerでUSBFSのdescriptorを編集していきます.これまたびっくりマークに悩まされたりするわけですが...
詳細は後日.とりあえず認識するまでのダイジェストだけ.

  • EP1は OUT INTERRUPT, MaxPacketSize=8. キーボード
  • EP2は OUT INTERRUPT, MaxPacketSize=8. マウス
  • EP3は OUT INTERRUPT, MaxPacketSize=32. マイコン通信用
  • EP4は IN INTERRUPT, MaxPacketSize=32, マイコン通信用
  • Packet Sizeは Report descriptorのサイズ以上ならOK
  • HID spec.のappendixにあるキーボードにはOUTもあるが,削除可能.これでEPを稼ぐ.複数キーボードがある状態で,制御キー(?)のLock状態が見えないようになるのではないか?(要確認)
  • HID Report Descriptorの書式は理解しづらかった.仕様書・書籍・WEB Site,実機をいじくってなんとなく理解したつもり..?

今日はココまで.乞うご期待(ぉ


*1 : WEBに書かれている個人の発信を全て丸呑みにせず,必ず本家の資料を見るように心がけましょう.

*2 : HID Descriptor Tool,dt2_4.zipというファイル.

*3 : usb.orgの掲示板にて,質問されてました.回答は日本人(^^;

今回の参照場所

書籍

USB 2.0とUSB On-The-Goを含むカスタムUSBデバイス開発のすべて USBコンプリート[第3版]
仕様書直訳したような文章ですが,すらすらと仕様書が読めない方(オレオレ),紙面で資料を持っていたい方にオススメ.下記のようにWEBで情報公開されている方も多いので,動くものをエイヤで作るだけならイラナイかもしれない.でもまぁ暇つぶしに読んでおくこともオススメする.


WEBサイト

(0) 総本山usb.org

何はともあれココから始まる.仕様書の類は一通り落としておきましょう.HID usage tableや descriptor情報など,必須な情報ばかりです.このアタリの情報をあわせて記述しているサイトがあまり見当たらなかったので,本記事を書くことにしました.
本日は記載しませんが,まとめてwikiネタとしてコンテンツにしておきます.動作確認できてから・・・.

(1) Flatol Lab

PSoCにおけるUSBと題して,モロに同じ石です.開発環境が1つ前のDesigner 4で紹介されていますが,操作方法は ほぼは同じです.

(2) PSoCでUSB

Snoopyの検索でヒットしました.みなさん考えること/やることは同じですね:)

(3) USB HID Notes

キーボード・マウスのReport descriptorと,デバイスから放り出すときのメモリイメージを参照.

2008/08/24(日)[製作] ヘッドフォンアンプ~その2

仮組み

先日の測定結果より,Vds=1.1Vの値を信じてテキトウに組み合わせた.
ペア組み+チャネルわけのおおよその選別思考は以下のとおり.*1

  • P-ch/N-chの電流差は0.2mA程度まで許容する.場合によりもう少し空いてもあきらめる.
  • 左右で,P-ch/N-chの総和が,それぞれ大きな差の無いこと.
  • 3~4パラの組み合わせとなるが,できるだけ左右に同じ程度の値を割り振る.(特性カーブをそろえるイメージ.一緒か?)

で,とりあえずブレッドボードに片チャネルだけあわせてみた.

FET_AMP_01.PNG

部品点数は非常に少ないので,両チャネル実装できるか?と思ったが,クリップ類が少なくて実装できなかった.*2


せっかくブレッドボードに組んだので,出力段のシリーズ抵抗を差し替えたり,FETのパラ数違いを聞いたり,入力に発振防止?のシリーズ抵抗をバイパスしたりと聞き比べてみた.無論,エージング前・暖気もそれほどやっていない状態での試聴であることをご容赦いただきたい.

出力段のシリーズ抵抗
MPCの1Ωと0.33Ωの2種類を用意してあった.1Ω→0.33Ωでは,同じ入力ATTで音量が増えたように感じた.シリーズ抵抗が減るのだから,ヘッドフォンに入る電力が入ることから当然である.
FET3パラ→2パラ
最低BLランク3パラ以上,といわれていたので,その差分を確認したかった.条件をイーブンにするため,入力ATTを同じ値(クリック数で調整)とした.
電流そのものが変わってしまうため,当然音量は下がる.また,音量を上げたときに,低音が弱まったような感じを受けた.歪んでいて,ヘンに聞こえた可能性もある.自分の耳を信じないなら,オシロで観測すべきなのだろうか...
少なくとも2パラはダメだと判断.4パラにすべきかなぁと考える.
入力ATTの直後のR
作例だと100Ω.よさげな抵抗は91Ωを入手していた.記事にあるとおり,min/maxにボリュームを振らなければ,0Ωでも良いとあったので,+1クリック状態でバイパスした.
確かに音が変わる.高音の伸びが変わったように感じる(気がする).好みにも依るのかもしれないが,この抵抗は取っ払ったほうが良い.エージングすれば変わってくるのだろうか...
取っ払ってGND電位(ボリュームを絞りきった状態)にしたが,特に変な音は聞こえなかった.*3

とりあえずこんな感じかな...Vランクへの換装も考慮して,基板に実装するのはFETと抵抗までにしよう.OSコンをFETに近接させるなら,同じ基板に載せないといけないわけだが,悩ましいな.2.5V品のOSコンは在庫に無いぜ・・・.電圧上げて,エージングのときだけ投入電圧を上げて回復させてみるってのもアリかな.


試聴に使った曲は,水樹奈々 Secret Ambition(高音ヴォイス確認,楽曲音が溢れてる?あたりの解像度確認?),神尾真由子PRIMO(AA)収録のヴァイオリン曲(高音ソロ確認?)
ヘッドフォンはaudio-technica ATH-AD1000 オープンエアヘッドホン(AA)を使用.他に持ってない(ぉ.コミケの試聴のときに,密閉式もいいなぁと思った.外の音をシャットアウトしやすいからネェ...

*1 : 測定結果のとおり,かなりばらついており,片チャネルでも3~4パラ,8組は必要となるので,手持ちだけで試行錯誤して決めた俺ルール.理想は全部同じIdssじゃないかな...
結果,左右でIdss総和に2mA程度の差が出る模様.チャネル内でも0.3mA程度は覚悟しないとダメかな..動作時の電流を見てみないとわかんないけど.

*2 : 今気づいたが,引き出しに在庫があった気がするな...

*3 : 誤って入力を浮かすとハムノイズが聞こえた(ぉ

次回

ということで,パネル加工しないとくみ上げられない罠.
ペア組だけであーだこうだと脳内懐疑を行い,小一時間は消費した気がする.ブレッドボードいじりも1時間弱いじっていたかもしれないw.方耳だけなので疲れたわ.
パネルと言っても,スイッチとボリュームと入出力端子(3.5φのジャックかな)だけですからねぇ.

先日の基板については,どうやらケース内部の干渉する領域にあわせて基板を加工する必要がありそう.加工したところでボリュームが入らなくなるのは自明.秋月のちっさい基板に詰め込むことが確定.空中配線でも良い規模だけどネ.FETの挿抜が予想されるから,両面スルホール基板で待ち構えておくのが良いだろう.コネクタ類は,接触抵抗が増えるだけなので,パネルとの接続はハンダ付けしてしまう.取り替えるときに面倒だが,致し方あるまい.

進捗悪いのは,まぁ,よくあること.N:TMで配るかもしれない名刺の作成とか,久しぶりにゲームやったら明け方まではまったとか(マテ

NTM_namecard.PNG

こんな感じ.絵はたむ師匠.年季バックナンバーの裏表紙から引用.該当バックナンバーの在庫があるので,これをもっていく予定.もちろん無料配布w

Mega128基板も希望者に配布するかなぁ.マイコンと抱き合わせで1kとかどうだろう.今は価格下がってるかナァ.バグ入り基板だからなぁ(ISP接続)

進捗が悪くてすみませんね...まとめてからうpするほうが,読者から見ればよいのですが,モチベーション維持のため小出しにさせていただいております.*4

*4 : 小出しというか,進捗状況をそのまま出しているので出し惜しみは無いです('A`

2008/08/23(土)[製作] ヘッドフォンアンプ~その1

動機

単3電池式 高音質ヘッドホンアンプ(改良型)の追試というか,製作をなぞってみる.

材料はそろえたハズなので,JFETのIdss測定を行い,実際の製作準備を進める.

Idss測定

Idss 測定 JFETで検索すると,いくつかのWebPageで測定例や冶具紹介をみることができる.私も冶具を作るかナァと考えていたものの,作らずじまいである.今回は手軽にブレッドボードと安定化電源・テスタ2つを用いて下記の要領で測定した.
ただし,個人的解釈による実践であり,文献の参照等,裏づけをもって作業をしているわけではないので注意されたい.データシートのIdss測定条件とも異なるので少々不安ではあるが,今回のヘッドフォンアンプの電源は乾電池であり,その電圧におけるIdsを汁必要があると判断した.

測定手順
  1. 測定方法は,G-Sを短絡し,接地.
  2. Vdsに電圧を印加して,Idsを測定する.

ただし,測定器の内部抵抗を考慮し,素子のD/Sに電圧計を並列に接続する.
素子と電圧計をまとめた端子に対して,電源から電流計を通して電力を供給する.
Vdsの電位が測定希望値となるように,電源の出力を調整する.

即定時の注意事項

素子の温度変化により電流値が変化するので,素子温度をあわせて測定することが望ましい.
素子によっては電圧印加時にばたつくことがあるようだ.*1

Vdsが低い場合,30秒程度で落ち着くことが多く,その後に測定することとした.
Vds=10.0V時には,時間が経つにつれIdsが増加した.パッケージを触ると暖かくなっており,息を吹きかけて冷ましてやると電流が減少することを確認できた.このことから,低電圧で安定させてから,10Vにあげて可能な限り早く電流地を読み取ることとした.2SK170の動作電圧付近のデータを取り終わってから,Vds=10の値も見てみたいと思い,2SJ74の即定時にのみ当該項目を加えた.

測定結果

千石電商で3個入りの個袋をそれぞれ5セット,15個購入しました.場所は大阪日本橋店です.関西にもできて助かってます.


2SK170BL

1.001.101.20
6.136.186.23
6.206.256.30
6.276.326.38
6.396.466.52
7.187.257.32
7.547.627.69
7.737.817.88
8.758.848.92
8.848.929.00
8.898.999.08
9.119.219.30
9.189.289.37
9.259.359.44
9.379.479.57
9.539.649.73

ただし,項目はVgsの電位を示す[V].各測定値の単位は[mA].


2SJ74BL

10.01.001.101.20
6.786.296.316.33
7.446.906.936.96
7.466.906.926.95
8.107.537.567.59
8.207.657.687.71
8.397.777.807.83
8.527.977.998.01
8.537.978.008.03
9.378.698.738.76
9.739.029.079.11
10.109.469.509.54
10.329.669.719.74
10.339.749.799.83
10.359.649.699.74
10.449.819.869.90

ただし,項目はVgsの電位を示す[V].各測定値の単位は[mA].
値の符号は全てマイナスを省略.


*1 : ぼろい電源を使ったので,ソレのせいかもしれないが・・・

下準備完了?

測定結果より,オフセットが出ないように旨くペアがとれるかどうか.片チャネルで3~4個使う必要があるようだが,コレは少し厳しいか.最終的に負荷にIdssの総和が等しければゼロ電位の際にオフセットがでなくなるが,特性曲線が全て相似ではないと考えられないだろうか.

甘い考えで行くと,多少,歪が増える程度か?
それよりも電流バランスが異なるということは,熱結合しておいたほうが良いということだろうな..電流流せる素子が,発熱して,より電流を流そうとしてしまい,ばらつきが大きくなる=歪が大きくなる,と考えられるのではないか.ペア品と言っても,カーブが違うから正弦波入力時に正負の入力に対してそれぞれの出力が異なるのだろうな..
ということで,真面目にペアを考えるなら,P-ch/N-chそれぞれの総和が等しい=オフセット電位を出さない,かつ,各チャネルのFETのIdssも,動作電圧において等しい必要がある,ということだろうか.

15個でコレだけばらつくと,確かに100個や200個以上選別する必要は感じるな・・・.コストと労働力が問題だナ.今回は・・・,左右のバランスも考慮して,できるだけ総和が等しくなるように選別しよう.かつ,FETの1対1ペアはVds=1.1付近で調整するか.eneloopを前提とするならば,1.2V程度の滞留時間(?)が長いようだしな.P-ch(2SJ78)のほうが,Vdsに対してIdssの変化がゆるいので,電池電圧によってオフセット電圧も変わってきそうだねぇ.細かいところだと配線の対象性も確保しておかないと,綺麗にはできない,と.

まぁ,ヘッドフォンにDC印加して,もしかすると寿命が縮むとか,性能を発揮できないという状況がでるかもしれない,といったところだろう.あまり気にせずに軽く作ってみるか.FETはパラ数を増減しやすいように蛇の目に配線しておくことにしよう.
その前にケースに入るよう,基板を調整しないといけなさそうだな..."入る"と書いていたのに,さくっと入らない罠.なんか間違ってるかな・・・.