スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

J-FET選別ツールの製作・・・FETヘッドフォンアンプのために

ディスクリート・ヘッドフォンアンプの自力製作のために、2SK170の特性を測るツールを以前作った。

最近、携帯型ヘッドフォンアンプに凝ってしまい、「FETだけで作るヘッドフォンアンプたるやどんな音?」
というわけで、2SK170とペアになる2SJ74(既に生産中止!)を買い求めた。
単価240円の法外な?価格のところもあったが、240円/3個を千石で買えた。

ここで必要となるのが2SJ74に対応した特性計測ツールである。
以前、先のツールを作った際にこの回路で良い事がわかっていたが、同じようなものを2個作るのはあまり面白くない。

またまた私の中の悪い虫が動き出し、「PICを使ったJ-FET選別ツール」を作ることになった。
トランジスタhFE計測でのツール(このページの下)に味を占めているからかな。

かれこれ3週間もかかって、やっとのことで完成したのがこれだ。
PIC_JFET_5  【外観】
右上が電源スイッチ。左右でNチャンネル用、Pチャンネル用に別れ、真ん中下がその切替えSWです。

PIC_JFET_2  【内臓】遠景に見えるのが、「ほぼPICkit2」書込み器
内部はスイッチやLCDへのジャンパー線が一杯。基板下にオーバーハングして付いている四角いのが後で付けた回路切替のリレー
  
PIC_JFET_1
もともとはこんなにシンプルだったのにね。

そして、何度も修正・追加した回路図がこれです。
PIC_JFET_回路図
緑で囲んだところが後付けのPIC入力切替リレー

またまた、それ以上に修正したのがこの実体配線図
PIC_JFET_実体配線図

【簡単な構成の説明】

・電圧計を使う基本設計に対して、差動入力オペアンプとPICのAD計測を使用

・単電源・差動入力ではマイナス電圧はゼロ(というか誤動作)となる。配線に工夫が必要
 Vgs計測は表示で-を付与した。

・PICの電源は3端子レギュレータ78L05を使用

・PチャンネルのIDssを計測する目的でIDss用のIV抵抗を増設した。
 これは手持ちのオペアンプLM358がレールtoレールで無かったため?低い電圧領域ではうまく動作
 しないという予備テストによるもの ・・・・>結果としては不要だったようだ

・スイッチ1の位置を検出して、Id調整かVgs計測かを判定する目的で、回路図内Vin3電圧計測を
 追加した。これが12V近傍だとId、6V近傍だとVgsと判定する。(人間の目の機能の代替)

・NとPチャンネルの表示を切り替えるためにVin4にNチャンネル作動電圧を入力。
 これも私のお遊びです。切替は中央スイッチで判るので機能的に必須ではない。

・PICのAD基準電圧のためMCP1541(4.096V)を用意したが、PIC入力がこの基準電圧を超えたた
 めに使用しなかった。この部分は精度面で変える必要あるか要検討 (今の分解能では不用か)
PIC_JFET_4

【計測器の精度】
精度というほどのことは無いが、目標として1%以内の誤差には入って欲しい。
使用する部品の吟味、特にIV抵抗の値は実測した値を使用した。これをPICの計算式へ代入した。
それでも、Id計測では3.7%もの誤差が発生したため計算式で補正している。原因は不明。

Vgsはあまり補正せずともまずまずの精度かな。これが最重要な特性なので一安心!
PIC_JFET_1


【失敗談:私と同じ失敗をしないために・・・】 余計なことかな

1.配線を間違えて、PICのADに12Vをかけると 「AD動作がバラツク」
  過大入力としてその他は正常に動く場合と、「動きがたまに止まるケースがある」
  この動作バラツキで原因追及が遅れた。

2.1が原因でハンダ付け箇所を剥がすこと多々あり。「修復時にハンダ付けミス」を起こす。
  1のわけの判らぬ原因と交錯し、「思考がグチャグチャ」になる

3.(機械屋には) 電気は見えない。微小な漏洩も誤動作の源。
  接続してはいけない回路とは「きっぱり絶縁」しよう (追加したリレーのこと。多くは語りません)

4.FETを差し込む端子に丸ピン用ソケットは、「抜き」に引っ掛かりがある。
  ピンヘッダーのほうが良いかもしれない。

いやいや、語りつくせぬほどの失敗を重ねて、やっと作ったツールである。

・・・で、選別したJ-FETで作ったヘッドフォンアンプの音はどうだったの??

・・・・・・・・・ いやーー 何と言って良いものか ・・・  
私がこの3週間費やした成果は、「ありませんでした」・・・ むむむ、残念でーーーす。



