FET選別ツール


簡単にIdss、BIAS(Vgs)が測れます



ぺるけ式FET差動ヘッドフォンアンプを自力で作る(この頃はより小型に作ることを目指してました)ためには、このアンプの最大に肝となるFETの選別が最大のポイントでした。「FET 選別」でググルとたくさんの先輩諸氏がぺるけさんの資料を元に作られていました。
でも、どの作例もテスターを繋いで計測するものだったので、例のhFE測定器と同様にPICで作ることにしました。Nチャンネルがあればぺるけ式には足りるのですが、物好きな小生はPチャンネルまで計測できるものにしてしまいました

このツールのぺるけ師匠オリジナル記事はこちらです。




●回路図

このときも回路図エディタには水魚堂のBSch3vにお世話になりました。



<基本的な構成と説明>

 ・電圧はOPアンプ経由でPICのAD計測で、電流は検出抵抗の電圧差をオペアンプの差動入力で増幅して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入力がこの基準電圧を超えたために使用しなかった。
  この部分は精度面で変える必要あるか要検討 (今の分解能では不用か)

 ・緑の太い線で囲んだ部分はあとから追加したリレー接点です。Nチャンネル、Pチャンネル切替用です


●実体配線図

多分お役に立ちませんが実体配線図です。自分の気休めで載せています



●製作時の内部写真


部品を取り付けた状態:まだスッキリしています
配線状態:追加したリレーも入りグチャグチャ状態だ


●ソフトウエア


hFE測定器ではプログラムメモリーが2k未満だったのだが、作っていくうちに2kを超えてしまった。仕方が無いのでmikroBasic(これは有償版)に切り替えました。
このソフトでもオペアンプ増幅度は使った抵抗値を計測し、そこから求めた値をソフト内固定定数として使っている。これ1台を安価に作るにはこのほうが簡単です。

<リスト>
'===========================================================================
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.