さくらのジャンク箱ロゴ

Sakura87がほぼ月刊でお届けするPCや電子工作と写真の備忘録てきなブログ @なんと20周年

LM1875Tを使って20W級オーディオアンプを作る

この記事は6年ほど前に投稿されました。内容が古くなっている可能性がありますので更新日時にご注意ください。

最近は専ら写真ブログになっていましたが。久しぶりの工作記事です。
今回は久しぶりにアンプを作ってみたいと思います。

はじめに

今回は出力は低めだが日常使用には問題ないレベルの4~8Ωのスピーカーで20Wの出力が得られるアンプICを使います。
といっても、今までもカーオーディオ向けの高出力アンプを使っていたので家庭用のスピーカーでは同じ程度の出力になっていましたが、今回は「正真正銘」20W出力のアンプを使います。(しかしながら今回は秋月にACアダプタがある24Vを目標に作るので12W位の出力になる。20Wを得るには±24Vの48V以上が必要)

今回使うLM1875はそれなりに高音質で作例がもう十分にネット上にある定番的な物になりますが。今回はこれを使ってみます。

お知らせ(2020年5月18日追記)

今回利用したLM1875Tですが、Ti社の方針により正規販売代理店でないと販売できなくなったようです。(だいたいメジャーどころはTiが牛耳ってるのになんてことしてくれたんだ)
なので、秋月等のパーツショップでは入手できなくなりますが、Digi-Keyなどを利用することによってまだ入手は出来るようです。
今後はDigi-Keyから直接買うか(送料高い)マルツなどDigi-Keyの代理店となっているところ(部品単価が高い、送料は安い)で買うと言うことになるかと思います。

個人的には部品総額が6000円以下であればマルツ経由のDigi-Keyが部品単価は高くなるが安く抑えられるし周辺パーツも買いやすいのかなあと。(抵抗とかやたら高いものもあるが)

お知らせの続報(2021年1月30日追記)

先日より秋月電子で本品のセカンドソース品の取り扱いを始めたようです。

セカンドソース品なので回路的な特性は同じですね。実際に鳴らした音質が同じかは分かりまねますが一応紹介しておきます。
実質的にマルツでメーカー品が手に入るのでそんなに気にする必要はなさそうですが、なんせ安いので一考の余地はありますね。

回路設計

今回のアンプも例に漏れずメーカー仕様書のコピーです。
今回のアンプは両電源式ですが、メーカー仕様書(日本語版)の2ページ目に載っている単電源の回路で作成します。
単電源にすれば電源が複雑にならずACアダプタで良くなるので熱設計にも余裕が生まれ、筐体が大型化しないというメリットがあります。

一応メーカー仕様書の回路を転載しておきます。
GNDにつては基本的には3番ピンから伸ばしてそれにくっつければ良いようですが、回路図の順番で付けていくのが良いようです。

なお、参考にした仕様書の8ページに基板パターンの例がありますが。これによるとC7に相当するコンデンサが1000μFになっています。
仕様書にも特に言及が無いのですが。役割的には電源平滑化のためのコンデンサのようですので。1000μFを採用して良いと思います。

今回は回路図を優先して100μFにしました。

C7のコンデンサ容量について(2019/01/13追記)

後述するポップノイズ改善のために、C7は少し大きめのコンデンサを使っておいた方が良いと思います。その分緩やかに電圧が下がり、ポップノイズ抑制とリレーを追加する場合はリレーが閉じるまで(1秒以内)アンプを動作させておく狙いがあります。ただしそこまで大型のコンデンサは必要なく。1000~2000μF程度で良いでしょう。

部品構成(1セット分)

合計 775
部品 型番 購入店 単価 個数 備考
20W Audio Power Amp. LM1875 LM1875 秋月 270 1 270
オーディオ用電解コンデンサー100μF35V UFG1V101MPM 秋月 20 1 20
オーディオ用無極性電解コンデンサー 1μF 50V UES1H010MDM 秋月 15 1 15
金属皮膜抵抗 1/4W 10kΩ 秋月 3 1 3 100本300円
金属皮膜抵抗 1/4W 200kΩ 秋月 3 1 3 100本300円
金属皮膜抵抗 1/4W 22kΩ 秋月 3 3 9 100本300円
金属皮膜抵抗 1W 1MΩ 秋月 3 1 3 100本300円
金属皮膜抵抗 1W 1Ω 秋月 5 1 5 100本420円
フィルムコンデンサー 0.1μF50V 50F2D104J 秋月 10 1 10
メタライズドポリエステルフィルムコンデンサー0.22μF125VAC 125MMBA224K 秋月 30 1 30
電解コンデンサー 10μF50V UPM1H100MDD1TA 秋月 8 2 16 10個80円
電解コンデンサー 2200μF35V ELXJ350ELL222ML35S 秋月 50 1 50
プリント基板 ガラスエポキシ 72mm x 95mm ICB-293G ホムセン 315 1 341

プリント基板以外はすべて1個分の数になりますので、ステレオで使うには倍の個数必要になります。(表にある基板で24Vまでを目標に作るとこの基板で2回路乗る。)
金属皮膜抵抗は1MΩと1Ωが1Wになっていますが、これは入手性によるもので。そこまで大きな電流が流れるところではないので、1/4Wで問題ないと思いますが。出力段の1Ωは1W品でも良いと思います。

また、例に漏れず抵抗は秋月で買うとパック入りしかないので値段÷100本の値段を掲載しています。抵抗はバラで買うと実際の所はもう少し高くなると思います。

メインICであるLM1875。LM型番なのでナショナルセミコンダクターのICっぽいですが。とっくにテキサスインスツルメンツが買収しているので今はTIが売っています。今回は単電源構成で使います。割と扱っているところも多く、概ね300円前後で買えます

