リベンジ? ゲインフェーズアナライザーに再挑戦!の巻き 2019.8.3

ゲインフェーズアナライザーとは、文字通りゲインと位相を両方同時にはかる測定器になります。
ゲインだけ測る、あるいはゲインの特性だけはよくカタログで見かけますが、位相特性というのはほとんどみかけません。
でも、位相情報はとても重要で、マルチアンプシステムなどで位相が180度ずれて重なったりすると、音が消えてしまいます。
単純にゲインだけみてはそれがわかりません。
 といことで、以前からゲインフェーズアナライザーが欲しかったこともあり、簡単ですが以前に自作しました。
 
以前に作ったゲインフェーズアナライザです。

ただ、この装置もいまから思えば、思いついて作ったようなもので、いざ完成しても色々と不満があって
結局あまり使わず仕舞いです。
不満点は
 @スタンドアロンで動かない(PCを接続しないと動かない)ので、結構つかうのが面倒。
 A精度が低い(PIC内蔵の10ビットADをつかっているので、それなりの精度しかでない)。
 B速度が遅い(同期検波を1個しかつかっていなくて、2位相を切り替えてつかったので測定に時間がかかる)。

まあ、主だった不満点はこんなところです。ということで、最終的にはケースに入れることも考えて
色々と機能アップしたものを作ることにしました。まあ、この企画も思いつきのようなものなので。

主な変更点は
 @スタンドアロンで使えるように、スイッチやLCDの表示機能を揃える。
 A分解能の高いADを使って、測定精度を上げる。
 B同期検波器を2個実装して、測定速度を上げる。
  →これは以前につかったAD734をつかいたかったけど、高いので2個は使いませんでした。
   アナログスイッチをつかった正逆切り替え式の同期検波回路にしました。

さらに
 C発振器としてもつかえるように、周波数のほかにも振幅・オフセットの調整が幅広くできるようにする。
 D2周波数同時の発振器とする。


まあ、こんな感じで完成できればと思っています。さてさて、最後までたどり着けるか、途中で投げ出すか(以前も
2年くらい投げ出しました(汗))、それとも企画倒れになるか・・・・

まずはコントローラと発振器部分を作ろう!

今回は使用する部品も多くなるので、発振器部分と同期検波回路は別々の基板での2階建てを考えています。
まずは、発振器の部分から作っていきます。


まずは必要になりそうな部品の配置を考えています。

今回は液晶表示や操作スイッチ(さらにロータリーエンコーダも)、そしてPCとの接続用のUSBタイプのRS232通信も
加えます。まずは、この部分からのの製作です。


まずは、制御装置の部分から組み上げです。


発振器の部分がほぼ完成しいました。ひょっとして1枚で収まるかもしれないと、
できるだけスペースが空くようにつくりましたが、残念ながら残りのスペースには
収まりきらないでしょう。

発振器の部分が完成

一応、ハードの部分は完成しました。ソフトはまだまだこれからです。
同期検波回路基板との接続用のコネクター(連結ピン)もとりつけました。


発振器のハードの部分が完成しました。

引き続き、同期検波部分を作ろう!

