APB−1を使った多目的測定器

おじさん工房 TOP へ     APB−1 のページへ     サポート掲示板へ     APB-1 キット頒布中

■最新の設計資料・ソフトなど

テストソフトその7 20100105 (ZIP 102KB)
テストソフトその9 20100115 (ZIP 59KB) ←テストソフトその7と合わせて使います。

AT91SAM7 CDC ドライバー対応ソフト 20111023 (ZIP 164KB)
COM ポート処理バグフィックス 実行ファイル 20120215 (ZIP 105KB) ←20120216差し替えました



■APB−1 多目的測定器 開発過程

2009/07/10 オシロ機能と群遅延測定機能を追加しました。
2009/07/17 正規化(ノーマライズキャリブレーション)と復調器を実装しました。
2009/07/26 ソフトウェアのソース(VHDL と C#)を公開します。
2009/07/31 ソフトウェアのソース(ARM)を公開します。
2009/08/02 D/A 変換出力が最大値で反転している件の対策です。
2009/08/08 テストソフト(こまごまと変更)です。
2009/08/14 テストソフト その2(サイン波、DSB追加)です。
2009/08/18 スペアナ、ネットアナをオーディオ帯域で使えるようにする改造です。
2009/09/09 レシプロカル周波数カウンターを実装しました。
2009/10/08 インピーダンスアナライザと、復調器にAGCを実装しました。
2009/11/07 連続測定、パーシスタンスを実装しました。
2009/11/14 テストソフト6 メモリーリークを修正しました。
2009/12/31 APB−1メインページから多目的測定器のページとして分離
2010/01/05 テストソフト7 複数台接続対応、復調器ハングなど、いろいろ修正しました。
2010/01/09 PCM1756対応ソフトをアップしました。
2010/01/15 ロジアナで時間軸の計算を間違えていたのを修正しました。
2011/10/23 AT91SAM の CDC ドライバーに対応しました。
2012/02/15 COM ポート処理のバグフィックス



2009/07/10

オシロ機能と群遅延測定機能を追加しました。

前から、オシロ機能と群遅延測定機能は欲しいと思っていたのですが時間が取れずのびのびになっていました。 オシロといってもトリガーはついていませんし、DC測定もできませんし、入力インピーダンスは50Ωと低いのでほとんど実用性はないのですが、周波数変換した後のI+Q信号を見ることができるなどデジタル信号処理の理解を深めるのに良いのではないかと思います。
群遅延はフィルターの測定などに必要な機能です。

ソフトウェア (ZIP 122KB) ←古いです。最新版をお使いください。

boot.bin、cmd.bin には変更がないので解凍したフォルダーから制御ソフトをPCで実行するだけでOKです。


■群遅延測定とQ

群遅延測定波形

水晶振動子の振幅と群遅延測定結果です。 上が振幅(MAG)、下が群遅延(DLY)です。

このグラフから、直列共振周波数での群遅延は533μsと読み取れます。 負荷Q=π * f * DLY なので得られた周波数と群遅延を代入すると負荷Qは20597となります。
一方、−3dB帯域幅をこのグラフから読み取る(刄Jーソルにして−3dBのところを探す)と595Hzでした。 負荷Q=f / 凾 に代入すると負荷Qは20645となりほぼ同じ値が得られました。

■閑話休題

むかしむかし、まだネットワークアナライザが一般的でなかったころ、周波数特性を得るためHpのゲインフェーズメーターというのを使っていました。 周波数を変化させてゲインと位相を測定し、手計算で微分して群遅延を得ていました。 1枚のグラフを書くのに何時間もかかった記憶があります。 それに比べるとこんなに簡単に測定できるとは隔世の感があります。


そういえば、むかし、FMチューナーの音質競争が激しかったころ、IFフィルターの群遅延特性がフラットであることを売り物にしていました。 世の中のほとんどの人は群遅延特性といわれても何のことやらちんぷんかんぷんだったように思います。 最近はわりとポピュラーになったのはデジタルでの波形伝送で重要だからでしょうか。


そろそろソフトウェアの説明とかソースの公開準備をしようと思っているのですが手がつかないです。 まあソフトはそんなに難しいものでもないので説明なしでも触っていればわかるかなとは思います。 未実装機能が多いことがばれちゃいますが...




2009/07/17

ネットワークアナライザーに正規化(ノーマライズキャリブレーション)を追加しました。 ネットワークアナライザ画面の開始ボタン付近でコンテキストメニューから実行できます。

復調器でAM復調を実装しました。 復調器の画面真ん中のあいている部分にはバンドスコープを表示しようと思っています。

ソフトウェア20090717 (ZIP 127KB) ←古いです。最新版をお使いください。
boot.bin、cmd.bin には変更がないので解凍したフォルダーから制御ソフトをPCで実行するだけでOKです。


■周波数測定

バーアンテナから2SK30Aのソースフォロワーを介してアナログ入力に入れています。

TBS の周波数

オシロ機能のABS+PHASE表示でTBS(954KHz)を受信したところです。
位相が360°回る周期から周波数ズレがわかります。 上図から6.9Hzのズレになり約7ppmです。 他の放送局(NHK第1とNHK第2)でもほぼ同様に約7ppmのズレが観測できました。 これらからAPB−1で使っている水晶発振器(80MHz)の周波数は−7ppmの79999440Hzと推定できます。

ちなみにこの周波数測定のやり方はJJY基準周波数信号源原理的に同じです。

■ダイレクトコンバージョン受信

TBS 受信

同じくオシロ機能でTBS(954KHz)を受信しI+Q表示にしています。 TBSの周波数とは約6Hzのズレがありますので6Hzのビートがあり、IとQで90°の位相差があるのがわかります。 ダイレクトコンバージョンではこのIもしくはQのどちらか片方を音声信号として出力しますので正確に周波数をあわせないとビートが聞こえます。

今回実装したAM復調器はNSA−1で実装したものと同じでCORDICで絶対値を計算しますのでビートはでません。



2009/07/26

ソフトウェアのソース(VHDL と C#)を公開します。
個人の研究などには修正、改造など自由に使ってかまいません。 修正したものを発表する場合には著作権の部分を残してください。

ソフトウェアソース20090726 (ZIP 1MB)
使用するには、Xilinx の webPack、Microsoft の Visual C# Express が必要です。
どちらも無償でダウンロードし使用できます。



2009/07/31

ソフトウェアのソース(ARM)を公開します。
yboot は GPL となります。
cmd は個人の研究などには修正、改造など自由に使ってかまいません。 修正したものを発表する場合には著作権の部分を残してください。

ソフトウェアソース ARM 20090730 (ZIP 185kB)
使用するには、GNU ARM が必要です。
私は Windows で簡単に使えるようにパッケージ化された YAGARTO GNU ARM toolchain を使っています。 他の GNU ARM でも使えると思いますので、すでにインストールされた環境があるときは Yagarto をインストールする必要はありません。




2009/08/02

D/A 変換出力が最大値で反転している件の対策です。 下記の ZIP ファイルを解凍してできた apb-1.bit ファイルを APB-1.exe の入っているフォルダーに入れてください(古い apb-1.bit ファイルに上書きする)。 次に実行するときから新しい apb-1.bit を使ってコンフィグするようになります。

コンフィグ用bitファイル apb-1 20090802 (ZIP 51kB) ←古いです。最新版をお使いください。

ちょっと急いで作ったのでバグをしこんでいないかちょっと心配です。 使用レポートよろしくです。



2009/08/08

テストソフト(こまごまと変更)です。

1.オーディオ出力を OFF するモードを追加しました。 起動時は OFF になっています。 オーディオ信号発生器の画面をオープンすると ON になります。 再度 OFF にするには画面の「出力する」のチェックをはずしてください。

2.群遅延のリファレンス最大値を 100ms にしました。 それにあわせて自動で SI 接頭辞をつけるように変更しました。 1つの画面内で接頭辞が変化したり、カーソルでデルタ表示にしたとき差が小さいと mdB(ミリデシベル)とかの表示になってしまいますがご愛嬌ということで...

3.復調器に I+Q 出力を追加しました。 SDRadioDream を使って PC で SSB や DRM の復調ができます。 DRM(RNZI) を受信しようとしていますがまずはアンテナをつくらないと駄目ですね。

テストソフト20090808 (ZIP 184KB) ←古いです。最新版をお使いください。


ところで、いままで隠していたわけではないのですが、
 ・画面のいろいろなところで右クリックするとコンテキストメニューがでていろいろな設定ができます。
 ・波形を表示しているときにホイールを回すと拡大縮小ができます。
 ・ドロップダウンリストで選択するようになっているものの中のいくつかは直接数値入力可能です。 たとえば周波数スパンや信号発生器の周波数などがそうです。



2009/08/14

テストソフト その2(サイン波、DSB追加)です。

1.オーディオ信号発生器にサイン波、矩形波、三角波を実装しました。 サインはCORDIC16ビット演算で実装しましたがCORDICでは1〜2ビット程度精度が落ちますので14〜15ビット精度と思われます。

2.信号発生器にDSB変調を追加しました。

テストソフトその2 20090814 (ZIP 127KB) ←古いです。最新版をお使いください。

今回のオーディオサイン波の実装でFPGAのスライス使用率は、2031/2448と83%になりました。 これ以上の機能追加は難しいかもしれません。


今回、サイン波を実装し、オーディオ発振器のテストを繰り返していて低い周波数でセパレーションが悪いことに気づきました。 100Hzで40dBぐらいしかありません。 原因を探って見るとPCM1754のVCOMの出力インピーダンスが高く、C370(33μF)で左右の信号が充分に落ちきれず漏れているようです。
修正は以下の手順でハードウェア変更を行います。

オーディオ出力バッファ改修 (PDF 106KB) ←修正しました

もっと簡単にできる方法がないか考えたのですが、やはりかなり面倒な修正になりました。 細かいパターンの修正になりますのでセパレーションが悪くても気にならない人はやらなくても良いと思います。



2009/08/18

スペアナ、ネットアナをオーディオ帯域で使えるようにする改造です。

スペアナ、ネットアナは高周波で使うように設計されていますが、オーディオ帯域でも使いたいと思い改造してみました。
低域の周波数特性を決めているのはカップリングコンデンサとトランス(T1)です。 そこでこれらを取り去る、もしくは容量を大きくするという改造になります。 ただしこの改造によってADCへの入力が差動からシングルエンドになるので感度が半分になると同時にADCの特性も悪化することが予想されます。 本当に必要な方以外はやらないほうがよいでしょう。

オーディオ帯域から使えるようにする改造 20090818 (PDF 105KB)


■実際に使って見ました
BPF測定

オペアンプを使ったBPF(fo=1592Hz)を測ってみました。


BPFシミュレーション

LT Spice でシミュレーションしたものです。


BPF回路図

回路図です。 オペアンプが358になっていますが、実際は4580で試作しました。 358では変な歪(クロスオーバー?)がでるためか8KHzぐらいで特性が暴れました。
ちなみにこのBPFはR6を変えるだけでQを設定できます。 ずいぶん簡単なわりに使いやすい回路と思います。




2009/09/09

レシプロカル周波数カウンターを実装しました。

FPGAのスライス数の残りでぎりぎり実装でき、2169/2448(88%) 89.937MHz となりました。 配置配線に余裕がないせいか動作周波数もずいぶん落ちてしまいました。

テストソフトその3 20090911 (ZIP 132KB) ←2009/09/11差し替えました ←古いです。最新版をお使いください。
周波数カウンターVHDLソース20090909 (ZIP 5KB)

周波数カウンターは32ビットのレシプロカル方式になっています。 レシプロカル方式では入力信号の周波数によって測定時間が変わってしまうので、まず最初にゲート時間0.1秒程度のノーマル方式で周波数のあたりをつけ、その後測定時間が1秒程度になるような設定のレシプロカル方式で測定します。 80MHzで周期を測りますので約8桁の測定値が得られます。 精度は80MHzの水晶発振器の精度によりますが、ラジオ放送などで校正すればそこそこの精度になると思います。

また、周波数変換した出力の測定もできるようになっています。 一部のスペアナでIFに落とした信号を周波数カウンターで測定できるものがありますが、同じような感じです。

周波数カウンターは、ロジアナとオシロでコンテキストメニューから実行できます。 まずは簡単に周波数をダイアログで表示するだけです。 周波数の時間的な変化をグラフ表示できるようなものも考えていますが、いままで作ってきた表示クラスでは対応できないので新たに作る必要があり2の足を踏んでいます。

■実際に使って見ました
TBSをABS+PHA測定

TBSを周波数測定

前にも同じような測定をしたことがありますが、今回はさらに周波数カウンターでも測って見ました。 位相から読み取った周波数と周波数カウンターで測定した値がほぼ一致していることがわかります(これはちょっと一致しすぎですね、だいたい0.1Hzオーダーでは一致します)。
周波数カウンターのほうの測定値は6.382Hzとプラスになっていますが、これは信号を周波数変換したあと正の周波数になっていることを示します(周波数変換すると変換周波数がゼロになりそれより低い周波数の信号は負の周波数に、高い信号は正の周波数になります)。 たとえば変換周波数を954.01KHzと高くして測定するとマイナスの周波数になります。




2009/10/08

インピーダンスアナライザと、復調器にAGCを実装しました。

テストソフトその4 20091013 (ZIP 150KB) ←2009/10/13 最大ゲインを90dBに変更したものに差し替えました ←古いです。最新版をお使いください。


インピーダンスアナライザはリターンロスブリッジを使ってDUTの周波数特性を測定します。

復調器はゲイン切り替えとAGCができるようになりました。 ただ、周波数+、−などのボタンを早押ししたりするとハングすることがあります。 AGCを別スレッドにしているのですがスレッド間で同期を取りながらリソースの制御を切り替えるところにバグがあるようです。 もうすこしブラッシアップしてからアップしようかと思ったのですが前の復調器ではゲインが足りず実用性が低いのでバグがあっても使いたい人には有用かと思い公開することにしました。

■リターンロスブリッジ
RLB 内部 RLB 基板

RLB 50ohm終端

100K〜30MHzでリターンロス60dBを目標にしました。 最初、フロートバランの巻き数を増やして低域をのばしたものを試作したのですが、トロイダルコア活用百科に載っているように1MHzで30dBがせいぜいでした。 そこで、フロートバラン(写真の右側コア)と強制バラン(写真の左側コア)を直列にしたところ上図のように広い範囲で50dB以上のリターンロスを得られました。 どちらか片方では満足のいく結果が得られないのですが2つハイブリッドにすると良いとこどりできました。

写真のねじった青い線は微調整するためのコンデンサです。 調整は位相(上図、赤い線)がフラットになるようにします。 0.1pF単位での微調整で特性が大きく変わります。

基板は38x57mmのガラエポ両面で、カッターで切れ目を入れた後高温(400℃)の半田ごてで剥がしました。 パターン幅は50Ωになるよう3mmです。 基板の裏表は周囲に巻いた銅箔と、ところどころに開けた穴でつないであります。
ケースはタカチのYM−80を使いました。


■インピーダンスアナライザ
120uH測定

120μHのラジアルインダクタを測定してみました。 周波数が400KHzでは118μHと誘導性になっていますが、約8.9MHzで自己共振(118μHと2.7pF)し、それより高い周波数では容量性になっているのがわかります。

キャリブレーションのやり方は説明しているところが見つからなかったので独自に考案しました。 一番理想から離れていると思われる信号源電圧と検出インピーダンスをオープンとショートでの特性から補正することにします。 50Ω終端時キャリブレーションもしたほうがいいと思いますが、今後の課題ですね。 式はフリーの数式処理システムWxMaximaを使って計算しました。 手計算では間違えてばかりでやってられません。

実際のインピーダンス測定は、オープンキャリブレーションとショートキャリブレーションをしてからDUT(非測定物)をつなぎ測定します。 周波数範囲、測定ポイント数を変更したときは再度キャリブレーションが必要です。

表示項目は、実部、虚部、絶対値、位相、L、Cが選べます。 測定した後、自由に選んで表示できます。


■復調器AGC
復調器

GAINのところでAGCを選ぶと自動ゲイン調整を開始し、右側にある signal と agc が刻々と変化します。 signal レベル検出、gain 設定のどちらも6dB単位なのでゲインが変わったときに音量の変化量が大きく違和感があります。 受信機専用にプログラムを作成すればもうすこし細かく制御できますが、今回は限られたスライス数で実装するためこのようになりました。 歪むまで6dB以上余裕を取るため最大ゲインは84dBになっていますがマニュアルでは90dBまで上げられます(20091013 最大ゲインの数値変更)。 AM復調ではゲインを上げすぎると急にブッブッと言いはじめます。 たとえば離調した状態から急に同調させるとゲインが高すぎてブッという音がします。

CICの出力をデジタル的にゲイン調整しますのでNF=0dBのIFアンプみたいなものです。 基板に入力する前に20〜30dBのプリアンプを入れれば充分実用的な受信機になると思います。



2009/11/07

いままでずーっとペンディングにしていた連続測定と測定結果のパーシスタンス表示を実装しました。 それにあわせて保存するトレースの数を制限できるようにしました。 またバグフィックスに近いのですが、カーソルが最新測定での値を示すようにしました。

テストソフトその5 20091107 (ZIP 161KB) ←2009/11/08 スペアナの初期設定のバグを修正したものに差し替えました ←古いです。最新版をお使いください。


AT91SAMのフラッシュの変更が必要です。 以下の手順で書き込んでください。

1.APB−1基板上の FLASH のところにショートピンを挿す。
2.USBケーブルを挿す。
3.プログラムの「デバッグ」メニューから「AT91SAMフラッシュ書き込み」を実行し、ZIP を解凍したフォルダーに入っている cmd.bin を選択して書き込む。
4.USBケーブルを抜き、基板のショートピンをはずす。

上記手順は一回実行すればOKです。


■パーシスタンス表示例
パーシスタンス表示例

13MHzのBPFを調整しているところです。 古い測定結果ほど薄く表示されています。

パーシスタンスは0〜100%に設定可能です。 0%にすると一番最新のトレースを残してそれ以外は消えます(データとしては残っています)。 100%にすると保存しているトレースがすべて同じ色で表示されます。 測定中、測定後に変更して表示することができます。


■追加した機能の簡単な説明


■閑話休題



2009/11/14

前回メモリーリークはないと書きましたが、2時間ぐらいの連続実行させたところメモリーが足りなくなってプログラムが止まることがわかりました。 メモリーが足りなくなる前にガベージコレクションでメモリーを回収すると思っていたのですが...

今回、上記のようにガベージコレクションがされないように思えたので System.GC.Collect() をいろいろなところに入れて明示的にガベージコレクションさせたり、System.GC.GetTotalMemory(true) で使用メモリー量の表示をいろいろなところにいれて確認しましたが問題ないように見えます。 また windbg.exe を使ってオブジェクトサイズのチェックをしても正常なように見え、万策尽きたかと思われました。

つらつらソースを眺めているうちふとUSBを使うための自作ライブラリーを見てはっと気付きました。 バッファを確保するためにアンマネージメモリーの割り当てをする関数 Marshal.AllocHGlobal を使っていたのです。 ガベージコレクションはマネージメモリーしか対象にしないので、この関数で確保したメモリーは使用者が責任をもって開放しなくてはいけません。
 
ということで、メモリーリーク対策をしたテストソフト6をリリースします。

テストソフトその6 20091114 (ZIP 101KB) ←古いです。最新版をお使いください。

1.テストソフトその5 のフラッシュの変更をする。
2.テストソフトその5 の apb-1.bit を テストソフトその6 を解凍したフォルダーにコピーする。
3.テストソフトその6 のフォルダーの APB-1.exe を実行する。


これでやっと胸のつかえがとれました。


■閑話休題



2010/01/05

複数台接続対応、復調器で AGC 動作中周波数切り替えなどをするとハングする件の修正(ほとんどおきないぐらい)、デバッグ画面の DAC900 出力がでない件、その他細かい修正など、をいれたテストソフト7をリリースします。
テストソフトその7を解凍したフォルダーにテストソフトその5の apb-1.bit を入れて実行してください。

テストソフトその7 20100105 (ZIP 102KB)


複数台接続するときは、まず1台目の APB-1 基板を PC に接続し、PC 側のソフトを立ち上げて何らかの操作をすると基板とのリンクが確立します。 次に別の APB-1 基板を接続し、PC 側のソフトを立ち上げて...と繰り返すと複数台の APB-1 基板と複数個の PC 側のソフトとのリンクができます。


これでやっと肩の荷が下りました。


■閑話休題



2010/01/09

PCM1754 が入手困難になり PCM1756 を代替部品として使用していますが、PCM1754 が I2S、PCM1756 が LeftJustified とデータフォーマットが違い正常動作しないことがわかりました。

PCM1756 をマウントされている方は、P30(XC3S250Eの左下にある30番ピン)を GND につないでください。 PCM1754 をマウントされている方は P30 はそのままにオープンにしておいてください。 このピンが H か L かでオーディオDAC への出力フォーマットを変えます。

PCM1756対応ソフト 20100109 (ZIP 58KB) ←古いです。これ以降はすべて PCM1756 に対応していますので最新版をお使いください。


解凍したフォルダーにある apb-1.bit を APB-1.exe のあるフォルダーにコピーしてください。


■PCM1754 と PCM1756 の違い
I2S と Leftjustified の波形

上が PCM1754 のフォーマット、下が PCM1756 のフォーマットです。
LRCLK の論理が逆になっているのと、MSB の送出タイミングが1ビット分ずれています。

■実際のオーディオ制御信号波形
I2S の波形

leftjustified の波形

今回の対応ソフトで I2S と LeftJustified に切り替えてロジアナで見た波形です。 上が I2S、下が LeftJustified です。 Lch と Rch のデータは区別できるように Lch は H/L の繰り返し、Rch は H/L のあと H 連続、という固定パターンにしています。



2010/01/15

ロジアナで時間軸を 100ns より長くすると実際より 1.25 倍の時間でサンプリングするバグが見つかりましたので修正しました。

テストソフトその9 20100115 (ZIP 59KB)

解凍したフォルダーにある apb-1.bit をテストソフトその7の APB-1.exe のあるフォルダーにコピーしてください。




2011/10/23

Windows7 では AT91SAM と USB 接続するドライバーとして今まで使っていた atm6124.sys が使えなくなってしまいました。 Windows7 32 ビット版では XP 用の atm6124.sys を無理やりインストールすることができましたが、64ビット版ではできないようです。

そこで CDC ドライバーに対応したバージョンをつくりました。 このバージョンは Windows7 だけでなく XP でも使うことができます。


AT91SAM7 CDC ドライバー対応ソフト 20111023 (ZIP 164KB)





■ Windows 7 での AT91SAM 用 CDC ドライバーインストール

Windows7 では APB-1 を USB 接続したときに自動でドライバーをインストールすると GPS Camera として認識されてしまいます(中国の会社が ATMEL の PID/VID を無断で使い、それを Microsoft が正規のものとして認定してしまったようです)。

GPS Camera のままでも同じMicrosoft製 CDC ドライバー(usbser.sys)を使っているので APB-1_cdc で問題なく使えるのですがあまり気分がよくないので以下の手順で本来の AT91 のものに変更します(とはいっても名前が変わるだけで実体は usbser.sys で同じです)。


  1. SAM-BA 2.10 をインストールする。

  2. コンピューターのプロパティからデバイスマネージャーの画面をだす。

  3. 「ポート(COM と LPT)」の中の GPS Camera を右クリックし、コンテキストメニュから「ドライバーソフトウェアの更新」を選ぶ。

  4. 「コンピューター上のデバイスドライバーの一覧から選択します」を選ぶ。

  5. 「ディスク使用」ボタンを押し、「 ATMEL Corporation\SAM-BA V2.10\drv 」を選択する。

  6. 「AT91 USB to Serial Converter」を選ぶ。



■閑話休題



2012/02/15

別の USB シリアル変換をつないでいると COM 番号がずれてしまい正常にオープンできなくなるというバグがあることがわかりました。



実行ファイル以外は以前のものをそのまま使います。




inserted by FC2 system