ちょっとTea Time!?ゲインフェーズアナライザを更新しよう! 2025.4.3

ゲインフェーズアナライザは周波数特性や位相特性を調べるのに必要なもので、
約6年ほど前に作成して、一応ケースに入れて適時使っています。
性能的にも問題はないのですが、ちょっと気に入らないところもあって、
そろそろ更新を考えています。


実験用の電源+ファンクションジェネレータにゲインフェーズアナライザも同居しています。

気に入らない点

測定が遅い!
 これは部品をけちって、本来2個必要な同期検波部を1個で済ませて、
COS成分とSIN成分を時分割で測定しています。そのため、位相を切り替えたときに、
フィルターのハンチングが収まるまで待つ必要があるので、どうしても測定時間がかかります。
とく20Hzあたりの低周波数では1点測定するのに1秒程度はかかってしまいます。これをなんとか
高速にしたいところです。

PCがないと使えない
 ユーザIFはPCにUSB接続して、TeraTERMなどの端末を起動しての操作になりますから、
すこし測定が面倒です。それに、周波数特性をグラフ化するためには、一度データをエクセルに
取り込むなどしなければなりません。やはり、ある程度はスタンドアロンで周波数特性などが
表示できるようにしたいところです。

持ち運びができない
 実験用の電源+ファンクションジェネレータと同居しているので、ちょっと視聴室で測定といったことが
できません。持ち出せるように独立化をさせたいです。

AD変換が12ビット
 この部分は直接的には関係がないかもしれませんが、同期検波したあとの電圧計測のADCの
分解能が12Bitとちょっと貧弱です。やはりこの部分は16Bitは欲しいところです。ここも気になる
ところです。

年内完成を目途に作るぞ

他にも色々とやりたいことはあるのですが、とりあえず年内完成を目指して進めます。
と、ノンビリモードです。

PICOでI/Oピン足りるかな? 2025.5.5

マルチシステムのその1その2アンプ更新が完了したので、ようやくこちらの
作業にかけれそうです。

必要なICを頭に浮かべながら、必要なI/Oピン数を数えてみましたが、
なにも考えずに積み上げたら42個必要なことがわかりました。PICOのI/O数って
全部で26しかありません。秋月のRP2040ボードなら30は確保できます。

そこで、共用にできそうなところや、不要なところをまとめてみました。
I/O数は29まで減らせそうです。これなら秋月ボードならなんとかなります。
しかし、まったく余裕がないのも考えものです。なにかを追加しようとしても
手がだせなくなってしまいます。

一度、回路図をきちんと書いてみる必要がありそうです。

必要ピン数
削減案 削減方法
WVGA(800x480) 13 11 RST,RDは固定(-2)
WVGA(タッチパネル) 5 5
DDS(3個) 5 2 SDATAはWVGA共用(-3)
DDS用DAC(振幅調整) 4 3 DATAはWVGA共用(-1)
ADC(2個) 6 4 DIはWVGA共用(-2)
ゲイン調整リレー 5 0 I2CのI/O EXTENDERを使用(-5)
水晶発振(Si5351-I2C) 2 2
UART 2 2
合計 42 29

回路図を書いてみると 2025.5.6

回路図を書いてみると、いろいろと付け足したい機能などがでてきます。
回路図かいてI/Oピンは1個減ることはわかりましたが、追加で1個増えたので、
結局トータルで29本必要なのはかわりませんでした。

あと、この回路の中で一番絶対精度が高いのはADC(ADS8685)なので、
それをつかって自己校正ができるようにもしておきました。具体的には、
入出力信号を直接的にAD変換して、振幅値を計測できるようにしました。

振幅値を、振幅の最大値で測定するとノイズ分で嵩上げされる可能性が高いので、
電圧x時間の積分値から振幅値を割り出すようにすればいいでしょう。積分区間を
正確に1周期分とするために、DDSから周期信号がポーリングできるようにI/Oを
1本使います。これが、増えた原因です。

リレーは小型のものを8個ほどつかいます。

主要部分。自己校正ができるように考えてリレーを追加です。


ここは、秋月RP2040ボードと表示器の接続です。


電源部分です。アナログ部については、ドロップ電源とします。ひょっとしてDCDCでよいかもです。


一番使いそうな情報はこれになるでしょう。