さて、引き続き製作にかかります。外は暑いので出かける気になりません。
部屋に引きこもってエアコンをかけて、BGMをかけながらひたすら半田ゴテを握ります。
まあ、大人の休日の過ごしかたですね(汗・・・・


同期検波回路部分も必要な部品を睨みながら配置を考えます。

今回は機械式リレーを多用します。

前回は入力アンプのゲインの調整にはアナログスイッチを使いましたが、今回はリレーをつかいました。
その理由は、
@OPアンプの近くに配置できる 
AON抵抗が低いので、あまり回路を気にする必要がない
B部品箱の在庫減らし。

です。この中でBの要素が多き大きいです(笑)。部品箱を整理していて、こんなリレーをみつけたからです。
かなり前に秋月で買ったものですが、つかわずに部品箱の肥やしになっていた。

このリレーをつかってみましょう!

それと、このリレーのいいところは動作電流が10mAと小さく5Vで動く点です。ということはCPU直結で動作させることができます。
今回の同期検波回路には1個のIOエクスパンダを搭載しますが、このIOにリレーを直接接続することができます。さらに
このリレーですが耐逆起電力用のダイオードも内蔵しているので、追加部品がいりません。

ただ、部品箱の中のリレーの数が足りなくて、1個は普通のリレーを使いました。動作電流が30mA程度のものなので、
直接IOエクスパンダでは駆動ができないので、トランジスタで電流増幅してつかいます。この場合はトランジスタに加えて、
ベース抵抗やダイオードが必要になり、一気に部品点数が増えます。

ほぼ完成かな?

ほぼ必要な配線は終わったと思います。
ICを載せる前に配線のチェックをしておきましょう!

同期検波回路部分もほぼ完成しました。

配線チェックをする前に、まずは机の上をかたづけてスッキリさせましょう!
しかし、もういい時間になったので、そろそろ寝ようかな〜。
この週末に完成すればいいのだけど・・・・

配線作業直後の机の上です。資料や配線材料や工具などで机の上は満載です。

修正作業 2019.8.4
基板の配線をチェックしていると、いろいろと間違いがでてきます。
単純な配線間違いもあれば、配線のし忘れもあります。さらに、追加で回路が必要なことも。
1つはダイオードクランプを追加です。それぞれのICに自身の電源電圧以上の入力が入らないように、
合計で5箇所にダイオードクランプをいれました。
2つめはスイッチトキャパシタ(MAX293)の出力に電圧フォロアー(OPアンプ)の追加です。
MAX293のカタログを眺めていると、出力ドライブは10kΩです。結構高いです。それに気づかず
反転増幅回路の抵抗につないでいました。そのままだったら誤差でまくりです。
ということで、MAX293に非反転増幅器を追加です。2ch分必要ですが、OPアンプ1個で足ります。

さて、あとは通電しながらのチェックだな〜。今日は昼からお出かけです。

スイッチトキャパシタフィルタの憂鬱 2019.8.5
今回の基板はすんなり動くなか〜と期待したのですが、やはり罠がまってました。
動作チェック用のプログラムを組みつつ、ハードウエアを確認していきます。
若干(0.2mV程度)のオフセットが載っている箇所や、配線忘れなどはいくつかありましたが、大した修正ではありません。
最大の問題はLPFに使っているスイッチトキャパシタ(MAX293)の出力が安定しない現象です。
なんせ100mV程度の範囲でフラフラと動きます。これは、前回作ったときには現れていない現象です。
で、色々と調査をしてやっと原因がわかりました。
 最初は、フィルタに与えるクロックのジッタあたりを疑いましたが、そうではなかったです。
主因は入力信号の歪みにあることがわかりました。
 前回の基板では、同期検波回路には4現象の乗算器をもちいました。すなわち、参照周波数は正弦波で
入力の波形も正弦波で、出力される信号も周波数が2倍になった正弦波がえられます。lこの綺麗な正弦波であれば
フィルターは機嫌よく動いてくれてたようです。
 それに対して。今回はアナログスイッチでの波形切り替え型の同期検波としています。
そうすると、出力波形にはパルスに近い高調波成分はかなりのります。さらにアナログスイッチを動作させたときに
チャージインジェクション信号が盛大にのります。さらに、まだあるのですが、DDSで同期検波用のディジタル信号をONさせると、
DDSから出力される正弦波にも強烈なスパイクノイズがはいります。
 で、用いたフィルターがアナログタイプのフィルターなら、そういったノイズも気にせずにフィルータの遮断周波数の中に
埋もれていくはずなのですが、今回用いたスイッチトキャパシタフィルターではそうはいかないようです。
原因ははっきりとわからないのですが、現象としてスパイクなどの高調波がのるような信号を入力すると、出力信号が
かなり大きくフラフラすることを確認しました。
 せっかく、AD変換器に18Bitを用いましたが、全然関係のない世界です。10Bitでも十分なくらいのふらつきです。

対策は
 原因がわかったので、対策をとります。フィルター前にすこし周波数の低めのフィルターを挿入します。
CRではなくLRタイプのものを入れました。できるだけ少ない素子で大きな高調波の減衰を期待したわけです。


高調波ノイズをとるためにLCのLPFを挿入です。

これで、かなり改善しましたが、それでもすこしふらつきがあります。
ADの変換精度を12Bitに落として、さらに16回の平均をとっても最小桁が数digit変動します。
まあ、そのくらいの変動なら気にすることはないのですが、12Bitの精度で済むなら、デルタΣ形の
低速なAD変換器なんかもちいずに、普通の逐次変換型の高速なAD変換器とつかえばよかった!
とやや気落ちモードです。
 こりゃ、再々リベンジでつくり直しもあるかもです。

でも、今回は結構勉強になりました。

でも、めげずにこの基板を仕上げて、どこまで精度がでるかも確認していきましょう!

やっぱりだめだ!!! 2019.8.7

スイッチトキャパシタの不安定要因が改善したかとおもいきや、かなり限定的な条件であるようです。
詳細はつきとめていませんが、いろいろといじっても、結論的にはスイッチ方式の同期検波回路のフィルタとしては
不向きに思えてきました。もう、この回路はあきらめました。
 ん、次善策はどうするかな?????

過去のトライの弱点の洗い出し!

まずは、過去のトライの悪かった点を整理です。だんだん仕事みたいになってきたな〜、もっとオキラクにやらなくっちゃ!(笑)。

写真 回路構成 問題点
初回作 同期検波回路:4現象乗算器
          AD734使用(高い!)

同期検波数:1回路(0,90度切り替え)

LPFフィルター:スイッチトキャパシタ
         (8次)

AD変換:PIC内蔵10ビット

インターフェイス:RS232Cのみ

・フィルターの応答速度が遅いため(fc=1Hz程度)
測定時間がかかる。

・AD変換精度が低い

・ユーザインターフェイスが貧弱

2回目 同期検波回路:スイッチ切り替え式
         (安価)

同期検波数:2回路(0,90度)

LPFフィルター:スイッチトキャパシタ
         (8次)

AD変換:外付け18ビット(I2C通信)

インターフェイス:RS232C
          スイッチ、LCD
・LPFフィルタの出力が安定しない(精度悪い)。
 高精度のADは意味なし。
・信号波形にスパイク有り(スイッチ切り替え式同期検波回路を
用いたため)。


→完成に至らず

3度目の正直を狙って!

やっぱりこのまま引きさがるわけには行かないので、再度挑戦です。まさしく三度目の正直を狙います!
でも、具体的に改善点がないといけないわけで、下記のような対策を考えています。

構成は初回作に類似
 ・同期検波回路:4現象乗算器
 ・同期検波数:1回路(0,90度切り替え)


同期検波部には初回作での実績があった4現象乗算器がいいでしょう。ただし、その素子であるAD734は高い(4000円ほど)ので
複数つかうのははばかれるので、1個のみです。そのため、同期検波回路は1回路のみとして、フィルターを改善することとします。

 ・OPアンプ1個を使ったフィルタ(多重帰還型 fc=100Hz)
 ・AD変換器:外付け12ビット分解能


初回作に比べての大きな変更点はフィルタ部分です。もともと低周波数のfcを高次で実現するためにスイッチトキャパシタを用いたわけですが、
あまりに次数が高いと、フィルター出力の安定に時間がかかりすぎます。これが測定時間がかかる主因になっていたわけです。
そこで、今回はフィルターには簡単なアナログフィルターをつかいます。そして、fc=100Hzと高めに設定します。
 で、ここで100Hzだと高すぎると思われるかもしれませんが、そこは高速のAD変換器を活用するわけです。
fc=100Hzだと、当然のことながら観測信号にはAC成分が残ってしまいます。とくに100Hz以下だったら素通しみたいなのものです。
これでAD変換をおこなったとしても、何の値を測定しているわかりません。そこで、AD変換器が高速でることを利用して、fc=100Hzの
フィルターの機能を補間します。

すなわち、いつもは観測信号の交流成分がなくなるまでフィルタリングをしたのち、AD変換を行います。
基本はAD変換回数は1回でOKです。
 
いつもはこんなプロセスでAD変換をやっています。というか、これが普通でしょう。

今回は、前述の通りフィルタの遮断周波数を高く設定します。元信号のAC成分は残りますが、気にしません(いや、気にしろよ!)。
で、そのあとAD変換を複数回おこないますが、AD変換を行う期間はピッタリ信号の1周期分を単位とします。これがずれると、
すなわち測定周期が1周期分からずれると、それが誤差になります。
そして、測定したAD変換の値群の平均値をだせば、少々リップルが残っていようが、低周波成分が駄々漏れであろうが関係ありません。
しかし、この方法が使えるのは観測すべき信号の周波数がわかっているからですね。未知の信号を扱うには、まったくの不向きです。


今回用いた方法です。

こうすることで、信号が切り替わったときのLPFの追従時間が早いので、すばやくAD変換にかかることができます。

構成はこんな感じ

2回目 どうなるでしょう??? 同期検波回路:4現象乗算器
          AD734使用(実績重視)


同期検波数:2回路(0,90度)

LPFフィルター:多重帰還フィルター
         (2次)

AD変換:外付け12ビット(逐次変換)

インターフェイス:RS232C
          スイッチ、LCD

OPアンプを用いたフィルターの定数設計については色々なHPで紹介されていますが、
ここを使わせてもらいました。
http://sim.okawa-denshi.jp/OPtHisample.htm

ついでに100Hzの多重帰還型のLPFの設計値は下記のおゆになるようです。


夜の夜長に作るぞ!!!

もう半分やけっぱちモードです!(寝不足が・・・・)

突貫工事!!完成? 2019.8.8

部屋のエアコンをがんがんかけて、片手にレモンサワーを持ちながら作業です。もちろん熱中症対策のための
水分補給です(笑)。 いや、眠気をとるためのカンフル剤です(爆)。
 今回は部品点数が少なくなったので、1枚の基板にすべてを載せることができました。スイッチトキャパシタが
なくなると、そのための電源のうち-5Vが不要になるので、レギュレータが1個減ります。それとクロック供給用の
ICも減るので、かなりの部品点数の削減になりました。
 なお、リレーは手持ちがなかったので、2作目の基板から引っぺがしました。

なんとか三度目の正直基板が完成!!!かな?


2作目の残骸。リレーを引っぺがしたので不毛地帯になりますた。

水晶発振器はいつかは交換しましょう!
とりあえず手元にある部品だけでつくりましたので、結構適当なものがくっついています。
下の写真での多回転VRは本来は縦型の方が調整しやすいのですが、手元にあった横型にしています。
これは調整しづらいだろうな〜(といっても、調整は1回だけですが)。
 それと水晶発振器も手持ちの25MHzを用いていますが、本来は2^26=67.108864MHzのものが
ほしいところです。ちなみに、この水晶発振器ですが、秋月の福袋を買ったときに大量(数10個)についてきました。


手持ちのVRや水晶発振器を使用。


ほんとはこれが使いたかった。今度秋月で買い物するときにするときに忘れないようにしないと。

水晶発振器の値が、どのような影響を与えるかですが、用いたDDS(ダイレクトディジタルシンセサイザ)素子であるAD9834の発振周波数は次式で与えられます。



ここでf(MCLK)が水晶発振器の周波数で、FREQREGはDDSに書き込む定数(整数)です。
いま、25MHzの水晶をつかっているので1kHzで発振させようとすると、

FREQREG= 1000Hz × (2^28) / 25000000Hz = 10737.41624

となりますがFREQREGは整数なので10737になります。逆にこの数値をもとの式に入れると

周波数 = 25000000/(2^28)*10737 = 999.961Hz

となり、1kHzからわずかにずれてしまいます。まあ、このあたりは誤差といえば誤差なんですが・・・・
その点、水晶発振器の周波数が2^26の67.108864MHzであれば、ピッタシ1kHzにすることができます。

さて、動作確認をしていきましょう!

んんん・・・・、あれ?・・・・おお!・・・う〜ん? あ、そうか! ・・・・ 

色々な感嘆符が並びますが、最初の動作チェックの様子はあまりにも混沌とするので、割愛です(汗・・・。
でも、いい感じで仕上がりそうです。

いつやるの?いまでしょう!

ようやく3作目でうまくいきそうな気配がしてきたので、気分的にホット一息です。
そうなると、すぐに違うことに目がいってしまうのですが(浮気性?)、
先に水晶発振器で述べましたが、3作目がうまくいきそうなので今のうちに水晶発振器を取替えようと思います。

・・・・・ちょっと話題は逸れて(関連はしますがが)・・・

Si514の憂鬱の巻き!の小話。

Si514はSilicon Labからでている超低ジッタのクロック発振器です。ジッタ性能としては0.8psですので一般の水晶発振器並みか、それ以上です。
で、これはDAI4392DAC9038Sでつかいましたが、ソフトでパラメータを変えて発振周波数を変更できるのも便利なところです。
で、以前に注文するときに、たまにやらかすのがパッケージ間違いです。
結構いい値段するのですが、手元に届いたときに「小さい」という声がでてしまいました。


上がいつもつかうサイズで5×7mm。
 下が間違えて買ったもので3×5mm


この小さいサイズだと、どうやっても基板にのりません。

ピッチが小さいので、絶対に隣のランドと重なります。

このまま死蔵されるんだろうな〜、と思っていましたが今回のゲインフェーズアナライザで67.108846MHzの水晶が手元にないことから
これで作ってやろうという思い立ちました。

秋月で300円で買えるに対して、この場合は5倍くらいのコストになってしまいますが、
部品を死蔵させることを考えたら、どんどん使え!です。それに秋月の67.108864MHzはPLL発振器なので
ジッタが250psです(カタログ値)。それにくらべればSi514をつかえば100倍以上よいことになります。
でも、ここでのジッタってあまり関係ないんだけどな・・・(という本音もちらり)。

組み立てよう!

Si514はソフトウエア制御なのでマイコンが必要です。でも、大した量のプログラムでもないので手持ちで一番小さいPICマイコンのPIC12F615
をつかいました。このPICは8PINのDIPなので、この背中にSI514をのっけてやります。

PICの背中にSi514を乗せます。滑って動かないように糊(紙用のスティックタイプ)で仮固定です。
もちろん、押せば動きますが、とまっているだけでOKです。


まずは必要最小限の配線です。まずはこの状態でプログラムをライターで書き込みます。


PICにプログラムを書き込みます。ついでに発振しているかどうかもチェックです。

ほんとうは、最初にPICにプログラムを書いてから、配線をすればもっとスマートにできるですが、
プログラムにバグがあった場合には、再度ばらばらにする必要があるので、PIC+SI514の状態でライタ
にて書き込みました。なお、このとき注意が必要でライターの電源電圧を3.3Vにする必要があります。
Si514の動作電圧が3.3Vなので、5Vがかかってしまうと素子が壊れる可能性があります。

制御コードはシリコンラボのプログラムを活用

Si514を67.108846MHzで動かすためには、そのための定数を計算する必要がありますが、
マニュアルを見ながらの計算って結構面倒ですが、このあたりはシリコンラボから支援ソフトが公開されています。
Si514で出力したい周波数を入力すれば、自動で定数を計算してくれます。

面倒な定数の計算は専用のプログラムで簡単にできます。
下記からダウンロードできます。ユーザ登録が必要になります。
https://jp.silabs.com/products/development-tools/software/oscillator-software-tools

さて、PICにプログラムも書き込んで動作も確認できたので、最終仕上げです。

DIP14に実装!

水晶発振器と交換できるように、DIP14ソケットに実装しなおします。このとき3.3Vレギュレータも搭載します。
というのはゲインフェーズアナライザは5V電源で動作しているのですが、何度も書いているようにSi514が3.3V動作のためです。
またSi514の出力は0.1uFのコンデンサを介してAC結合で出力させています。ひょっとして3.3Vではスイングレベルが足りないかな?
とおもったりです。

できあがりました。左端は3.3Vのレギュレータです。
細かいプラモデルを作っている気分です。

さて、全体がくみあがりましたので水晶発振器を交換しましょう!

いい感じです!

交換して動かしてみました。1kHzで発振させましたが、67.108864MHzに設定したおかげでピッタシ1kHzの出力がでるようになりました。


もともとの仮使用の水晶(25MHz)です。


周波数計算に中途半端な係数が必要です。




1kHzをだしたくても、999.98Hzとなってしまいます。まあ、誤差といえば誤差ですが・・・

交換した発振器です。ちょっと取り扱いには注意が必要です。


周波数計算の定数もすっきりしました。




出力もピッタリ1.0000kHzとなりました。


これで、気持ちよくゲインフェーズアナライザの評価にかかれます!

疲れた・・・・。

【備忘録】

回路図です。

:1000000001308A00482900004D308400000803199F
:1000100017280130C100C001C00B0C28C10B0B28F0
:100020004A30C000C00B12281528800B0928080090
:100030008316051403308312C000C00B1D288514DD
:100040000330C000C00B222885100330C000C00B55
:100050002728080005108316051003308312C000FE
:10006000C00B302885140330C000C00B3528851024
:100070000330C000C00B3A280800D10183160514D4
:1000800003308312C000C00B432885140330C00026
:10009000C00B4828051C56280330C000C00B4E2852
:1000A000D10A5108643C031956284A2885100330A8
:1000B000C000C00B59280330C000C00B5D280510DC
:1000C0008316051003308312C000C00B6528510849
:1000D000643C031D71288A0100280130C100742886
:1000E00074280030C100742808000510831605101C
:1000F00003308312C000C00B7B2885140330C0007E
:10010000C00B80288316051403308312C000C00B77
:10011000872808004D08C40085140330C000C00BB8
:100120008F2805108316051003308312C000C00B02
:10013000972885100330C000C00B9C284D08D100C3
:10014000D2015208063C031CAE28D11FA928182052
:10015000AA282A200310D10DD20AA1282A203D2046
:10016000C1080319B72875200130C100E628D00165
:100170005008073C031CC528CE1FC0281820C128E2
:100180002A200310CE0DD00AB8283D20C10803193B
:10019000CD2875200130C100E628D0015008073C69
:1001A000031CDB28CF1FD6281820D7282A200310AD
:1001B000CF0DD00ACE283D20C1080319E3287520B1
:1001C0000130C100E62875200030C100080023304E
:1001D000C5004B30C600A030C700D330C800643023
:1001E000C9000830CA002030CB00CC01AA30CD00B5
:1001F0008430CE00CF018A20AA30CD00CE01450840
:10020000CF008A20AA30CD000530CE004608CF00AE
:100210008A20AA30CD000630CE004708CF008A20C1
:10022000AA30CD000730CE004808CF008A20AA307F
:10023000CD000830CE004908CF008A20AA30CD007A
:100240000930CE004A08CF008A20AA30CD000A30FB
:10025000CE004B08CF008A20AA30CD000B30CE0054
:100260004C08CF008A20AA30CD008430CE00053063
:10027000CF008A200A30CD000420AA30CD0084307F
:10028000CE000430CF008A200A30CD0004205C2943
:1002900084011F3083051F1383161F109F101F1129
:1002A0009F1183129A019C018316851083120514F5
:0C02B0006430CD000420E72863006300E8
:02400E00443F2D
:00000001FF
;PIC12F615
;CRC=443F CREATED="08-8-19 00:00"

書き込みのバイナリーです

・・・・・・閑話休題・・・・

生の特性は?

まずは生の特性をはかっておきましょう。これを基準にして補正をかけます。
まず、この基板の入力はアッテネータが1倍、1/10倍の2通り。そしてゲインアンプが2倍、10倍、100倍、1000倍の4通りあり、
この組み合わせ(計8通り)の増幅率を設定できるようにしています。ただし、あまりゲイン2倍のアンプではつかいたくないです。
というのも、アンプのゲインはOPアンプの非反転増幅器を用いて帰還抵抗値で設定していますが、ゲイン1000倍を実現するために100Ω/100kΩの
組み合わせとしています。そのため、最低のゲイン2倍は100Ω/100Ωであり、OPアンプにとっては極めて負荷が高いです。
なんせ、内部で10Vの電圧が発生したら抵抗とOPアンプに100mAの電流がながれます。抵抗ニ100mAの電流が流れると消費電力が100mA×10Vで1W
ですから、1/4Wの抵抗ではもちません(1W以上の金属皮膜を用いる必要があります)。またOPアンプについては高速なLM7171を用いていますが、
こちらも最大で135mA(短絡時)、100mA(リニア領域)ですから、ぎりぎりです。


増幅段には高速OPアンプをつかっています。これで1000倍までゲインを得ています。

そのためアンプでゲイン1倍とするときは、まずアッテネータで1/10倍として、アンプで10倍としています。アンプ10倍だと帰還抵抗は約1KΩになりますから、
OPアンプの負荷がぐっと軽くなります。
 いまから考えると、もうすこし抵抗値は検討したほうがよかったかなと反省です。1000倍の時の抵抗の組みあわせを200Ω/200kΩ程度に設定したほうがよかったかもです。
まあ、ボチボチ改造していきましょう!

言い訳はこのくらいにしておいて、生の特性です。これらは、基板の発振器の出力を直接入力に接続して測定した結果です(内部のAD変換器を用いて測定)。

(1)ゲイン特性



まあ、こんなものでしょう。主に測定したい20Hz〜20kHzの領域では-0.5dB以内に収まっています。ちなみに、低域で
ゲインが落ちているのは、基板の入出力にカップリングコンデンサが入っているためです。出力に10uF、入力に4.7uFの電解コンデンサ
を入れていて、入力側のインピーダンスが22.2kΩにしているので、このくらいの低下は生じてしまいます。
 SPICEの計算結果を下に示していますが、ほぼ一致しているでしょう。カップリングコンデンサは大きな容量値にしたほうがよかったかもしれませんが、
プログラムの中で補正をかけるので、ばれません(笑)。


入出力にはACのカップリングコンデンサをいれています。


SPICEの結果で10Hzではゲインが-0.24dB、位相が約12度進みますが、ほぼ近いかな。

(2)位相特性
 位相特性は下の通りです。これも低域ではACカップリングコンデンサによる位相進みが発生していますが、
10Hzでも12度程度なのてたいしたことありません。なお、高域でG=100のときにすこし位相が落ちてきています。
これはOPアンプの特性によるものでしょう。まあ、変化量としても大きくないですし、20kHzまでとみればほぼフラットです。


位相特性です。SPICEとほぼ一致します。

あ、G=1000での測定を忘れている・・・・。というか、G=1000で測定するには内部の発振器の振幅を10mV程度に
設定する必要があるのですが、あまりに小さいので面倒だったので、わざと忘れちゃいました(笑)。
発振器の振幅は基板に搭載したDA変換器で設定できるのですが、10mVの出力あたりとなると、ピッタシの設定が難しいです。
12BitのDA変換器ですが、1digitかわるだけで出力が1.2mV変わってきますから・・・・。

さて、あとあとつかえるソフトを書いていきましょう!

これがこれで、結構時間がかかります・・・。ほんとうはケースに入れることが一番大切なのですが・・・・
あ〜また寝不足になりそう・・・・・

・・・・・ちょっと話題は逸れて(関連はしますがが)・・・

AD734の憂鬱!

このゲインフェーズアナライザでのもっとも重要な素子は4現象の乗算器であるAD734です。しかし、これが意外と高い
DIGIKEYでクラスの下のものでも4000円ほどします。まあ、それだけの機能をもつものですが、しかたないでしょう。
そもそも、こういった素子はあまり需要もないでしょうし、それに内部調整(レーザトリミング等)も必要なので高価なのは
仕方ありません。
 で、この素子と類似したものにTI社(BB)からもでています。それはMYP634というものですが、型番もピン配置もよくにています。
これってセカンドソースを意識したものか、それともOEM供給だったりするのか・・・どうなんでしょうね。

AD734(AD社) MPY634(TI社)
3925円 2764円

しかし、いづれにしても高いですが、実はこのあたりの素子は安いほうで、もっと高い素子がいくつもあります。
中にはセラミックパッケージで20000円もするようなものが・・・・軍需目的かな?

さて、実際にもっと安価につくろうとしたら下記のほうがよかったかな〜。秋月で1000円で売っています。DIGIKEYでも1260円くらいです。



性能をAD734と比較してみると、AD633は誤差がすこし大きいです。AD734の0.1%に比べてAD633は1%です。
帯域も狭いですが、オーティオ用としては問題ありません。
気になる誤差ですが、ランダムな誤差なら困りますが、おそらく定常的な誤差なので、ゲインフェーズアナライザのように
絶対値を扱わない用途(入力信号に対する出力信号の比)では関係ないかもしれません。

AD734 AD633
誤差 0.1% 1%
直線性 0.05% 0.1〜0.4%
バンド幅 10MHz 1MHz

いちど試してみたいところです。今後秋月で買い物するときに67.1087864MHzの水晶とあわせて買ってみましょう。
といって、すぐに忘れてしまいますが・・・・

・・・・・・話はもとに戻る(閑話休題)・・・・

計測ソフトの構想を色々と練ってはいるうちに、EEPROMが不足するんじゃない?と思うように。
測定のためには校正データが必要ですが、つねに測定の前に校正作業をするのも時間がかかってしまいます。
そのため、校正データはEEPROM等に格納しておきたいわけですが、PIC18Fシリーズにはおよそ1kByte程度の
EEPROMがのっているのでそれで足りるとおもっていました。でも、アンプの感度毎に校正データをとるとなると、
約4kByte程度の容量が必要になりそうです。まあ、色々なテクニックをつかって校正データを圧縮すれば1kByte程度
には収まります。たとえば校正データが必要なところは位相やゲインは微妙に変化する低域あるいは高域だけなので、
そこだけ校正データを残すとか、感度毎の校正値の差分だけ残すとか・・・まあ、色々と考えられそうですが、
手段が目的に変わってしまいそうで、下手をするとソフトが完成しないもまま、また初回作と同じ運命・・
すなわち使われず仕舞いに陥りかねません。
 ということで、ここは素直に外付けのEEPROMをとりつけることにしました。かなり前に買ったEEPROMがあったので、
初めて使うことになります。512kBit品なので64kByteの容量があります。これだけあれば校正データを入れるのには
十分です。

校正データの格納用にEEPROM(24FC512)をとりつけました。

ためしに、動作するかどうかを確認してみましたが、書き込み速度はかなり遅いです。1kBを書くのに大体3〜4秒かかる
ようです。読み出しは早いのですが・・・。まあ、この部分は速度を要求するところではないのでよしとしましょう。

あった!!! 2019.8.10

休みに入ったこともあり、意を決して部品箱の整理にかかったのですが、
その中で偶然にも67.108864MHzの水晶発振器をみつけました。
それもPLLタイプとメタルカンパッケージのものと2個もありました。
なんか、すごく得した気分になりました。すでにSi514を活用した発振器がとりついているので、
またまた違う用途にでもつかいましょう。あ、2作目のDDS発振器の水晶をとりはずしているので、
そちらに取り付けることにしましょう。

部品箱の整理中に偶然みつけました!

CPU逝く? 2019.8.12

ソフトを作成している最中にウインドウの操作を誤まってしまって、プログラムのソースファイルを紛失してしまいました。
コミ箱になかったので、どうやらマウスでどこかに移動させてしまったようです。で、検索して探しだして、復帰。
再度コンパイルしてPICに書き込みますが、なにかおかしい?
 EEPROMとのI2C通信が不調だし、LCDも表示されない。でも基板上のリレーの動作音はするのでPICは動いていそう。
 ひょっとして基板が壊れた?
マウス操作を誤まった原因として机の上で、物が崩れる(?)事故があって基板が巻き込まれたので、どこかの配線が切れた
のかもしれません。入念に配線を確認しても、どこも半田が取れた様子はありません(結構、しっかりと作っている自負もあります)。
単純なLCDの表示すらできないのはおかしいです。
 CPUが壊れた?
念のため、PICのPIN_C6(PORT-CのIO)が出力制御になっているので、そこにON/OFFの信号を発生させるプログラムを
書いてPICの無事を確認しようとしましたが、うまく動かない。Hレベルで固定したままです。こりゃ真剣にCPUが逝ったかもしれない。
こまったな〜、いま使っているPICはPIC18F46K22で40Pinで5V動作可能、64kBプログラムメモリ、4KB-RAMのかなり(家のなかにあるなかでは)
最上位のものなので、代替するものがありません。40Pinのものはいくつかありますが、ひとつはPIC18F45K20で3.3V動作品だし、
5Vで動くPIC16F877なんてメモリーが8kワードしかないので、今回の用途ではすでに容量オーバです。
 秋月もお盆休み中だし、通販で買っても届くのは盆明けになるしな〜。折角、お盆休みにソフトを作ろうと楽しみにしてたのに
いきなり腰を折られました。

 しかし、何が原因で動かなくなったのかな〜と、色々と調べてみることに。
@CPUの書き込み回数はいくら?
 すでに数10回は書き込みをしたけど、ひょっとして100回程度で駄目になるのかな?と心配しましたが一応1000回は保証されている様子。
 さすがに1000回までははるか先です。

ACPU単体では動くの?
 PICをとりはずして、ブレッドボードで動作させてみました。あれ? 問題なく動きます。出力が動かなかったPIN_C6も問題なしです。
 すなわちPICは生きていました。これで、すこし安心。

ソフトの問題発見、解決!
 結構時間を要しましたが、今回の騒動も決着がつきました。今回の勉強になった点が2点です。
 1)PIN_C6はRS232の送信ポートとして使用されており、RS232の使用を宣言した時点で、PIN_C6のユーザからの直接制御はできない。
  RS232使用を宣言すると、その後にプログラムでON/OFFの書き込みをおこなっても無視されてしまうようです。

 2)ライブラリがカレントディレクトリにない場合は、ディレクトリパスで探しにいく。
  これが今回の騒動の最重要ポイント。何を言っているかというと、
    外付けEEPROMのアクセスにはCCSコンパイラのライブラリファイルを#includeで使用しています。しかし、そのままではI/Oピンの定義が
   ことなるので、そのままで使えないので、すこし改編してファイルごとプログラムのソースのあるカレントカレントディレクトリににコピーしていました。
   しかし、この騒動の最初の原因となったソースファイルの紛失のときに、このファイルも紛失していたのです。
   それに気がつかなかったわけですが、コンパイルのときには必要なファイルがカレントディレクトリにないので、
   エラーとはならず、ディレクトリパスをつたって同じ名前であったファイルを処理したわけです。もちろん、そちらの
   ファイルはオリジナルのままなので、I/Oピンの定義が違うので、そのままでは動きません。
   しかし、それに気づかずPICに書き込んで、「動かない〜」と悩んだ次第です。
   I/Oピンの定義がちがうので、もちろん直接的に影響をうけるEEPROMは動かなかったわけですが、
   間接的に同じPINに関連していた液晶も表示ができなくなったというわけでした。

