電音の工場ブログ

当ブログは…

自作エフェクターシンセサイザ製作のネタや開発覚え書きなど、筆者の電音活動を記録しています。お探しの記事が見つからない方は、検索カテゴリ一覧をご利用ください。

スパマーが来訪すると、ときどきコメントをはてなユーザのみに絞ったり開放したりすることがあります。

2011-02-14

ここしばらく

| ここしばらく - 電音の工場ブログ を含むブックマーク はてなブックマーク - ここしばらく - 電音の工場ブログ ここしばらく - 電音の工場ブログ のブックマークコメント

ここんとこしばらくは部屋の整理に邁進しておるです。

で、部屋がまったく使えない状態、散らかりまくり。

そんななか、「みんなで自らの作業を見せ合う」という怪しい会が催され、行ってきた。そうやって場所と時間をひねくり出して使えない部屋からの逃亡。


実はDATも整理しようと思って出してきて、そしてソニーのDATプレイヤなんぞを持っているので処分するにあたって音を確認していたらやはり音質がいいので処分を取りやめてしばし常用しようと思った矢先に電池ボックスの蓋ツメをとめるプラスティックが割れてしまって、使うにも売るにもイマイチな状態になってしまったけれど、電源アダプタのジャックがEIAJ統一プラグ#1 だったものだから、作業会の前に秋葉原で買ってきて、合わせて単三2本の電池ケースも買ってきてアリゲータクリップで繋いで実験くん。見事にDAT動いて嬉しい。電池ケースに#1プラグをはんだづけして常用しようと思う。


BBDのドライバとLFOをワンチップにする件、実エフェクタではどうなっているのだろうか、ということで YAMAHA の PSE01シリーズ、FL-01 と CH-03 を持ち込んでオシロを借りてパルス計測。depth/rate/(manual) を振ってパルスの周波数を観測してきた。結果は後日。ただLFOがどんな波形で揺すっているのかはパルスを見ているだけではわからなかった。F/V変換器を作って調べてやる必要があるかなぁ。


ESM-2を箱入れしようと通販でタカチのFC-5-20-20を購入。事前に設計しておいて、作業会の現場でケがいてオプティカルセンターポンチの実演まで。しかしあれだ、他の人と話をしながらやっていたら穴をあけないはずのところにまでポンチしてしまった。ポカを避ける段取りが不十分だったなぁ。


これまた作業が止まっているギタマガの回路図採り。作業会はそれなりに集中できるいい場だったので持ち込んだが、時間切れ! くやしい、早々に回路図採取しなくては。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20110214

2011-02-02

BBDドライバその後

| BBDドライバその後 - 電音の工場ブログ を含むブックマーク はてなブックマーク - BBDドライバその後 - 電音の工場ブログ BBDドライバその後 - 電音の工場ブログ のブックマークコメント

BBDのドライバの方は実機フランジャのCP周波数を測定しようということにして、しかし部屋が片付かないのでペンディングしている。今は作業するだけの土地がとれない…

実は来週信号処理関係者が集まって巣鴨でうだうだと遊ぶ会が開かれる予定なので、その場にフランジャコーラス(今手元にあるのはYAMAHAのPSE01シリーズのだな)を持ち込んでオシロを借りてその場で測ろうかと…

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20110202

2011-01-30

BBDドライバ w/ LFO さらに

| BBDドライバ w/ LFO さらに - 電音の工場ブログ を含むブックマーク はてなブックマーク - BBDドライバ w/ LFO さらに - 電音の工場ブログ BBDドライバ w/ LFO さらに - 電音の工場ブログ のブックマークコメント

ATtiny25/45/85内蔵のTimer1を使い、分周器のついた8bitのカウンタをPLLクロック(64MHz)で動かして、15Hz~16MHzまで矩形波生成できることがわかった(速報 - 電音の工場ブログ - E-Musicグループ)。さらに検討を進める。


前回こんな図面を出した。

