見出し画像

モジュラーシンセ 単電源VCF自作

Arduinoプログラミングに挑戦しつつ、モジュラーシンセサイザーのフィルター(VCF)モジュールを自作したので、その備忘録。

背景
コードの書けないシステムエンジニア脱却のために始めたプログラミングの8作品目。
プログラミングの勉強が主目的なので、アナログ要素の強いVCFは後回しにしてきた。そのほかの主要機能は一通り自作したので、VCFに挑戦するに至る。

モジュラーシンセサイザー界隈は多様な価値観やプレイスタイルがあり、人により使用するモジュールに偏りがある。人によってはVCFモジュールをシステムに組み込まない程だ。

私がモジュラーシンセを始めたきっかけの一つは、VCFを自由に設定できる、ことにある。
YAMAHAのFM音源にmoogのVCFを使ったり、Rolandのsuper sawにTB-303のVCFを使うこともできる。これはモジュラーシンセの醍醐味の一つだ。

画像1

制作物のスペック
ユーロラック規格 3U 6HPサイズ
電源:40mA ( at 5V ) / 38mA ( at12V )
0-5Vの単電源仕様
Cuttoff周波数はCV変調可能
総額:900円
(Arduino nano 250円、DAC 150円、オペアンプ100円 他)

単電源で動く、つまり-12Vを使用しない。
回路は学研SX-150を参考にした。同じく単電源で、簡素なフィルター構成。KORG MS-20に近いサレンキーフィルタだ。
synthrotekのdirt filterも学研SX-150と同じ回路構成をしており、参考になる。いずれもwebを探せば回路図が出てくる。

プログラム
今回のプログラムは簡単。
ツマミとCVの電圧を読んで、フィルター用のDACとLEDに出力する。それだけ。

必ずしもデジタル制御が必要な回路ではないが、デジタルを使うことでアナログ的なチューニング工数を減らすことができる。

画像2

ハードウェア
サレンキーフィルタの参考資料は国内外に多くある。それらを参考に回路図を組んだ。

Cutoff周波数を決めるのは、INからオペアンプに通じる2個のトランジスタの抵抗値。この抵抗値(=ベース電流)はDACの出力電圧でコントロールしている。
また、トランジスタの前後にある2個のコンデンサの容量でもCutoff周波数が決まる。

レゾナンスを決めるのは、オペアンプ負帰還の抵抗値割合(22kohmと10kohm)、OUTからフィードバックされる回路の抵抗値(100kohmVRと1kohm)、及び一段目のトランジスタエミッタ側のコンデンサの容量だ。

Cutoffとレゾナンスのチューニングには数時間を要した。

単電源はGND電位を2.5Vにすることで成立させている。2個の10kohm抵抗により分圧で2.5Vを作り、ボルテージフォロワーでインピーダンスを調整している。

画像3

オリジナルの回路はダイオードで過剰な電圧をクリップしているが、過剰な発振はそれはそれで面白いので、今回は採用しなかった。(スペースの問題もあり)

ソースコード
粗末だが公開する。悪い点あれば指摘貰えると嬉しい。
先述のとおり、目を見張るような制御はしていない。

#include <Wire.h>

int cnt = 0 , a;
int cv_in = 0;
int old_cnt = 0;

void setup() {
   pinMode(5,OUTPUT);
 Serial.begin(9600);
 Wire.begin();
}
void loop() {
 old_cnt = cnt;
 cv_in = analogRead(2);
 cnt = (analogRead(1) + cv_in) *2 +2047;
 if ( cnt < 1 ) {
   cnt = 1;
 }
 else if (cnt > 4095 ) {
   cnt = 4095;
 }

 if (old_cnt != cnt ) {
 Wire.beginTransmission(0x60);
 Wire.write((cnt>> 8) & 0x0F);
 Wire.write(cnt);
 Wire.endTransmission();
//    delay(1);
 analogWrite(5, map(cnt, 2047, 4095, 0, 255));

 }
}

この記事が気に入ったらサポートをしてみませんか?