ダイオード静特性測定ユニット
概要
ダイオードの静特性とは、ダイオードに直流電圧をかけて流れる電流を求める測定で得られる特性のことで、ダイオードにかけた順方向電圧をX軸正方向、流れる順方向電流をY軸正方向にプロットした時の特性曲線をいいます。
静特性はダイオード回路の設計の基礎データになります。接合型シリコンダイオードでは0.6~1V付近を境に、それ以下の順方向電圧では内部抵抗が非常に高く、そのため流れる電流が少なく、0.6V付近の順方向電圧を超えると内部抵抗が急激に低下して電流が急増します。
この特性を自動で測定するユニットを作成してみました。
動作原理
- ダイオードの順方向に印加電圧を加えていきます。
- D/A変換には、R-2Rラダー方式を採用しました。
- 回路的には、10ビットなのですが、9ビットで使用しました。(精度は約5mVです)
- 電圧範囲は、約0V~2.5Vです。
- その時のダイオードの順方向電圧と電流を測定します。
- ダイオードの両端電圧と既知の負荷抵抗10kΩより換算します。
- そのデータをパソコンへRS232C経由で送信します。
- 印加電圧(mV)
- 電流(×0.1μA)
- 順方向電圧(mV)
- パソコンのハイパーターミナルでデータを受信します。
- そのデータをExcelでグラフ表示します。
回路図
ソースコード
- SawWave.c
//********************************************************************** /* <ダイオード静特性測定ユニット> ★ダイオードの静特性を測定し、パソコンへRS232C経由でデータ を送ります。 <送信データの内容> ■印加電圧(mV) ■電流(×0.1μA) ■順方向電圧(mV) */ //********************************************************************** void Usart_Write_String(char *buf) { static int len, i; len = strlen(buf); for (i = 0; i < len; i++) { Usart_Write(buf[i]); } } //********************************************************************** void main() { unsigned int ad2, ad3, cnt; unsigned char buf[10]; // OSCCON = 0b01110000; // クロックは8Mhz CMCON = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00001100; // AN2,AN3を使用する。 TRISA = 0b00001100; TRISB = 0b00000100; // Usart_Init(9600); Delay_ms(100); // while (1) { // 測定開始スイッチが押されるまで待つ。 if (PORTA.F5 == 1) { Delay_ms(10); continue; } // 測定し、結果をパソコンへ送信する。 for (cnt = 0; cnt < 512; cnt++) { PORTB.F0 = (cnt & 0b000000001) == 0 ? 0 : 1; PORTB.F1 = (cnt & 0b000000010) == 0 ? 0 : 1; PORTB.F3 = (cnt & 0b000000100) == 0 ? 0 : 1; PORTB.F4 = (cnt & 0b000001000) == 0 ? 0 : 1; PORTB.F6 = (cnt & 0b000010000) == 0 ? 0 : 1; PORTB.F7 = (cnt & 0b000100000) == 0 ? 0 : 1; PORTA.F6 = (cnt & 0b001000000) == 0 ? 0 : 1; PORTA.F7 = (cnt & 0b010000000) == 0 ? 0 : 1; PORTA.F0 = (cnt & 0b100000000) == 0 ? 0 : 1; // ad2 = Adc_Read(2); ad3 = Adc_Read(3); // WordToStr(ad2 * 5, buf); Usart_Write_String(buf); Usart_Write_String(", "); // WordToStr(ad3 * 5, buf); Usart_Write_String(buf); Usart_Write_String(", "); // WordToStr((ad2 - ad3) * 5, buf); Usart_Write_String(buf); Usart_Write_String("\r\n"); } } } //**********************************************************************