とりあえずPCKの分周比とトグルモードのPWMにしてBBDドライブ用のパルスを生成するとこんな感じの周波数になりそうですよ、と。

f:id:Chuck:20110125160403p:image 大きいサイズはこちら

BBDドライバ w/ LFO - 電音の工場ブログ - E-Musicグループ

これは分周比をパラメータ(1, 2, 4, 8, 16)にしてOCR1C値(0~255)に対応するクロックパルスの発振周波数をグラフ化したものだ。logスケールで線形となっている。ちなみに分周比はさらに32, 64, ..., 16384 とすることができて、最も分周すると15Hzまで作ることができる(分周比16384)。


グラフの一本化

パラメータ化されたままでは逆関数の定義ができないし扱いづらいので、定義域をひとつに、グラフを一本化した。

入力を 0~4095 の 12bit に範囲拡張して以下のとおり定義域を場合分けしている。

入力範囲 IN分周比OCR1C値
0~255 (IN[11:8]=b0000)10~255 = IN[7:0]
256~511 (IN[11:8]=b0001)2128~255 = IN[8:1]
512~1023 (IN[11:9]=b001)4128~255 = IN[9:2]
1024~2047 (IN[11:10]=b01)8128~255 = IN[10:3]
2048~4095 (IN[11]=b1)16128~255 = IN[11:4]

これで散布図を描くと以下のようになる。

f:id:Chuck:20110131073422p:image 大きいサイズ

実機でも16MHzまでの発振を確認したが、まぁ、実際使う発振域は 10kHz~1MHz ぐらいでしょう。

ディジタル設定なので得られる値は離散的なものになります。16MHzの次は10.7MHz とか 1MHzの次は969.7kHzとかですね。ある程度OCR1C設定値が大きいほうが値間隔が細かくなります。分周比が1以外のところでは、入力範囲が分周比に応じて飛び飛びになる。例えば1024の次は、ここは分周比が8の領域であり、1032になる。入力範囲は表中のルールで丸められる(510も511も、分周比2、OCR1C値255となる)。

ところで当初使えると思っていたトグルは ATtny25/45/85 の Timer1 の CTC な PWM では使うことが出来ないとわかった。ということで、Fast PWM にせざるを得ないが、これにともなって duty 50% が保証できなくなる。ざっと10kHz~1MHzの範囲で 50%~50.77% になります(duty 最悪値は分周比1、OCR1C=64、OCR1A=32とした984kHz)。これもあまり問題にならないでしょう。CP1 と CP2 が同時にONして、アナログスイッチが筒抜けになることのほうが(音的に)イマイチでしょう。


入力設定値 対 得られる遅延量

クロックパルスの周波数で考えてもピンと来ないので、実際にBBDに適用したときの遅延量(単位 秒)を表してみた。

f:id:Chuck:20110131073424p:image大きいサイズ

入力設定値と得られる遅延量の関係は線形となっていることがわかる。

グラフ中で入力設定値の定義域は16~4095とした。入力設定値16はCPでは2MHzにあたる(その時の遅延量は1.024msec)。入力設定値4095では約260msecの遅延量が得られる。

入力設定値の分解能が最も細かい(分周比が1だから)定義域を16~255とした部分を拡大表示してみると、次の図のとおりとなる。入力設定値255では遅延量は16.32msec となっている。

f:id:Chuck:20110131073423p:image大きいサイズ


得られたグラフの逆写像を利用して、どれだけの遅延量が欲しい時の設定値はいくつにすれば良いか、ということがわかる。

今後は、実際のエフェクトで必要な遅延時間とその変化の度合いを調べ、マイコンで生成できるようマッピングアルゴリズムを考えていく。


ところで精度の話

今回のクロックパルスの生成は ATtiny85 の内蔵PLLに依っている。内部RC発振したものをPLLで逓倍して64MHzが出ているので、温特やら電圧特性やら影響を受けて発振周波数は変化するものと思われる。


