2017年4月23日日曜日

喫煙と飲酒とクラッシック

タバコを吸いながら、酒飲みながら美しい音楽を聴く。不健康極まりない。極まりないないがうっとりする。

CDをぶっこ抜いて長尺で聴けるようにすると、ワーグナーやマーラーのような長ったらしいクラッシック曲もまた違った楽しみ方がある。

実演に行くと(もう20年近く行ってませんが)タバコも吸えないし、酒も飲めないし、スピーカーで聴くと近所迷惑だし、うつ病で会社やめてから実家に引きこもっているので夜中にうるさくして親が変になっても困るし、ヘッドホンで美しい曲を聴くのはいいことだと思います。

曲をつなぐのが難しかった頃にはDJもやりましたが、取り込んでしまえば延々と曲を流せるのでもはや曲つなぎは芸としては成り立たない。

その一方、いつ終わるとも終わらないワーグナーやマーラーのようなクラッシックを自宅でヘッドホンで流しっぱにして聴くには良い環境になったと思います。

せっかくいい感じになったのにCDが終わってしまって入れ替えなきゃと思って醒めることがないのは素晴らしい。

2017年4月22日土曜日

SVFの入力をACカップリングしてみる

AD8400のDATASHEETに載っていた回路はうまく動かせれば良さそうだが、バンドリジェクトはまず使わないと思うので、まずはOPAMP3個構成で考えてみる

PSoC4 DCOは単電源波形なので、SVFの入力をACカップリングしてみた。

