エレキ素人が何か考える（その21）：今さらながらトランジスタ

# トランジスタの初歩
今さらながら、トランジスタ（ここではNPN型）のスイッチング機能を確認。

## 確認内容
トランジスタがONになると（ある程度の電流をベースに流すと）、コレクタに電流が流れ始める（エミッタへ）。回路的には次のようなもので、コレクタ部にLEDが接続されている。
![スクリーンショット 2023-03-11 18.01.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/98cfb249-d9c5-26d0-cc55-6707ac3979dd.png)
一般的に、「ベース」と「エミッタ」の間の電圧が0.7V以上になると、ONになるらしい。下記サイトなど数多くのサイトで、そういった記載がある。
- [トランジスタのスイッチ動作の解説とスイッチ回路の設計方法](https://sagara-works.jp/research-and-development/electronics/transistor-basic/transistor-switch/)

そこで、電子ポテンショメーターを用いて、ベースに掛かる電圧を変化させ、LEDのON状況、コレクタ電流を観察する。また、ベース抵抗も変化させる（10KΩと1KΩ）。

## 電子ポテンショメーターを操作するソースコード
[こちらの回「エレキ素人が何か考える（その６：ツェナーダイオード；失敗?）」](https://qiita.com/infinite1oop/items/e3dae125473e17dba479)のコードと全く同じ。Arduino互換機で制御。

```c++
#include <SPI.h>

#define W_ADDR 0x00
#define R_ADDR 0x0c
#define CS 10

void setup() {
  pinMode(CS, OUTPUT);
  SPI.begin();
  Serial.begin(9600);
  digitalPotWrite(127);  // 0: Vwb=0V;Vaw=Max   127: Vwb=Max;Vaw=0V
  delay(10);
  int r_val = digitalPotRead();
  Serial.print("Read  "); Serial.println(r_val);
}

void loop() {
  while (Serial.available()) {  // Waiting for writing data (0-127)
    String data = Serial.readStringUntil('\n');
    int w_val = data.toInt();
    Serial.print("Write "); Serial.println(w_val);
    digitalPotWrite(w_val);
    delay(10);
    int r_val = digitalPotRead();
    Serial.print("Read  "); Serial.println(r_val);
  }
  delay(10); 
}

int digitalPotWrite(int value) {
  digitalWrite(CS, LOW);
  SPI.transfer(W_ADDR);
  SPI.transfer(value);
  digitalWrite(CS, HIGH);
}

int digitalPotRead() {
  int val;
  digitalWrite(CS, LOW);
  SPI.transfer(R_ADDR);
  val = SPI.transfer(255); // Must be 255, instead of 127
  digitalWrite(CS, HIGH);
  return val;
}
```
シリアルコンソールから入力された数値（0-127）により、ポテンショメーターの出力電圧（ベース電圧）をコントロールするもの。

## 実際の状況
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ae8e5ee9-285b-ebbd-8ae6-b3a82c952e2d.jpeg", width=80%>
ブレッドボード右にあるものがトランジスタ、左にあるものが電子ポテンショメーターである。

## 検証

まず、PCからの入力値と測定したベース電圧(V)は下記となる。
|値|10|14|15|16|17|18|19|20|25|26|27|30|40|50|127|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|Ｖ|0.42|0.57|0.61|0.64|0.68|0.71|0.75|0.79|0.95|0.98|1.02|1.11|1.42|1.72|4.97|

### LEDの点灯開始
LEDの点灯が開始される電圧は下記となった。
|ベースに接続される抵抗値|ベース電圧(V)|
|---|---|
|1KΩ|0.64|
|10KΩ|0.68|

おおよそ、0.7V程度から、トランジスタがONになることを確認。

### コレクタ電流測定
ベース電圧とベースに接続される抵抗値をパラメータとして、コレクタ電流(mA)を測定してみた。
|Ｖ|0.42|0.57|0.61|0.64|0.68|0.71|0.75|0.79|0.95|0.98|1.02|1.11|1.42|1.72|4.97|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|1KΩ|0|0|0|0.00|2.45|5.01|7.91|9.50|9.94|9.89|9.81|9.93|9.85|9.88|9.98|
|10KΩ|0|0|0|0|0.00|1.08|2.64|3.47|7.79|8.56|9.08|9.54|9.74|9.84|9.88|

上記の”0.00”は、それぞれの抵抗値においてLEDが点灯開始した時のデータである。

- ある程度の電圧以上では、コレクタ電流値は一定値となっている。これは、今回用いたLED（最大10mA程度）の特性であろう。
- 10KΩでLEDが点灯を開始したときの次の電圧は0.71Vである。ここから単純計算。ベース電流は0.71V/10KΩ=71μA、この時のコレクタ電流は1.08mA、1.08mA/71μA=15.21が増幅率(hFE)となる。

利用したNPNトランジスタ[2N3904のデータシート](https://www.onsemi.com/pdf/datasheet/2n3903-d.pdf)によると、状況により、もっと高いhFEが期待できるようである（100以上の3桁の数値も見える）。そこで、4個のLEDを並列にコレクタ部に接続し、コレクタ電流を測定。

![IMG_6591_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/828aa994-b37e-dab3-2701-5183adb4a58c.jpeg)

この時の、抵抗値は10KΩ、電圧は4.97Vである。単純計算すると、
- ベース電流：4.97V/10KΩ = 497μA
- 増幅率(hFE)：39.4mA/497μA = 79

となった。おそらく、hFEの実力値はもっとありそう。

まずは、機能を確認。

EOF