ついでに電流値

ICEを接続した debug可能の状態、CPU停止、PLL/PWM系が動いている状況で実測 消費電流は12mAだった。debug可能状態では電流が多めに出るらしいとは聞いているが、現状こんなものということで。いずれ debug wire disabled の状態でも測ってみる。

2011-01-29

速報

| 速報 - 電音の工場ブログ を含むブックマーク はてなブックマーク - 速報 - 電音の工場ブログ 速報 - 電音の工場ブログ のブックマークコメント

ATtiny85 で 15Hz ~ 16MHz の矩形波生成を確認した(うちのオシロだと16MHzは鈍っているが)。二相のパルスが出力でき、さらにデッドタイムも付けられることも確認。しかもこれらはペリフェラルだけで出来て*1CPUはまるまる別のことができる。これならじゅうぶんBBDのドライバになると思われる。

あとは実際のコーラスフランジャに適用するなら Frequency / Depth / Manual と 生成パルス幅 とのマッピングを考える必要があります。

*1CPUが止まっていてもOK

おーつかおーつか2011/01/30 16:21素晴らしい!!
せっかく作っていただいたアンチログ出力付きLFOですが、これに期待して、組み込みはちょっと待ちます。なんつってもドライバが不要になるのが魅力!
16MHzまでは要りませんよ。多分BBDは動かんでしょ、高すぎて。
これまでの機材では、BBDクロックの最高は1MHzでした。だから2MHzくらいまで、矩形波がきれいに出れば、まったく問題無しです。
2MHzならナマらないですよね?
嬉しいな嬉しいな、っと。

ChuckChuck2011/01/31 11:54どうもです。1MHz、2MHzはしっかりした矩形波でしたのでイケルと思います。あとは揺する値範囲と揺すり方をどうしたものか…

2011-01-26

BBDドライバ w/ LFO

| BBDドライバ w/ LFO - 電音の工場ブログ を含むブックマーク はてなブックマーク - BBDドライバ w/ LFO - 電音の工場ブログ BBDドライバ w/ LFO - 電音の工場ブログ のブックマークコメント

BBDドライバ with LFO が、机上検討ではなんとなくいけそうな気がしてきました。


きっかけはtwitterだった。

Ganさんが、

synth-diy ML にウェーブテーブルオシレータつくるぜスレッドができててすげー面白そうなんだが…

Ganさんのツイート: "synth-diy ML にウェーブテーブルオシレータつくるぜスレッドができててすげー面白そうなんだがもう昼に切り替えねばならない。あと15分でメシおわらせてシャワーあびてヒゲそらんとならん"

とツイート*1していたので見てみたところから始まる。

最近目が疲れるので英語は苦しいのだが、ざっと1分でスキミングした理解によれば、ROMに波形データ書いておいて、MIDIノートのピッチに合わせて回して読みたい、マイコンを使いたいということのようだった。クロッキングはどうするんだ?というあたりから話がそれたのか、アセンブリ言語だ、FPGAだという話にも飛んでいた。残念ながらフェーズアキュームレータでDDSという話には行かなかったようであったので、私としては追跡をやめた。

いやー、ときどき読むデータを飛ばさないと高音で苦しいでしょう。真面目に1周期分のROMテーブルを全部読み出していたら高音ではずいぶんと高速クロックになってしまう。どうしてもやりたいならマイコンからはピッチ周波数を出して1周期分のアドレス数だけPLL LSIで逓倍したクロックでカウンタ回してアドレッシングするのが無難じゃね?とか思うわけであった。

しかしこの問題は、実は、私にも無関係とは云えない。

とはいえATtiny45BBDドライバを作ろうとすると似た問題に当たるんだよね。

Chuck Timberさんのツイート: "とはいえATtiny45でBBDドライバを作ろうとすると似た問題に当たるんだよね。 RT: @dennon_no_kouba: スキミングしてみましたが「うーん」な感じでした。 RT: @analog20: synth-diy ML にウェーブテーブルオシレータつくるぜスレッドが&quo

BBDモジュール - 電音の工場ブログ - E-MusicグループシンセBBDモジュールについて言及したが、そのなかでマイコンBBDドライバをできないかという点にも触れており、コメント欄でも燃料を投下していただいていた。記事を書いた時点では 10kHz から 1MHz までをひとつのスキームでやるのは難しいという印象だった。すなわち 分周したクロックアウト のやり方と タイマで割り込んでポートをON/OFF というやり方を発振周波数によって切り替えることになるかなぁと考えていた。

が、ちょっと考えればわかることだったが、Timer1 を PCK*2で動かして CTCモードにしておけば OCR1Cの値をトップ値としてカウンタをリセットできる。PWM A/B をトグルで使えば64MHzのクロックをカウントしてパルスを出せるはず。タイマに供給する PCKの分周比 と タイマクリアのトップ値(OCR1C) と コンペア値(OCR1AまたはOCR1B)をテーブル管理して、LFOの周期でゆすりながらPWMしてやれば 10kHz~1MHz が生成できるかも。PWMの波形生成はトグルモードにしてやれば値管理も楽。しかも OC1A/OC1A_n の二相出力だし、dead timeも付けられる。これらは全部マイコン内部のハードウェアモジュールがやるのでソフト側ではLFO関連処理に集中できる、と。

とりあえずPCKの分周比とトグルモードのPWMにしてBBDドライブ用のパルスを生成するとこんな感じの周波数になりそうですよ、と。

f:id:Chuck:20110125160403p:image 大きいサイズはこちら

さっそくテスト用にコードを書き始めました。

目下の問題は、LFOの周波数だけじゃなくて Depth と Manual もマイコン側で演算しないといけないね、というところ。幸いにも ATtiny48/85 は A/Dコンバータが豊富なのでピン数は足りる。ていうかぎりぎりぴったり。A/D 3本(Frequency, Depth, Manual)、CP1/CP2 (OC1A, OC1A_n)、電源、GND、RESET。8本ぴったり。

Depth と Manual の変化幅も問題で、結局 美味しい値はどうなのか、そのときクロックパルスはいくつだったらいいのか、といったあたりを探らなくてはいけません。

とりあえず手元にケースが壊れてなかばジャンクのYAMAHA PSE01シリーズ、FL-01 があるのでオシロで当たってみましょうかねぇ…

*1:twitterのstatusを引用するのに良い はてなモジュールはないのかしら?

*2PLLクロック、最高で64MHz

2011-01-19

BBDモジュール

| BBDモジュール - 電音の工場ブログ を含むブックマーク はてなブックマーク - BBDモジュール - 電音の工場ブログ BBDモジュール - 電音の工場ブログ のブックマークコメント

シンセ用にBBDモジュールをいつか作りたいと考えていて、ここのところBBDに気が向いたのであらためてデータシートを眺めている。とりあえずターゲットは MN3007(1024段BBD)。家にいくつかストックがあるので。

コーラスにするというよりは微妙に遅延させた波形を加算してフィルタ的な色付けをすることが目的で、どういう回路がいいのかいまのところ検討もつかない。というわけでよく見る回路よりもぐっとシンプルにして、まずは遅延部分+制御部だけで実験してみるのでいいのではないか。最終型でも、

  • 前後のアンチエイリアシングフィルタは無し、あるいはモジュラシンセなんだからVCFを使えばいい
  • 原音ミックスやフィードバックも外にミキサをつければいい

ぐらいに割り切りたい。

ちなみに-15V電源のBBDでも入力信号は 1.5Vrms までという仕様なのね。シンセの波形ならレベル調整しないと… その割にはVo―Vi図では-10dBm~+10dBmまで入れてて、+7.5dBm過ぎたあたりから歪んでいるご様子。なるほど、BBDで歪ませろと…(言ってない)。