今後の対策!
 今回の反省で対策として、ライブラリーファイルを用いる場合は、コピーした上でファイル名も変更することにしました。こうすれば、
 ファイルがなくなったときは、単純にエラーとして発見することができます。

 チャンちゃん。疲れた〜。

・・・・閑話休題・・・・・

そろそろ・・・一旦お開き?

ソフトは結局のところ、PCのターミナルモードで動かすことを前提しました。
というのも、得られたデータはグラフにする必要があるので、データをVTターミナルの画面から
エクセルにはりつけたりするので、結局PCが必要になってくるわけです。
1周波数毎の値をLCDで見るというのもあまり意味がないかな〜と。まあ、それもあると便利ですが。
で、折角PCをつかうなら、ダイレクトにPCにデータを取り込んで画面に表示できるようにすればいいやん!
という声も飛んできそうですが、それはそれで私にとっては高い壁です。
測定したデータがすぐにPC上に表示できればいいですね!!誰か作って〜〜(心の叫び)。


結局ソフトはコンソールからの制御にすることにしました。

こういった画面をみていると、PC黎明期のころを思い出します。古い記憶は脳幹で覚えているらしいので、
忘れもしないですね。当時はCP/M−80にお世話になっものです。すこし前にリバイバルもやりましたが。


データはVTターミナル上に五月雨式に表示されます。


