MastHead
  Entry     Photo Lib     Forum     Links     Glossary     Misc.  


歪率計の自作


構想
過去にいくつか歪について記事を書いていますが、手元に -60dB より低い歪が測れるものがありませんでした。  (あ、ひとつありましたが設定が面倒なもの)
それで、ちゃんとしたものを作っておくことにしました。  もちろんそれに合わせて低歪の発振器も必要になりますが、とりあえず歪率計のほうからです。

目標(要求仕様)としては:
とします。

歪率を測る原理は大雑把に言って4種類あるようです。
1.低歪発振器から被測定物を通して出てきた信号の基本波成分をノッチフィルターで抜き去って、残りの成分の量を読む
2.被測定物の出力から入力に比例した電圧を差し引いて残りの電圧を読む
3.低歪発振器から被測定物を通して出てきた信号を ADC を通してコンピュータに取り込み、FFT で成分分析をする
4.低歪発振器から被測定物を通して出てきた信号を、源信号を参照したロックインアンプでとても狭い帯域に限定して電圧を測定できるようにして、 各調波に分解して電圧を読んでいく。 ただし、被測定物の出す各高調波の位相が分かりませんので、ロックインアンプの位相調整が問題になります。

このうち、2の方法はうまくいきません。  被測定物の出力は、周波数によって位相のシフトが様々ですので、 源信号の基本波の位相を合わせても、すべての源信号の高調波成分の位相を、振幅を変えないまま DUT の移相量に全部同時に合わすことができないためです。
今回は要求が調波分離ですので必然的にフーリエ分析を行う3の方法を選択しようと思います。
4の方法は面白いので一度はやってみたいのですが、機械が大げさになって測定も時間がかかりそうです。  今回はやりません。
FFTで -100dB を判別するのには、-120dB 程度の AD 分解能が必要です。 ちょうど右の図のような感じです。  120dB は 100万倍ですから、20bit になります。
それで、20bit を超える ADC を探しました。

残念ながら日本の半導体技術はこういった領域では見る影もありません。 米国では Burr-Brown を引き継いだ TI と Linear Technology を引き継いだ Analog Devices が両雄です。 MAXIM という選択肢もあります。  どこもいいチップを出していますが、今回は Analog Devices の LTC2380-24 というチップが目に留まりました。

要求仕様から具体案に落としていくと、次のような項目を考慮しなければいけないことに気がつきます。
分解能:
市販のものは 20bit を超えると 24bit のものになります。
ビットの利用量:
例えば 0~5V の ADC ですと、フルスケールが FFFFFFh ですが、これより下の入力を与えます。  少し余裕が必要ですが、できるだけ高く、例えば 4Vpp 程度の入力を与えたくなります。  でも DUT がいつもその値を出してくれるとは限りませんから、1Vpp 程度でも十分なダイナミックレンジが欲しくなります。  これは 2bit 使わないという意味になります。
バッファアンプが R-R であっても、Rail に近い所では歪もあるでしょう。
入力の pp 値がすぐわかるように表示メータも欲しくなります。
サンプリング周波数:
50kHz を測るには、理論的には 100kHz 以上のサンプリングになりますが、ちゃんとフィルタリングしてエリアスを取り去ろうとするなら、十分な隙間を開けることになります。  将来のことも考えて 1Msps ぐらいが望ましいでしょう。
高次のフィルタはいろいろ問題を起こしそうなので、できれば一次で済ませられれば好都合です。
実は、この 1MHz には誤算がありました。 後述します。
アベレージング:
幸い信号源はサイン波ですので、ランダム性がありません。 アベレージングしてノイズを下げることができそうです。
デモボード:
LT2380 自体は小さなチップで、それほど高価でもないのですが、そこからデータを高速に取り出し、バッファし、USB インターフェイスで PC に送り込み、、、、といったことを考えていくとかなり複雑な回路になります。  幸い、Analog Devices がデモボードを用意していますので、それを利用させてもらいます。  実は LT2380 の乗る DC2289A よりも、データを吸い上げてバッファする DC890 のほうが高価です。
アプリケーション・ソフト:
デモボードからデータを吸い上げ、それを料理して FFT 分析し、グラフを出す、という作業をするソフトが必要です。  これもさいわい Analog Devices が用意してくれている PScope というソフトをそのまま利用させてもらいます。  表示で気に入らないところはデータを吐き出させて自分のソフトでグラフ化します。
周辺回路のノイズレベルと歪レベル:
LT2380 自体は 24bit ですから、5Vpp の 24bit 下の -140dBV が限界です。 アベレージングするとひょっとしたら -150dBV まで達するかもしれません。
それに対し、Full Differential に変換する回路をこちらが用意することになるのですが、それが -140dBV 以下に対抗できるかどうかが問題になります。  電源やバイアス回路を含む周辺回路は、歪とノイズの両方の問題で限界を追究することになります。
電源:
100V 電源からトランスとシリーズレギュレータで ±9V を作るか、または、5V の USB 電圧からスイッチング電源を使って ±9V を作成するかでずいぶん悩みました。  100V を使うほうがノイズは少なくできますが、外部にケーブルが増えて取り扱いが面倒です。  USB を使うとするとノイズの取り扱いが面倒です。 また消費電流に気を付けた設計が必要となります。  消費電流を少なくするということは、正負両電源を使った回路を敬遠し、R-R のオペアンプを使うという制約を課すことになります。
今回は何とか USB を使ってノイズを抑え込むことにしました。
LT6203 の弱点:
Full Differential への変換に何かのオペアンプが要ります。  それ専用のチップもありますが、 Analog Devicesはアプリケーションノートで LT6203 を推奨しています。  それで作ってみたのですが、信号源インピーダンスが少しでも高く(たとえば 1kΩ)なると歪率が 10db ほど悪くなりました。  入力段がバイポーラの PNP と NPN の組み合わせの回路で、利点もありますが今回は欠点が出てしまいました。  これはいただけませんので、初段はソケットにしておいて、LME49720 か OPA1656 かを選べるようにして作り直します。  こうすると負電源も必要になりますから USB への負荷が心配です。

