ES9038Q2Mの歪補償の効果を確認する

ES9038Q2Mの特徴としてTHD Compensation(Minimize distortion from external PCB components and layout)というのがあって,これは外付けの部品やプリント基板のレイアウトを含めトータルとして波形の歪を最小化するという機能のようです.

しかし,この機能はデータシートの機能リストでは14項目の11番目になっていてあまり「推し」ではないのでしょうか.筆者としてはとても興味があるので試してみたいと思います.

オシロスコープのFFT機能で高調波のレベルを確認

基板は改造した「ES9038 Q2M DACデコーダー·ボード3ウェイ·スイッチング·サポート·ファイバ同軸USB入力」で,高調波レベルの確認は手元にあるオシロスコープのFFT機能を使います.安価なオシロで(多分)おまけのような機能なので精度は期待できませんが簡単に確認できます.オシロスコープにFFTの機能がついたのなんていつ頃からなのでしょう.昔はスペアナは当然別途用意する必要があって,相当高価な代物だったのでオシロスコープとスペアナが一体になったというのはホントいい時代になったというのを実感します.因みにいつ頃からこのようなオシロが出回ったか調べてみると,2011年8月にテクトロニクスのMDO4000シリーズが最初のようです.

余談はさておいて,確認をしていきましょう.

簡易的な確認なので、DACへの入力は0dB@1kHz、サンプリング周波数が44.1kHzの正弦波のみとしています。

THD Compensationレジスタの設定

THD Compensationを使うにはES9038Q2MのTHD Compensation C2レジスタとTHD Compensation C3レジスタに16-bitの補正係数を設定することになります.また,THD Bypassレジスタのbit6を’0’に設定してTHD compensationを有効にする必要があります.

設定は以下のようなthdCompensation()関数を作って,loop()の中で補正係数を設定していきます.16ビットの2^16通り変更して確認するのはとてもできないので,とりあえず0xFFFFから1ビット右シフト(順次1/2)して16通りの係数を5秒毎に大雑把に設定してオシロのFFTで観測します.

#include <Wire.h>

#define ES9038Q 0x48
#define LED 13
#define resetES9038Q A3

void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(resetES9038Q, OUTPUT);
delay(200);
digitalWrite(resetES9038Q, HIGH); // リセット解除
initES9038Q(); // ES9038Q2Mを初期設定
}

void loop() {
int i;
for (i=0; i<16; i++) {
int16_t c2 = 0xFFFF >> i;
thdCompensation(c2, 0, 0);
Serial.print("C2 = ");
Serial.println(c2,HEX);
delay(5000);
}
}

void initES9038Q() {
Wire.beginTransmission(ES9038Q);
Wire.write(0); // System レジスタを指定
Wire.write(0x08); // MCLK = XI(100MHz) / 4 に設定
Wire.endTransmission();

Wire.beginTransmission(ES9038Q);
Wire.write(14); // Soft Start Configuration レジスタを指定
Wire.write(0x8A); // soft_start ビットを'1'に設定
Wire.write(0x00); // Volume1 レジスタを"0x00"に設定
Wire.write(0x00); // Volume2 レジスタを"0x00"に設定
Wire.endTransmission();
}

void thdCompensation(int16_t c2, int16_t c3, int8_t en){
int8_t c2lower = c2;
int8_t c2uper = c2 >> 8;
int8_t c3lower = c3;
int8_t c3uper = c3 >> 8;
Wire.beginTransmission(ES9038Q);
Wire.write(13); // THD Bypass レジスタを指定
Wire.write(en); // THD Compensation をイネーブル
Wire.endTransmission();
Wire.beginTransmission(ES9038Q);
Wire.write(22); // THD Compensation レジスタを指定
Wire.write(c2lower); // Second harmonic distortionの係数下位8bit
Wire.write(c2uper); // Second harmonic distortionの係数上位8bit
Wire.write(c3lower); // Third harmonic distortionの係数下位8bit
Wire.write(c3uper); // Third harmonic distortionの係数下位8bit
Wire.endTransmission();
}

確認結果

確認結果ですが,まずデフォルトの状態でのFFT波形です.補正係数はC2,C3共に0x0000です.また,電源はDC12Vのアダプターからの供給にしています.

デフォルトでは画像のように2次の高調波が表れています.この状態から補正係数C2を0xFFFF,0x7FFF,0x3FFF…と変更していくと0x3FFFの設定で顕著な変化が見られました.それが以下のスペクトル画像です.2次高調波が測定できないレベルまで下がっています.ほぼこの状態が0x01FFまで続き,0x00FFでまた2次高調波が表れてきました.

3次高調波は,デフォルトでも今回の測定系ではほとんど観測できないレベルなので確認していませんが,このようにTHD Compensationによって2次高調波の発生を抑制できることが確認できました.

2次高調波の発生箇所

さて,本題とは外れますが歪がどこで発生しているか調べてみます.といってもDAC以降の回路構成としてはNE5532で構成した差動LPFだけなので,DACの直出力で観測してみればDACなのかそれ以降つまり差動LPFなのかが分かります.この黄色基板のES9038Q2Mのアナログ出力は電圧出力となっているので直接観測できます.最終出力は差動アンプ(LPF)で2倍しているのでES9038Q2Mの出力は6dB低く(電圧は1/2)なっています.

下の画像は補正係数C2はデフォルト(0x0000)の状態です.2次高調波は発生していません.このことからES9038Q2Mでは発生せず,差動LPFで発生しているものと考えられます.

以下の画像は補正係数C2を0x3FFFとして歪補正をした場合のES9038Q2Mの直出力のスペクトル画像です.補正をすることによって2次高調波が発生しています.

まとめ

ES9038Q2MのTHD Compensation機能によってDACシステムの歪の抑制ができることが確かめられました.今回,相当大雑把な設定でもその効果が確認できましたので,実際にはより詳細に調整することになるのでしょう.しかし,システムの歪の抑制の為にES9038Q2Mに歪を加えてることになるのでどうも気持ちが悪いですね,まぁデバイス屋さんとしていじれるのは自前のチップだけなんでそうなるのは当然ですが.理想的には各構成部分の歪を最小化するというのが良いですね,やはり.

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク