製作モジュール一覧

2018年7月3日火曜日

エンベロープ・ジェネレーターの構想 その2 アナログ回路の検討

「達人と作るアナログシンセサイザー自作入門」を参考にして、Analog2.0のエンベロープ・ジェネレーターを調べてみました。


基本的にはNE555を使ってGate信号から2つのH/Lの状態を作り出し、アナログ処理部の充放電によってADSRのエンベロープを生成しています。

EGのアナログ処理部のシミュレーション


シミュレーション回路図

「Attack」と論理反転した「InvAttack」と「Gate」の3つの論理値でアナログ処理部を制御します。

ADSRは「Rattack」「Rdecay」「Rsustain」「Rrelease」の4つのR値で設定します。

Q3は「InvAttack」信号によりスイッチング動作させるために入れています。NE555を使う場合はこのTrはNE555に内蔵されていて、Q3のコレクタがDischage端子に出ています。

入出力波形

NE555を使う場合は、V(attack)と、V(invattack)によるスイッチングがNE555から出力されます。

C1に流れる電流

I(R2)(緑の線)はAttack時にRattackからC1に流れ込む電流、I(R1)(青の線)はDecay時にC1からRdecayを通して流れ出す電流、I(R3)はRelease時にC1からRreleaseを通して流れ出す電流です。

Q3がONのときR4とR5の分圧でSustainレベルが設定されていて、Decay時に流れ出す電流I(R3)(赤色の線)はC1の電位がSustainレベルになるとストップします。

I(C1)(マゼンタの線)はC1の充放電のようすです。この充放電によってC1の電位V(out)の電位が変化しています。

作戦検討


このアナログ処理部に、Gate信号から、NE555か、楽をするためにマイコンで作った論理値を入力してもいけそうな気がします。

Nucleoで最初から最後までプログラムで処理して内蔵DACから出力する方法もあります。(時定数はプログラムで)

簡単に表で比較してみます。

エンベロープ・ジェネレーターの実装方法比較

方法 回路規模 クロックノイズ デジタル歪 柔軟性
555+Analog なし なし
マイコン+Analog あり なし
Nucleo あり あり

555は論理値を出力すると言ってもクロックを使わないのでクロックノイズは乗りません。マイコンの場合は実際の波形生成はアナログ回路で行うのでデジタル歪(波形のガタガタ)は乗りません。Nucleoの場合は出力にLPFを入れたりするぐらいで回路規模が小さく、プログラムを書き換えれば任意の波形が出せそうなので柔軟性は高いと思います。

悩ましいところです(^q^;;;

メモ:


検証はしていませんが、エンベロープ・ジェネレーターの回路は他にも、「フリップ・フロップとアナログスイッチを使ったもの」や「オペアンプを使ったもの」などがあるようです。Minimoogはなんとフルディスクリートでやっている(@@?

エンベロープ・ジェネレーターの構想

単体のLFOのArduino LFOが使い勝手がいいので、Envelope Generatorも単体で作ってみようと思います。

候補としては

  • 男らしくアナログ回路で組む
  • 少し男らしくArduino + MCP4922で組む
  • 使い慣れたNucleo+mbedで組む
  • 久しぶりにPSoC 5LPを使ってみる
  • 大人の世界(IoT)に対応するためにESP WROOM 32で組む

と考えてみましたが、Nucleoならmbedでサクッとプログラミングできるし、DACも内蔵されていて12bit精度なのでNucleoでやることにしました。

PSoc 5LP、ESP WROOM 32も内蔵DACがありますが8bit精度なので今回は候補から外しました。

理想とするエンベロープ・ジェネレーター



シーケンサーから出力される「Gate」信号はOn→Offに切り替わるだけで、いかにもデジタルっぽい波形です。

エンベロープ・ジェネレーターは「ADSR」の設定によって、Gate信号をなんとなく実際の楽器のようなでこぼこした振幅に加工する役目を果たします。

図の「ADSR Linear」は「ADSR」の設定に従って素直に線形補間したものです。理屈で考えると本来はこのような波形になるのですが、アナログ素子で実現すると「ADSR Analog」のようにぬるい波形になってしまうようです。

コンデンサの充放電を考えるとこんな感じかなと思える波形だし、自然現象を利用しているので「自然な」波形なんだと思います。


プログラムで書くとすれば「ADSR Linear」の波形が一番簡単ですが、できれば「ADSR Analog」のよう波形にしたい。

KIK01ではやむを得ない事情でプログラムで時定数カーブをつけましたが、単体のエンベロープ・ジェネレーターなら「ADSR Linear」の波形を出力して、後段にLPFを入れれば「ADSR Analog」のような波形になるのでは?と考えました。

Nucleo F446REでのプログラミング

配線図

ADSR設定用のPOTはBSM02で使っているPOTx8パネルを一時的に流用しました。

GATE信号はNucleoボード上のUSER_BUTTONで生成するようにしていて、同じPinに矩形波だけのファンクション・ジェネレーターをつないで一定間隔でGATE信号を出力するようにしました。

mbed repository
https://os.mbed.com/users/ryood/code/Nucleo_F446_EG/

出力波形

ch1:Gate信号(反転) ch2:NucleoからのADSR出力

USER_BUTTONの押し下げでGate Onにするために、Gate信号は反転論理にしています。

一次CR LPFを通す(R=10k C=1uF)fc≒15.9Hz

ch1:Gate信号(反転) ch2:CR LPFの出力


一次CR LPFを通す(R=100k C=1uF)fc≒1.59Hz

ch1:Gate信号(反転) ch2:CR LPFの出力

失敗です(^q^;

全体にダラッとなめらかになってはいますが、Attackの立ち上がり、AttackからDecay、SustainからReleaseに切り替わるとき、コンデンサの充放電開始のような尖った波形になっていません。

もう少し考えます。

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

2018年7月1日日曜日

トランジスタ・ラダー・フィルター TLF01にOPAMP+NPNアンチ・ログ回路をつなぐ。

トランジスタ・ラダー・フィルター TLF01にNPN/PNPアンチ・ログ回路をつなぐ。」のアンチログ回路をAnalog 2.0などで使われているOPAMP+NPN型のアンチログ回路に差し替えてみました。

回路図

OPAMPはNJM4580を使用しました。

TLF01の定数はNPN/PNP型のときと同じです。TLF01とアンチ・ログ回路の間に同じく1kΩのRを挿入しています。

配線図


カットオフやレゾナンスの効きはこちらの方が良い感じがします。「アンチログ(電圧→電流変換)回路 その2」で測定した波形はどちらも大差ないように見えましたが、何かが違うようです。

NPN/PNP型とOPANP+NPN型のアンチログ回路をそれぞれユニバーサル基板で組んで実験してみようと思います。