気を取り直し、【初段FETの音の良さ】にすがって新しいアンプにトライしましょう ね。

あ、忘れていました。 参考までに小生が作ったPIC16F88用のプログラムソースを載せます。
元々はmikroCで作っていたものを、mikroBasicに置き換えたものです。

'===========================================================================
program J_FET_MESUREMENT

'/**
'* J-FETのIdss、Id調整したVgs計測ツール
'*
'* PIC16F88 @4MHz
'*
'* 電源:J-FET計測回路から3端子レギュレータで5V供給
'*
'* Device Flags1: _CP_OFF,_CCP1_RB#,_DEBUG_OFF,_WRT_ENABLE_OFF,_CPD_OFF,
'* _LVP_OFF,_BODEN_OFF _MCCR_OFF,PWRTE_OFF,_WDT_OFF,_INTRC_IO
'* Device Flags2: _IESO_OFF,_FCMEN_OFF
'*       
'* MikroC 8.1 By H.Igarashi
'*
'* PORT I/O
'* RA0: IN : analog volt from OP_Id and Vds to vin1
'* RA1: IN : analog volt from OP_Idss to vin2
'* RA2: IN : analog volt from S1 SW UP volt to vin3
'* RA3: IN : REF+ (4.096V) 今回は使用していない。VddがREF+
'* RA4: IN : analog volt from Nchannel Power ON volt to vin4
'* RB0: OUT: LCD_D4 11
'* RB1: OUT: LCD_D5 12
'* RB2: OUT: LCD_D6 13
'* RB3: OUT: LCD_D7 14
'* RB4: OUT: LCD_RW 5 (GND)
'* RB5: OUT: LCD_EN 6
'* RB6: OUT: LCD_RS 4
'*/

dim vin1 as integer
dim vin2 as integer
dim vin3 as integer
dim vin4 as integer

dim Idss as float
dim Id as float
dim Vgs as float

dim iIdss as integer
dim iId as integer
dim iVgs as integer

dim sVin as string[13]

main:
  OSCCON = %01100000 '//4MHz
 PORTA = %00000000 '//PORTAの中身をきれいにする
 PORTB = %00000000 '//PORTBの中身をきれいにする

  '//
 ANSEL = %00011111 '//RA0 & RA1 & RA2 & RA3 & RA4 is ANALOG INPUT
  '//
 TRISA = %00011111
 '//
 TRISB = %00000000

 ADCON1.ADCS2=1
 ADCON0.ADCS1=0
 ADCON0.ADCS0=1
  '//ADCON1.VCFG1=1; //Vref+ is Vref+(RA3),RA3 Vref+ is 4.096V = 1023
 ADCON1.VCFG1=0 '//Vref+ is AVdd
 ADCON1.VCFG0=0 '//Vref- is AVss

  '//LCD Init
 Lcd_Config(PORTB,3,2,1,0,PORTB,6,4,5)
  'Lcd_Init(PORTB) '//これを入れてはダメ、ハングする
 Lcd_Cmd(Lcd_Cursor_Off)
 Lcd_Cmd(LCD_CLEAR)

 Lcd_Out(1,1,"FET Vgs-Mes Iga")

  '//2秒待つ
 Delay_ms(2000)
 Lcd_Cmd(LCD_CLEAR)

 lop:

  vin1 = ADC_Read(0)
  iId = vin1
  iVgs = vin1
  Delay_ms(50)

  vin2 = ADC_Read(1)
  iIdss = vin2
  Delay_ms(50)

  vin3 = ADC_Read(2)
  Delay_ms(50)

  vin4 = ADC_Read(4)
  Delay_ms(50)

 '//計測項目の判定
 '//Idss:vin2で計測している。この値が1V(元の電流で2.7mA)を超えていたらIdss
 '//Id :vin1で計測している。vin2が1V以下でvin3が2V以下(スイッチ1が下)
 '//Vgs :vin1で計測している。vin3が2V以下だったらVgs計測

 '//Idssを求める
 '//Idssは100ΩIV抵抗の差分電圧を、OPアンプで(8.12/2.17=3.7)倍にしている
 '//この計測値が1V=250よりも大きかったらIdss計測中とする
 if (vin2 >= 250) then
  if (vin4 > 300) then
   Idss = vin2 / 99.7 * 1000 * 2.17 * 5.03 / 8.12 / 1.023 '//(uA)
  else
   Idss = vin2 / 98.5 * 1000 * 2.17 * 5.03 / 8.12 / 1.023 '//(uA)
  end if
  iIdss = Idss '// (uA)
  Idss = Idss / 1000 '//(mA)
 else
  Idss = 0
  iIdss = Idss '// uA
 end if

 '//Id(mA) または Vgs(V)を求める

 '//Id計測は100ΩIV抵抗の差分電圧をOPアンプで(27k/4.7k=5.7)倍にしている
 '//これをvin1にて計測している
 '//よってId(uA)は
 if (vin2 < 250) then
  if (vin4 > 300) then
   Id = vin1 / 99.3 / 5.7 * 1000 * 5.03 / 1.023 * 1.04'//uA
  else
   Id = vin1 / 98.3 / 5.7 * 1000 * 5.03 / 1.023 * 1.04'//uA
  end if
  iId = Id '//(uA)
  Id = Id / 1000 '//(mA)
 else
  Id =0
  iId = Id
 end if

 '//Vdsは計測した電圧を極性を逆(+)にし、OPアンプで5.7倍にしている
 '//これをvin1で計測している
 '//この計測モードではvin3電圧が約6V=vin3デジタル値で約250となる
 '//よってVgs(mV)計測はvin3が300以下の場合とする
 if (vin3 < 300) then
  Vgs = -(vin1 / 1023) / 5.7 * 1000 * 5.03 * 1.017 '//mV
  iVgs = Vgs '//(uV)
  Vgs = Vgs / 1000 '//(mV)
 else
  Vgs = 0
  iVgs = Vgs
 end if

 '//値をLCDに表示する

 '//電圧表示