机上の空論で頭を悩ませるのはそのぐらいにして、設計にかかります。

回路設計
回路を設計してみました。  主要な部分は2つあって、±9V の電源部と、Single-end を Full Differential に変換するアナログ回路です。  ついでにメータを振らせる回路も入れてあります。  ±9V は DC2289A の要求です。
そのほか、DC2289A ボード上に 100MHz の発振器を載せました。

5V 電源は DC890 の USB ジャック取り付け部の PC 板から直接はんだ付けして引き出してきます。  ちょっと総消費電流が大きくなるかもしれないと心配しましたが、結果的には PC から 0.2A しか消費していませんでした。  USB1 の規格最大値の 0.5A に収まりました。
スイッチング電源で ±12V をまず作って、それをリニアレギュレータで各 9V に落とします。 ノイズ対策を兼ねています。  NJM317F はたまたま手持ちにあったので使っただけですので、通常の 9V reg で十分です。  電源ボードは他の回路から物理的に離して、別ボードにします。

DC2289A は 0-5V の入力が要りますから、その信号を十分歪みなく供給するように、オペアンプには ±9V を与えてやります。  信号の中央値である 2.5V は別途作って、低いインピーダンスで供給してやります。
ここで使っている定電流ダイオードは SEMITEC 製ですが、E-301 の中から 0.35mA 付近で温度特性がきわめて 0 に近いものを選び出します。  指でつかむと温度が上がりますから、それで判定します。 できれば 0.01%/度 程度のものを狙ってください。  電流が大きいものは係数が負、小さいものは正になる傾向があって 0.35 から 0.36 あたりで入れ替わります。

ピーク電圧計もどきを付けています。 かなり誤差はありますが、目安ですので再現性さえあれば良しとします。  これは平均値電圧計ですが、扱うのが正弦波ですから比例します。 ADC 入力の監視用ですからピーク目盛りを打ちます。

DC2289A ボードは次のように設定します:
1.JP7 と 8 は DC 接続に設定します。
2.JP3 は 2.5V にします。
3.J1 近くにある R5 は、基板のラインを切断して取り外します。(右図)
4.C66 の位置にスチコンの 15pF を追加します。(C0G がいいが入手困難)
DC890 ボードは USB 端子直後のランドから 5V と GND を取り出すことと、USB ソケットのシールドをすぐそばの穴を使ってシャーシに落とすようにしておきます。  それら以外は変更をしません。

