電音の工場ブログ

趣味の電子工作を中心としたブログです.音モノの工作が多いです.

当ブログは…

LFO波形モーフィング

RJBさんからコメントが寄せられた。

http://emusic.g.hatena.ne.jp/Chuck/20070521#c1179674936

あと、たとえばCV変化で波形をシームレスに変化させられるというのはハードルが高そうですかね?

うおー、その考えは当初なかった。ていうか、そもそも原初は正弦波のみだったので…と言い訳をしつつ、隣り合うふたつのテーブルの同一位相での比例配分で良ければ比較的簡単な実装です。

10bit ADCの 上4bitで16波形を決定しているので、下6bitで64段階のモーフィングが可能です。チャネルあたり乗算2回と加算1回とビットシフト1回。

丸めを考慮しないでやってみた正弦波から鋸歯状歯(右肩上がり)への波形変化は以下のとおり。

morphing

モーフィングを考慮した波形テーブル並びに変更するのが良さそうです。

8pin AVR LFO完成(とする)

初めて妄想を晒したときからアルゴリズム検討したり、さぼったりしているうちに10ヶ月が経ち、ようやく8pin AVR LFO が完成。NGに続く8pin AVRシリーズ*1

出来たといいつつ、ブレッドボードに載っているだけ。今後はどのような展開にしようかと考え中。シンセのモジュールにしてもよし、エフェクタに組み込むことも考えられる。

マイコンには ATtiny45 を使用して、PWMにてCH0、CH1の2出力。内蔵A/Dコンバータ(ADC)で 周波数 / CH1のCH0に対する位相差 / 波形 を決定している。LFOの周波数は仕様では 7.5mHzから244Hz まで。

回路図はコチラ

ATtiny45のメインクロックは内蔵PLL発振の16MHz。出力は 62.5kHz 8bit のPWMで、回路図では1~2kHz程度のRCフィルタ*2で簡単に済ませている。このままの出力レンジは 0-5V。必要に応じてバファリング、電圧シフト、アクティブフィルタなどを試されたし。

また周波数と位相と波形は電圧ポテンショメータで指定するようになっているが、電圧制御も可能。ADCが10bitなので微妙に段階的な変化かも。しかも敷居の境目ではノイズによってこっちの波形になったりあっちの波形になったりということが起こってしまったが、これはこれで面白いのでそのまま採用。一応CH0に関しては波形が1周期変化したところで波形の切り替わりが行われるようにはしてある。

得られる波形はいろいろさまざま16種類。CVで波形選択できます(Doepfer的)。基本的には256アドレスの8bit語長のテーブルをいくつか持っていてそれを出力しているだけ*3なので、ご興味のあるムキにはテーブルを書き換えればOK!

ソースコード類はこちらからどうぞ。

以下 観測波形。

sine

rect

saw saw

tri

saw powered by 30 saw powered by 30 inverted

saw log by 10 saw log by 10 inverted

tri powered by 20 tri powered by 20 inverted

tri log by 10 tri log by 10 inverted

arc sine arc sine inverted

random

なんか見ていると、このLFOをカスケードにしても面白いような気がしてきた。そうなると16ステップの階段波形を入れなかったのが悔やまれる。矩形波をやめて階段波にしちゃおうかしら。

そうそう、当初案ではトリガで位相リセットという話があったけれど、それは止めて波形選択にしてしまった。リセットピンをポートに割り当てれば出来なくもないが、要望はありますかね? ちなみにリセットピンをdisabledにすると、あとで波形とかを書き換えたりしようと思ったときに苦労します。STK500とかのシリアルハイボルテージプログラマがあれば大丈夫だけど。

8pinモノとしてはだいたい仕様をつっこんじゃったかなと思う。もっとリッチな仕様についてはそのうちにやってくるV850 LFOへとネタを先送りしようと思う、今日この頃。

*1:シリーズだったのか? しかもNGはATtiny13だったし…

*2:しかもスチコン手持ちの関係で変な定数だわ、実測したら数割違う値だったり…

*3:補間処理は行っておりませぬ。