今から思えばVCVS DCFの入力もACカップリングしておくべきだった。ACカップリングしないでも動作しているのは、フルスイングOPAMPのNJM2732を使っているので正側だけでなんとかなっていて、出力をACカップリングしているので両電源波形として出力されているような気がする。(参考:「NucleoシーケンサーとPSoC4 DCOとVCVS DCFの結合テスト

VCVS DCFはArduinoのシールドに作り込んで、ユニバーサル基板と2段積みにしていて不格好なので、いずれ作り直すかも。

LTSpiceでシミュレーション


ACカップリングなし


シミュレーション回路図

AC解析

ACカップリングあり


ACカップリングはフィルムコンデンサを使うことにして、2.2uF/100kΩでカットオフ周波数は
fc = 1 / (2 * π * C * R) ≒ 0.72Hz
になる。

シミュレーション回路図

AC解析

R2(Rq)の値を低くしてQを下げると低域が減衰するようだ。ACカップリングをバイパスできるようにしておいたほうが無難かな。

ブレッドボードで実験


回路図

ACカップリングするのと同時に、入力レベルを調節できるように10kΩ/Bのトリム・ポットを入れてみた。入力インピーダンスはだいたい10kΩになる。トリム・ポットを右いっぱいに回せば10kΩのRで受けているのと同等になると思う。

ブレッドボード図

左側のブレッドボードは、TLE2426を使って、5V電源を分圧して±2.5Vの仮想GNDを作り出す。右側はSVFで今回はOPAMP(NJM4580)2個で配線した。

作図に使っているflitzingでフィルム・コンデンサのアイコンが用意されたので使ってみた。以前は積セラのしかなくて代用していたが、これで多少わかりやすくなったかも。

自作の矩形波だけのファンクションジェネレータで、単電源波形で1kHzの矩形波を出力してオシロで測定してみた。



LPF

ch1:入力 ch2:LPF出力

fc≒1kHzのLPFで矩形波がほぼサイン波になっている。ACカップリングも効いているようで、単電源波形が両電源波形になっている。


ch1:ACカップリング後 ch2:LPF出力

ch1は回路図のC10の直後で測定してみた。ハイ・パスフィルターとして働くのでエッジが強調された波形になっているが、回路の他の部分が影響しているのかちょっと変な感じ。

やはりバイパスできるようにしておいた方が良さそうだが、おかしな回路でも楽器の場合は味になるので動けばよしとする。

BPF

ch1:入力 ch2:BPF出力

HPF

ch1:入力 ch2:BPF出力

BPFもHPFも気色悪い波形(^q^;

改めて矩形波でシミュレーション

1kHzの矩形波を入力して過渡解析してみた。

シミュレーション回路図

過渡解析


LPFとHPFは実験結果と似ているが、BPFはかなり違う。測定ミスかな?

POTを使ってカットオフ周波数とQを可変する


ブレッドボード図


抵抗をPOTに置き換えた。POTの2番と3番で抵抗値を変えるようにすると、右に回すと周波数が上がる感じになる。

矩形波、ノコギリ波を入れてみたが、VCVSにくらべるとかなりおとなしい感じだ。

AD8400のDATASHEETに載っているSVF回路をシミュレーションしてみる。

AD8400のDATASHEET(AD8400_AD8402_AD8403_jp.pdf)に応用回路としてSVFの回路例が載っていたのでシミュレーションしてみた。


回路図でHIGH-PASSと表記されている出力は、どうもバンド・リジェクトのようだ。

シミュレーション回路図

上記シミュレーション回路図のように、U1の出力がBAND-REJECT、U2の出力がHIGH-PASSになる。

R1とR2、R3とR4はポテンショメータで100kΩの中点として設定している。

R1とR2のポテンショメータでゲイン設定、R3とR4のポテンショメータでQを設定する。R6とR7は同じ値にしてカットオフ周波数を設定。R3とR4でQを上げるとゲインが下がる。

AC解析

メモ


この回路だと4回路入りのAD8403を全部使うし、OPAMPも2回路入り2個でちょうど収まる。

2017年4月19日水曜日

SVF(State Variable Filter)をデジタル・ポテンショメータのAD8403で制御してみる。

SVFをDCFとして製作するつもりで、デジタル・ポテンショメータのAD8403/100kΩで抵抗値を変えてフィルターのカットオフ周波数とQを変化させてみた。

基本的に、前回普通のPOTで設定した回路(参考:「SVF(State Variable Filter)の音出し」)をAD8403/100kΩに置き換えている。

ブレッドボード図

AD8403は「2.7V~5.5Vの単電源動作」で入出力はGND~VDDの範囲に収まっている必要がある。そのためOPAMPを使ったSVFの回路(ブレッドボード図の右上)は、5Vの単電源から仮想GNDを作って±2.5Vの両電源として使っている。ブレッドボード図の左上がTLE2426を使った仮想GNDを作り出す回路。


AD8403はSPI制御なので、ArduinoでSPI送信するスケッチを書いて送っている。カットオフ周波数とQを決める抵抗値は、POT2個でArduinoのAnalogInに入力して設定した。

Arduinoのスケッチ
<AD8403_Pot_Control.ino>

/*
  Digital Pot Control

  AD8403

  2つのPOTの出力電圧を読み取って
  Digi-Potのチャンネル1, 3, 4の抵抗値を可変

  Pinの接続
  A0 POT1
  A1 POT2
  10 CS
  11 MOSI
  13 SCK
*/

// inslude the SPI library:
#include <SPI.h>

// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

byte cnt;
byte v0, v1;

void setup() {
  // set the slaveSelectPin as an output:
  pinMode (slaveSelectPin, OUTPUT);
  // initialize SPI:
  SPI.begin();
  delay(1);

  Serial.begin(9600);  
}

void loop() {
  v0 = analogRead(0) / 4;
  v1 = analogRead(1) / 4;
  
  Serial.print(v0);
  Serial.print("\t");
  Serial.print(v1);
  Serial.print("\n");
  
  digitalPotWrite(0, v0);
  digitalPotWrite(2, v1);
  digitalPotWrite(3, v1);
  delay(1);
}

void digitalPotWrite(int address, int value) {
  // take the SS pin low to select the chip:
  digitalWrite(slaveSelectPin, LOW);
  //  send in the address and value via SPI:
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip:
  digitalWrite(slaveSelectPin, HIGH);
}


LPFの入出力波形の測定


入力は自作のPCM5102Aを使ったファンクションジェネレータで50Hzのノコギリ波を出力して使った。

OPAMPは±2Vから使えるNJM4580と低電圧フルスイングのNJM2732で見てみた。

Q設定値とfc設定値はAD8403に送っている数値で、fcの設定値は値が小さいほどカットオフ周波数が高くなる。

NJM4580


電源電圧: 5.07V +2.53V/-2.47V

Q最小


Q設定値:8 fc設定値:0 (Q設定値が8未満だと出力されない)

Q設定値:8 fc設定値:127

Q設定値:8 fc設定値:255

Q中間


Q設定値:127 fc設定値:6 (fc設定値が6未満だと発振)

Q設定値:127 fc設定値:127

Q設定値:127 fc設定値:255

Q最大


Q設定値:255 fc設定値:6 (fc設定値が4未満だと発振)

Q設定値:255 fc設定値:127

Q設定値:255 fc設定値:255

Qが大きくなると、波形の下側がNJM4580の出力振幅の下限に引っかかっているようだ。

NJM2732


電源電圧: 5.07V +2.53V/-2.51V

Q最小


Q設定値:6 fc設定値:1 (Q設定値が6未満だと出力されない、fc設定値が1未満だと発振)

Q設定値:6 fc設定値:127

Q設定値:6 fc設定値:255

Q中間


Q設定値:127 fc設定値:6 (fc設定値が6未満だと発振)

Q設定値:127 fc設定値:127

Q設定値:127 fc設定値:255

Q最大


Q設定値:255 fc設定値:8 (fc設定値が8未満だと発振)

Q設定値:255 fc設定値:127

Q設定値:255 fc設定値:255

波形のつぶれが軽減されていて、発振前やQを上げた場合の波形もNJM4580とは少々異なる。

Qの設定値に履かせるゲタ(適当)


AD8400のDATASHEETによると、

RWB(D) = (D / 256) * RAB + RW

となっているので、Q設定値が6の場合、

RWB(6) = (6 /256) * 100kΩ + 50Ω ≒ 2.4kΩ

となる。2.2kΩぐらい直列にいれておけばいいかな?fc設定値の方はゲタなしで。発振した場合はそれはそれでという方向で。

メモ:


NJM2734というNJM2732の4回路入りのバージョンもあって、OPAMPを3回路使うこの構成の場合配線が楽になるかどうか。4回路入りのOPAMPだと差し替えの選択肢が狭まるので悩むところ。

2017年4月18日火曜日

Blog 3周年記念: 製作物のまとめ(2016/05~2017/04)

この1年はずばり。ベースマシンを作ることに費やした1年でした。

ぴゅんぴゅんマシンでは物足りなくなって、一からシンセをつくることにしました。初期段階ではもう少しかんたんに(長くても半年ぐらいで)作れるのでは?と思っていましたが、このBlogを見返すと構想が2015年11月30日なので1年半程度やっていたことになります。

gajeさんの著書「達人と作るアナログシンセサイザー入門」を参考にさせていただきつつ、なんとかマイコンで(安価に)アナログチックな音が出せないかという試行錯誤でした。



私がベースマシンとしてリスペクトしていたTB-303は、本家のRolandがほぼ本物のTB-03を去年発売し、買えば数万で「ほぼ同じ音」がでると思います。ハードウェアとしての完成度も非常に高いものだと思います。

ですが、やはり人が作ったもので楽曲を制作するのは私には向いていないと思います。自分なりに考えてハードウェアを作ると、自分の知識や技術の限界と向き合わなければならず、辛い目に合うこともあります。その一方、常に限界を超えるにはどうすればいいか?という想像力が掻き立てられます。投げ出したくなることも多いですが、考えていたものが実現できた時の快感は他では得ることのできいないものだと思います。この快感のために電子工作をやっていると言ってもいいかもしれません。

ベースマシン



ベースマシン まとめ(弱め)」でかんたんにまとめています。これ以降ACアダプタで使えるように電源を拡張したり、コンパクトにするためにダンボールで筐体を作ったりしています。

今後も開発を続ける予定です。

タグ:ベースマシン
http://dad8893.blogspot.jp/search/label/%E3%83%99%E3%83%BC%E3%82%B9%E3%83%9E%E3%82%B7%E3%83%B3

Github:
https://github.com/ryood/BaseMachine

mbed Repository:
https://developer.mbed.org/users/ryood/code/BaseMachine/


LME49600ヘッドホンアンプ



ナショナル・セミコンダクタ製のオーディオ・バッファICのLME49600を使ったヘッドホンアンプです。

かんたんなヘッドホンアンプはOPAMPだけを使ったものが多いですが、OPAMP単体では本来ヘッドホンを十分に駆動する能力はありません。DTM用のオーディオインターフェイスでもヘッドホン出力はOPAMP1個だけということも多いようです。

トランジスタやFETを使ってバッファ回路を作るのは設計や製作がなかなか難しいので、その橋渡しとしてバッファICを使ってみました。バッファICで楽をしたとは言え、実用できるようにするにはクリアしないといけない課題も多く、いい経験になったと思います。

タグ:LME49600
http://dad8893.blogspot.jp/search/label/LME49600

Github:
https://github.com/ryood/LME49600_HPA_V2

トランスを使った±9V電源



はじめてトランスを使って電源を作ってみました。LME49600ヘッドホンアンプ用の電源です。トロイダルトランスを使った理由は、普通の四角いトランスより高さが低くケースに収めやすいのと、出力が2系統タイプで同程度の出力電流が得られるものだと値段的に大差ないためです。

実験には小回りの効く電池電源が便利ですが、常用するならAC電源を使った方がコスト面で有利だと思います。

「トランスを使った±9V安定化電源 でけた(気がする)」
http://dad8893.blogspot.jp/2017/03/9v_24.html

Github:
https://github.com/ryood/LME49600_HPA_V2/tree/master/%2B-9V_PSU

ロギング可能な温度計



アンプや電源では半導体の発熱が性能に影響をおよぼすので、素子の温度測定用にPCでロギングできる温度計を作ってみました。コスト重視でPSoC4 Prototyping Kit(600円@秋月)を使っていますが、キャラクタ液晶(400円程度@aitendo)と合わせて1000円以上はかかります。

まだピンが余っているので、2系統の温度測定や、電圧も測定できるようにもしたいなあと思っています。

「ロギング可能な温度計 でけた」
http://dad8893.blogspot.jp/2016/12/blog-post_14.html

Github:
https://github.com/ryood/PSoC_4_Thermistor

3桁電圧表示器[ST-VM036R]を使った電流計



テスタで電流は測定できますが、内部抵抗が意外と高く電圧降下で困ったことがあったので、精度には目をつぶって電流検出用の抵抗の抵抗値を低くしたものを作ってみました。また、DCジャックを入出力端子としているのでACアダプタ等と測定回路の間に挟み込んでかんたんに電流を測定できます。

「3桁電圧表示器[ST-VM036R]を使った電流計 でけた」
http://dad8893.blogspot.jp/2017/01/3st-vm036r_19.html

Github:
https://github.com/ryood/PSoC_4_Thermistor

実験用のパーツ


開発には測定器と実験用のパーツが必要ですが、2015年頃にオシロとLCRメータを購入して以降、これと言った測定器は購入していませんがなんとかなっています。

あまりお金を掛けずに知恵と勇気で切り抜ける方針はいまだに変わっていませんが、実験・製作用に毎月のように細々としたパーツを購入しているので、トータルで考えると出費はなかなかのものになります。

抵抗やコンデンサはある程度値のバリエーションが揃っていた方が実験がしやすくなります。といっても気長にやるつもりなら、一気に揃えなくても必要な値のものを多めに仕入れていくと自然と揃ってくると思います。

製作物ではないですが、自然と出来てしまったものという意味でご紹介。

CR類ケース

左が抵抗、右がコンデンサ。ダイソーで売ってるお薬用のケースに仕分けして収納しています。

アナログICケース

オペアンプ等、アナログ系のIC。ダイソーで売ってるプラケースに導電スポンジを両面テープで貼り付けて収納しています。

デジタルICケース

マイコンやロジックICなど。

2017年4月16日日曜日

PCM5102Aの出力にかける4次バターワースLPF OPAMPを交換してみる。


PCM5102Aを使ったファンクションジェネレータの出力のデジタル歪を除去するために、多重帰還型のバターワース特性の4次LPFを作って利用しているが、高周波数になるとフィルターのキレが悪く歪が残っている。(参考:「オーディオ用DACを使ったファンクションジェネレータ まとめ」)

OPAMPを使ったアクティブ・フィルターの場合、参考にしてる「やりなおしのための実用アナログ回路設計」によると、GB積が十分大きいものでないと性能が得られない可能性があるらしいので、GB積の大きいOPAMPをいくつか試してみた。


試したOPAMPのGB積


NJM4580 15MHz
NJM2068 27MHz
NJM2137 200MHz
LME49720 55MHz
OPA2604 20MHz
NJM2742 2MHz (高速単電源OPAMP)
AD822 1.8MHz(ユニティゲイン周波数) (ちょっと高いフルスイングOPAMP)

※よくわかっていませんが、GB積とユニティゲイン周波数は違う場合もあるそうです。

48kHzサイン波


PCM5102Aを使ったファンクションジェネレータで、48kHzサイン波を出力し、4次バターワースLPFを通してオシロで見てみた。

ch1がPCM5102Aの出力波形で、ch2は4次バターワースLPFを通した出力波形。PCM5102Aの出力をLPFの前段でPOTで分圧して振幅レベルを調節しているのでch1も無負荷の状態とは異なる。

NJM4580 15MHz
記録し忘れ

NJM2068 27MHz

ch1:LPFバイパス ch2:LPF通過

NJM2137 200MHz

LME49720 55MHz

OPA2604 20MHz

NJM2742 2MHz

AD822 1.8MHz(ユニティゲイン周波数)

AD822はちょっと変なノイズが出ているかも。

1kHzサイン波


PCM5102Aを使ったファンクションジェネレータで、1kHzサイン波を出力し、波形を拡大してノイズを見てみた。

NJM4580 15MHz

ch1:LPFバイパス ch2:LPF通過

NJM2068 27MHz

NJM2137 200MHz

LME49720 55MHz

OPA2604 20MHz

NJM2742 2MHz

AD822 1.8MHz(ユニティゲイン周波数)

クロックノイズと思われるスパイク状のノイズの振幅多少差がある。たまたまなのかもしれないが、NJM2137はスパイク状のノイズが少ないようにも見える。LME49720は線が太い気がする(←ノイズが多い)。

メモ:


かんたんにテストしただけだなので測定誤差は大きいと思う。

NJM4580もGB積が15MHzとそこそこ高いので広帯域のOPAMPに変えてもあまり変わらなかったのかもしれない。

LME49720はHiFiオーディオ用でノイズも少ないはずなので、ノイズが多く見える原因は謎。LME49600ヘッドホンアンプで使うと、iPadのWifiアクセス中にノイズが乗る現象があった(参考「LME49600ヘッドホンアンプ Ver.2 iPadで使ったときのノイズ問題」)ので、環境ノイズに敏感なのだろうか(@@?

PCM5102Aのデジタル歪をもっと取るには、OPAMPを交換した程度ではダメで、チェビシェフ特性に定数を変更するとか、過渡特性を犠牲にしないためには8次ぐらいまで次数をあげるとかしないとダメそうだ。

パッシブフィルタ+OPAMPのバッファリングという手もあるかな~?

といいつつも、可聴帯域内では96kHz/24bitのUSB Audio I/Fの出力といい勝負なので、モチベーションはあまりあがりません(^q^;