外観と組込
ケースパネルの写真です。
メータがありますが、メータというよりはインジケータと呼ぶべき安物です。  直線性がまるで無いヨークの構造でしたので、目盛板を自作して貼り付けています。
ケースはタカチの MSY66-16-23G です。
Demo Board の DC2289A と USB Interface の DC890 をケースに組み込んだところです。  肝心の LTC2380 は「拡大」と書いた部分にあるちいさな MSOP IC です。  右下に拡大した写真を掲載します。
LTC2380 の入力には Low-Pass Filter が入っていて、C0G のセラミック・キャパシタを使って歪を発生させないようにしています。  C0G については別記事「セラミックキャパシタによる歪」の追記部分を参照してください。
300 シャーシ裏側(下側)には、±9V の電源ボードと、Single-end を Full Differential に変換する回路を入れたボードの2つを入れます。
右側にある「組み立て途中」と書いたボードは以前のもので、いまは使っていません。 左側の写真が新しく組み込んだものです。
C2289A 上にはこの図のように 100MHz の発振器を乗せます。 切り離した 50Ω ターミネータの後ろにある C5 に直接つなぎます。  使っている発振器は、半田付けできるぐらいに大きくて、消費電流ができるだけ少なくて、電圧が 2.5V で、CMOS 出力で、安定で、安くて、という条件で探しました。
EPSON の SG5032CBN 100.000000M-TJGA3 というのが見つかりました。
動作確認
やっと動き始めて最初に観測できたグラフです。
DUT をつないだ状態でも、FS(Full Scale) に対して -140dBFS のノイズレベルは達成できたようです。 -10dBFS の入力で使っても(差は) -140dBc ですので満足です。


この図の読み方は、0dB が AD の FS(5Vpp)ですので、まず基本波の dB 値を読み、それから各調波の dB 値を読んで差を取ります。  この差は基本波(Carrier)を 0dB としますので dBc という単位を使います。  PScope の右側のペインにそれらの値や THD の値が計算されて表示されています。
DUT は自作の発振器です。 第2高調波が基本波の 130dB ぐらい下で、第3が 123dB 下ぐらいです。  全高調波歪率(この定義は問題あるが)は -122dB(0.00008%)となっています。
基本波信号のレベルは実際の値より少なく表示されます。 Bin Width が狭いためです。

ノイズを見るために、その状態で DUT を外し、入力をショートしたときのグラフです。  この図は N=25、Normal Mode、Size 131072 で取ったものです。
DC 成分が見えますが、これはオフセットです。 まあこれぐらいならいいでしょう。
最初は -145dBFS ぐらいのレベルでいくつかのスパイクが見えていましたが、電源に関する対策を行ったところ、それも消えてきれいになりました。
さらに、繰り返し測定でベクトル平均(PScope の機能)を取ってみたところ -170dBFS まできれいでした。

注意ですが、入力近くにある 470u はインピーダンスが極端に低いものを使います。  例えば日本ケミコンの KZH シリーズです。  これは共通インピーダンスを避けるためです。 ノイズなどの特性に影響します。
この右の図は +20dB スイッチを入れた状態で先ほどの信号を見たときです。  ちょっと心配していたのですが、歪レベルが上がってきました。
この上がった部分は、初段の LME49720 によるものでしょう。 上がった歪は主として偶数次の高調波です。



電源ノイズ
懸念していたスイッチング電源のノイズを調べてみました。 100kHz まで見るために N=4、Size=131072 で 20 回重ねて取ったのが右の図です。
スイッチング周波数は 40kHz ということがあらかじめわかっています。  実は最初測ったときは、40kHz やその高調波が -115dBFS 程度の髭で出ていました。  ノイズは 40kHz にスペクトルがありますが、実際には 25us ごとに来る幅の狭いインパルスですので、高周波の対策をします。  グラウンドを強化し、あちこちにバイパスを入れていって潰すことに成功しました。 この図は対策後のものです。
ちょっと計算してみると、-160dBFS は 17nVrms です。 見えないということはそれ以下。 よくここまで落ちたものです。

配線に関しては細心の注意が必要です。  ケースの前面パネルはシャーシと完全には接触していませんので、最短距離で、太い線で、離れた複数の場所でシャーシと確実に接続します。  タカチのケースでは常に気を付けなければなりません。  後ろのパネルも同じですが、こちらは上と下にあるサッシの溝に細く切った薄い銅板を挟みこんで接触させました。  USB ケーブルのシールドは D890 で受けたところですぐにシャーシに接続します。
DC2289A は電源の GND 端子入力近くで太くシャーシにつなぎ、もう一つ、入力の BNC コネクタ近くのグラウンドプレーンにかぶせてあるソルダーレジストを削って線を出し同様にシャーシにつなぎます。  両端にある穴でラグ端子を使うといいでしょう。
電源ボードも同じように内部のグラウンドは複数の線を広い面積で並列に使い、複数のラグ端子で直接シャーシにつなぎます。  電源ボードはアナログボードから物理的に距離を置いて配置します。