まだまだ、貧弱な機能しか組み込んでいませんが、そろそろ次の課題8?)への触手が沸きかけているので、
一旦この基板はひとまずの完成形に持ち込んでいこうと思います。でないと、このままだと、まだ部品箱の肥やし
になってしまいそうです。ちゃんと、動く形に仕上げて一旦のお開きです。

消費電流は低い
 この基板には結構な部品が載っていますが、以外と消費電流が少ないです。
15V電源から5Vを生成しているので、当然のことながら15V電源の消費電流が大きいですが、だいたい100mAちょっと
という感じです。これなら、DC-DCコンバータでも大丈夫ですね。


消費電流は意外と低いです。

以前にデジットにいったときに掘り出し物のDC−DCコンバータを買っていることを思い出しました。
5V→12Vものですが、出力は0.5Aまでいけます。単一出力の絶縁型なので2つを直列にならべて、
正負12V電源をつくります。

デジットで購入したDC-DC。 「税500ー」とありますが、いつも「祝500」と勘違いしてしまいます。何を祝っているんだろうと(笑)

電源や入出力はI/O基板
DC−DCや入出力のためのコネクタはI/Oに実装して、ゲインフェーズアナライザー基板との2階建てにします。
懸念点があるとすれば電源電圧が12Vで足りるかな〜というところです。というのも、AD734(乗算器)の入力は
正負10Vでスイングする正弦波を参照信号としていれているので、OPアンプがドライブしきれているかな〜というところです。
まあ、だめだったらこの基板は別の用途にでもつかいましょう。0.5Aもあるからヘッドホンアンプ用にいいかもしれません。


