簡易低抵抗測定器
概要
自作の測定器では、電圧(V)、電流(I)、周波数(F)、容量(C)などに関する事例は多いのですが、意外と抵抗に関する事例は少ないのではないでしょうか。
電圧や電流の値は、測定器で測定しないと分かりませんが、抵抗は、部品自体に明記(カラーコード)されているので、あまり必要性が無いように思います。
しかし、明記されていない抵抗(例えば、配線に使用するリード線やプリント基板の銅箔などの抵抗)についてはどうでしょうか?
そこで、今回は、特に低い抵抗(R)を測定する測定器を製作してみました。
<仕様>
- レンジ1では、0.2Ω未満の測定を可能とする。(1mΩ単位の測定)
- レンジ2では、1.8Ω以下の測定を可能とする。(10mΩ単位の測定)
動作原理
一般的なテスターでは、2線式測定回路が採用されています。
しかし、この2線式測定回路には、次のような問題があります。
- 測定結果には、未知の抵抗(Rx)と測定器との接続に使用されるリード線(RL)が含まれてしまう。
- 高抵抗の測定では、RLはほぼ無視されるが、低抵抗では無視できなくなる。
そこでこれらの問題を解決するために、4線式測定回路を採用します。
- リード線(RL(A))は、定電流のため無視できる。
- リード線(RL(B))は、電圧計の内部抵抗を高く出来るため無視できる。
<A/D変換の基準電圧>
高精度シャント・レギュレータ(TL431)を使用し、基準電圧は、2.5Vとする。(正確には、2.495V)
<レンジ切り替え>
測定精度向上のため、2段階切り替えとする。
- レンジ1(0.2Ω未満の測定)
オペアンプで、101倍の増幅を行うことにより、0.2Ω未満の測定精度向上を図る。
最大値(約2.4V)=0.19Ω×定電流(125mA)×101倍 - レンジ2(1.8Ω以下の測定)
オペアンプで、11倍の増幅を行うことにより、1.8Ω以下の測定精度向上を図る。
最大値(約2.5V)=1.8Ω×定電流(125mA)×11倍
回路図
ソースコード
※LM317による定電流回路は、計算上は、125mAですが、実測値は、抵抗値(R110Ω)の誤差も有り、123mAでした。
プログラム上はこの値を採用しています。
- registorMeter.c
//********************************************************************** /* 『低抵抗測定器』 */ //********************************************************************** #define SW1 PORTA.F5 #define SW2 PORTA.F4 #define LED PORTB.F0 //********************************************************************** void main() { static unsigned char buf[20]; static unsigned int cnt; static double ad, offset; // OSCCON = 0b01110000; // クロックは8Mhz CMCON = 0b00000111; // コンパレータは使用しない。 // A/D変換を使用する。 ANSEL = 0b00000100; ADCON1.VCFG1 = 1; ADCON1.VCFG0 = 0; // ポートを初期化する。 TRISA = 0b11111111; TRISB = 0b00000000; // LCDを初期化する。 Lcd_Custom_Config(&PORTB,7,6,5,4,&PORTB,3,2,1); Lcd_Custom_Cmd(LCD_CURSOR_OFF); Lcd_Custom_Cmd(LCD_CLEAR); Lcd_Custom_Chr(1, 6, 'm'); Lcd_Custom_Chr(1, 7, 0xF4); Lcd_Custom_Out(2, 6, "uV"); Lcd_Custom_Out(2, 14, "uV"); // offset = 0.0; LED = 0; // while (1) { //電圧の測定 ad = 0.0; for (cnt = 0; cnt < 1000; cnt++) { ad += Adc_Read(2); Delay_us(500); } ad = ad / 1000.0; if (ad > 1020.0) { Lcd_Custom_Out(1, 11, "error!"); Delay_ms(100); Lcd_Custom_Out(1, 11, " "); continue; } //レンジ切替 if (SW2 == 1) { ad = ((ad * 2.44140625) / 101.0) * 1000; } else { ad = ((ad * 2.44140625) / 11.0) * 1000; } //電圧の表示 WordToStr(ad, buf); Lcd_Custom_Out(2, 1, buf); //SW1がONであれば、測定電圧は、オフセット値とする。 if (SW1 == 0) { offset = ad; WordToStr(ad, buf); Lcd_Custom_Out(2, 9, buf); } //抵抗値を計算し表示する。 ad = (ad - offset) / 123.0; //123.0は定電流の値です。 WordToStr(ad, buf); Lcd_Custom_Out(1, 1, buf); // LED = 1; Delay_ms(100); LED = 0; Delay_ms(100); } } //**********************************************************************

