' Lcd_Cmd(Lcd_Clear)
' IntToStr(vin1,sVin)
' Lcd_Out(1,1, "vin1=")
' Lcd_Out(1,6, sVin)
' Delay_ms(300)


' Lcd_Cmd(Lcd_Clear)
' IntToStr(vin2,sVin)
' Lcd_Out(1,1, "vin2=")
' Lcd_Out(1,6, sVin)
' Delay_ms(300)


' Lcd_Cmd(Lcd_Clear)
' IntToStr(vin3,sVin)
' Lcd_Out(1,1, "vin3=")
' Lcd_Out(1,6, sVin)
' Delay_ms(300)

' Lcd_Cmd(Lcd_Clear)
' IntToStr(vin4,sVin)
' Lcd_Out(1,1, "vin4=")
' Lcd_Out(1,6, sVin)
' Delay_ms(300)

 '//Idssがゼロ(vin2が250以下)で無ければiIdssを表示する
 if (Idss <> 0) then
  Lcd_Cmd(LCD_CLEAR)
  IntToStr(iIdss,sVin)
  Lcd_Out(1,5, "Idss=")
  if (vin4 > 300) then
   Lcd_Out(1,1, "(N)")
  else
   Lcd_Out(1,1, "(P)")
  end if
  Lcd_Out(2,6,sVin)
  Lcd_Out(2,13,"(uA)")
 else
  '/*
  '//IdssがゼロならばId計測か、Vgs計測なはず
  '//vin3が300越え(>7.4V)且つvin2が250未満ならばId調整中なのでIdを表示する
  if (vin3 >= 300) then
   if (vin2 < 250) then
    Lcd_Cmd(LCD_CLEAR)
    IntToStr(iId,sVin)
    if (vin4 > 300) then
     Lcd_Out(1,1, "(N)")
    else
     Lcd_Out(1,1, "(P)")
    end if
    Lcd_out(1,5, "Id =")
    Lcd_out(2,6,sVin)
    Lcd_Out(2,13,"(uA)")
   else

   end if
  else
   '//Vgs計測中とする
   Lcd_Cmd(LCD_CLEAR)
   IntToStr(iVgs,sVin)
   if (vin4 > 300) then
    Lcd_Out(1,1, "(N)")
   else
    Lcd_Out(1,1, "(P)")
   end if

   Lcd_out(1,5,"Vgs =")
   Lcd_out(2,6,sVin)
   Lcd_Out(2,13,"(mV)")
  end if

 end if

 PORTA.7 = 0
 PORTA.7 = 1
 Delay_ms(100)
 PORTA.7 = 0
 Delay_ms(200)

 goto lop

end.


スポンサーサイト

テーマ : オーディオ
ジャンル : 趣味・実用

プロフィール

haiga

Author:haiga
私のブログへようこそ!
電気オンチが始めた自作オーディオです
2010/3/17 電子工作をプラスしました。

自作オーディオの楽しみ共有のため、私が作ったパーツ提供をしてます。質問や要望を遠慮なくコメント欄に書き込んでください。

FC2カウンター
その日1回目にアクセスいただいた方の総カウントです
最新記事
最新コメント
最新トラックバック
カテゴリ
月別アーカイブ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。