それはそれとして遅延量は電圧制御したいところだ。

そうなってくるとドライバLSI MN3101 を電圧制御で使うのだろうけど、これもまぁ探せば回路はあるはず…

と、BBDの参考書についてはその昔記事を書いたことを思い出した。

  1. BBD回路リソース - 電音の工場ブログ - E-Musicグループ
  2. BBD回路リソース (続) - 電音の工場ブログ - E-Musicグループ

とくに後者は強力*1。これらの本さえあれば勝てる、じゃない書ける(回路を)。なければオークションで、オークションで負けても図書館で。

他にもこんな記事も。

MN3101 は出力の二相クロックのデューティもいい具合に調整されているらしいという話も聞くのでドライバにはMN3101一択!(MN32xx系BBDにはMN3102ね)って感じなのだけど、マイコンで出来ないものかなと。

先日おーつかセンセにお渡ししたLFO(LFO for FX 完成 - 電音の工場ブログ - E-Musicグループ 参照)もBBDドライバを揺するためのものだったわけで、LFOBBDドライバを一体化できてしまったらいいのになぁと思うわけです。

CPLDとかハードウェアの分周器を使う手もあるがここは一般部品率を高めたいので、例によってしばしば使うマイコン、ATtiny85でシステムクロック16MHzとするとして、MN3007の動作条件の10k~100kHzということであれば、800~80クロックに1回ポートをトグってやればいい計算になる。LFOの更新処理をゆっくりとやれば80クロックに一度割り込まれてもまぁなんとかなるかなぁ… 100kHzよりも倍・4倍速いクロックパルスでBBDをドライブするとなると難しくなってきそう。クロックの振幅も15Vスイングしないといけないようだし。

とりあえずBBDモジュールを作る際にはマイコンドライブも視野に入れることにするか。

*1BBD関連記事の著者は第8回アナログシンセビルダーズサミットにお見えになった初恋天使さんです

analoganalog2011/01/19 13:11LFOとdriverがマイコン化されるとflangerも相当シンプルになりますね。3207でチャレンジしてみたいです。

おーつかおーつか2011/01/19 14:18BBDクロックは1MHzていどまで充分いけます。1024段だと最短ディレイ時間は5msでしょ。もっと短くても面白い。
2相クロックは、まあ専用ドライバがいいけれど、普通の50%デューティーでも大丈夫(っていうか、問題なし)。
BBDでキモなのはバイアスだけです。合ってればとりあえず音は出ます。
後段のフィルタは、やっぱりあったほうがいいと思います。波形を見ると卒倒しそうになりますよ。
そうです! どうせマイコン使うなら、BBDの直接ドライブがいいかもしれない。と、また新しいリクエスト?

ChuckChuck2011/01/20 07:13コメントありがとうございます。いつになるかわかりませんが「LFOとドライバでマイコンひとつ」にチャレンジしてみたいと思います。
発振周波数は対数軸で直線になるように揺すればいいのでしょうか。
しかし1MHzの生成となるとグンとハードルが上がりますね。波形生成できてもLFO部が動けなさそう、15Vスイングにするにもオープンコレクタだと1MHzが大変そう…など。遅めのクロックパルスを生成してCMOSの4046でPLL逓倍したくなってしまいます。
まずは単体でどこまで行けるか取り組んでみます。

ChuckChuck2011/01/25 10:56[メモ] Timer1をPLLクロック(PCK)&CTCモードのPWMで動かして、タイマに供給するPCKの分周比 と タイマクリアのトップ値(OCR1C) と コンペア値(OCR1AまたはOCR1B)をテーブル管理して、LFOの周期でゆすりながらPWMしてやれば 10kHz~1MHz が生成できるかも。PWMの波形生成はトグルモードにしてやれば値管理も楽。
しかも OC1A/OC1A_n, OC1B/OC1B_n と二相出力が2系統で、dead timeも付けられる。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20110119