ヘッドホンアンプの案検討中7 基板のガーバーデータ出たので発注

HA2_PCB

10センチメートル角の基板に 2SC1815 / 2SA1015 ヘッドホンアンプ部分だけの回路を入れました。基板裏側に描いたシルク印刷でキット番号の印字ミス。直さないまま発注してしまった。リカバリ出来ないのであきらめます。なんか、作るもの全てになんらかのミス入ってますなぁ…

ヘッドホンアンプの案検討中6 2SC1815 / 2SA1015 だけで回路まとめた

HA2_mod01

ヘッドホンアンプの書きかけ回路図にざっくり計算した結果のコメントを書き入れた PNG ファイルを以前掲載しましたが、電圧などの実測出来たところを追記しましたので、更新版を再掲させていただきます。上の画像をクリックして表示されたページの上のほうに「フルサイズ」のリンクあるので、そこクリックしてもらえれば拡大して見ていただけます。

2SC1815_2SA1015_HeadphoneAmpSchematic20130705

上の計算結果でおおよそ問題ないので回路図のほうの修正した状態が上の回路図です。Q3 の 4.7μ とか少し大きような気もしますし、終段のエミッタ抵抗もっと小さくても問題ないですが、ホッドホンならこれでもいいかという程度の決め条件。実際に組む時に調整しましょうって感じかな。(最新の回路図はというかまとめの記事は ヘッドホンアンプ基板のまとめページ に置いてます)

ブログのタイトルは 2SC1815/ 2SA1015 だけという表現が入っていますが、 2SC2120 / 2SA950 などのコンプリペアでも問題ありません。バイアス回路の電圧調整などを行えば他のトランジスタも使用可能なのでトランジスタを替えて音質の違いなどを実験してみるのも良いかと思います。

とりあえず PCB のアートワーク着手の予定です。

ヘッドホンアンプの案検討中5 終段を2SC1815/2SA1015にしてみた

2013-07-05 06.42.03

先日ブレッドボードに組んでみた小出力アンプ。前回は終段に 2SC2120-Y / 2SA950-Y の組合せで簡単な確認を行いましたが、今回は 2SC1815-GR / 2SA1015-GR に替えてみて確認です。前回も今回もパーツの袋からトランジスタを出した状態で使っておりまして、部品の選定はしていません。終段のアイドリングは 5mA、以下前回記事同様に f特,100Hz,1kHz,10kHzの歪みのハードコピーです。

Hc201307050001

he201307050751004

he201307050751003

he201307050751002

o004

簡単な測定方法で採取しているデータ故、傾向を見る程度のものとして扱って下さい

測定に使用しているPC内蔵サウンドのループバック値とたいして変らない値がとれました。重い負荷じゃなければそこそこの性能で動いてくれるのではと思います。あとは、回路図をステレオ分にして基板のアートワークに着手していきたいと思います。

ヘッドホンアンプの案検討中4 ブレッドボードに組んでみた。

2013-07-01 16.19.45

ヘッドホンアンプの案検討中3 の記事でおおよその抵抗値などを決めたので、とりあえずブレッドボードに組んでみてどうなるか確認します。ブレッドボードの面積の都合で最終段は 2SC2120 / 2SA950 のペア1組にしています。また、終段の抵抗は回路図では 1Ω にしてありますが、実験ということと熱暴走怖いので 3.9Ω と大きめにしていますし、その他抵抗も手持ちの近い値で代用しているところもあります。ちなみにこのときの終段のアイドリングは低めの 5mA です。

ha20130701001

とりあえずざっくり動いてるかの確認で WaveSpectra を使用させていただきます。まずは、PC の内蔵オーディオの周波数特性のコピーを取っておくために、ライン出力端子とライン入力端子をケーブルで繋ぎましてループバックさせた状態で撮ります。 20kHz 越えたところで切れてます。ほぼフラットなので問題ないでしょう。

ha20130701002

次、PC のライン出力をブレッドボードの試作アンプに、またアンプの出力を PC のライン入力に接続して、周波数特性を見てみます。結果、PC内蔵オーディオとほぼ同じカーブが得られました。大丈夫そうですね。

