さくらのジャンク箱ロゴ

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

BTL接続の20W級デジタルアンプを作る(TPA3122D2N使用) 前編

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

IMG_7801_20160703

今回はBTL構成で8Ω19V時1chあたり20Wの出力が得られるデジタルアンプを作ってみたいと思います。小さめのアンプで、予算としては外装パーツを工夫して予算1万円としたいと思います。

ICはTPA3122D2Nを使います。

制御方法の検討

前回同じICを使ったアンプを作った時はロータリーエンコーダや液晶を組み込んだわりと本格的なものを作ったのですが。何か設定をしたりレベルメーターを付けるわけでもない単純に音量と入力切替をを表示しているだけという単純なものだったため。液晶まで必要ではなかったです。

しかし、ロータリーエンコーダを使用している関係上音量をどこかに表示しないといけないため、液晶は切り離せませんでした。

そこで趣向を変え、今回は音量の決定を可変抵抗器を使用して行うことにします。
ただし、配線によるロスの問題や、ギャングエラーなどを考慮して電子ボリュームでの音量制御は残しておきたいため。今回はボリュームで電圧を変化させ、その電圧をAVRマイコンのADCで読み取るという方法を行いたいと思います。これならボリュームの構造による視覚的な音量表示もでき、なおかつギャングエラーも起きないという利点があります。多分。

マイコンの選定

今回はADCとSPIの出力があればよかったため、当初ATTiny85を候補に開発していましたが、
どうもうまくいかないのと、ポップノイズ対策が必要になった際の拡張性や、回転方向を決定するためのIOも必要になったため、手持ちのATmega328Pを使うことにしました。
正直ほとんど余るのでもう少し小型のAVRマイコンでもいいと思いますし、ATTinyでも出来るはずなのですが今回どうやってもうまく行かなかったため動作実績のある328Pを使うことにしました。

ポップノイズに関して

基本的にBTL構成のアンプはポップノイズへの配慮は不要とされていますので考慮の必要はないでしょう。ただし、一部電源OFF時のポップノイズが発生すると発言されている方が居ましたので気になる場合や実際に発生する場合、リレー音がある方が高級っぽくていいという人はポップノイズ対策回路を入れてください。その場合はプログラム変更若しくは回路変更で対応する必要があると思います。

回路設計

今回アンプ部分はアンプICのデータシート電子ボリュームICのデータシート丸写しです。
カップリングコンデンサについてはアンプ・電子VRどちらにも記載がありますが。同じ容量を2つ直列にする必要もないので、アンプICの回路図を参考に+と-極に直列に挿入します。

シャットダウン・ミュート機能

今回はシャットダウン機能もミュート機能も使わないので双方とも抵抗を介してVCC・GNDに接続します。
この抵抗は10kΩ程度が理想のようですが。今回は出力段に4.7kΩを使う以外に指定された容量の抵抗が無いためここの抵抗を含め抵抗器は全て4.7kΩの金属皮膜抵抗で統一しました。(秋月で100本300円だし。)

1/4W品で十分かと思われますが、心配なら出力段用は大きめのW数の抵抗にしてください。
ほかはもっと小さな抵抗器でも十分でしょう。

コンデンサ類

カップリングコンデンサは一般的にフィルムコンデンサやタンタルコンデンサが好まれますが。
今回は入手できなかったのと、コストを考えて無極性電解コンデンサを使用しました。緑のやつです。

このアンプICは基本的にセラミックコンデンサの利用を推奨していますのでそれに従い、音質に関わりそうな出力側の0.68μFのコンデンサのみフィルムコンデンサを採用しました。
電解コンデンサの指定がある部分はオーディオ用電解コンデンサを(見た目重視で)採用しました。

制御部・電子VRの電源部

電源部はいつもの7805と今回はマイナス電源の生成にマイクロチップ社のDC-DCコンバータICを使いました。前回は配線が簡単そうだったので絶縁型DC-DCコンバータユニットを使いましたが値段が少し高いことと、こいつが意外と電気を食うようですので電源構成を変更しました。

今回電源回路周りはマルツのNJW1159Dの使用レポートを参考に作り上げました。
こちらの記事には詳しいこのICの使い方も書いてあるので一読されることをおすすめします。

なおこの記事では入力と出力に抵抗が入っていますが。データシートで入っていないので今回はつけませんでした。この抵抗に関してはマルツの記事に言及されているので必要と思ったのでしたら入れてください。100kの抵抗ならどこの家庭にもあると思いますので。

VCC(大元の電源)とGNDについて