電源や入出力のコネクタはIO基板をつかって組み込みます。

一旦ハードは完成?

これで、ようやく一つの塊りになりました。電源は5VのACアダプターをつなぐだけです。
入出力はRCAコネクタで行います。PCとの接続はUSB−MINIでの接続です。
USBといっても、中身はRS232です。

まずはこんな形でハードは完成?


メンテナンスのために広げると、こんな感じです。

これが測りたかった!

ゲインフェーズアナライザが完成したら、測りたいものがいくつかありますが、そのうちの1つがこれです。
かなり昔に作った3CHのアナログのチャンネルデバイダです。かなり昔につくりましたが、つい最近まで現役で使っていました。

長い間つかっていたチャンネルデバイダ。最近はディジタルパワーアンプのPA5756Tに置き換わっています。


フィルターの前段のアンプですが、恐れ多くもOPA627をつかっていました。

測定してみましょう!

こんな感じで、ゲインフェーズアナライザーを接続して測定です。
一応基板の裏がショートしないようにプラ板をしいています。

こんな形で測定しました。

まずは最初にゲイン特性からです。
測定範囲が10Hzから100kHzにしているので、変化の範囲がかなり狭いです。もっと表示範囲を狭くしないとだめですね。

測定した10Hz〜100kHの範囲では細かいところがよくわかりません。