ha20130701005
ha20130701003
ha20130701004

次は歪みの測定、上から 100Hz, 1kHz, 10kHz で測定した画面コピー 3つ。

  • 100Hz 0.08130% 0.13249%
  • 1kHz 0.00552% 0.05094%
  • 10kHz 0.00253% 0.05350%

周波数と THD THD-N を書き出したら上記のようになりました。個人的には十分です。ちなみに PC につなぎっぱなしにしている M-Audio の USBオーディオインタフェースのループバック時 1kHz 時は 0.00460% 0.11684% という値なのでこれと比較しても十分と思います。なお、今回の WaveSpectra での測定は、出力電力など見ない簡便な測定方法で測っておりますのであくまで傾向を見るためのものと思って下さい。

THD+N の歪み率を下げるのはアイドリング電流を増やすことで対応出来ますがあまり増やすと、A級プッシュプルになっちゃいます。

ヘッドホンアンプの案検討中3

20130630102000

検討その2の回路をもとにざっくり抵抗値などを計算しました。この回路は他の多くの方も製作されており、発表もされている超定番回路ゆえ詳細の計算方法はそちらにおまかせします。単純に html で長い文を書くのが面倒なだけですいません。上の画像をクリックして表示されたページの上のほうに「フルサイズ」のリンクあるので、そこクリックしてもらえれば拡大して見ていただけます。

上の図で終段が3パラになっているのは、基板のパターン作成時に予備を作るためのものです。ほかにも 0Ω 抵抗も基板上予備の場所扱いです。

20130630104200

LTSpice に回路図入れて、DC解析

20130630104500

今回約4倍で計算して、シミュレーションも 0.5V 入力が 2V くらい出ているので OK

20130630105500

抵抗、コンデンサなど理想素子ばっかりでのシミュレーションなので参考程度ということにしかなりませんが、AC解析も 10MHz まで。入力・出力のカップリングコンデンサの容量もOKそうです。低域の遮断周波数は 6Hz 高域は 1.1MHz あたりでした。

ヘッドホンアンプの案検討中2

20130629200100

1つ前の記事でヘッドホンアンプの検討案の回路掲載しました。そのときは、電池駆動で +- 両電源取ろうかなという考えもちらちらしていましたが、エネループの電圧考えると動作保証最低 6V と設定しても6本くらいは使いたいわけです。まぁ、モバイルでは使わんし AC アダプタでもいいかと考えると、結局のところ上記の定番回路に戻ってしまうわけです。(上の回路は単電源で動作します)

ということで、楽器とかやってる人なら持ってるであろう 9V の AC アダプタでいいんじゃないかと思いまして。これなら町の楽器屋さんでも千円ちょっとくらいで売ってますので入手しやすいかなと思います。

本当は、出力電力から必要な電源電圧を求めるものですが、今回は電圧が先にきています。終段はトランジスタ SEPP で、9V のうちトランジスタのバイアスや抵抗の損失など多めに見て 2V くらいマージン取っておいて 9-2=7V 7V/1.41=4.96V が自由に使える電圧 4.96Vx4.96V/32Ω=0.7688W が理論上の最大出力。最大コレクタ電流は 9V/32Ω=0.28A 平均電流 0.28Ax2/3.14=0.178A。終段を 2SC1815/2SA1015 だけでやるなら数個パラってやる必要がありそうですね。

まぁ、ヘッドホンアンプにはちょうど良い回路と思いますし、部品点数も少なめなのがいいです。今後バイアスの抵抗などを決めていきたいと思います。

ヘッドホンアンプの案検討中

20130630065600

私らが電子工作入門と言いますと、ゲルマラジオにはじまって1石レフレックスラジオなどとにかくラジオを作ることからでしたが、今では携帯デバイスも沢山ありますしラジオはネットで聞けるような環境があります。なので、最近ではヘッドホンアンプかな?と思うようなこのごろ。

ということで、とりあえず1個作ってみようと思いましてとりあえず用意した回路の案は上の PNG ファイル。

ベテランの方が見られたら、初段にカレントミラー入れて、次段のブートストラップ回路のかわりに定電流回路入れてと、いろいろ指摘ポイントはあろうかと思います。が、2,30年前の回路でもそれなりに使えるんじゃない? ということで、上の回路案からスタートしてちょっと作ってみたいなと。

