Steinberg UR22C 分解・特性測定

サンプリングレート192kHzでの録音環境を手に入れたかったため、Steinberg UR22Cというオーディオインターフェイスを購入しました。簡単な分解と特性測定を行っておきます。
【分解】
▽内部写真(このロシア語ページではUR44Cの内部写真が掲載されています。)


完全な分解は行っていませんが、以下のICが確認できました。
・DSP YAMAHA YJ496
・SDRAM M12L64164A
・オーディオコーデック AK4558
・USB電源スイッチIC BD2065AFJ
・DC/DCコンバータIC NJM2374A
・オペアンプ NE5532 NJM2068 NJM4580
・スイッチング電圧レギュレータ BD9329EFJ
・USB Type-C ポート保護IC TPD6S300
Nichicon FWやELNA等、電解コンデンサにスルーホール部品が使われているのが意外でした。設計者のこだわりの部分なのかもしれません。
【特性測定】
MAIN OUTPUT LからMIC/LINE 2入力(HI-Z)へモノラルケーブルを接続した状態で特性を測定しました。おおよその絶対的電圧レベルをわかりやすくするため、出力レベルが約0.1Vrms(=-20dBV)、WaveSpectraのMax表示が-20dB(RMS表示-23dB)となるように合わせています。
<サンプリングレート設定>
dspMixFx UR-Cソフトを起動→右上の歯車のマーク→Control Panel→Steinberg UR22Cタブ→Sample Rate: 192kHz
<MAIN OUTPUT>
PC 再生VOL: 100
OUTPUTノブ: 12時
MIXノブ: DAW側最大の位置
出力インピーダンス: 150Ω(マニュアルより)
<MIC/LINE 2>
PC 録音VOL: 100
INPUT2 GAINノブ: 10時と少し(本体写真参照)
INPUT2 HI-Zスイッチ: オン
入力インピーダンス: 1MΩ(マニュアルより)
<WaveGene設定>
サンプリング周波数: 192000 ビット長: 32 チャンネル数: Stereo
・歪率測定 サイン波 1kHz FFT用に最適化(FFTサンプル数16384) -12.7dB
・周波数特性測定 ユーザー波形 FLATSWEEP_016384.WAV -12.7dB
※WaveGeneサイトにあるサンプリングレート48kHzのユーザー波形サンプルを使っています。本来は192kHz用の波形を用意すべきですが、20kHz以上の周波数も問題ないようなのでそのまま利用しています。
<WaveSpectra設定>
Rch Avg: 300
[FFT] サンプルデータ数: 16384 窓関数: なし(矩形)
[再生/録音] フォーマット: 192000 s/s 32 bit Stereo
▽歪率・ノイズレベル

▽周波数特性

マニュアル通り、20Hz、20kHzで-0.3dBくらいとなっています。
Owm Pedal H7 ハードウェア編

STM32F405を搭載した「Owm Pedal」に引き続き、STM32H753とタッチパネル付ディスプレイを備えたデジタルエフェクターを製作しました。今回も穴加工はTabby's工房さんにお願いしました。(Owm Pedal H7 ソフトウェア編はこちら)
▽入出力・電源部 回路図

4回路入りオペアンプOPA1679を使用することにしたので、以前と違い入力部のローパスフィルタが2次になっています。デジタル電源は絶縁型DC-DCコンバータで分離するようにしました。コンバータなしにもできるようにしましたが、ノイズ面でよくないと思われるので非推奨です。
▽マイコン・オーディオコーデック部 回路図

当初はSTM32F722を使っていたのですが、さらなる発展を見据えSTM32H7を使うことにしました。注文時の在庫の関係でSTM32H753にしましたが、STM32H743でも問題ないと思います。今回はオーディオサンプリングレート44.1kHzで、SAIペリフェラルを使います。
▽基板レイアウトについて(KiCadデータはGitHubへ)
上側のマイコン基板は4層にしてみました。JLCPCBの場合、50mm×50mm以内であれば4層でも13ドルで済みます。マイコンは可能な限りピンを引き出していますが、全部は使わないので内側は小さいパッドです。GNDは基本一面プレーンで、基板が2枚に分かれているのでコネクタ部分でGNDを接続することになります。DC-DCコンバータは高さを低くするため寝かせて配置しました。
▽ディスプレイ・スイッチ基板レイアウト

念のためダンピング抵抗を入れています。消費電流がそれなりにあるので、マイコン用とは別に3.3Vを準備しました。ディスプレイの詳細は以前の記事(STM32 SPI接続タッチパネル付ディスプレイを使う)をご参照ください。下写真のように基板を合体させます。

▽周波数特性・ノイズ
ZOOM MS-50Gと特性を比較しました。MS-50GはParaEQを6個並べて+20dBになるよう調節しています。ノイズは1kHz正弦波入力時のものです。

