elechobby:picdic:pic16f88:63

文書の過去の版を表示しています。


簡易歪率計アダプタ

オシロスコープや発信器は、メーカー製品を持っているのですが、歪率計は持っていません。
そこで今回は簡易的に歪率を測定するアダプタを作成してみました。

増幅器の歪には、

  • 周波数歪(frequency distortion)
  • 位相歪(phase distortion)
  • 非直線歪(nonlinear distortion)

の3種類がありますが、今回は非直線歪を簡易的に測定します。

歪率計の基本的な構成は、下図のようになっています。

今回は簡易的に済ませるために、発振器部分は作成せずに、手持ちのメーカー製の発信器を使いました。
従って、実際に作成した部分はノッチフィルタ(ツインT型)とPICによるACミリボルト計です。
精度は、信号源電圧が1Vの時に、≒0.24%になります。

  • A/D変換のVref=2.5V
  • A/D変換の分解能力=1024
  • 0.24%≒((2.5V÷1024)÷1V)×100

ノッチフィルタ部分の抵抗とコンデンサを替えることにより、ノッチ周波数を変更できます。
詳しくは、ノッチフィルタ(NotchFilter)を参照してください。

DistortionAnalyzer.c
//********************************************************************** 
/* 
		<歪率計> 
*/ 
//********************************************************************** 
 
unsigned	int	measurement(unsigned short channel)
{
	unsigned	int		ad, max, min;
	unsigned	char	cnt;
	//
	ad = 0;
	max = 0;
	min = 1024;
	for (cnt = 0; cnt < 100; cnt++) {
		ad = Adc_Read(channel);
		max = ad > max ? ad : max;
		min = ad < min ? ad : min;
	}
	return (max - min);
}
 
 
//********************************************************************** 
 
void	Pwm_Change_DutyEx(unsigned int duty_ratio)
{
    CCPR1L = duty_ratio >> 2;
    CCP1CON.F6 = duty_ratio & 0b00000001;
    CCP1CON.F7 = (duty_ratio & 0b00000010) >> 1; 
}
 
//********************************************************************** 
 
 
void	main()
{
	unsigned	int		ad2, ad3;
	unsigned	long	ad2l, ad3l, tmp;
	double					ad2d, ad3d;
	unsigned	char	buf[20], cnt, len;
	//
	OSCCON = 0b01110000;		// クロックは8Mhz 
	CMCON  = 0b00000111;		// コンパレータは使用しない。
	ANSEL  = 0b00001100;		// AD2,3を使用する。 
	TRISA  = 0b00111100;
	TRISB  = 0b00001111;
	OPTION_REG.F7 = 0;
	ADCON1.VCFG0 = 0;
	ADCON1.VCFG1 = 1;
	//
	Lcd_Custom_Config(&PORTA, 1, 0, 7, 6, &PORTB, 4, 5, 6);
	Lcd_Custom_Cmd(LCD_CURSOR_OFF);
//	Lcd_Custom_Out(1, 1, "DistortionAnalyz");
//	Lcd_Custom_Out(2, 1, "   JF3SFB 2008.1");
	Delay_ms(100);
	Lcd_Custom_Cmd(LCD_CLEAR);
	//
	Pwm_Init(10000);	// 10kHz
	Pwm_Change_DutyEx((PR2 * 4) / 2);
	Pwm_Start();
	//
	while (1) {
		if (PORTB.F3 == 0) {
			//
			ad2 = measurement(2);
			WordToStr((ad2 * 25) / 10, buf);
			Lcd_Custom_Out(1, 1, buf);
			Lcd_Custom_Out(1, 6, "mV");
			//
			ad3 = measurement(4);
			WordToStr((ad3 * 25) / 10, buf);
			Lcd_Custom_Out(1, 9, buf);
			Lcd_Custom_Out(1, 14, "mV");
			//
			for (cnt = 0; cnt < 16; cnt++) {
				if (ad3 > cnt)
					buf[cnt] = 0xFF;
				else
					buf[cnt] = ' ';
			}
			buf[16] = 0x00;
			Lcd_Custom_Out(2, 1, buf);
			continue;
		}
		ad2 = 0;
		for (cnt = 0; cnt < 25; cnt++) {
			ad2 += measurement(2);
		}
//		ad2 = (ad2 / 25) * 2.5;
		ad2 = ad2 / 10;
		//
		ad3 = 0;
		for (cnt = 0; cnt < 25; cnt++) {
			ad3 += measurement(4);
		}
//		ad3 = (ad3 / 25) * 2.5;
		ad3 = ad3 / 10;
		//
		Lcd_Custom_Cmd(LCD_CLEAR);
		//
		WordToStr(ad2, buf);
		Lcd_Custom_Out(1, 1, buf);
		Lcd_Custom_Out(1, 6, "mV");
		//
		WordToStr(ad3, buf);
		Lcd_Custom_Out(1, 9, buf);
		Lcd_Custom_Out(1, 14, "mV");
		//
		ad2l = ad2;
		ad3l = ad3;
		tmp = (ad3l * 10000) / ad2l;
		WordToStr((unsigned int)tmp, buf);
			buf[5] = buf[4];
			buf[4] = buf[3];
			buf[3] = '.';
			buf[6] = 0x00;
			Lcd_Custom_Out(2, 1, buf);
		Lcd_Custom_Out(2, 7, "%");
	}
}
 
//**********************************************************************

蛇の目基板3枚を使って組み立てました。

  • PICによる電圧の測定と歪率の計算部分(左)
  • オペアンプによるツインT型ノッチフィルタ部分(右下)
  • 三端子レギュレータの7805と7905による±5Vの電源部分(右上)

調整は至って簡単です。

  • ノッチ周波数の数倍程度の信号を入力し、V2(右側の電圧)が約1Vになるように発信器の出力を調整する。
  • 次に10kΩのボリュームを回して、V1をV2と同じにする(つまり歪率100%)。
  • 発振器の周波数をノッチ周波数に合わせる。

これで完了です。

ツインT型ノッチフィルタ部分を拡大したところです。
今回は、手持ちの抵抗やコンデンサを利用したので精度があまり良くありません。
出来れば、抵抗もコンデンサも精度が±1%のものを使用してください。

PIC部分を拡大したところです。
8ピンのソケットにダイオードをさしています。当初、ダイオードを使わずにLM386で増幅した電圧をA/D変換
するつもりでしたが、利得が20倍とありすぎたのでダイオードによる半波整流に変更しました。

電源部分を拡大したところです。三端子レギュレータ(7805,7905)を利用した±5Vの電源です。

メーカー製の発振器より信号を入力してみました。
流石に歪率は低いですね。

ノッチ周波数に発信器の周波数を合わせる場合には、微妙な調整が必要となりますので2.5mV単位の
バー表示機能を搭載しました。黄色のスイッチを押すとバー表示モードになり合わせやすくなります。

如何ですか?
自作のオーディオアンプの性能が気になる方は、このように簡易な物ですが、手元にあれば宜しいかと。。。

著作権表示 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/63.1588326340.txt.gz
  • 最終更新: 2025/10/17 14:28
  • (外部編集)