表示範囲を100Hz〜10kHzに絞りました。

つかっている3WAYのミッドレンジがドーム側にかかわずかなり低音まででるほうなので、クロスは下が400Hzあたり、上が2〜3kHzに設定した
記憶があるのですが、全然覚えていないです。で、今回の測定わかりました。まあ、設計値と異なりますが、実測で下が450Hzで、上が3kHzだった
ようです。クロス位置は-6dBにしたようですね。
 このグラフをみて、結構綺麗な特性になっていたんだ〜とちょっと感激です。作ったときは、定数を信じて測定なんかしてませんからね。
あとは、ひたすら聞き込んで(?)、各チャンネル間の音量差を調整するだけです。

次は、位相特性です。本来はこれが見たかったのです。でも、しらなかったほうが良かったかな〜。位相ってやっぱりかなりくるくる回っているんですよね。


100Hz〜10kHzでの位相特性です。想像はしていましたが、位相は結構くるくる回ります。

お開きになるか?
 とりあえず、このゲインフェーズアナライザもつかえるようには仕上げました。まだまだソフトに機能不足なところがありますが、ボチボチ追加していきましょう。
まず、上のグラフwみていて測定点が少ないのがきになりました。測定範囲の指定や、測定点などが指定できるようにしたほうが良さそうです。