それでもまだ手抜かりがありました。
ケースの蓋は塗装がしてあって絶縁状態だったのです。  これには困りましたが、最後にやったのは左の写真の方法です。 50um の銅箔テープは昔 100 円ショップで買った植木鉢用のナメクジ除けです。  それを 2mm 幅に切っています。 カバー側のエッジはやすりで塗装をはがし、半田メッキして銅ストリップに接触させます。 左右両方で行います。 半田は腐食に強い金属です。

これだけやってもまだ問題がありました。
入力開放で、ポテンシオメータを最大にしたときに 64kHz 辺りに -138dBFS 程度の髭が出ていました。  初段オペアンプの入力端子以前に原因があることは明らかです。  調べていくと、ポテンシオメータの入力端子よりも前でした。 あとはシールド線(マイクロ波同軸線)と BNC 接栓と RCA ジャックしかありません。
前面パネルを手で触ると消えます。 ということは外界の電界です。 ケースのシールドは完全ですから、外部に出ている部分です。  で、BNC をアルミ箔でカバーすると消えました。 接栓中央の誘電体がグラウンド金属から離れていますから誘導を受けやすいのでしょう。
どうやらパソコンのディスプレイが出している電界のようです。 RCA 端子を使うときは BNC Cap を付けておくことにします。

オペアンプを交換してみました。 LME49720 をソケットに入れていますが、これを OPA1656 に乗せ換えて実験したところ、第2高調波が 5dB ほど多くなることがわかりました。  LME49720 のままにしておきます。

PScope 操作
PScope の使い方(というよりはサンプリングとデータ採集の原理)には注意が要ります。 よく理解することが必要です。

順に説明しますが、まずサンプリング周波数についてです。
この「サンプリング周波数」というのは 2 種類の意味があります。
1. LT2380-24 が物理的に信号からデジタル化するときの周波数。 右図の下の方。
これは 100MHz を分周して作られますが、その分周値は決まっていて、
 Normal Mode の時は分周比 66、すなわち Msps= 1.5151515
 Normal with Verify の時は分周比 83、すなわち Msps= 1.2048193
 Distributed Read の時は分周比 52、すなわち Msps= 1.9230769、
です。  このフィールドには自分で計算した値を記入します。
モードについて LT2380 とデモボードの仕様書を読んでもよくわからないときは Normal, no-verify N で使っておけば間違いはありません。  N を 25 以上にするときは Distributed Read にすると Msps を高くして測定周波数の上限を少し高くすることができます。
2.読みだすために Averaging する結果、実際には少ない回数しかデータが入手できない周波数。 右図の上の方。
このフィールドは、Msps の値と N の値から PScope が計算して自動的に表示します。
測定に使われるのはこの2番目の値です。
実は、この ADC を購入する前に仕様書をしっかり読んでいなかったので Msps に入れる値が使われるものとばかり思っていました。

つぎに Averaging についてです。
前者の中に記述した Distributed Read 時は Averaging は 25 以上しか指定できないため、実際にデータを入手できる最大頻度の周波数は 100MHz の 1/52 である 1.925MHz の 1/25 になって、77kHz になります。  測定できるのはそのナイキスト周波数の 38kHz までですから、目的の 50kHz (10kHz の第 5 高調波)の測定はできません。
それで、Normal Mode で Verify なしで使います。  その時は、Averaging 回数を 4 まで落とせば サンプリング周波数は 379kHz になって、 ナイキスト周波数の 189kHz と 目的の 50kHz の間を少し開けることができ、 Alias が減ることが期待できます。  右図の N の値が平均化するための回数です。
N の値の選択ですが、今書いたように測定したい周波数の上限とナイキスト周波数との間を十分とってエリアスを持ち込まないようにします。  私は fs の値と F1 との周波数比で見ていて、それを少なくとも 30 倍程度までなるようにしています。  信号の 5 倍の調波とナイキスト周波数との間が 3 倍の開きです。

