2017年10月08日

open.Theremin@

一昨日は、Teensy搭載テルミンの組み込み用筐体を製作していた。

溶けやすいリボンケーブルのハンダ付けがすこぶるやり難く、テフロンスリーブのリボンケーブルが欲しくなった。

IMG_7666.JPG

来月には稼働させたいところだが、多分オシレーターのチューニングで躓くだろう。

IMG_7652.JPG

ロータリーエンコーダーの配線を終えたところ。

VCOへの影響が若干心配ではある。

IMG_7656.JPG

Dupont製のリボンケーブルだが、線材が細く、ハンダ付けがすこぶるやり難かった。 多分簡単に断線するので、ケースの開け閉めは最小限に抑えなければならない。

IMG_7657.JPG

目玉スイッチとの接触面に絶縁用のガラステープを貼っている。

IMG_7658.JPG

収納時には、このままケーブルを折り畳むような形で基板を押し込んでいく。

IMG_7662.JPG

開発環境としての利便性を追求するために、接続用のUSB端子を増設している。

IMG_7659.JPG

USB端子は華奢なMicroBに代わってMiniBに昇格。 取付方法はGFRPによるシムで挟む形で固定するというトリッキーな方法なので、耐久性がちと心配。

IMG_7650.JPG

分解したExtraCore搭載のOpenTheremin。 ExtraCoreは切手大サイズのArduino。 接続にはケーブルを使うしか無く、かなりなスパゲッティー状態である。

IMG_7651.JPG

VCO周りをいじったV1基板。 こちらのオペアンプはオーディオ系のみをOPA4134に交換していた。
posted by Yasuski at 22:45| open.Theremin

Open.Theremin@波形の観測

新調したOpen.Thereminの出力波形を描画した画像をアップした。



音声を扱えるスタンドアロンのオシロが欲しいところだが、漏れているVolume制御のリップルが気になる。 なんとか対策できないものか。

評価用に仕込んだ判り易い波形を観測したところ、予想以上に鈍っているようだ。 急峻な立ち上がり・立ち下がりに、電圧の変化が着いて行けない様子がよく判るが、これは出力に挿入したLPFの影響もあるのだろう。

ここで、恥ずかしい告白をすると、画像でこの波形を検討するまでは、アドレス[0]の所謂「半波長」のサイン波を基本波と勘違いしていた。  

vlcsnap-2017-10-05-22h32m51s142.png

三角波とサイン波が合成されたような波形だ。これは、Web上でサイン波を生成するソフトウエアの理解が中途半端だったのが原因だが、基本波の正解はアドレス[1]のSine02。

vlcsnap-2017-10-05-22h34m05s089.png

勘違いの結果、妙な倍音を含む波形をラインアップに追加していたのだが、これは、音色的にはアリ。 ただし、単純なサイン波による波形合成を行う上では混乱の原因となるので、アドレスの割当てを変えることにした。

vlcsnap-2017-10-05-22h28m26s274.png

ノコギリ波は適度にナマってくれているのが良い。

vlcsnap-2017-10-05-22h31m16s830.png

これは、期せずして作った更に訛ったノコギリ波。 ポテンヒットみたいな行幸である。

vlcsnap-2017-10-05-22h32m15s902.png

これは、ランダムに数値を編集した波形。 妙な高調波を含んでいるが、結構使えるかもしれない。

vlcsnap-2017-10-05-22h56m24s253.png

基本波の半波長に二倍高調波が加算された波形。

vlcsnap-2017-10-05-22h57m09s987.png

こちらが正しい2倍高調波。

vlcsnap-2017-10-05-22h57m21s002.png

二倍高調波の半波長に3倍高調波がプラスされている。

vlcsnap-2017-10-05-23h03m28s025.png

これが、3倍高調波。

vlcsnap-2017-10-05-23h05m42s215.png

これは三角波を作ろうとして失敗こいた例で、間違って半波長を生成した結果がこれである。

ステレオ運用時の波形を観測した映像。



やはり、処理能力に余裕があるのか、3.2よりも波形が綺麗だ。 録音のラストの音色はパイプオルガンっぽい感じで、低音のみをシングルで出力しつつ、もう一方のチャンネルで高音を被せている。 これはスピーカーの展開次第では面白い効果が得られるかもしれない。 和音は16bitDACから、単音は12bitDACから、、、といった用法が正解だろう。 3chから出力するだけで、立体的な音場を構築できるはず。
posted by Yasuski at 16:30| open.Theremin

Open.Theremin@波形観測用にOLEDオシロスコープの製作を再開する

OLEDを使った簡易オシロをTeensyに移植する計画の準備として、調子の悪いArduinoDueを引っ張りだしてダメ元でMacに繋いだところ、何故かこれが認識された。 その後、LEDチカをやって書き込みの確認をしてみたが、肝心のオシロのスケッチにコンパイルエラーが出て再書込が行えない状態になってしまった。 どうも、OLEDディスプレイのドライバファイルに速度アップのためにいろいろと仕込みをしたのがArduino側の仕様変更で無効になった可能性が高い。

仕方がないので、コンパイルが通るまで怪しげなポイントをすこしずつ取っ払った結果、基本的な機能は再現できた。



で、波形を観測したのだが、なんとなく思っていたトランジション・コントロールを行っている音源の音量がショボいことを再確認することになった。