Owm PedalはMS-50Gより高域のノイズが多いように見えますが、MS-50Gはもともと高域が下がっているので、それを加味するとほぼ同じノイズレベルといってよいと思います。Owm Pedal H7では1dB程度ノイズが多いですが原因はよくわかりません。基板設計としては、部品配置に注意すればOwm PedalのようにGNDを1面プレーンにしても問題ないとわかりました。入出力のフィルタも、簡単な1次ローパスフィルタで充分かもしれません。
ZOOM U-22 分解・特性測定

ZOOM U-22というオーディオインターフェイスを購入しました。分解・特性測定を行っておきます。
【分解】
▽中身画像 ZOOM U-22 Handy Audio Interface Gut Shots


以下のICが確認できました。8ピンのオペアンプっぽいICの型番は読み取れませんでした。
・マイコン LPC1820FBD144
・クロックジェネレータ AK8142
・オーディオコーデック TLV320AIC3101
・電源 RT9971
絶縁型DC-DCコンバータを使った電源ではなさそうですがローノイズです。アナログGNDとデジタルGND(と思われる部分)がところどころコンデンサで繋いであるのは、ノイズ対策なのかもしれません。
OUTPUTノブは0.5dB単位で動いているようなのでおそらくデジタル制御です。GAINノブは連続的な動きなのでアナログ回路だと思われます。
※LINE IN使用時GAINノブは無効
【特性測定】
PHONES出力からLINE IN入力へステレオケーブルを接続した状態で特性を測定しました。OUTPUTノブは10です。
Windowsの場合、コントロールパネルのZOOM U-22 Control Panel(またはC:\Program Files\ZOOM\U-22 Driver\zmu22audiocp.exe)から Sampling Rate を 96000 Hz に設定しておきます。
<PHONE出力>
最大無歪出力: 約 0.7 Vrms (OUTPUTノブ 10、WaveGene振幅 -5.5dB)
出力インピーダンス: 10 Ω (マニュアルより)
<LINE IN入力>
最大無歪入力: 約 0.75 Vrms (CLIP SIGランプが赤に点灯)
入力インピーダンス: 22 kΩ (マニュアルより)
<WaveGene設定>
サンプリング周波数: 96000 ビット長: 24 チャンネル数: Stereo
・歪率測定 サイン波 100Hz 1kHz 10kHz FFT用に最適化(FFTサンプル数16384) -6dB
・周波数特性測定 ユーザー波形 FLATSWEEP_016384.WAV -6dB
※WaveGeneサイトにあるサンプリングレート48kHzのユーザー波形サンプルを使っています。本来は96kHz用の波形を用意すべきですが、20kHz以上の周波数も問題ないようなのでそのまま利用しています。
<WaveSpectra設定>
Avg: 300
[FFT] サンプルデータ数: 16384 窓関数: なし(矩形)
[再生/録音] フォーマット: 96000 s/s 24 bit Stereo
※DELL製PCでドライバをMMEにした場合、周波数特性が乱れました(別の東芝製PCでは問題なし)。PCやドライバとの相性があるのかもしれません。
▽ノイズレベル(POWER SOURCE: USB)

入力なしの時でも高域にいくつかピークが見えますが、特に問題ないでしょう。電池駆動でもほぼ同じ結果でした。
▽歪率・周波数特性

マニュアルの周波数特性には±2 dB(20 Hz - 40 kHz)と記載がありますが、それよりも良いのではないかと思います。
Srempy

デジタルエフェクターというとディスプレイをつけたくなるもので、ポットなしでスイッチのみを使って操作するというエフェクターを製作しました。精度よく角穴加工するのはかなり大変なので、Tabby's工房さんにお願いしました。
▽ディスプレイ・スイッチ基板レイアウト

いつものようにチャタリング防止を行っています。OLEDディスプレイ・基板用押ボタンスイッチは秋月電子で購入しました。
DSP基板はOwm Pedalと同じものを使用しています。下写真のように合体させます。

ディスプレイの詳細は前回記事をご覧ください。スイッチ操作は割り込みではなくメインループで処理しています(GitHubはこちら)。エフェクトオフ時にはスイッチの反応が速くなりますが、実用上問題ないので特に対処していません。▲▼スイッチ長押しでフラッシュメモリにパラメータ保存できます。下記ページの内容を使わせていただきました。
・sora lab - STM + HAL Flashの書き込み・読み込み
エフェクトプログラムはもちろん変え放題ですが、今回私が考えたものを紹介したいと思います。※信号処理は旧処理方法(TxRxCpltCallback関数利用なし、16ビット)のままです。
アナログ回路でのフィルタ設計は複雑になる場合が多く、コンデンサの容量値も限られています。また、リアルタイムに動かすとなると可変抵抗やフォトカプラを使うぐらいしか選択肢がありません。デジタル信号処理でのフィルタについては計算方法が確立しているため、専門知識がなくとも設計可能で、任意の定数を動かすこともできます。計算式は下記ページのものを利用させていただきました。
・C++でVST作り - 簡単なデジタルフィルタの実装
フェイザーはノッチフィルタがかかったような周波数特性で、谷となる周波数が動いています(参考ページ→MXR Phase 90 Analysis)。今回はこの特性をピーキングフィルタを使って再現、発展させたエフェクトを考えました。フェイザーとワウを合わせたような効果で、5つのモード(STD、SOFT、INV、HIGH、LOW)があります。名前の由来は3つ(Three)のピーキングフィルタ(Peaking Filter)です。
<STD・SOFTモード>

