2016年7月29日金曜日

ベースマシン用のコントロール・パネルを作ってみた。


ADC入力用にPOTを並べただけだが、配線が簡単になるように作成。手持ちのPOTが足りないのである分だけ付けてみた。

裏面


側面


カッターで溝を作って、かまぼこ板をあててバイスで挟んでアルミ板を曲げた。コの字型になっている1段目は簡単に曲げられたが、2段目はバイスが干渉して結構苦労した(^q^; 結局ペンチで曲げたりハンマーでたたいたりして整形した。

ベースマシン全体(途中)



だいぶ整理できてきた。

ブレッドボードはPSoC4内蔵の電流出力型のDACを抵抗1本で電圧変換して、内蔵OPAMPに戻すために使っている。これもシールドというかPSoC 4 Pioneer Kit上で完結できるようにミニ基板を作成する予定。

mbed repository:
https://developer.mbed.org/users/ryood/code/SpiSequenceSender_Test/

メモ:


PSoC 4 DCOの出力が7~8bit DACなので波形が相当ガタガタしている。DCFとは別にデジタル歪をとるためのLPFを通した方がいいかどうか。

シーケンス入力用のUIを作りこむ前に現状でもう少し実験してみる。

2016年7月28日木曜日

NJM13700 DCAの基板でけた。

回路図

基板図

途中でMCP4922(IC2)を間違えて5ホール分(基板のガイド線1個分)ずれてはんだ付けしてしまったので、急遽部品の配置を変更。R6とC3だがなんとか大事に至らず変更できた。助かった(^q^;;;

部品面

はんだ面

電解コンデンサの正負を間違えてはんだ付けしたり、なんだかんだあったがなんとか完成(^q^/

出力波形


PCM5102AのファンクションジェネレータとNucleoシーケンサーをつないで動作確認。


ch1:入力波形 ch2:出力波形

2016年7月26日火曜日

アルミ板で制御盤を作る構想。

POTとつまみが足りて無いがうまくすればかっこよくおさまるかも。



Level/Duraiton/Decay/Susutain←4個

Cutoff/Resonance←2個

予備は2個

OPAMPチェッカー(生き死に判定)の実験

OPAMPが生きてるか死んでるか手軽にチェックできないか妄想してみた。ググると「Op-Amp Tester」がヒット。

仮想GNDを作るTLE2426を使っていて、こんなのRで分圧してOPAMPの2回路あるうち1個使ってバッファリングすればええやん~

と思ってLTSpiceでシミュレーションしてみたのだがどうもうまくいかない(^q^;

回路図

過渡解析

電源の内部抵抗を変えてシミュレーションしてみて、一番上のV(vcc)-V(vee)が電源電圧。明るい水色の6.5Vあたりの電圧で、2段目のV(vref)を見ると-1.2Vあたりに来ている。

V(vled)はLEDにかかる電圧で、1.6VあたりならLEDが点灯するはず。しかし、水色の線は-3.0V以下を指している。

これはもう線形性が保たれていないのは確実なので、素直にTLE2426を使って電源と検査対象物を分けることにした。

ブレッドボード図
壊れてないTL072

壊れてるTL072

壊れてるのは識別できた(^q^/

2016年7月25日月曜日

NJM13700 DCAの基板設計

回路図

基板図

配線の都合で、NJM13700はチャンネルA、TL072はチャンネルBを使うように変更した。

33kΩの抵抗の手持ちがなくなったので27kΩに変更。出力レベルが若干上がる。100mV(p-p)の入力で2V(p-p)強。

部品並べ



頑張れば1日ではんだ付けできるかな?

配線の再チェック


NJM13700のチャンネルを変更して再度チェックしてみた。(パイロットランプ用のLEDもつけた)



これ完成させたらラズパイ買う!!

2016年7月23日土曜日

NJM13700 DCAの設計

回路図

図ではOTAはLM13600ANになっているが、NJM13700を使った。NJM13600でも動作する。

R1とR2の分圧で入力を100mV(p-p)になるように調整する(NJM13700の信号入力範囲)。

C1とR3はACカップリング(fc≒1.38Hz)。C2とR9も出力用のACカップリング。

R6とC3はバイアス波形(エンベロープ)をなまらせるLPFでR6で調節する。IC3BとTr1付近はOTAに入力するための電圧→電流変換回路。

NJM13700ボードはSPIハブ(?)機能をもたせる(JP5, JP6)。

このボードに±5Vを入力し、IC4(3.3V LDO)で3.3V電源とし、あわせて±5V/3Vの電源供給元(JP7, JP8, JP9)とする予定。

配線チェック


配線図


シーケンサーとして使うNucleo F401の5V電源も、NJM13700 DCAから供給した。Nucleoのボード上のJP5のE5V側をショートし、morpho headerのE5V/GNDから電源を供給した。

電源電流
+5V 62mA~73mA
-5V 4.80mA

出力波形


矩形波

ch1:NJM13700の+INPUT B(14Pin)への入力波形 ch2:出力波形

サイン波

ノコギリ波


2016年7月22日金曜日

タンタル電解コンデンサとアルミ電解コンデンサの比較

aitendoで4.7uFのタンタルコンデンサを仕入れたので、LCRメータのDE-5000で特性を見てみた。

比較したのは


Tantal aitenod 4.7uF 35V
Pana Panasonic M 4.7uF 50V 85℃
MPP Rubycon メタライズドポリプロピレン 4.7uF 250V


左から、タンタル電解、アルミ電解、フィルム(メタライズド・ポリプロピレン)

容量(uF)



周波数(Hz) Tantal1 Tantal2 Pana1 Pana2 MPP1 MPP2
100 4.866 4.827 4.784 4.714 4.72 4.72
120 4.85 4.814 4.77 4.7 4.717 4.718
1000 4.783 4.753 4.57 4.433 4.717 4.717
10000 4.661 4.646 4.264 4.117 4.716 4.716
100000 2.78 2.8 3.62 3.53 4.64 4.76


10kHzまではタンタルの方がアルミより良いが100kHzになると逆転。

Tanδ



周波数(Hz) Tantal1 Tantal2 Pana1 Pana2 MPP1 MPP2
100 0.023 0.026 0.018 0.024 0 0
120 0.023 0.027 0.02 0.028 0 0
1000 0.072 0.116 0.063 0.069 0 0
10000 0.615 1.074 0.255 0.254 0.001 0
100000 3.37 6.17 1.876 1.854 0.082 0.085


誘電正接はアルミ電解の方が良い

ESR(Ω)



周波数(Hz) Tantal1 Tantal2 Pana1 Pana2 MPP1 MPP2
100 7.5 8.7 6 8.3 0.1 0.1
120 6.3 7.5 5.8 7.9 0 0.1
1000 2.41 3.9 2.21 2.49 0 0
10000 2.1 3.67 0.95 0.88 0 0
100000 1.92 3.51 0.82 0.83 0.02 0.02


ESRは1kHzぐらいまではタンタルとアルミが同程度だが、10kHz以上ではアルミの方が良い。

タンタルはスペック的にはあんまりよくないという印象。

サイズが小さいのと温度特性が良い(らしい)のがメリットだが、デカップリングコンデンサと使ってショートした時を考えると電源にヒューズかポリスイッチを入れないといけないのでどうだかな~。

まあ、一回は使ってみようか。

PCM5102Aを使ったファンクションジェネレータの熱対策と小改良

夏場になってきてPCM5102Aを使ったファンクションジェネレータが誤動作するようになってきた。通電後しばらくすると出力波形がぐちゃぐちゃになる。(操作はできる)

プログラムでダイ温度を表示できるようにしているので見てみると40℃程度まで上がっていた。

なんちゃって放熱器をつけていたが、ちゃんとした(?)放熱器をaitendoで仕入れたので付け替えてみた。


共立で売っている熱伝導シールで接着した。


触ってみるとPCM5102Aも相当発熱していたので、もともと使っていたものはPCM5102Aの方につけた。

室温28℃で

旧ラジエーター:5分後38℃
新ラジエーター:5分後37℃

と効果はそれほどかわらなかった(^q^;

が、PCM5102Aの方にも放熱器を付けたおかげか、20分ぐらい様子を見ても波形がぐしゃぐしゃになることはなくなった。PCM5102Aの方が原因だったのかな?

小改良


この間PSoC 5LPのEEPROMを使ってみる実験をしたので、設定値をEEPROMに保存して電源再投入後も前の設定が呼び出されるように改良した。

電池がもったいないので電源を頻繁にオン・オフするので、これ、結構便利です(^q^/

Github:
https://github.com/ryood/I2S_FG/tree/master/PSoC/I2S_FG/PrototypingKit_FG.cydsn

少ないパーツで電流を検出する。

小ネタ実験です。5V電源の電流値を検出する回路で、AVR等を使ってLCDに表示することを想定。

LTSpiceでシミュレーション


回路図

I1が電流源でRLに電流を流し、0.1ΩのRshuntで電圧降下させて電圧として取り出している。(Low Side)

これを単電源OPAMPのLM358の23倍の非反転増幅回路で増幅して電流検出値として「OUT」から取り出し、ADCに入力する。

DC解析

青色のI(i1)が電流、V(out)が出力値。電流は0mA~500mAにしているが、出力値は50mA以下では非線形な感じで最小値が0.1V程度になっている。

上側のグラフのV(n003)はRShuntのプラス側の電圧値で、こちらは線形なのでLM358の特性なのかもしれない。また、実際にはOPAMPの入力バイアス電圧(VIO)が23倍に増幅されて出力されるのでこれも補正する必要がありそう。

ブレッドボードで実験


配線図


INからGNDの5V電源と、オペアンプを駆動する5V電源を2つ用意して測定した。

実測値


Rshunt(Ω) 0.11
R1(Ω) 989.6
R2(Ω) 21860
A 23.08973323
VIO(V) 0.0234

Aは増幅率、VIOはLM358の入力オフセット電圧。23.4mVなのでそこそこ大きい値だ。

I V A*V A*V+VIO 実測 err %
0.0486 0.005346 0.123437714 0.146837714 0.1442 -0.002637714 -1.83%
0.101 0.01111 0.256526936 0.279926936 0.291 0.011073064 3.81%
0.401 0.04411 1.018488133 1.041888133 1.23 0.188111867 15.29%

Iはテスタで測った電流値。VIOを加味しても400mA程度だとかなり大きな誤差が出た。

メモ:

AVRの内蔵レギュレーターの1.1Vを使ってA/D変換すれば、精度に目をつぶれば0mA~500mA程度まで測定できる。

ATTiny13はADCはあるが、I2Cに対応していないのでLCDに表示できない。

NXPのLPC810なら8PinでもI2Cが使えるが、3.3V駆動なので3.3VのLDOが必要。←I2C LCDが3.3V駆動なのでちょうどいいか。

ATTiny85のDATASHEETを見るとGAINx20のADCが使えるようだ。ということはオペアンプで増幅しなくて済むかも?また、差動入力のADCにも対応しているようでLow SideではなくHigh Sideで測定できるかもしれない。

もう少し実験しようかな。

2016年7月19日火曜日

NucleoシーケンサーとDCO、DCF、DCAの結合テスト(UIなし)

やっと音が出た(^q^/


配線図

Nucleoシーケンサー
https://developer.mbed.org/users/ryood/code/SpiSequenceSender_Test/rev/c248781608af

PSoC4 DCO
https://github.com/ryood/PSoC4_DCO/tree/c9a644f7217aabb522c75d070f4e08a5680e7dde

VCVS DCFとDCAを組み合わせると結構不安定になり、フィルターのcutoff/resonaceのツマミの位置でブツブツ言ったり、発振してしまったりする。

製品のように安定して使えるわけではないが、ギリギリのパラメーターを狙っていくのも面白いかもしれない。(←言い訳半分)

ブレッドボードでの実験もそろそろ限界っぽいので、シーケンス打ち込み用のUIをつなぐ前に、ユニバーサル基板で組んでしまう予定。

出力波形

ch1:VCVS DCFの出力をACカップリングした後の波形 ch2:DCAの出力

メモ:


DCOの出力はGND~VDDの波形なのでACカップリングした。→GNDを中心に振れる波形になった。

DCOの出力にデジタル歪が乗っているのでLPFを入れる。(単体である程度テスト)

VCVS DCFはいきなりシールドで組んだが基本アナログ回路なので無謀だったかもしれない(^q^;

VCVS DCFがうまく動かなかった原因はOPAMPのICソケットの接触不良のようだ。丸ピンのICソケットを一段かませたら安定しているようだ。

VCVS DCFの後段でACカップリングしたが、DCOとDCFの間に入れた方がいいか。

DCAのコントロール用に6連POT BOXを作成。


あ~早くリズムマシンとミックスしたい(^q^/

2016年7月18日月曜日

LME49600とPCM2704基板をつないでみる実験

「ヘッドホン・アンプ製作実例集」に付属のPCM2904基板とLME49600を使ったヘッドホンアンプをつないで実験してみた。




PCM2904は単電源で、出力もGND~VDDで振れる。ACカップリングするのが普通だが、LME49600のDATASHEETに載っている参考回路はDCサーボが入っていて、DCオフセットをキャンセルするようになっている。(参考:「LME49600のヘッドホン・アンプをブレッドボードで実験してみた。」)

したがって、理屈の上ではACカップリングしなくてもDCオフセットは除去される。ACカップリングしなくてもちゃんと動作するか確認してみた。

ACカップリング

回路図

C1:2.2uF、R3:47kΩにしたので、
fc = 1 / (2 * pi * C * R) ≒ 1.54Hz
R1、R2は入力レベル調整用のボリュームで、ステップ解析した。

AC解析

実験


配線図

PCM2704の出力を10kΩ/AのPOTで減衰させ、CRで構成したHPFを通してLME49600のアンプ回路に入力している図。このCRを通す場合とバイパスした場合を見てみた。負荷にはLME49600の4PIN(VOUT)とGNDの間に47ΩのRを入れた。

入力信号はWaveGeneで1kHzのサイン波を生成し、PCM2704から出力した。

ACカップリングなし

ch1:PCM2704からの出力 ch2:LME49600からの出力

(2)V:-7.697mv (DCオフセット)

ACカップリングあり

(2)V:1.711mv (DCオフセット)

どちらもDCオフセットはほとんど除去されているが、ACカップリングした方が少なくなっている。また、ACカップリングしないと電源投入直後は出力も+側に偏っていて、じわじわとGNDに落ち着いてくるようだ。

サイン波の場合はACカップリングしなくてもある程度大丈夫そうだが、音楽信号を入れるとそうでもなかった。

ACカップリングなし

ACカップリングあり

ACカップリングしないと出力もプラス側に偏ってしまう。PCM2704の出力に入れている10kΩ/AのPOTを最大付近にした場合だけこうなる。入力を少し絞ればGND付近に落ち着く。

サイン波なら大丈夫で音楽信号だとだめな原因は謎。DCオフセットがあるとヘッドホンの振動版が常に偏ってしまうので特性も悪化するし、ヘッドホンにも悪い。

2016年7月16日土曜日

Arduinoとアナログ・バンド・パスフィルタでなんちゃってFFTをしてみる。

FFTというか周波数分離の実験です。



BPFで周波数を選択してArduinoのADCに入力してやって周波数分布が見れるかどうかという実験。

BPFはOPAMPを使ったアクティブ・フィルターもあるが、実装がめんどくさい。

ADCの入力インピーダンスは高いようなので、信号源の出力インピーダンスを十分低くできればパッシブ・フィルターも使えそうだ。

インダクタを使ったRLCフィルターもあるが、オーディオ帯域では定数がでかくなってしまってなかなか大変そう。

RCのLPFとHPFを連結すればBPFになるので、これで実験してみた。

シミュレーション


回路図

AC解析

定数はキリの良い値にして

fc = 1 / (2 * pi * r * c) ≒ 16kHz, 1.6kHz, 160Hz

になる。

Arduinoのスケッチ

BPF_ADC_Test.ino

#include <stdio.h>

int nof  = A0;
int bpf0 = A1;
int bpf1 = A2;
int bpf2 = A3;

int v0 = 0;
int v1 = 0;
int v2 = 0;
int v3 = 0;

void setup() {
  analogReference(INTERNAL);  // internal reference 1.1V
  Serial.begin(115200);
  Serial.println("*** Measuring BPF output  ***");
}

void loop() {
  char lineBuffer[80];
  v0 = analogRead(nof);
  v1 = analogRead(bpf0);
  v2 = analogRead(bpf1);
  v3 = analogRead(bpf2);
  sprintf(lineBuffer, "%d,%d,%d,%d", v0, v1, v2, v3);
  Serial.println(lineBuffer);
}

自作のPCM5102Aを使ったファンクションジェネレータからサイン波を出力し、シリアル通信のグラフ化ツールのCPLTを使ってグラフ化してみた。

160Hzサイン波

ch1: ファンクションジェネレータからの出力
ch2: 1uF/1kΩのBPF
ch2: 0.1uF/1kΩのBPF
ch3: 0.01uF/1kΩのBPF

1.6kHzサイン波

16kHzサイン波

高周波数になるとAuduinoのSerial通信やADC値の読み込みのせいで(だと思う)、サンプリング精度が低くなってファンクションジェネレータの出力のch1波形がぐちゃぐちゃになっている。

まあでも、精度は悪いが、一応特定の周波数に反応できているようだ。

メモ:


積セラを使うと精度が悪化するのでできればフィルムコンで。同じフィルムコンでもマイラとポリプロピレンのように特性が違うといろいろややこしくなりそう。

ADCのサンプリングレートもある程度高くないと帯域が稼げない。(デジタル・オシロといっしょ)

ほんとは増幅器を入れたいところだが、それだとアクティブフィルタと部品数がほとんど変わらないので意味がない(^q^;

フィルタの位相ずれがあるので、プログラムでも入力値を平均化するなどした方が良さそう。

10倍精度ならまあまあだが、オクターブ(2倍)や音階になるとかなりシビアだと思う(^q^;;;