1枚で収まりそう?

電源部分は別基板になりますが、信号処理部はなんとか1枚に収めたいものです。
さもないと、いらぬコネクタが増えてしまいます。で、必要になりそうな部品を配置してみましたが、
なんとか、実装できそうです。これに、抵抗やコンデンサが必要になりますが、まあなんとかなるでしょう。
抵抗は極力表面実装部品のものをつかい、両面実装も考えれば割とすんなりと収まるでしょう。

信号処理はなんとか1枚で収まりそうです。

夜な夜な製作 2025.5.8

毎夜、泡の出る麦茶を片手にちょびちょび製作です。


端から組み立てていきます。あとあと基板のスペースがなくならないように、出来るだけ
詰めて部品を配置していきます。



入力アンプ部分にはリレーが沢山必要になりますが.配置はこんなものかな?


一応、これですべての部品の実装が完了(のはず)。


ADCは1個足りない(右側)ので、注文中です。来週には到着するでしょう。


裏面はこんな感じです。

後日に配線チェックを行いましょう。

確認作業開始 2025.5.13

配線のチェックについては、電源接続だけおこないます。
電源さえ間違わなければ、そうそうIC類はこわれないでしょう。
あとの配線チェックは動作の確認作業の中で行いましょう。


動作の確認作業を開始です。

動作確認順番

以下のような順番で進めています。

1. WVGAモニターパネル動作 OK!
2. クロックジェネレータ動作
 OK!
3. DDS振幅調整用DACの動作 OK!
4. DDS動作 OK!
5. リレー動作(I/Oエキスパンダ)
 未
6.  AD734(乗算器)動作  未
7.  AD変換器動作  未

クロックジェネレータはSi5351をつかっていますが、
実装されている水晶の精度が悪いためか、設定値(67.109MHz)に
対しての誤差が大きいです。0.018%ほど低めの係数にする必要ありです。
まあ、このあたりは我が家の基準をベースに調整していきましょう。

クロックジェネレータの発振周波数の誤差が大きいので、係数を調整が必要です。

ハードはほぼ出来たかな〜 2025.5.14

動作チェックをしていたら、やはり配線抜けが多数ありましたが、とりあえずは一通り動作確認は完了です。

5. リレー動作(I/Oエキスパンダ) OK!
6.  AD734(乗算器)動作  OK!
7.  AD変換器動作 OK!

細かいところで、間違いがあるかもしれませんが、都度直していきましょう。

ハードはほぼ完成

DDSの発振周波数調整

DDSへの水晶発振器の周波数は67.108864MHzが必要です。これはSi5351で25MHzの水晶から
PLLで生成しまが、中華製モジュールの水晶は絶対精度が低いようなので、設定定数を調整して
周波数を合わせこみます。

周波数カウンタをつかって、Si5351の発振周波数を合わせこみます。


周波数カウンタへは我が家の標準の10MHzを使っています。
まあ、ここまでの精度は全然必要ないですが、自己満足の世界です。


すこし機能増強 2025.5.15

回路図を眺めていて、2chのデータローがにもなりそうなので、ADCの直接入力ができるように
リレーを追加することにしました。

改造前はフィルターの出力をADCに入れるような形になっています。


データロガーとしても使えるように、ADCの入力を独立して使えるようにリレーを挿入しました。

ソフト作成

ソフトの全体の構成を描いておかないと、手戻りが発生しそうなので、
事前にちょっと細かいとことまで検討です.

まず、おおまかに実行できる機能は下記の3つにします。

1.Gain Phase Analyzer (これが主目的)
2.Functiion Generator (これがあるとなにかと便利)
3.2ch Datar Logger (つかうときもあるでしょう.低周波数ならオシロ代わりになるかも)
4.System Setting
(UART速度などの調整。各機能の隠しパラメータなど)
5.Other Sensors (i2C接続できるセンサー類の動作確認など。都度組み込み)

その他で、システム設定なども必要かなあ〜。

Gain Phse Analyzerの設定項目

結構、設定するパラメータは多そうです.数値の設定はやはりテンキーが便利だろうなあ〜。