回路図エディタに部品貼り付けてこんな感じかなぁ、という状態なので、これからいろいろ変化していくと思いますが、そこそこ落ち着けばまとめを公開したいと思います。

早速ですが入力のコンデンサと抵抗の場所が間違ってますね。これだと、差動入力(+)の電位が決まらない

IN-12B ニキシー管のカンマ表示の具合を見てみる

2013-06-18 17.47.14

このニキシー管を使用して表示ユニットを作ろうかなと思っているのですが、手持ちは IN-12B というやつです。IN-12A というのもありますが違いはカンマ表示があるか無いかです。上の写真の左下にカンマの形した金属板入っているのがわかります。

ニキシー管の数字 0 ~ 9 を点灯させるのはアノード側に電流制限抵抗入れといて、カソード側を制御してやれば表示出来ます。このカンマは表示の面積はかなり小さいため、電流も減らさないといけないようです。

ということで、140V の電源を用意しまして、アノード側 10k、カソード側 47k と 100k 入れてみて点灯確認。

2013-06-18 17.46.21

  • 47k 9.68V -> 0.2mA
  • 100k 13.1V -> 0.13mA

データシートでコンマの桁は 150V DC なら 0.3~0.7mA ,AC は0.15~0.2mA となっております。カソード側に抵抗追加でいいようです。ダイナミック点灯するので、今回の抵抗値は参考までというところですが確認にはなりました。にしても「カンマ」には見えないなぁ

Arduino で SPI 転送テスト

2013-05-31 23.47.00

てっとり早く動作確認するのに便利なので、Arduino よく使います。IN-12b ニキシー管 8 桁表示に使うのですが、表示させるデータを受信するポートを 3つ用意しようと思ってます。 UART, TWI, SPI です。今回は一番簡単な SPI からです。

マスター側は、 1秒毎に SS を LOW → SPI送信(数バイト) → SS を HIGH を繰り返すだけ。

#include <SPI.h>

char val = 'A';

void setup() {
  
  pinMode(10, OUTPUT);
  SPI.begin();
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV32);
}

void loop() {

  digitalWrite(10, LOW);
  for(char i = 0; i < 4; i++) {
    SPI.transfer(val + i);
  }
  SPI.transfer('\r');
  digitalWrite(10, HIGH);  

  if(val++ > 0x58) {
    val = 'A';
  }
  delay(1000);
}

スレーブ側は、受信データを割り込み処理で取り込んで、改行来たら液晶に表示するだけの処理です

#include
#include
#include

int col = 0;
LiquidCrystal lcd(2, 3, 4, A0, A1, A2, A3);
char lcdf = 0;
String strSPI = “”;
boolean strSPIcomplete = false;
int charcnt = 0;

// —————————————————————————–
// — Interrupt Service Routine (SPI transfer complete)
// —————————————————————————–
ISR(SPI_STC_vect) {
char ch;

ch = SPDR;
charcnt++;
strSPI += ch;
if(ch == ‘\r’) {
strSPIcomplete = true;
}
}

// —————————————————————————–
// — Setup
// —————————————————————————–
void setup() {

pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);