でも、最大の懸念というか課題感は入力アンプ部分です。最大1000倍のゲイン設定としましたが、OPアンプ1段ではやっぱり厳しかったようで、
ゲイン自体はいいいのですが、位相特性があまりよくありません。高速なLM7171をつかいましたが100kHzのときに、位相が40度もずれてしまうことが
わかりました。やっぱりゲインを落とした2段のアンプにしないといけないようです。それと、ADは12ビットのものをつかいましたが、
もっと分解能を有効につかうためにも、アンプのゲインを1,10,100,1000というように10倍きざみでなく、1,2,5,10というようにきめ細かく
設定できるようにしたほうが、良質なデータが取れるでしょう。
 このあたりは、まだまだ今後調整すべき次項として宿題です。

お盆休み中にトライできるかな・・・・??

まあ、とりあえず一旦中締めで(笑

いやいや、やっぱり終わらず? 2019.8.13

今回の検討の中で、気になるのは入力段のアンプです。最終的に1000倍のゲインをもたせたかったので、
できるだけGB積の大きなLM7171(GB積200MHz)を用いたのですが、それでも100kHzになると位相遅れが
かなり生じていました。1段ですまそうとしたのは横着だったかな〜とおもって、やはり2段にしないとな〜と
考えていてモンモン。
 折角の休みなので、やっぱり手を加えることにしました。

1)現状の回路
まず現状の回路はこんな感じ。2段目のLM7171で2、10,100,1000倍でのゲインが切り替えられるようにしていました。
この場合、100KHzまで周波数を上げると入力との位相差が40度ほど生じてしまいます。ゲイン測定だけだったら、これでもいいのですが、
位相測定までおこうとなると、ちょっと課題が残ってしまいます。