<設定パラメータ>
 開始周波数(最低は10Hzくらい:テンキー入力)
 終了周波数(最高は200kHzくらい:テンキー入力)
 測定点数(最大500点くらい:テンキー入力

 測定間隔(対数 or 線形)
 信号振幅(0〜4Vで10mVきざみくらい:テンキー入力
 測定精度(粗測定、精密測定)

<実行モード>
 連続測定
 ワンショット測定
 データ送信(UART)
 内部校正

Function Generatorの設定項目
<設定パラメータ>
 発振波形(正弦波、三角波)
 周波数(1Hz〜1MHzくらい:1Hz毎のテンキー入力)
 出力振幅(0〜4Vくらい:1mV毎のテンキー入力)
 (スイープ機能は要らないでしょう)

<実行モード>
 発振ON/OFF

2ch Data Loggerの設定項目

<設定パラメータ>
 入力レンジ(バイポーラ、ユニポーラ、±2.5V〜±12V)
 測定間隔(最大250ksps、最低で1spsくらい?:1Hz毎のテンキー入力)
 測定時間(測定点数はメモリーに依存:最大で20000くらい)

<実行モード>
 繰り返し測定
 ワンショット測定
 データ送信(UART)


その前に、色々な特性を測定を!ああ、面倒! 2025.5.17

最終的には装置の校正については自動化を目指していますが、それでも
どのくらいの特性(例えばアンプ部分のゲインや発振器の振幅値など)は、
事前に調べておく必要があります。リレーを動かしたり、DDSやDACなどの
値を変更するために、プログラムを書き換えて、CPUにDLしてなどの作業を
繰り返していたら、だんだん面倒になってきました。ここは、最初にひと手間ですが、
各種の値をパネル上で操作できるようにプログラムを書くことにしました。
 数値の変更は、パネル上のテンキーで行います。


各素子をダイレクトに動かすためのプログラムを作成です。これで、調整作業が楽になりました。

廉価なDACだとこんなものかなあ〜

発振器に使っているDDS(AD9834)は外付けの抵抗(Rset)で出力振幅を調整します。
抵抗値を変更するのは大変なので、抵抗が接続されている電位
を12BitDACで調整することで、
見かけ上の抵抗値を変更することにしています。
こうすることで、振幅を自由に変更することができます。

AD9834はRset抵抗で振幅を調整することができます。



振幅を可変するために、Rsetの接続端をDACにしています。
租調整用が6.8kΩで、微調整用が680kΩとして2個のDACを使っています。


まず、微調整用の抵抗のDAC2の設定値を2048(中央値)にして、DAC設定値と
振幅の関係を測定です。勿論、こんな面倒な測定はADをつかって自動で行います。
振幅の測定は、ADの最大値を用いるとノイズが出やすいので、振幅値を積算したのち、
下記の計算式で振幅に変換します。簡単な三角関数の積分です。

  振幅 = S X π / 2N
 ここで
  N:1周期分の測定点数
  S:振幅値の積算値

測定結果は下記になりました。一見する綺麗です。近似式から
DAC1設定値 = -417.86x振幅(V)+1965.2
という値がでてきました。係数の逆数をみると1/417.86=0.00243ですから、
DACの1LSBあたりで2.4mVの振幅を変更することができます。
目標としては1mV単位で設定できるようにしたいので、あとはもう1個のDACをつかって
微調整を行います。
 しかし、これはあくまでも理想論です。実際にグラフを細かく観察すると、
直線ではありません。DACのエラーがありますから、2〜4LSBくらいは平気で狂います。
まあ、廉価なDACだから仕方ないかなあ〜。
 2LSB狂うと設定値から5mVはズレてしまいます。出力振幅が小さい場合は、大きな
誤差になってしまいます。


DAC設定値と振幅の関係です。一見すると綺麗なのですが、細かくみるとエラーがかなりあります。


2LSBくらいはエラーがでています。最大だと4LSBくらいはエラーあるかなあ〜。


出力電圧は微調整できるのですが、こちらも結構エラーがあります。

DACのエラーは仕方ないのですが、このエラーは再現性があるものとして、1mV毎に
DACの設定値のテーブルを作成していきましょう。といっても、これをいまからすると、
いつまでたっても完成しないので、とりあえずは簡単な近似式をつかって、出力電圧を
設定することにしましょう。

DAC1設定値 = -417.86x振幅(V)+1965.2

から、例えば1Vを得たい場合は上式に代入すると
DAC1設定値=1547.34
になりますが、実際には整数値になるので1547になります。
この場合の発生する誤差は0.34X(1/417.86)=0.8mV。
すなわち0.8mVほど発生電圧が高くなるので、DAC2の補正値として
41847*0.0008=33を加えるということにします。


まあ、もともとDACのエラ−があるので、全然意味はありませんが、
最終的には1mVの精度をだそうとする、気合です(笑。

機能は大丈夫そう? 2025.5.18

まずは簡単に周波数を変更して、ADサンプリングしてみました。
結果はUARTでPCに転送してエクセルでグラフにしています。
1MHz程度でも測定できそうな感じです。


0.1uFと1kΩでLPFを構成して簡単に測定です。まだ校正などはしていませんが、
1MHz程度でも問題なく測定できそうです。

面倒なのは、上のようなグラフをパネル上に表示できるようにすることだなあ〜。
グラフの軸を自動に設定するのは、大変かなあ〜。細かく調べたいときのことを考えて、
固定にできるようにしたほうが、いいかもです。その方が簡単だし(と、日和ってしまいます。

裸の特性は?


入出力を直結して測定です。いわゆる裸の特性ですが、さすがに1MHzくらいになると-10dBくらいゲインが落ちています。
位相も80度ほど遅れています。これらをきちんと校正データとしておいて、測定値を補正する必要があります。
なお、低周波域でのわずかなゲイン低下と位相の進みは、カップリングコンデンサの影響です。



裸のゲイン特性です。


裸の位相特性です。

だんだんそれらしく 2025.5.19

グラフも表示できるように、プログラムを追加です。

あ、位相と同時表示するにはどうしよう?左の縦軸がゲインで、右の縦軸が位相という感じでいいのかな?
でも、グラフの補助線でぐちゃぐちゃになりそう。位相は位相だけで表示できるようにしておいたほうが
いいのかもしれません。


8x8Dotのフォントではちょっと小さいかなあ〜。直接目視する分には問題ありませんが、写真では
わからないなあ〜。

夜な夜な 2025.5.23

ソフト製作を続けて、ようやくゲインフェーズアナライザ部分は完成です。
細かいバグは残っているだけれど、見つけたら直していきましょう。

次は、ファンクションジェネレータ

こちらは、おまけみたいな機能ですから、簡単です。
周波数や振幅はダイレクトに数値入力することが基本ですが、
手動でスイープみたいなことができるように、パネルのバーををタッチすることで
周波数、振幅が変更できるようにもしておきました。
欲張って周波数は10MHzまで出せるようにしましたが、1MHzまではなんとか
設定振幅で出力はできそうです。

ファンションジェネレータも完成です。


1MHzまでは設定振幅で出力できそうです。


5MHzだと設定振幅の半分程度に落ちてしまいました。

そろそろケースに収めましょう 2025.5.28

最初はちゃんとしたケースに入れてトランス電源とともに動かすつもりでしたが、
大きなものになってしまうと、すぐに使おうとしても面倒になったりしそうです。
気楽に机の上において、簡単につかえるようにするためにできるだけ小型にしたいものです。
それに、テニスマシンなどの調整時には電源のないところもあるので、バッテリー駆動にして
おくのも手です。ちょうど、6足ロボットを検討しましたが、それっきり動かしていないので
バッテリーも遊んでいます。
 バッテリー駆動となるとアナログ回路用の±15V電源もDCDCをつかうことになりますが、
ちょうど共立電子で購入したものがあるので、それをつかえばいいでしょう。アナログ部の
必要電流は50mA程度ですが、手持ちのDCDCは6Wなので±15V200mAの容量ですから
十分です。


6足ロボットを検討したときのバッテリーが余っています。7.2V4200mAです。


アナログ電源にはDCDCをつかいます。入力は標準で5Vですが、最大9Vまで使用できます。

アルミの板を加工してケースにしましょう!

300x200mmサイズのアルミ板が入手容易なので、これを1枚つかってケースにすることにします。
半分に切って、1枚をベース板に、もう1枚をフロントに使います。半分にすると150x200mmですが,
基板の幅が146mmなので、収まりがいいです。
 ということで、まずは完成の姿をイメージです。

こんな形でケースとしたいと思います。

アルミ板はこれ

必要なアルミ板は300x200mmが1枚だけで、AMAZONで1200円ほどでありますが、
今回は下記にしました。4枚も要らないのですが、まあ残りは別のケース作りにつかいましょう。
まあ、こんな買い方しているからモノが増えるのですが。
 で、このアルミ板を選んだ理由は、どうやらアルミ合金のためです。商品の説明に
「曲げる用途には使用できません」

とありますから、純アルミではなさそうです。純アルミは直ぐに曲がってしまうのと、
あと、切削加工するときにねばいので、猛烈にバリがでてきます。
その点、アルミ合金なら硬いこともあり、割と切削加工に向いたりします。
それに、強度があるので今回の用途には適しています。

今回はこのアルミ板を購入です。4枚もあるので、残り3枚はまた在庫だなあ〜。

曲げて使えない、という材質に魅かれました。

アルミ板は注文の翌日には到着です。


両面に保護シールが貼ってありました。

加工しましょう!

アルミ板も届いたので、実装する部品の寸法を拾ってさっそく加工に入ります。
久しぶりにCNCを動かします。

備忘録として800x480のパネルの寸法を拾っておきました。


加工ができました。

電源回路

電源回路はシンプルです。バッテリ(7.2V)を元にDCDCで±15Vを生成です。
5V,3.3Vについてはそれぞれ5Vと3.3Vの低損失レギュレータ(LDO)を使います。
ここで、すこし注意点がありました。
 今回3.3Vにつかうレギュレータ(BA033)ですが、秋月で購入したものの、
データシートをみて許容損失が2Wしかないことに気付きました。3.3Vは
およそ400mAは必要(なんせタッチパネルのバックライトが大食い)なのですが、
7.2Vからドロップアウトさせると1.56Wの損失になります。バッテリーも充電直後は
電圧が高く8Vくらいまであがりますから、そうなると1.88Wと定格ギリギリになって
しまいます。
 そのため、3.3Vのレギュレータ入力は5Vレギュレータの出力をつかうことにします。
ちなみに、5VのLDO(TAS4805)は許容損失20Wあり、いわゆる普通のレギュレータと
同じです。しかし、BA033って1Aの出力がだせるけど、許容損失が2Wということは
完全に5V入力を前提にしている感じがあります。


3.3VのLDOで、これなら1A流せます。でも許容損失がかなり低いです。

BA033の最大許容損失が2Wなので、入力電圧は極力低く抑える必要があります。
最大で400mAくらいは流れそうなので、5V入力が必須でしょう。

回路図は下記のようにしました。DCDCの後は、気持ち程度ですがLCフィルターを入れています。
あと、バッテリー駆動ということなので、バッテリー電圧のモニターもあったほうがいいだろうということで、
8PinのPICも搭載しておきました。
 電圧モニタープログラムはおいおい書いていきましょう。

今回の電源回路です。

電源部を組み立て
 小型のユニバーサル基板に電源回路を実装です。レギュレータ自体はアルミ底板に
直接とりつけて、周囲の電解コンデンサは空中配線です。


電源基板です。レギュレータはケースの底面に直付けです。


レギュレータ4個はアルミ板に直接とりつけて、放熱させます。

硬いなあ〜 2025.5.28

パネルと基板間はフラットケーブルで繋いでいますが、ケーブルが40Pもあるのでかなり硬いです。
これを折り曲げて使うにはかなり難しそうなので、別の接続ケーブルを用意します。.
要は、接続ケーブルの自作です。面倒といえば面倒ですが、夜の夜中の半田付け作業にはもってこいです。
泡のでる麦茶を片手に、半田ゴテをふるいます。

フラットケーブルが硬いので、このままではケースに組み込むことができません。



フラットケーブルを代替するために接続ケーブルを自作です。


こんな形で接続ケーブルができました。トータルで34本の配線をしています。


これならば、柔らかくメイン基板からパネルまでを接続することができます。

完成目前

パネルを取りつけて、BNCコネクタなども実装です。
あとは、バッテリーケースだけですが、ほぼ完成目前です。

ようやくここで、出来てきました。


バッテリー式の課題だなあ〜 2025.5.28

持ち運びなどが便利なバッテリー式ですが、電源を切り忘れるとバッテリーがすっからかんにになります。
電源ONのまま、忘れて寝てしまったら、当然ですが次の日には絶命していました。
消費電流は約900mA程度ですが、バッテリーの容量は4200mAhしかありませんので、4時間強しかもちません。
すっからかんになったバッテリーは再充電になりますが、大きな問題があります。
NiHM電池は過放電で死ぬ場合がある
ということです。死んでしまったら再充電もできません。ということで、早目にバッテリーの電圧チェックを組み込んだ
方がよさそうです。ただ、単にLEDの点灯だけでは寝てしまうと気付かないので、圧電ブザーもとりつけようかと
思っています。ただ、ブザーが鳴っているのに気付かなければ、それまでですが−−−。


これも追加で取り付けましょう!

バッテリモニターの仕様

バッテリーモニタの仕様を考えてみました。NiHM電池の放電終始電圧は1セルあたり0.9Vですが、そこまで
放電させるのは怖いので、最終電圧は1V強に設定です。

バッテリー電圧
(V)
1セルあたり電圧
(V)
LED ブザー
>6.9 >1.15V OFF OFF
6.9〜6.3 1.15〜1.05V 点灯 OFF
<6.3 <1.05V 点滅 ON

なお、本体自体の最低動作電圧は5.3V(5VのLDOの動作下限)なので、ブザーがなっても余裕で動きます。
が、バッテリーはのこり少ない容量を搾りとられるわけです。

プログラム自体はバッテリ電圧を測定して、電圧範囲に応じて
LEDあるいはブザーを鳴らすだけの簡単なものです。
ブザーは4kHzでならす必要があり、またできるだけ大きな音が
でるようにプッシュプルで駆動します。


圧電ブザーをプッシュプルで駆動できるように接続です。

プログラムソース(PIC12F615用)
バイナリー(PIC12F615用)

どこに取りつける?

ブザーをどこにとりつけるかを考えます。別に、基板上に実装する必要はなく、
適当な場所に空中配線させればいいのです。が、いくら基板がコネクタで接続
されているとはいえ、基板を外すのは面倒なので、すこし横着です。
 ICの足にブザーをとりつけたのち、そのままICをソケットに差し込みました。
まあ、これが一番手っ取り早いでしょう。

どこにブザーを配置しようかな?でも、基板とりはずすの面倒だなあ〜。


ICの足にブザーをとりつけました。


そのまま差し込めば、バッテリーモニターの機能の追加完了です。

音鳴ってる?

実際に電圧モニターを実機で動作させてみましたが、電圧低下でLEDは点滅しますが、
音がほとんど聞こえません?ん?なぜ?
ブレッドボードではなっていたのになあ〜。ただブレッドボードでは、音の鳴りが不安定でした。
おもわず接触不良かな?と思って、ブザーを触ったりしたら大きな音が出だしたので、安心
していました。
 そこで、PICをとりはずして再度ブレッドボード上で動かしてみましたが、3.3Vだと音がかなり小さい。
そこで動作電圧を5Vにすると、大きな音で鳴りだしました。ひょっとして圧電ブザーって最小駆動
電圧があるのかな?そんなわけはないはず。
 とりあえず、原因はあとで調べるとしてまずは電源電圧を
5Vにして組みなおしです。


PICの動作電圧を5Vに変更です。

電圧モニター(PIC12F615) 5V用ソース
電圧モニター(PIC12F615) 5V用バイナリ―

そのあと、違うPICに同じプログラムを書き込んで電源電圧を5Vから
徐々に低下させてブザーのなり方を確認です。

電圧 5V    問題なく大きな音でなる。
電圧 3.8V   このあたりで鳴り方が不安定に。音ががさつきます。
電圧 3.78V  一気に音が小さくなります。

ということで、圧電ブザーをPIC直結で鳴らす場合は電源電圧5Vで使った方が
いいような結果になりました。しかし、なぜこんなに挙動が不連続なんだろう?

ほぼほぼ出来あがり? 2025.5.31

今回の機能で必須としていた、データロガーのソフトも完成(?)です。
これで、ほぼほぼ全体が出来あがりかな〜。

データロガーのソフトも完成です。


こんな形でスタンドアロンで使えるようになっています。


バッテリーのコネクタが大きいので変更したいのですが、そうするとラジコンで使えないのでちょっと思案中です。

追加したい機能はまだまだありますが、ぼちぼちと進めていきましょう。

(ゆっくり、つづく)