ところで、実は、Averaging は2つの意味があります。 上で述べたものは ADC で連続的に物理的に( 100MHz を分周した周波数で) サンプルしたデータを平均化して読み込むときの Averaging です。  例えば 1 個から 32 個ぐらいの連続点を平均化し論理的に1サンプルとして取り込みます。  この読み込んだデータを多数(例えば 32768 サンプル)集めて FFT にかけます。
いま一つは、そうやって FFT を行った後に、さらにその過程を何回か繰り返して平均を取ろうとする Averaging です。  この後者の平均化は PScope で別途 "# of FFT's to Average" という項目で指定します。

Averaging で注意することは、源信号の安定性です。 当然ですが、ジタがあると平均がうまく出せません(レベルが低くなる)。   高調波はその影響がさらに強くなります。

続いて入力波とサンプリング・パルスの同期について。
入力波とサンプリングがぴったり同期していて、波形のピークのところで取り込んでいればいいのですが、そんなことは滅多にありません。  サンプル点がずれるとピークの値が検出できません。
では、どうしましょうか?  まず、サンプル点の間隔を短時間にしていきます。 そうすれば山の頂上に近いところを捕まえられます。  この間隔はサンプリング周波数の逆数ですから、サンプリング周波数を上げるということです。  しかし、サンプリング周波数を上げるには Average の N を小さくしますからノイズが増えます。  これは折衷します。
つぎに、長い時間かけてサンプルの数を増やします。 これは Size のカラムで指定します。  この数は FFT 計算の都合上2のべき乗でなければならないのですが、1024 よりは 2048、さらに 4096 と上げていき、PScope では 131072 まで上げることができます。  何回も何回も採取すれば、どれかが頂上に近いサンプルになるでしょう。  またサンプル数が多いと窓関数の影響が少なくなります。  ただし、多数の点を取り込むには無闇に時間がかかることになります。 まあ 32k か 64k ぐらいでやればいいでしょう。  サンプル数を減らすとスペクトルの裾が広がりますが、高調波が分離できればいいわけです。
サンプル数を大きくするとノイズを小さくできます。

窓関数について
FFT 時の窓関数を選択します。  私は Blackman-Harris 92dB を使っています。 理由はノイズレベルに接近したところまで下の方を観察するためです。  Blackman-Harris 92dB はノイズレベルまで下の方が見えますが、基本波信号の周波数分解能についてはやや甘いところがあります。  正確に頂上の値を知りたいときだけ、一瞬 "Flat Top" を使います。 まあそれほどにすることは滅多にありません。  Hanning か Blackman-Harris 92dB にしておけばいいでしょう。 Hanning というのは私が他の記事でよく使っている Raised Cosine のことです。
窓関数についてここに記述しようと思ってちょっと Web 見て見ましたら、すでに数多くの解説があることが分かりました。  さらにここで述べると冗長になりますので控えることにします。

Collect のボタンを押すと測定が始まります。 最初は Size を小さくしておかないと反応が遅いので戸惑うかもしれません。
一度設定した値は、次回に起動したときに保存されていない項目がありますので、起動のたびに設定を確認してください。
PSCOPE の使い方については下の参考資料の中にある PSCOPE Manual のリンクをクリックしてください。

使い方でもう一つ説明することがありました。 測定を繰り返してベクトル(位相まで含めた電圧)を重ねるやり方です。
右の図では目的の 50kHz が見えるようにするためナイキスト周波数を250kHz程度にするよう N=3 と小さくしてあり、ノイズには不利です。  しかし、Size を 128k と大きくして 24 回も積み重ねると -160dBFS のノイズレベルを実現することができます。  もちろん測定の上限周波数が 10kHz 程度でよければ N を 25 程度まで増やして -170dBFS も行けます。

Excel への取り込み
PScope の "File" のボタンを開くと "Save FFT Data as .." という項目があり、拡張子が .FFT という CSV ファイルを作成できます。  これは、各サンプル位置の dBFS 値を羅列したものですから有効に利用できます。
簡単な VBA マクロを書いて、それを使ってファイルを読み込み、ポイントを周波数に変換し、グラフを書かせてみました。 右の図です。
ついでにマクロの中で F1 (基本波)や F2、F3 を検出して dBc の値を出すようにしておきました。




コメントはこちらへ==> Forum

サイトの最初のページに行くTopPage

#歪率計
(10/22/2020)武        

Ⓒ Copyright 2019  T. Fujiwara      All rights reserved.
Archiving or copying this article without the author's permission is prohibited.

補聴器 Hearing Aid
作者: 藤原 武 Tak Fujiwara