メーカーから代替推奨品の発表もあるようで(執筆時点でもうあったかも)秋月での取り扱いが消え、追記日時点で共立エレショップかマルツ等のDigi-Keyおよび代理店でしか買えないようです。作ってみたい方はお早めにICだけでも確保しておくことをオススメします。(令和2年3月9日(月)追記

パワーアンプというが、設計的には高出力オペアンプみたいな感じなので。回路もそれっぽい感じになっています。

抵抗類。上から小さい順に1Ω、10k 22k(3個) 200k 1Mとなる。色が違うのはメーカーが違うから。
同じメーカー品を揃えたかったけど秋月に売ってなかったので。

今回は金属皮膜抵抗ですべて揃えましたが。どの抵抗も割と音質に影響しそうで、特にステレオ・多チャンネルで使うなら金属皮膜抵抗で揃えた方が良いです。まぁそこまで高い部品でもないですしね。

コンデンサ類。左から2200μF 100μF 10μF(2個) 1μF 0.1μF 0.22μFです。

電解コンデンサは特に意図したわけではないが全部ニチコン製になりました。100μFは前述の通り1000μFでもよいでしょう。
2200μFは特にオーディオ用ではない標準品にしました。これは最初オーディオグレードが16V耐圧品しかないのかと思っていたことによるもので。実際は50V対応品があったので、そっちにすれば良かったです。

基本的に2200μFと1μFが音質に大きく影響するコンデンサになりますので。できる限り良い物を使います。
0.1μFと0.22μFはそこまで音質に影響はないのでセラコンでも良いと思います。

耐圧は大型コンデンサは35V、小型は50Vにしました。ICが16~60V(±8~30V)なので、すべて50V対応品を使うのが理想ですが。大きくなってしまうので今回対応させる電圧である24V前後で動作することを目標にしました。なお、20W以上を出力するには50V耐圧のコンデンサを使い48Vで駆動する必要があります。(50V耐圧に48Vだと少しギリギリの気もしますが。)

基板とその他の部品類。ネジは放熱板をICに留めるために使用します。その上のアルミ板が放熱板になります。

基板は秋月のC基板(72×47.5mm)が切れたので、久しぶりにサンハヤトのICB-293G(72x95mm)にしました。
サンハヤトの基板はどこにでも売っていて入手性が良く、品質も良いです。
今回はこれでステレオの部品が載ります。1chあたりならC基板で十分でしょう。50V以上の耐圧で作成するならこの基板サイズで1ch作る事になりそうです。

放熱板にするアルミ板。理想は銅板ですが20WのICが2つ程度ですので、加工のしやすさや価格の面、筐体も冷却装置として考えるとこれで十分で、ヒートシンクを付けるにしても、取り回しを考えるとこの程度のアルミ板を経由した方が使いやすいと思われます。

ネジ。アルミ板が5mmでICの放熱板が1mm程度なので5mm~6mm程度のネジを使います。

製作

まずはレイアウトを考えます。

これは試行錯誤中の写真ですが。このサイズなら1枚あたり2回路分乗りますね。

レイアウトが決まったので抵抗を半田付けします。
※この写真では赤丸の部分がを間違えて取り付けています。(正しい配置は画像内)

なお、ICは折らないように力加減を調整しながら広げて基板にセットします。
このようにしないと2・4番ピンの配線に難儀します。

1回路分出来たので動作確認をしています。
ここで上記の抵抗設置ミスが発覚しました。テスト大事。

という事で1回路分完成しました。コンデンサはスズメッキ線で固定しました。

今回は2chで使っていくのでもう1回路作ります。

完成!

裏面。

動作確認

なんと言う事でしょう!巧はひとつの基板に、まさに左右対称に回路を乗せたのです。(某番組風

というわけで小型のスピーカーを繋いで動作確認です。

次にひとつ大きなスピーカーで動作確認。
この状態でも放熱板は手で触って心地よいくらいの、風呂だともう少し高い方が良いかな。というくらいの温度にしかならなかったので、ある程度これでも放熱は問題なさそうです。

組み立て

それでは組み立てていきます。

今回、このIC基板以外の回路は、以前作ったアンプからすべて流用しました。

放熱板はφ2.5mmの穴にタッピングをして3mmのネジがそのまま固定できるようにします。
左側にひとつ謎の穴があるのは気にしないでください(IT’S DIY QUALITY)

放熱板とIC・放熱板と筐体の間には放熱用シリコングリスを塗布します。

放熱板を取り付けた状態。

現物合わせで取り付け位置を決めます。
ちなみに今回、同じケースを使っていた2つのケースの上下をニコイチしましたので。ケースは買っていません。

流用する基板の図面を概ね原寸大に印刷して位置を合わせます。
これで位置合わせをして穴を開ければずれずに済む…はず。はずなんだけどなぁ。

端子類も現物合わせである程度決めます。

フロントの加工は前のケースのフロントパネルをぶった切ってそれに合わせて位置を合わせ、加工しました。

裏面

取り付ければ完成!(しれっと移動している制御基板とか気にしちゃいけませんよ!

ポップノイズ対策

作ってみたら結構ポップノイズが凄かったので、ミュートするためのリレー回路を作りました。

トランジスタでリレーを駆動するシンプルな回路。回路はググれば直ぐに出てくるので割愛。

これを付けてマイコンで3秒ほどのディレイを付けて上げる事でポップノイズが劇的に改善しました。

ただしこれでも、まだちょっとブツッと言いますので。もう少し工夫が必要かもしれません。
おそらく2200μFのコンデンサの充放電の関係だと思いますので。切断されている時にこのコンデンサを充電するように回路を組むと改善すると思われます。

ポップノイズ対策の改良(2019/01/13追記)

上記のポップノイズ対策に以下の2つの改修を加えました。

  1. リレー回路のノーマルクローズ側に56Ωの抵抗を追加
    電源投入後~リレーをオンにするまでにカップリングの2200μFのコンデンサを充電しておくための処置。
  2. アンプの電源部に2200μFのコンデンサを追加
    電源切断後~リレーがオフになるまでの時間アンプを動作させるため。

56Ωの抵抗はリレー側につけました。
この抵抗の実装方法については色々あるみたいですが。今回アンプ側の回路をあまり変えたくなかったので。この実装にしました。
この実装だと、スピーカー側に浮いた抵抗が付いている感じになるので、場合によっては問題が起きるかもしれません。
このほかには常時この抵抗を接続しておく方法もあります。

今回は家にあった一番小さい容量の56Ωの抵抗を使いました。この抵抗で2200μFのコンデンサを充電するのにかかる時間は

  • 時間(ミリ秒)=R(KΩ)×C(μF)

で計算でき、この構成だと0.567秒で99%まで充電できます。この数値は1秒を超えない程度で使用する電圧を考えて調整します。
詳しくは以下のサイトを参照してください。計算ツールもあります。

電源オフ時のポップノイズ抑制に予備として買っていた2200μFのコンデンサを使いました。
1000μFも試しましたがこれではアンプの放電に若干間に合いませんでした・
よって最初から100μFを1000μFにするか、100μFにして2000μF程度のコンデンサを追加するという手があります。

このコンデンサはなるべくアンプ側に付ける事をお薦めします。

この2つの改修でほぼ100%ポップノイズを抹殺できました。

なお、第三の選択肢としてアンプの電源を常時オンにしておいてマイコンの電源のみ制御したり。マイコンでアンプの電源を制御する方法があります。この方法は追加投資が大きいので今回は見送りました。(リレーがもう一つ必要になるので割と無理矢理入れた現状ではいろいろと配置変更や部品交換が必要になる。

今度こそ本当に完成!

音質

今回は24V電源を買い忘れて年末休みに入ったので、手持ちのSA1F00Aに付いてきた19VACアダプタを電源に使用。

このICは概ね1V1W程度でているようなので、両電源で19Vだと±9.5Vなのでおおよそ10Wくらいの出力になっています。

前回作ったTDA7396のアンプの方が音がクリアで透き通るような感じの音になる。それに比べたら少し劣る。
しかしながら、音質が悪いと言うわけでは無く、普通に高音質である。上から下までよく出ていて、キレも良く籠もっている感じもほとんど無い(7396に比べるとちょっとある)

聴き疲れもないし、どちらかと言えばPOP音楽によく合うIC。

という事で久々の工作記事でしたが、中々良いものが出来たと思います。
音質も非常に良く、扱いやすいICで部品点数も少なすぎず多すぎず、作りやすい。入門のひとつ上のランクを目指すには良いアンプICではないでしょうか。

それでは、皆様良いお年を

1週間経って

1週間使い込んだところ、最初あった籠もった感じはだいぶなくなりました。
メインのコンデンサが少々ランクが低い物を使っているからなのか、流石にTDA7396には及ばない音質ですが、そもそも出力が低いのであまり大きなスピーカーは鳴らせませんが、ピュアオーディオ志向ではない、普通のオーディオファンが聞くには十分すぎるほど高音質でしょう。JPOPならまず問題になる音質ではないです。

音の広がりはTDA7396に群が上がりますが。映画等を見て臨場感を感じられるのはこっちです。

ということで、1週間使った感想ですが。非常に音質も良く、簡単な回路で作る事が出来、ユニバーサル基板でも難なく作る事が出来ますので。繰り返しになりますが。初心者が入門向けの次に作るアンプには良いものなのではないでしょうか。(使用する電圧がちょっと高いのでそこだけ気をつければ。)

そういえば、ポップノイズ対策を含めた最新のプログラムを以下に公開しておきますね。

/*
 * GccApplication1.cpp
 *
 * Created: 2017/11/25 19:34:48
 * Author : sakura87
 */ 
#define F_CPU 8000000

#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>
//#include <stdlib.h>

#define SPI_MOSI char(5)
#define SPI_MISO char(6)
#define SPI_SCLK char(7)

#define OLED_CS  char(4)
#define EVOL_CS  char(3)
#define AMP_MUT  char(2)
#define EEP_VOL char(0x0000)

void PBWrite(char p,unsigned char d){PORTB = (d<<p)&(1<<p) ? PORTB | (1<<p) : PORTB & ~(1<<p);}
int rec(void){
	
	// http://elm-chan.org/docs/tec/te04.html
	static const int d[]={ 0,1,-1,0,-1,0,0,1,1,0,0,-1,0,-1,1,0 };
	static unsigned char p;p =((PIND >> 4 )  & 3)|(p << 2) & 0x0F ;
	return d[p];
}

void OLED_spiSend(unsigned int rs,unsigned char data){
	char i=10;
	rs = int(rs <<  9) | int(data);
	PBWrite(SPI_SCLK,0);
	PBWrite(OLED_CS,0);
	while(i--){
		PBWrite(SPI_MOSI,(rs >> i) & 1);
		PBWrite(SPI_SCLK,0);PBWrite(SPI_SCLK,1);
	}
	PBWrite(OLED_CS,1);
}

void EVOL_spiSend(unsigned char channel,unsigned char vol){
	char i=16;
	unsigned int data =(int(channel) <<8 ) | vol;
	PBWrite(SPI_SCLK,0);
	PBWrite(EVOL_CS,0);
	while(i--){
		PBWrite(SPI_MOSI,(data >> i) & 1);
		PBWrite(SPI_SCLK,0);PBWrite(SPI_SCLK,1);
}
	PBWrite(EVOL_CS,1);
}


int main(void)
{
	DDRD  = 0x00; // ALL Input
	DDRB  = 0xbf; // MISO:INPUT
	//      PB76543210
	PORTB = 0b11111000;
    /* Replace with your application code */
	unsigned char vol=64 ;
	unsigned char voldB =0;
	eeprom_busy_wait();
	
	vol = eeprom_read_byte((char)EEP_VOL) & 0x7F;
		char i = 8;
		char inData[] ={0,0,0,0,0b00111000,0b00001100,0b00000001,0b00000010,0b00000110};
			char waitMsg [] ={' ',' ',' ',' ','-','T','I','A','W','-',' ',' ',' ',' ',' ',' '};
			
		while(i--)	OLED_spiSend(0,inData[char(8)-i]);
		i=15;
			
		while(i--)	OLED_spiSend(1,waitMsg[i]);
			OLED_spiSend(0,char(2));
		_delay_ms(300);
		PBWrite(AMP_MUT,1);
		
		
	bool f = true;
    while (1) 
    {
		char oledStrings[15];
		int REstate = rec();
				switch(REstate){
					case 0:
				if(f){f=false;}else{continue;}
					break;
					case 1:
							if(vol < 96){ vol++; vol++;} else if(vol <127){ vol++;}
			break;
					case -1:
						if(vol > 96){vol--;} else if(vol >1) {vol--;vol--;}
						break;	
					
				}
				if(vol > 96) {voldB=vol-48;}else{voldB=vol>>1;}
				oledStrings[0] =' ';
				oledStrings[1] =' ';
				oledStrings[2] ='V';
				oledStrings[3] ='o';
				oledStrings[4] ='l';
				oledStrings[5] ='.';
				oledStrings[6] =' ';
				oledStrings[7] ='-';
				oledStrings[8] =char(voldB/10+48);
				oledStrings[9] =char(voldB%10+48);
				oledStrings[10] =' ';
				oledStrings[11] ='d';
				oledStrings[12] ='B';
				oledStrings[13] =' ';
				oledStrings[14] =' ';
				oledStrings[15] =' ';
			
			eeprom_busy_wait();
			
			eeprom_write_byte(EEP_VOL,vol & 0x7F);
			
			EVOL_spiSend(0,vol);
			EVOL_spiSend(1,vol);
			
			//OLED_spiSend(0,1);
			OLED_spiSend(0,char(2));
			char i = 15;
			while(i--)	OLED_spiSend(char(1),oledStrings[char(14)-i]);
	
	}
}


 

総閲覧数:1,923 PV

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください