2018年1月17日水曜日

KIK01 まとめ

Sonic AcademyのKICK 2にインスパイアされて作り始めたKIK01ですが、思っていたことはまずまず実現できたので、かんたんにまとめたいと思います。

本体

パラメータ入力用 POT Box

去年の年末、自作のリズムマシンベースマシンとMIXするテストをしているようすのライブ配信しました。前半はリズムマシンとMIXするためのケーブルを作ってるだけです(^q^;

リズムマシン+ベースマシン+KIK01のMIXは2:30:00~ぐらいです。


XSplitで動画合成をしてライブ配信していて、(たぶん)音声が96kbsになっているのでKIK01だけ録音してSoundCloudにアップロードしました。

シーケンサーにリズムマシンを使っていますが、エフェクトはかけずにKIK01のみの出音です。PCに取り込んでノーマライズとフェイドアウトだけかけています。

Normal出音

https://soundcloud.com/od-ryo/kik01-trial/s-MhuJf

VCAのOver Drive
https://soundcloud.com/od-ryo/kik01-od-trial/s-XHIjz

最初に構想したときNucleoF446マイコンの内部演算でシンセサイズして、内蔵12bit DACを使って出力してプロトタイプとしました。

チップ・チューン的な使い方ならマイコンの内部演算で完結しても使えそうなのですが、アナログ回路で同等の機能を実現できないか、主に技術的な興味でKIK01と名前をつけてシステムとして作り始めました。

現状のKIK01のハードウェアは最初のプロトタイプと機能的にはほとんど変わりませんが、VCAをオーバードライブした時のひずみ感など往年のリズムマシンに近い出音ができるようになったと思います。

スピーカーはYAMAHAのMSP3なのにうるさいと言って怒られるレベルになりました(^q^;;;

コンピューター演算によるデジタル・シンセサイズはデジタルならではの過激な出音が魅力ですが、アナログとデジタルをまぜこぜにするとさらに面白くなります。

ソフトウェアでアナログ回路をシミュレートするか実際にアナログ回路を作るかはその時の気分次第(^q^/

構成


KIK01のブロック図
KIK01の内部構成

Nucleo F446


システムを司るシーケンサーの働きをします。Nucleo F446のメリットは、12bit DACが2ch内蔵されていて、動作クロックが180MHzと高速でmbedで楽ちんプログラミングできて、さらにfloat型のFPUが付いていてめんどくさい固定小数点演算をしなくてすむことです。

今回のシステムにはあまり関係ないのですが、ほとんどのPinが5Vトレラントで(参考:「Nucleo F446REとNucleo F303K8の一部ピンは5Vトレラントではない模様」)、ハードウェアの試行錯誤もしやすいのです。やけどは何度かしましたが、1からハードウェアを組むことを考えると、とんでもなく便利なボードだと思います。

値段も2000円以下なのでおすすめです。

ファームウェア


基本的にUIの制御とエンベロープ生成を行っています。ハードウェアによるUI制御はマイコンが得意とする分野ですが、エンベロープ生成はFPUとDAC内蔵のNucleo F446のパワーを活かしています。

マイコン自体にDACが内蔵されていなくても、外付けのもの(例えばSPI接続のMCP4922)を使えば実現できるのですが、IC間通信のコストが意外と高く、たとえエンベロープ波形と言えども処理時間が間に合わなくなりがちです。内蔵DACだと速度的に有利です。参考:「Nucleo F446RE(mbed)の内蔵DACとSPI DACのMCP4922の速度を比較する

現状のファームウェアでは32kHzのサンプリングレートで振幅変調用のエンベロープ波形を2系統出力できています。

また、エンベロープ波形は単純な線形補間ではなく指数カーブを付けてアナログチックな波形にして出力しています。FPUが内蔵されているお陰であまり悩まずに算術演算できました。

まだ改善の余地がありそうなので、少しずつ(ハードウェアいじりに疲れた時?)実験してみたいと思っています。

mbed Repository:
https://os.mbed.com/users/ryood/code/KIK01/ Revision:39

AD8402 Wienbidge DCO


http://dad8893.blogspot.jp/2017/09/ad8402-wein-bridge-dco_16.html

ウイーン・ブリッジ正弦波発生回路をデジタル・ポテンショメータのAD8402で周波数可変にする回路です。正弦波発生回路をかんたんに電圧コントロールする作例が見つからず難しそうだったので、デジタル・ポテンショメータで周波数を可変するようにしました。

R値2個で周波数は変えられますが、AD8402の抵抗値のステップが256なので周波数が高くなると値がトビトビになってしまうので、ファームウェアの工夫で落とし所を探りたいと思っています。

NOS01


http://dad8893.blogspot.jp/2017/10/nos01_10.html

ノイズ発生器です。ホワイトノイズを出すのも難しかったのですが、正しい意味でのピンクノイズやブルーノイズは、はしょりました(TqT;

ピンクノイズやブルーノイズは3db/octなので、ホワイトノイズにフィルターをかけてかんたんに実現することは難しく、6dB/octの1次フィルターで削りました。なので、Red Noise/Purple Noiseというべきかもしれません。

音源としては、これはこれでおもしろいと思います。

Dual OTA VCA


http://dad8893.blogspot.jp/2017/08/dual-ota-vca_30.html

KIK01の製作のキモではないかと思っています。過大入力を入れると程よく歪みます。オーディオ的には歪は大敵ですが、楽器としては歪むとかっちょよくなることがあります。

OTA(トランスコンダクタンスアンプ)のNJM13600/NJM13700の入力は100mV程度までなので半固定抵抗器で入力信号を減衰させていますが、減衰率をいじればOver Drive的に使えます。

他にもいろいろ使えそうなので量産したいところですが、回路規模がそこそこあるのでユニバーサル基板を使ってはんだ付けすると、がんばっても実働2~3日ぐらいはかかります。プリント基板を焼くことも検討中です。

MAU106 ±5V PSU


http://dad8893.blogspot.jp/2017/11/mau106-5v_18.html

電源部です。5V出力の低損失レギュレータのNJM2396F05と、+5Vから±5Vを作り出すDC-DCコンバーターのMAU106を使って、±5Vの電源としています。

コモン・モード・チョークを入れてACアダプタのノイズを低減しています。

MAU106由来の125kHz付近のスパイクノイズが乗っているのでピュア・オーディオ用途(特にハイレゾ)には不向きかと思いますが、ACアダプタ1個で両電源を作ることが出来、実装面積もあまり大きくならずに済みます。

出力は+5Vが500mA、±5Vが±50mA程度で使うのが安全だと思います。

POTx16 PizzaBox、POTx8 LunchBox


http://dad8893.blogspot.jp/2017/12/potx16-pizzabox.html


http://dad8893.blogspot.jp/2017/12/potx8-lunch-box.html

パラメータいじり用に、POTを使いやすいように筐体に収めました。合わせて24個のPOTを使えます。

いくら多ピンのマイコンと言っても内蔵A/Dコンバーターの数には限りがあるので、SPI接続のA/DコンバーターのMCP3008を使って線数を減らしました。

12bit精度のMCP3208ではなく10bit精度のMCP3008を使った理由は、MCP3008はMCP3208より定格の最大SPIクロック数が高いのと、普通のPOTの分解能は10bitもあれば十分だからです。

SPIは基本的には3線(SCK、MOSI、MISO)ですが、スレーブごとにCS線を割り当てなければなりません。スレーブとして計3個のMCP3008を使っているのでそこそこ多線のケーブルが必要となってしまいました(^q^;

KIK01筐体

http://dad8893.blogspot.jp/2017/12/kik01_14.html

MDFを使って外枠を組み、ダイソーで売っているクリップボードを加工して底板と背板を作り、天板は透明アクリル板で内部を確認できるようにしています。

内部の配線をいじれるように天板は蝶番を使って開閉できるようにしています。

見栄えのために、MDFの外枠を塗装してみたいと思っています。

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