現状の回路。2段目のLM7171ですべての増幅率をかせいでいます。


100kHz時には位相差が約40度生じてしまいます。

ちなみに、LM7171の入力はOPA134のフォロアー回路がはいっていますが、これはLM7171の入力バイアス電流による
オフセットを抑制するためです。というのも、LM7171はバイポーラなので最大で4uA程度の入力バイアス電流が流れます。
そのため入力段にフォロアー回路がないと、というか入力抵抗が高いと、極めて大きなオフセットが発生します。
 実験的に下記のような回路で、100倍の非反転増幅器を試してみると、出力に6V程度のオフセットが発生します。
これから逆算すると、入力オフセットは約60mVであり、バイアス電流は60mV/20kΩ=3uAです。まあカタログ値通りでしょうか。
FET入力のOPアンプなら入力バイアス電流はnAオーダあるいはpAオーダなので、そこまで気にする必要はありません(もちろん
用途にもよります。高倍率のゲインをもたせるとオフセットが大きくなります)。
 オフセットがでても、カップリングコンデンサで消せばいいじゃん!という声もなきにしもあらずかもしれませんが、
さらにゲインを上げると、オフセットが大きくなりすぎて電源電圧でクリップすることになりますから、オフセットはやはり
気になる存在です。

こんな回路だと巨大なオフセットが発生します。


6Vのオフセットが発生してしまいました。

2)改良の回路
 といことで、オフセットも減らし、入出力での位相差を減らすためにアンプを2段構成に変更するこことにしました。
前段のOPA134にゲインを最大で10倍、後段のLM7171に最大で100倍受け持たせることにしました。
最初からつくりなおすなら、もっと色々なゲインをもたせたかったのですが、基板上のリレーの数も限定されていますから、
まあ最低限の変更です。
 変更のついでにLM7171の抵抗値を100Ωから1kΩに変更です。これでLM7171がが10Vの出力をだしても
電流は10mA程度に抑えられますから、発熱等は気にしなくてよくなります。なんせ、100Ωのときは最大で100mA
近くながれますから、完全に抵抗器の定格オーバです(1/4Wの抵抗に最大で1Wの電力が発生する)。
 この変更によって、入出力の位相差はかなり減りました(半分程度になったかな?)
まあ、このあたりが限界でしょう。あとは、入力のOPA134をもうすこし高速なタイプに変更することで改善でるでしょう。

変更後の回路です。入力段に10倍のゲインをもたせました。後段の100倍とあわせてトータル1000倍です。


この変更で入出力の位相差はだいぶ小さくなりました(ゲイン1000倍の100kHz)。

がぜんやる気が!!
この変更結果をうけて、いままで適当なソフトをつくってお開きにしていましたが、
もうすこし完成度を高めようという気がおきてきました!

測定ソフトも完成! 2019.8.15

ようやく使えそうなソフトも完成してきました。
操作はコマンドモードですが、条件設定(Setting)、校正(Calibration)、測定(Measurement)の順で行います。
条件設定は測定する周波数の範囲や分割数です。分割数は内部のメモリーの関係から最大で200点です。
校正は何もすることはありません。勝手に基板内で入出力端子を接続して、素通り状態での測定を行います。
測定は、対象を接続して実際に測定します。条件設定と校正は1度やれば、あとは測定を繰り返すだけにしました。を


操作画面です。昔ながらのコマンドベースでの操作です。

再度、アナログのチャンデバの特性を測定してみました。
測定周波数は100Hz〜10kHzとして測定点は200点にしました。
やはり測定点が増えているので、データが連続的に見えますね。
ゲインについては-80dbまで、綺麗に測定できているようです。

 アナログのチャンデバのゲイン特性です。

位相については-50dBを下回るところからややデータがばらついてきます。これは、計算で
ATAN(Y/X)を行うため、どうしてもビット分解能が低い領域になると精度が落ちてきます。
でもまあ、見たい領域での位相特性は十分にわかります。

 アナログのチャンデバの位相特性です。

さて、これで再度のお開きです。

次は、ちゃんとケースに入れないとね。入出力にBNC端子を取り付たものにしたいな〜と妄想中です。
でも、そろそろ盆明けだな〜。

今日は台風の影響で、かなり交通機関がみだれそうです。

【備忘録】
アナログ部分の回路(GainPhaseAnalyzerSCH.pdf)。ディジタル部分は適当につなげばいいので(?)省略です。


入力ゲイン

No 公称ゲイン ATT
1段目
OPA134
2段目 計算上のゲイン No3で規格化
(標準感度は10倍。
入力1Vが0dB)
逆数
(換算係数)
0.2 RY1=OFF
0.0991

RY2=ON
1.0
RY3=ON
RY4=ON
1.99
0.19721 0.018076 55.3220
1 RY1=OFF
0.0991
RY2=ON
1.0
RY3=ON
RY4=OFF
10.91
1.08118 0.0991 10.091
2 RY1=ON
1.0
RY2=ON
1.0
RY3=ON
RY4=ON
1.99
1.99 0.1824 5.4825
10 RY1=ON
1.0
RY2=ON
1.0
RY3=ON
RY4=OFF
10.91
10.91 1 1
20 RY1=ON
1.0
RY2=OFF
10.0
RY3=ON
RY4=ON
1.99
19.9 1.824 0.54825
100 RY1=ON
1.0
RY2=OFF
10.0
RY3=ON
RY4=OFF
10.91
109.1 10 0.1
1000 RY1=ON
1.0
RY2=OFF
10.0
RY3=OFF
RY4=OFF
101
1010 92.5756 0.010802

あ、ソフトの係数間違えている・・・。




(続きます・・・ホント?)