GNDやVCCの配線ですが、GNDループだけ気をつけていれば実用レベルで不都合があるようなノイズが乗ることはないようです。基本的には470μFの電解コンデンサとそれに隣接する0.1μFの電解コンデンサがアンプ側ノイズフィルタ(パスコン)になるし、ロジック部の電源をアンプより後に取るようにすれば問題ないはず。(根拠はない。

消費電力に関して

今回は最大負荷時で1000mAあるかどうかの消費電力ですのでレギュレーターICに余裕があり。基本的にヒートシンクは不要かと思われます。心配ならつけてください。

配線に関して

なるべくジャンパの少ないよう、なるべく信号と電源が平行に隣接しないように配線してください。
特に気をつけるべきは電子ボリューム側の配線です。前述したマルツの記事にも、データシートにも記載がありますがSPIの信号線と音声信号の入力・出力ラインに注意して配線してください。

CLOCK, DATA, LATCH の信号ラインは、アナログ回路と干渉し、クロストーク特性に影響する恐れがあります。基板パターンレイアウトは、CLOCK, DATA, LATCH の信号ラインを他の端子(特にインピーダンスの高い 1pin, 5pin, 9pin, 10pin)から離して配線願います。また CLOCK, DATA, LATCH の信号配線間をガードリングすることを推奨します。   (NJW1159Dデータシートより)

今回基板レイアウトの関係上、制御信号と電子ボリューム→アンプ間はリード線で配線しています。
基板を2枚にしたり、もう少し考えて配置すればこの辺の空中配線はしなくて良くなると思われますがあまり影響はないでしょう。

ただし、できればこの辺りはシールド線を使うべきでしょうね。

以上。回路設計としてはこんな感じになりました。
以下部品リストを載せておきます。

部品リスト

合計 4764
4724
部品 型番 購入店 単価 個数
電解コンデンサー100μF25V85℃(ルビコンPK) 25PK100MEFC5X11 秋月電子 10 4 40
AVRマイコン ATmega328PU 秋月電子 250 1 270
インダクタ(470μH 0.9A) LHL13NB471K 秋月電子 60 1 60
金属皮膜抵抗 1/4W4.7kΩ MF1/4CC4701F 秋月電子 3 9 27
積層セラミックコンデンサ 1μF50V5mm RDER71H105K2K1H03B 秋月電子 20 4 80
積層セラミックコンデンサ 0.22μF50V5mm RDER71H224K1K1H03B 秋月電子 20 4 80
積層セラミックコンデンサー0.1μF50V2.54mm(10個入) RPEF11H104Z2P1A01B 秋月電子 100 1 100
ボリューム 10kΩ B SH16K4B103L20KC 秋月電子 40 1 40
オーディオ用無極性電解コンデンサー1μF50V85℃ UES1H010MDM 秋月電子 15 6 90
オーディオ用電解コンデンサ 25V 470μF UFG1E471MHM 秋月電子 60 4 240
オーディオ用電解コンデンサー10μF35V85℃ UMW1V100MDD 秋月電子 10 6 60
整流用ダイオード 1N4001 マルツ 5 1 5
丸ピンICソケット 28ピン 212128NE マルツ 90 1 97
メタライズドポリエステルフィルムコンデンサ 250V 0.68μF MMH250K684 マルツ 240 4 1037
3端子レギュレータ +5V 1.5A NJM7805A マルツ 50 1 54
オーディオアッテネータ NJW1159D マルツ 210 1 227
デジタルアンプ用インダクタ(リード型) 22μH RTP8010-220M-R マルツ 150 4 648
DC-DCコンバータ TC7660HCPA マルツ 150 1 162
15WステレオClass-D オーディオパワーアンプ TPA3122D2N マルツ 470 2 1015
片面紙フェノール プリント基板 ICB-505 マルツ 400 1 432

とりあえず目についたものの中からコストに見合うものを選択したのと、通販メインで収集したので若干割高になっていると思いますが。部品のグレードを落としたり安い店を見つける、ジャンクから拾ってくるなどすればもう少し安く抑えられると思います。
ただし、アンプICが低ESR品を要求しているのでそれだけは遵守してください。

ちなみにこのリストにある金属皮膜抵抗と整流用ダイオードは100本入りと25本入りを購入してそれぞれ個数で割って1本あたりの値段を書いていますので、バラで買うともうちょっと高いと思われます。

回路図

AMP2

ほぼ推奨回路の丸写しですが。一部見やすいように、実装に近いかたちに改変しております。
この回路図通りの配線で基本的には問題ないと思いますが「音質的にこうしたほうが…。」というところはいい感じに配線を変更してください。

部品一覧

IMG_7738_20160622

使用するディスクリートパーツはこんな感じ。
ちょっと撮り忘れて変更が入っていますが気にしないでください。

IMG_7722_20160622

IC部品。
手前右側のAVRマイコンは当初使用しようとしていたATTiny85です。

IMG_7758_20160628

マイコンは実際にはこちらのATmega328Pを使いました。

部品詳細

アンプ部

IMG_7746_20160622

アンプだけなら使用する部品はこんな感じ。
出力段のフィルムコンデンサと電源のコンデンサが少し大きいので取り回しに苦労すると思いますが。ほかはそんなに変わらないと思います。

IMG_7724_20160622

アンプICです。
D級アンプのICはSOPやBGAといった小型品が多い中、このICは20ピンDIPという電子工作で扱いやすいパッケージです。
部品点数も少なく、安く音質もわりとよいので重宝します。

これで満足できないならTripathのアンプをなんとか入手する形になると思います。

電源部

IMG_7741_20160622

レギュレーターICは前回の回路を踏襲しましたが、ダイオードだけ大きめのものを採用しました。

今回は負電源生成に専用のチャージポンプICを利用することにしました。
チャージポンプというのは。電源電圧で充電したコンデンサの接続を機械的・電子的に切り替え入力電圧より高い電圧を得たり、逆の極性の電源を得たりできる回路のことです。前回のDC-DCコンバーターは内部インバーターで交流を作ってそれをトランスで変圧するという方式をとっていたようですね。

チャージポンプICの上にでっかい黒い物体がありますが。これは470μHのインダクタです。
通常は不要なようですが。今回参考にしたマルツの回路ではノイズフィルタとして利用するようになっていたので参考にしました。
ちなみにこいつは太陽誘電製です。太陽誘電といえばCD-Rで有名な企業ですが本業はこっちです。

IMG_7744_20160622

電源部の動作テストの様子。

マイコン部

IMG_7758_20160628

今回は8MHz駆動で使いますので基本的にマイコン部に必要な部品はありません。
ノイズフィルタ用の0.1μFのコンデンサとデジタルIOに使う抵抗くらいしか無いです。

マイコンというのはよくノイズ源になるのでなるべくアナログ回路や電源から離してください。

製作

IMG_7761_20160628

今回は家に余っていたICB-505を使用しました。
ガラスコンポジットの基板を使うならICB-97あたりかそれ以上のサイズの基板になると思います。

IMG_7762_20160628

部品位置決めの様子

IMG_7763_20160628

前回の失敗を反省し、今回はヒートシンクを先に取り付けました。
このヒートシンクは前回作ったアンプから流用しました。ただし、今回そこまで熱を持たなかったの基本的に必要ないと思われます。なので部品リストには入っていません。

IMG_7764_20160628

部品の位置が決まりましたので写真を取りバラした後低い部品から取り付けました。

IMG_7766_20160628

こんな感じでハンダ付けをする。

IMG_7769_20160629

完成基板の動作確認中。

IMG_7776_20160629

完成した基板。よく見るとフィルムコンデンサの位置が穴1つずれてますね…。
真ん中に見える青い線と奥のコンデンサ間にある緑色の線はアンプ用+電源の配線です。青線は別に一本でいいのですが見た目的に左右対称にしたかったので。

無指向性部品の向きは揃える必要はないと思いますが、揃えたほうが見た目がいいですね。

IMG_7782_20160629

裏面。よく見たら電子ボリュームのコンデンサに配線がされていないのでこの後修正しています。

IMG_7783_20160629

AtmelとMicrochipの夢の共演。

IMG_7784_20160629

制御部はこんな感じ。画像右下の部分に電源線を付ける予定です。

IMG_7785_20160629

電子ボリューム部。SPIの制御ラインと音声出力はリード線を使用しています。
今回は問題なかったですができればシールド線を使用したいところです。

IMG_7786_20160629

アンプ部。基本的には前回と同じですが。今回はミュート・シャットダウン回路を最初から使用しない設定だったのでこうしました。

IMG_7788_20160629

というわけで基板が完成しました。
次は組み込み…と言いたいところですが2000円で買って使っていたドリルがいよいよ壊れたので買ってからにします。
7月中には完成させる予定ですが。

ソースコード

電子ボリューム操作部のソースコードを載せておきます。
特に大したことはしていませんが。

/*
 * sakura87_amp2.c
 *
 * Created: 2016/06/22 10:38:37
 * Author : Sakura87
 */ 

#include <avr/io.h>
#include <util/delay.h>
#define _BV(bit) (1 << (bit))
#include <inttypes.h>
#include <avr/interrupt.h>

#define MISO 4  // Fix
#define MOSI 5  // Fix
#define SCLK 3  // Fix
#define LACH 2  // Var  **LAtCH

/*
 PB PORT I/O List
 PB0 No Function
 PB1 CW/CCW Setting H=CCW L=CW
 PB2 VR_SPI Latch
 PB3 VR_SPI SCK
 PB4 VR_SPI MISO (NC)
 PB5 VR_SPI MOSI
 PB6 / PB7 NC
 
 PC PORT I/O List
 PC0 VRINPUT
 PC1 - PC5 :NC
 PC6 RESET(VCC Fixed)
 
 PD PORT : ALL NO USE

*/

int spi_tr( unsigned int data){
	PBWrite(LACH,0);
	
		
		SPDR = data>>8;
		while(!(SPSR&(1 << SPIF)));
		SPDR = data&0x00ff;
		while(!(SPSR&(1 << SPIF)));
	
	PBWrite(LACH,1);
	_delay_us(100);

	
}

// SPI初期化関数
// 設定ビットの役割は関数内のコメントを参照。
void spi_init(void){
	
	//         MSCL  Mosi miSo Clock sLave_select
	//PB	 76543210   SPI以外のIOもココで設定する。
	DDRB  =0b00101101;
	PBWrite(LACH,1);
	
	// SPI Init
	
	// http://garretlab.web.fc2.com/arduino/inside/libraries/SPI/registers.html
	
	//////// SPCR Setting Param.
	// [   7][   6][   5][   4][   3][   2][   1][   0]
	// [SPIE][ SPE][DORD][MSTR][CPOL][CPHA][SPR1][SPR2]
	//  DORD: 0 MSB First(7 -> 0)   MSTR: 0 Slave  Mode(AVR <- SPIdevice)
	//        1 LSB First(0 -> 7)         1 Master Mode(AVR -> SPIdevice)
	//  CPOL: 0 SCLK Normal Low     CPHA: 0 : クロック立ち上がりで読み込み
	//        1 SCLK Normal HIGH          1 : クロック立ち下がりで読み込み
	
	//// SPR1/2 ///// Clock speed           //// SPI Mode  //////
	//[bit] [rate ][   @8MHz][   @16MHz]    [CPOL][CPHA][Mode]
	// 0 0 :   1/4    2.0MHz     4.0MHz         0     0     0
	// 0 1 :  1/16  500.0kHz     1.0MHz         0     1     1
	// 1 0 :  1/64  125.0kHz   250.0kHz         1     0     2
	// 1 1 : 1/128   62.5kHz   125.0kHz         1     1     3

	//////// SPSR Setting Param.
	// [   7][   6][   5][   4][   3][   2][   1][    0]
	// [SPIF][WCOL][ -- ][ -- ][ -- ][ -- ][ -- ][SPI2x]
	//
	// SPIF : データ転送完了フラグ(読み取り専用)
	// WCOL : 転送中に書き込みが行われると1になる(読み取り専用)
	// SPI2X: SPI Speed 2x
	
	// SPI2X = 1 Clock Speed
	//[SPRx] [rate ][   @8MHz][   @16MHz]
	//[1 2 ] [     ][        ][         ]
	// 0 0 :    1/2    4.0MHz     8.0MHz
	// 0 1 :    1/8    1.0MHz     2.0MHz
	// 1 0 :   1/32  250.0kHz   500.0kHz
	// 1 1 :   1/64  125.0kHz   250.0kHz

	//       76543210
	SPCR = 0b01011010;

	//       76543210
	SPSR = 0b00000010;
}


void PBWrite(char p,unsigned char d){PORTB = (d<<p)&(1<<p) ? PORTB | (1<<p) : PORTB & ~(1<<p);}

int ARead(unsigned char pin){
		ADCSRA=0x80;  // ADC Init
		static int h,l;
		ADMUX=0x40|(pin&0x0f);  // 電源電圧基準
		ADCSRA|=0x40;// AD変換開始
		while(ADCSRA&0x40); //終わるまで待つ
		l=ADCL;
		h=ADCH;
		return (h<<8)|l;
		
}

int main(void)
{
	unsigned int VolVal;
 unsigned int x;
	spi_init();
		spi_tr(0xff00);
		spi_tr(0xff10);
	_delay_ms(1000);


    /* Replace with your application code */
    while (1) 
    {
		VolVal=ARead(0);
		
		x=((double)VolVal*0.0929);
		if (~(PINB>>PB1)&1) x=95-x;
		spi_tr((x<<9)|0x00);
		spi_tr((x<<9)|0x10);
		_delay_ms(50);
		
    }
}

 

総閲覧数:518 PV

関連記事

“BTL接続の20W級デジタルアンプを作る(TPA3122D2N使用) 前編” への1件のコメント

  1. […] BTL接続の20W級デジタルアンプを作る(TPA3122D2N使用) 前編 AVRでの製作記事ですが、使っているICが同じなのでほとんどそのまま移植できると思います。 […]

Arduino Unoで電子ボリューム(LM1972M)を動かす – 桜のはなびらブログ へ返信する コメントをキャンセル

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

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