elechobby:picdic:pic16f88:127

簡易低抵抗測定器

自作の測定器では、電圧(V)、電流(I)、周波数(F)、容量(C)などに関する事例は多いのですが、意外と抵抗に関する事例は少ないのではないでしょうか。

電圧や電流の値は、測定器で測定しないと分かりませんが、抵抗は、部品自体に明記(カラーコード)されているので、あまり必要性が無いように思います。

しかし、明記されていない抵抗(例えば、配線に使用するリード線やプリント基板の銅箔などの抵抗)についてはどうでしょうか?

そこで、今回は、特に低い抵抗(R)を測定する測定器を製作してみました。

<仕様>

  • レンジ1では、0.2Ω未満の測定を可能とする。(1mΩ単位の測定)
  • レンジ2では、1.8Ω以下の測定を可能とする。(10mΩ単位の測定)

一般的なテスターでは、2線式測定回路が採用されています。
しかし、この2線式測定回路には、次のような問題があります。

  • 測定結果には、未知の抵抗(Rx)と測定器との接続に使用されるリード線(RL)が含まれてしまう。
  • 高抵抗の測定では、RLはほぼ無視されるが、低抵抗では無視できなくなる。

そこでこれらの問題を解決するために、4線式測定回路を採用します。

  • リード線(RL(A))は、定電流のため無視できる。
  • リード線(RL(B))は、電圧計の内部抵抗を高く出来るため無視できる。

<抵抗測定回路(2線式と4線式)>

<LM317による定電流回路(125mA)>

<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);
	}
}
 
//**********************************************************************

左側:317です。
右側:LMC662、TL431、PIC16F88、LED、LCDです。

各レンジでは、測定前に、測定端子を短絡し、オフセット値を設定します。
LCDの表示内容は、左上(未知抵抗の値)、左下(未知抵抗の両端電圧)、右下(オフセット電圧)です。

0.1Ω(100mΩ)の測定結果(100mΩ)です。

0.1Ω(100mΩ)の測定結果(102mΩ)です。(リード線の両端から測定)

0.15Ω(150mΩ)の測定結果(148mΩ)です。

0.18Ω(180mΩ)の測定結果(185mΩ)です。

ブレッドボードで使用する接続線の測定結果(40mΩ)です。

手持ちのプラスドライバの測定結果(32mΩ)です。

抵抗のリード線の測定結果(1mΩ)です。

1Ω(1000mΩ)の測定結果(1001mΩ)です。

1.5Ω(1500mΩ)の測定結果(1505mΩ)です。

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details
  • elechobby/picdic/pic16f88/127.txt
  • 最終更新: 2025/10/17 14:29
  • by 127.0.0.1