SOFTモードでは、単純に谷となるフィルタを2つかけています。谷と谷の間は減衰し、スッキリとした感じとなります。STD(スタンダード)モードは、Phase 90の特性に近づけています。うねり感を得るためには、2つの谷の間に山が必要なようです。ちなみに2つの谷の間隔が広いとユニヴァイブのコーラスモードっぽい音になります。谷となる周波数の揺れ幅や高低は、出音への影響は少なかったです。
<INV・HIGH・LOWモード>

フィルタを谷ではなく山にした場合、山が1つだとオートワウのようになります。山を2つにすると、クセは強いもののフェイザーっぽいシュワシュワ感が現れます。INV(インバース)モードでは、2つの山の間にさらに谷を追加しています。HIGH/LOWモードは谷と山を混ぜており、通常のフェイザーの高音域/低音域が強調された感じとなります。
<計算高速化>
BiQuadフィルタの係数は三角関数の計算が入っていて、そのままでは処理に時間がかかり過ぎると思われます。そのため表計算ソフトで近似式を算出するなどして対応しています。それでも実際のCPU使用率は70%程度となってしまいましたので、計算高速化についてはもう少し検討していく予定です。
Owm Pedal ハードウェア編

STM32F405という32ビットマイコンを搭載した自作デジタルエフェクター「Owm Pedal」です。名前は同じマイコンを搭載した既存のペダル「OWL Pedal」をもじってつけました。(Owm Pedal ソフトウェア編はこちら)
オーディオコーデックはCS4220のセカンドソース品V4220Mです。サンプリングレートが48kHzまでですが差動入出力で価格が安く(秋月電子で240円)、エフェクターに最適だと考えました。
▽回路図

<V4220M周辺>
データシートに入出力の回路が記載してあるのですが、抵抗値はよく使う値へと変更しました。バイアス電圧用に8.25kΩの抵抗があるところは、10kΩと100kΩ2個を並列にして8.33kΩとしています。
V4220Mのデータシートでは音量等をコントロールできそうに書いてありますが、実際はできないようです。マスターモードで動作させる場合は8番(DOUT)ピンに47kΩのプルダウン抵抗を入れます。また、CS4220のデータシートには電源オン時に27番(RSTN)ピンを10msの間LOWにしておくように書いてあるため、10uFのコンデンサを入れました。4・5・8・9番ピンからマイコンへ接続しますが、通信線の長さが短いためダンピング抵抗は不要かと思います。
<電源>
電源はレギュレータで以下のように分けました。
・マイコン用→デジタル3.3V(100mA)
・V4220M用→デジタル5V(20mA) デジタル3.3V(5mA) アナログ5V(60mA)
・OPA1678×3用→アナログ5V(20mA)
アナログ5V電源は通常分離する必要はありませんが、万一問題があったとき基板発注し直すのが嫌なので分けています。
▽DSP基板(Owm Board)レイアウトについて(KiCadデータはGitHubへ)
真ん中あたりに電源、上側がデジタル、下側がアナログという配置となっています。GNDは裏面を一面プレーンにしました。入力のカップリングコンデンサはPMLCAPを使っており、やや大きくて高価ですが歪率は下がるでしょう。残念ながらBIASに接続すべきところをGNDにつなぐというありがちな間違いをしてしまいましたので、内部写真では妙なジャンパー線が写っています(KiCadデータは修正済)。
ピン間隔が狭いICはパッドを1mm程度長くすると半田付けしやすいです。マイコンのピンはほとんど使えるように引き出しました。一応I2C用にプルアップ抵抗の取り付けもできます。マイコン上側のLEDはデバッグ用のつもりです。水晶振動子周りのパターン設計は下記ページを参考にしました。
・水晶振動子 ガイド - RSオンライン
▽ポット類基板レイアウト

ポット類基板と筐体はRasPd4のものを使いまわしました。回路図は描いていません。無理やりジャンパーを飛ばしてチャタリング対策の抵抗やコンデンサを入れました。下写真のように基板を合体させます。

とりあえず何もエフェクトをかけないスルー音が出るようにプログラミングし、周波数特性と歪率を測定しました。歪率は、クリップしない最大入力約0.7Vrmsでの結果です。

100Hzの歪率が思ったより悪いですが問題ないでしょう。ノイズも測定限界以下だったので、歪み系エフェクトでもおそらく大丈夫だと思います。