前回はDual MOSFETの特性が「揃っていると思っていたら違った」回でした。今回は単体バイポーラトランジスタの特性が意外とバラついていなかった件です。別シリーズで「Vbe特性がそろった」ペア・トランジスタを要求されることが多いので、測定する特性はIc-Vbe特性であります。R言語で処理したのでお楽。
※「トホホな疑問」投稿順Indexはこちら
2SC1815
今回のテーマ?は、「Ic-Vbe特性の揃ったペア・トランジスタの選別」であります。ターゲット・デバイスは、NPNトランジスタの定番中の定番 2SC1815です。ただ、ご存じのとおりオリジナルの東芝製品は既にディスコン。しかし、根強い需要があると見えて、互換品の供給は続いています。例のごとく秋月電子通商殿の以下のページから購入させていただきました。GREENランク(hFE=200~400)品です。
なお、製造元は台湾ユニソニック社です。
Ic-Vbe特性の測定
まあ、選別といったってたったの5個の特性を実測し、特性を比べて「一番似ている2個」を選ぼうというお手軽さです。測定に当たっては以下のようにしてます。
-
- コレクタは1kΩの抵抗を介して5V電源に接続
- エミッタは0Vグランド直結
- ベースにパターンジェネレータからVbe電圧を加える
コレクタ電位Vcを測っているので、以下の式にてコレクタ電流Icを計算してます。
Ic = (5.0 – Vc) / 1kΩ
実機で測ったIc-Vbe特性が以下に(Digilent Analog Discovery2使用。)Ic=5mAでサチっているのは1kΩの抵抗と電源電圧5Vのためだと思います。知らんけど。
知りたいのは、Icの立ち上がり付近の特性であります。
上記のようなXYグラフのデータは以下のようなCSVファイルにデータをExportすることが可能です。Channel 1とあるのがVbeの電圧で、Math 1とあるのが上記式のIc相当の電流値です。
#Digilent WaveForms Oscilloscope XY #Device Name: Discovery2 #Serial Number: SN:210321A199DA #Date Time: 2022-07-01 13:57:31.236 # DEV00 Channel 1 (V),Math 1 (A) 0.7740568936304045,0.005015600882314022 0.7733879397362278,0.005015600882314022 0.7727189858420513,0.005015600882314022 0.7713810780536974,0.005015600882314022 0.7703776472124327,0.005015600882314022 0.7690397394240787,0.005019310291502446 ~以下略~
結果CSVファイルの処理
前回などは、結果のCSVファイルを表計算ソフトで読み取って手作業でグラフを描いたりしてました。これがメンドイです。カッコよくVBAでも書いて表計算を自動化したいところですが、VBAは忘却の彼方に。そこで今回は、最近別シリーズにてお世話になっております R言語で処理することにいたしました。R言語は強力、かつ計算は表計算ソフトよりずっと速いです(個人の感想です。)
まずはCSVファイルを素のままで読み取ったときのグラフの形が以下に。データ数8000点ほどありますが、一撃デス。
上記のデータのうち、Ic=0mA付近の下の平なところと、5mA付近でサチっているあたりは今回不要であります。元気よく立ち上がっているあたりを拡大して比べたいです。そこで、以下のような関数を定義して、CSVファイルを読み取ってVbe=0.5Vから0.7Vまでを抽出したデータ・フレームを作成することにいたしました。
getVBEIC <- function(devnam, fname) { temp <- read.csv(fname, comment.char="#") colnames(temp) <- c ("Vbe", "Ic") devE <- temp[temp$Vbe >0.5 & temp$Vbe < 0.7,] assign(devnam, devE, envir=globalenv()) }
上記の関数を定義すると、以下のような1行で、DEV00.CSVという名のCSVファイルを読み取って、dev0Eという変数名のデータフレームに格納できます。
getVBEIC('dev0E', 'DEV00.CSV')
上記操作を番号変えて5行並べれば5ファイルの読み取りOKです。楽だ。
5個のデバイスの5ファイルを重ねてプロットしてみたものが以下に。
バラついていることはいますが、勝手に予想していたより重なっているんでないかい。もっと差が分かり易いあたりを拡大して比べないと、よく似た2個を選抜することは出来ませぬな。
そこで先ほどの読み取り関数の切り出し幅をパラメータ化してみました。
getVBEIC2 <- function(devnam, fname, vbeL, vbeH) { temp <- read.csv(fname, comment.char="#") colnames(temp) <- c ("Vbe", "Ic") devE <- temp[temp$Vbe >vbeL & temp$Vbe < vbeH,] assign(devnam, devE, envir=globalenv()) }
上記の関数を使って、再度切り出しをかけ、プロットしてみるためのRのコードが以下に。ちと長いですがコピペして数字を変えるだけなのでこれまたお楽。
getVBEIC2('dev0F', 'DEV00.CSV', 0.63, 0.65) getVBEIC2('dev1F', 'DEV01.CSV', 0.63, 0.65) getVBEIC2('dev2F', 'DEV02.CSV', 0.63, 0.65) getVBEIC2('dev3F', 'DEV03.CSV', 0.63, 0.65) getVBEIC2('dev4F', 'DEV04.CSV', 0.63, 0.65) plot(dev0F, xlim=c(0.63, 0.65), ylim=c(0.001, 0.003), col=1, main="2SC1815 Ic-Vbe") par(new=T) plot(dev1F, xlim=c(0.63, 0.65), ylim=c(0.001, 0.003), col=2, ann=F) par(new=T) plot(dev2F, xlim=c(0.63, 0.65), ylim=c(0.001, 0.003), col=3, ann=F) par(new=T) plot(dev3F, xlim=c(0.63, 0.65), ylim=c(0.001, 0.003), col=4, ann=F) par(new=T) plot(dev4F, xlim=c(0.63, 0.65), ylim=c(0.001, 0.003), col=5, ann=F) devnam <- c("dev0", "dev1", "dev2", "dev3", "dev4") devcol <- c(1,2,3,4,5) legend("topleft", legend=devnam, text.col=devcol)
上記のコードを走らせてみたプロット結果が以下に。どうもdev0とdev1は外れ気味。他の3個は色も近ければ値も似ている感じ。
このぐらい「局所」であれば、線形に近似してもまあ許せるんでないかい、ということで回帰直線を計算してプロットに重ねてみました。操作はこんな感じ。
m0 <- lm(dev0F$Ic ~ dev0F$Vbe) abline(m0, col=1) m1 <- lm(dev1F$Ic ~ dev1F$Vbe) abline(m1, col=2) m2 <- lm(dev2F$Ic ~ dev2F$Vbe) abline(m2, col=3) m3 <- lm(dev3F$Ic ~ dev3F$Vbe) abline(m3, col=4) m4 <- lm(dev4F$Ic ~ dev4F$Vbe) abline(m4, col=5)
プロット結果はこんな感じ。dev3とdev4、回帰直線、ほぼほぼ重なっておりますぞよ。
というわけで、チャンピオンは、dev3とdev4のペアに決定。2番手は黒のdev0と緑のdev2のペアかと。赤のdev1は外れね。こんなんで大丈夫か?