対策として、Valueがフルスケールになる辺りの挙動を考えて、トランジションを操作するWavetableのダイナミックレンジ設定をイロイロとイジってみたのだが、6波あるコントローラーValueの合算が実質的に12bit範囲に収まりそうな値を探るのに一苦労させられた。 荒っぽい計算だが、1350段階程度に変化量を抑えると、6波加算時のオーバーフローの頻発を軽減できるようだ。

実際の運用を考えた場合、6波を合成するのだから「音が荒れないように」ダイナミックレンジを抑めにミックスを行っていく手法が常道ではあるものの、レベル管理のためのインジケーターが存在しない情況で編集の操作性をカヴァーするにはソフト側をインテリジェント化しなければならない。 単純に合算を行う現状ではトータルの出力バランスが最適化されたセッティングを得るのは難しい。

そのオシロの機能選択のパートをプログラミングしている過程で、処理をサブルーチンに飛ばした結果生じる遅延の大きさに気付いた。 特にロータリーエンコーダーのセンシングを行っている部分のスイッチ→サブルーチンに飛ぶ構造で一様に処理の遅れが発生していると判断し、OpenThereminのプログラム内に設定しているサブルーチン処理をスイッチ内部に内包する方向に改善を行った。 その結果、ヴォリュームコントロール時に、聴感上生じていた不連続な息づき現象が軽減されたことから改良にはそれなりのご利益があったものと思われる。

本体の改良を終え、波形表示を行う計画に戻る。 当初開発を行っていたArduino/Dueはフットプリントが大き過ぎてID-292に実装できない。 そこでサイズがコンパクトなTeensy3.2にプログラムの移植を進めていたのだが、去年の時点ではコンパイルが通らず全く刃が立たなかった。 その後、OLEDのインターフェイス設定を行う部分をプログラムの先頭に移動してみた結果、すんなりとドライヴが可能になった。  



波形を上書きすべきところを取り零しているが、原因はおそらくOLEDユニットの通信スピードの限界で、そこがボトルネックとなっているようだ。

当初はそれに気づかずにTeensyのクロックを72MHzで運用しようと試みていたが描画が全く安定しない。 どうもOLED側でデータの取り零している雰囲気になってきたので、試しに24MHzまでクロックを落としたところ、なんとか正常に近い形で描画が行われるようになった。 が、まだグリッドの描画が負担に見えたため、表示を外して実験を再開している。

ハードウエア的には、バイアス電圧の追加と、オーヴァーレベル対策を行う必要がある。 オーヴァーレベル対策は、LEDによるダイオードクリッパーの採用を考えている。 波形表示を優先すべきところをオシロとして多機能を盛り込もうとしたのが間違いと考えを改め、波形表示に専念する内容にプログラムを書き換えていく。 



その後、表示オフセット設定等の細工を施した結果、なんとなく行けそうな雰囲気になってきた。

ACカップリングを行っていない白入力にDC成分が見える。信号入力回路にはヘッドアンプとリミッターの追加が必須。 ケースは例のID-292になる予定だ。 回路の構成は、波形観測を行いつつ信号の分岐が出来るようにしたい。 エフェクターを内装すれば更に便利だが、スペースの余裕に難がある。

設定は固定しても問題なさそうだが、設定変更用のIFとしてトップパネルに準備されたタッチスイッチを流用することが可能だ。 起動時の判定で簡易周波数カウンタの機能を持たせても良いが、入力の設計が難しいかもしれない。 何れにしても筐体に基本回路をまとめさえすれば後々機能を追加できるので、まずはプラットフォームの構築に専念しなければならない。

オシロ機能の初期設定はプログラムのこの部分で行っている。

WS001147.JPG

プログラムの開発に目処が付いてきたので、トップパネルを切削してオシロの基台を作ることにした。 調子に乗って覗き窓を切り出していたが、OLEDのベース基板の寸法を計算に入れるのを忘れた結果、このままでは実装が不可能なことに気付いた。

IMG_7678.JPG

穴位置を右に寄せすぎて、OLED基板の装着が不可能になってしまったが、OLED基盤自体を分解することで問題を解決できそうだ。 例え窓の位置を左に寄せるにしてもスペースがギリなことは変わらない。 残念ながらID_292に組み込むスタイルは試作だけで終わりそうだ。


トップパネルにはカットした青基板を取り付けて基台にするつもりだったが、青基盤にスリットを入れてOLEDの制御パネルを挿入してアングルで固定すれば構造がスッキリする。 初代の基盤はトップパネルと取り付け位置がズレているので、オシレーター側を5ミリほどカットした後、真ん中のTOSLINK用の切り欠きから右側をバッサリと落とせば丁度良い基台になるだろう。 オペアンプはステレオ仕様になっているが、バイアスポイントの追加とACカップリングを行う必要がある。 

MCUにはTeensy3.2を取り付けて、余ったロータリーエンコーダー用の端子を可変抵抗のポートに転用する。 第一世代の青基板はTOSLINKを配置するために空けたスリットが既に入っているので、加工が楽だ。

IMG_7686.JPG

入出力コネクタは例によってHiroseの6pinを使用するが、これをトップパネルの左端上下にマウントして、トップパネルにすべての回路を集約する。 プログラム書き換え時のトラブルはこれでほぼ防止できるはずだ。

IMG_7687.JPG

中央の孔には、電池駆動を前提にして電源スイッチを配置する事を考えたが、RGB LEDを装着してパラメーターの状態を表示させるのが一番スマートな方法かもしれない。 ちなみに、基板上にUSB端子のランドが存在するが今回は使わないことにした。

posted by Yasuski at 15:25| open.Theremin