// initialize SPI
pinMode(SS, INPUT);
pinMode(SCK, INPUT);
pinMode(MOSI, INPUT);
pinMode(MISO, OUTPUT);
// SPI slave mode
SPCR &= ~(1< SPI 転送の場合クロックは、CPU クロック(今回は 16MHz)の 1/4 だったか、それ以下で使用するのが推奨と記憶にありましてマスター側には SPI.setClockDivider(SPI_CLOCK_DIV32); という記述を入れてます。最初は 8 分周など入れて、データ欠落したので最終的に 32 分周です。ジャンプワイヤで接続しただけなのでこんなもんということにしておきましょう。

ただ、SS ピンを 1 バイト転送毎に LOW – HIGH トグルさせると、クロック 16MHz でも問題なく転送出来ました。SS が LOW から HIGH になるとスレーブ側の受信ロジックのリセットがかかるとデータシートにはあるのですがこれのせいでしょうか?? まぁ、これは想定と違う使い方なので深くは追いません。

Arduino UNO R2,R3 と MEGA2560 R3 の Fuses と Lock bits

Evernote にも保存してますが、誰かが困ったときのリカバリに役立つかも知れないので貼っておく次第。UNO は DIP パッケージです。確認に使用したプログラムは Atmel Studio 6 から起動した Device Programming。インタフェースは AVRISP MKII です。

ATMEGA168 を内蔵オシレータ 8MHz のクロックで動作させる場合。Arduino IDE からは Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168 のボードタイプを使用します。F_CPU の define の関係でこれを使います。電圧は関係ありません。

---------------------------------------------------
Arduino ATMEGA168 internal 8MHz Fuses and Lock bits
---------------------------------------------------

BOOTSZ = 1024W_1C00
BOOTRST = [X]
RSTDISBL = [ ]
DWEN = [ ]
SPIEN = [X]
WDTON = [ ]
EESAVE = [ ]
BODLEVEL = DISABLED
CKDIV8 = [ ]
CKOUT = [ ]
SUT_CKSEL = INTRCOSC_8MHZ_6CK_14CK_65MS

EXTENDED = 0xF8 (valid)
HIGH = 0xDF (valid)
LOW = 0xE2 (valid)


LB = NO_LOCK
BLB0 = NO_LOCK
BLB1 = NO_LOCK

LOCKBIT = 0xFF (valid)

ATMEGA168 を外付けのクリスタルもしくはセラロックで動作させる場合。Arduino IDE からは Arduino Diecimila or Duemilanove w/ ATmega168 のボードタイプを使用します。

----------------------------------------------------
Arduino ATMEGA168 External 16MHz Fuses and Lock bits
----------------------------------------------------

BOOTSZ = 1024W_1C00
BOOTRST = [X]
RSTDISBL = [ ]
DWEN = [ ]
SPIEN = [X]
WDTON = [ ]
EESAVE = [ ]
BODLEVEL = DISABLED
CKDIV8 = [ ]
CKOUT = [ ]
SUT_CKSEL = EXTXOSC_8MHZ_XX_16KCK_14CK_65MS

EXTENDED = 0xF8 (valid)
HIGH = 0xDF (valid)
LOW = 0xFF (valid)


LB = NO_LOCK
BLB0 = NO_LOCK
BLB1 = NO_LOCK

LOCKBIT = 0xFF (valid)

こちらは、AVRISP MKII で読んだだけの値です。

————————————–
Arduino UNO R2, R3 Fuses and Lock bits
————————————–

———
>>Fuses<< --------- BODLEVEL = 2V7 RSTDISBL = [ ] DWEN = [ ] SPIEN = [X] WDTON = [ ] EESAVE = [X] BOOTSZ = 256W_3F00 BOOTRST = [X] CKDIV8 = [ ] CKOUT = [ ] SUT_CKSEL = EXTXOSC_8MHZ_XX_16KCK_14CK_65MS EXTENDED = 0xFD (valid) HIGH = 0xD6 (valid) LOW = 0xFF (valid) ------------- >>Lock bits<< ------------- LB = NO_LOCK BLB0 = NO_LOCK BLB1 = LPM_SPM_DISABLE LOCKBIT = 0xCF (valid) [/code]

これも、AVRISP MKII で読んだだけの値です。

—————————————
Arduino MEGA2560 R3 Fuses and Lock bits
—————————————

———
>>Fuses<< --------- BODLEVEL = 2V7 OCDEN = [ ] JTAGEN = [ ] SPIEN = [X] WDTON = [ ] EESAVE = [X] BOOTSZ = 4096W_1F000 BOOTRST = [X] CKDIV8 = [ ] CKOUT = [ ] SUT_CKSEL = EXTXOSC_8MHZ_XX_16KCK_65MS EXTENDED = 0xFD (valid) HIGH = 0xD0 (valid) LOW = 0xFF (valid) ------------- >>Lock bits<< ------------- LB = NO_LOCK BLB0 = NO_LOCK BLB1 = LPM_SPM_DISABLE LOCKBIT = 0xCF (valid) [/code]