elechobby:picdic:pic16f88:128

簡易高抵抗測定器

前回は、1Ω以下(最小は、約1mΩ)の低い抵抗値を測定する、“簡易低抵抗測定器“を製作しました。
今回は、1MΩ以上(最高は、約100MΩ)の高い抵抗値を測定する、“簡易高抵抗測定器”を製作しました。

基本的には、オームの法則です。
つまり、未知の抵抗Rxに、電流(I)を流し、そのときのRxの両端の電圧(V)から求めます。
Rx=V÷I

<電流(I)の求め方>
I=V2÷基準抵抗(R1=9.1MΩ)

<電圧(V)の求め方>
V=V1-V2

<未知の抵抗(Rx)の求め方>
Rx=V÷I

※今回の回路で、重要な役割を果たすのが、オペアンプ(LMC662)です。
このオペアンプの、入力インピーダンスは、1テラΩ以上あります。従って、基準抵抗(R1=9.1MΩ)には、殆ど影響を与えません。

※基準抵抗(R1=9.1MΩ)の精度が重要なので、プログラム上は、R1の実測値を反映させています。
※出来るだけ精度の高い抵抗を使用してください。

high_resistance_meter.c
//********************************************************************** 
/*
  『簡易高抵抗測定器(High Resistance Meter)』 
*/
//********************************************************************** 
 
#define		SW		PORTA.F5
 
//********************************************************************** 
 
void main()
{
	static	unsigned	char	buf[20];
	static	unsigned	int		cnt;
	static	double				v1, v2, ohm, offset;
	//
	OSCCON = 0b01110000;		// クロックは8Mhz 
	CMCON  = 0b00000111;		// コンパレータは使用しない。
	// A/D変換を使用する。 
	ANSEL  = 0b000000011;
	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_Out(1, 1, "Resistance Meter");
	Delay_ms(1000);
	Lcd_Custom_Cmd(LCD_CLEAR);
	Lcd_Custom_Chr(1, 12, 0xF4);
	Lcd_Custom_Out(2, 6, "mV");
	Lcd_Custom_Out(2, 14, "mV");
	//
	offset = 1.0;
	//
	while (1) {
		//非測定抵抗の入力電圧(V1)を測定します。 
		v1 = 0.0;
		for (cnt = 0; cnt < 5000; cnt++) {
			v1 += Adc_Read(0);
		}
		v1 = (v1 / 5000.0) * 2.44140625;
		WordToStr(v1, buf);
		Lcd_Custom_Out(2, 1, buf);
		//
		//非測定抵抗の出力電圧(V2)を測定します。 
		v2 = 0.0;
		for (cnt = 0; cnt < 5000; cnt++) {
			v2 += Adc_Read(1);
		}
		v2 = (v2 / 5000.0) * 2.44140625;
		//
		if (SW == 0) {
			offset = v1 / v2;
			//
			WordToStr(v2, buf);
			Lcd_Custom_Out(2, 9, buf);
			LongToStr(offset * 1000000, buf);
			buf[0] = buf[1];
			buf[1] = buf[2];
			buf[2] = buf[3];
			buf[3] = buf[4];
			buf[4] = '.';
			Lcd_Custom_Out(1, 1, buf);
			Lcd_Custom_Chr(1, 12, '%');
			//
			Lcd_Custom_Chr(1, 16, '*');
			Delay_ms(100);
			Lcd_Custom_Chr(1, 16, ' ');
			Delay_ms(100);
			continue;
		}
		v2 = v2 * offset;
		WordToStr(v2, buf);
		Lcd_Custom_Out(2, 9, buf);
		//非測定抵抗の抵抗値を求めます。 
		ohm = (v1 - v2) / (v2 / 9800000);	//基準となる抵抗の実測値を設定し精度を上げます。 
		//各値を表示します。 
		LongToStr(ohm, buf);
		Lcd_Custom_Out(1, 1, buf);
		Lcd_Custom_Chr(1, 12, 0xF4);
	}
}
 
//**********************************************************************

測定端子を短絡させて、オフセット値を設定します。(SW1を押下します)
LCDの表示内容(上側=オフセット比率、左下=V1、右下=V2)

実際に測定した、手持ちの高抵抗です。
左側から、1MΩ、2.7MΩ、3.3MΩ、4.7MΩ、9.1MΩです。

1MΩの測定結果です。(右側は、手持ちのテスターの測定結果です)
LCDの表示内容(上側=Rxの値、左下=V1、右下=V2)

2.7MΩの測定結果です。(右側は、手持ちのテスターの測定結果です)

3.3MΩの測定結果です。(右側は、手持ちのテスターの測定結果です)

4.7MΩの測定結果です。(右側は、手持ちのテスターの測定結果です)

9.1MΩの測定結果です。(右側は、手持ちのテスターの測定結果です)

著作権表示 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/128.txt
  • 最終更新: 2025/10/17 14:29
  • by 127.0.0.1