« 2020年7月 | トップページ | 2020年9月 »

2020.08.31

50Ω系で作成しなおしたLCフィルタをCosmo-Zに装着したら・・

8月23日の検証実験では、Cosmo-Z MiniのDAC出力にLCフィルタを取り付けたら予想より速く、30MHzくらいでゲインが下がり始めるという結果でした。

その原因を一週間ほど考えてきましたが「OPアンプの出力インピーダンスの増加が予想より速い」ということだろうと思い、フィルタを50Ωで設計しなおした次第です。今日はそのリベンジです。

Cosmo-Z Miniで1MHz~62.5MHzまでの信号を発生させて、フィルタを通して、オシロで測ってみました。

Lcfil7_20200904022301

うん。前よりはいい。ただ、リップルがちょっと大きいかな。設計値では1dB。信号発生器では2dBのリップルだったのにCosmo-Z Miniをつなぐとリップルが4dBになる。おそらく出力OPアンプのインピーダンスの問題だと思いますが・・

波形を見てみると、前よりずっと綺麗になっています。おそらく60MHz以上の高調波やらエイリアシングがフィルタされたためでしょう。

Chev50_with_notch_10m Chev50_with_notch_20m Chev50_with_notch_30m Chev50_with_notch_40m Chev50_with_notch_45m Chev50_with_notch_50m Chev50_with_notch_55m Chev50_with_notch_60m

50MHzくらいまでは正弦波の形を保てるようになりました。

FFTで見ても40MHzの出力までは高調波とエイリアシングは-60dBに抑えられています。

Chev50_with_notch_10mfft Chev50_with_notch_20mfft Chev50_with_notch_30mfft Chev50_with_notch_40mfft Chev50_with_notch_50mfft Chev50_with_notch_60mfft

今のところ0~45MHzくらいまでは連続して出力周波数を変えられるDDSとして動くようになりました。

あとはリップルが抑えられれば最高ですね

| | コメント (0)

2020.08.30

LCフィルタを50Ω系で設計しなおした

これまで設計してきたLCフィルタ回路は、入力側が10Ω、出力側が50Ωというインピーダンスになっていました。

データシートやシミュレーションによればOPアンプの出力インピーダンスが10Ωくらいあるだろうという推測に基づくものだったのですが、実際にはOPアンプの出力インピーダンスはもっと高いのかもしれません。そのため、30MHzくらいから想定外のゲイン低下が引き起こされていました。

高いインピーダンスのバッファで低いインピーダンスのフィルタをドライブするとゲインが落ちるようです。

そこで、入力も出力も50Ωにした5次のチェビシェフ型LCフィルタを作りました。設計では中央は400nHのインダクタンスが必要なのですが手元になかったので220nH+220nHで代用です。

Lcfil1

MicroVNAで測ってみると、設計どおりピッタリの特性です。

Lcfil2

60MHzまでは平ら(想定のリップルの範囲内)で、80MHzで-20dBダウンしています。

 

チェビシェフとは言えどもアンチエイリアシングフィルタにするには切れが悪いので、中央の220nHに並列に16pFのコンデンサを入れます。こうすると80MHzあたりにノッチができるので、切れが良くなります。

Lcfil3

測定結果は下のとおりです。等リップル帯域が少し狭くなりましたが、50MHz→70MHzで-40dBダウンですから、切れがよくなったのがわかります。

Lcfil4

シミュレーション結果による比較は下の図のとおりです。切れのよいほうがノッチ付きです。

Lcfil5

 

信号発生器とオシロで実測した結果を示します。

Lcfil6

設計値よりリップルが大きくなっているのと、減衰が僅かに緩やかになっていますが、おおむね設計どおりといえるでしょう。

明日は、これをCosmo-Z Miniの出力に取り付けてみます。

| | コメント (0)

2020.08.28

XILINX SDKをアップデートしたらGLIBCのバージョン相違で動かない

最近、自宅のパソコンのHDDをSSDに入れ替えてクリーンインストールしたのですが、それに合わせてXILINXのSDKも最新のを入れることにしました。(といってもXSDKの最新版は2019.1のままなのですが)

その環境でCosmo-Zのプログラムを再コンパイルして、実行してみると、

root@cszmini:~# /cosmoz.elf
/cosmoz.elf: /lib/arm-linux-gnueabihf/libm.so.6: version `GLIBC_2.27' not found (required by /cosmoz.elf)

と、GLIBC_2.27を要求してきて、起動できなくなりました。

LinuxにインストールされているGLIBCのバージョンを確認するには、libc.so.6をそのまま実行してみればよいようです。Cosmo-Zの環境では/lib/arm-linux-gnueabihfにあります。

root@cszmini:~# /lib/arm-linux-gnueabihf/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.19-0ubuntu6) stable release version 2.19, by Roland McGrath et al.

Cosmo-ZのLinuxはLinaroのUbuntu 14がベースなので古く、インストールされているGLIBCのバージョンは2.19なのかもしれません。

解決策としては、

  1. GLIBCをアップデートするか
  2. soのライブラリをスタティックリンクしてしまうか

です。

GLIBCをアップデートするのは影響が大きそうなので、やめたほうがいいでしょう。

残るはlibc.so.6をスタティックリンクしてしまう方法です。調べるとglibc-staticというパッケージを使う方法などが出てくるのですが、新たなパッケージをインストールしなければならないので互換性を考えると不可でしょう。

XSDKの設定でライブラリをスタティックにするには、プロジェクトのプロパティを出し、C/C++ Build > Settings > ARM v7 Linux g++ linker > Miscellaneous > Linker Flagsに-static と書けばよいようです。

Static2

これでGLIBCがスタティックリンクされ、出来上がった実行ファイルのサイズは増えますが動作するようになりました。

ただ、そもそもスタティックリンクするべきではないという話もあるので、スタティックリンクは避けたほうがよいのかもしれません。

 

Vivado 2018.3のXSDKとVivado 2019.1のXSDKで作られたファイルを比較してみます。lddコマンドでいけるようです。

まずは2018.3でコンパイルしたほう。

root@cszmini:~# ldd -v /home/share/cszmain-vivado2018_3.elf  | grep libm
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6dfd000)
libm.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libm.so.6
libm.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libm.so.6
/lib/arm-linux-gnueabihf/libm.so.6:

次は2019.1でコンパイルしたほう。 

root@cszmini:~# ldd -v /home/share/cszmain-vivado2019_1.elf  | grep libm
/home/share/cszmain-vivado2019_1.elf: /lib/arm-linux-gnueabihf/libm.so.6: version `GLIBC_2.27' not found (required by /home/share/cszmain-vivado2019_1.elf)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6ded000)
libm.so.6 (GLIBC_2.27) => not found
libm.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libm.so.6
libm.so.6 (GLIBC_2.4) => /lib/arm-linux-gnueabihf/libm.so.6
/lib/arm-linux-gnueabihf/libm.so.6

なんだかよくわかりませんが、GLIBC_2.27とセットになっているlibm.so.6が見つからなくて動かないのかもしれません。

それにしても、XSDK 2019.1にすると同じソースコードであってもlibmへの参照が1個増えるのはなんでだろう。しかも古いものを探しにいくという不可解な挙動です。

今回の肝である「libm.so.6: version `GLIBC_2.27' not found」についてググってみると世界中でいろんな人がこのエラーで動かない掲示板の書き込みがいろいろ出てくるのですが、いまひとつピンときません。

解決策としては、XSDK 2018.3に戻すというのが最善で、staticリンクにしてしまうが次点ではないかと思います。

 

| | コメント (0)

2020.08.27

ようやく望みの特性のLPFができた

ようやく、望みの特性のLPFができました。

Top_20200827144401

回路は前回のものと同じなのですが、裏面を銅箔テープで包んだ結果、ノッチの共振周波数が正しい場所になりました。

Bot

設計では84MHzと123MHzにノッチですが、

Chev_final

実測では88MHzと129MHzにありました。

(ベースとなっているのはチェビシェフLPFですが、入力インピーダンス10Ωで設計しているところネットワークアナライザが50Ωなので、透過域の特性がなだらかに下がってしまっています。これは想定の範囲内です。)

GNDが上下に分かれていたりするとだめなんですね。SMAコネクタにある4つのGNDピンからできるだけベタに近い感じのGNDをとって横にも接続しながら出力端へ結んでいかないと、GNDが寄生インダクタンスの塊になってしまうのでしょう。

寄生インダクタンスは容易に増えますが、寄生容量は数pFだから100MHzくらいまでの用途ならあまり気にしなくていいかもしれません。

 

シミュレーションと実測でノッチの位置を比較してみると数MHzずれていますが、そもそもMicroVNAの周波数ステップが4MHzくらいあるので、ほぼ設計通りにできたといえるでしょう。

Measure_20200827144401

回路はこんな感じです。

Lpf_circuit

いろいろやってみて、寄生容量や寄生インダクタンスが与える影響が体感できてきました。

300MHzくらいまでならどんなLC回路でも作れる気がしてきました。

 

 

| | コメント (0)

LCチェビシェフフィルタの実験

NanoVNAの校正のやり方がわかったので、チェビシェフフィルタの実験をしてみました。

作ったのはこの回路。

実際に入手できる部品で構成していて、入出力インピーダンスは50Ω、等リップル帯域は60MHz、リップルは1dBにしています。

Chev1_20200827124501

特性のシミュレーションを下の図に乗せます。80MHzで-22dBほどのダウンですね。

Chev2

実際に作った回路がこちら。

Chev_lpf

もう、こういうやつを一瞬で作れるようになってきました。

その測定結果は、

Lpf_spec

気持ちよいほどにシミュレーションと一致していました!

等リップル帯域も、80MHzで-20dB減衰というのも設計どおりです。

ちょっと気になったことがあったのですが、LCフィルタではGNDに落とす部品がありますが、こういう基板を作っているとGNDには上と下があります。2つのコンデンサで上下を変えてみるとどうなるでしょう。

結果は下の写真のとおりでした。

Chev_lpf2

160MHzあたりにノッチができてしまいました。

コンデンサを上下に配置するというのは、間違ったやり方なのかもしれません。

 

 

 

 

| | コメント (0)

2020.08.26

NanoVNAのキャリブレーション

NanoVNAを使うにあたって、2つのコネクタを直結ていてもスミスチャート上で回転してしまうことがあります。

Rotate

2つのコネクタをオープンにしたり、ショートしたり、THRU(直結)して正しくキャリブレーションしているつもりなのになぜ、と思っていたのですが、もしかすると、実際の測定ターゲットを想定した状態でキャリブレーションしなければいけないのかもしれません。

つまり、オープンのキャリブレーションは、実際に使うコネクタを付けた状態でキャリブレーションし、

Open

直結のキャリブレーションはコネクタ同士をくっつけてやるのかもしれません。

Short

これでキャリブレーションして、再び直結で測ってみると、ばっちりでした!

Cal_done

反射を示す緑の線が中央から動かなくなりました。

どうやらキャリブレーションは実際に使うコネクタなどを使って、実機に近い状態でやるようですね。

 

| | コメント (0)

NanoVNAを使ってみた

NanoVNAという手のひらサイズのベクターネットワークアナライザがあったので、早速これを購入して、試してみました。

使い方がさっぱりわからないので、https://cho45.github.io/NanoVNA-manual/ のページを見て使い方を調べます。

 

手始めに実験のターゲットとなったのは、万能基板と銅箔テープで作ったLC直列共振回路。

Lc_20200827122401

150MHz程度のところに共振周波数を合わせています。

こうやって測っています。

Measure

ほぼ設計どおりのところに共振周波数が表れて、黄色の線(S11、つまり入力に戻ってくる反射)が減っているのが見えていますね。

Measure2

これは便利。思っていた以上に使えそうです。

 

 

| | コメント (0)

2020.08.24

Cosmo-Z Miniの出力にLPFを追加した波形

Cosmo-Z MiniのDACにLPFを追加し、正弦波を出力してそのスペクトラムを見てみました。

まず、10MHz。うん。綺麗だ。

Cszminidaclpf10m

次、20MHz。少し高調波が見えてきたけど、まだまだ綺麗だ。

Cszminidaclpf20m

はい次、30MHz。高調波が目立つようになってきたけど、DDSだと考えると申し分ない。

Cszminidaclpf30m

最後、50MHz!

すぐ右に変なところに何かがあるけど、75MHzあたりにエイリアシングがいるはずなので、それじゃないだろうか。

Cszminidaclpf50m

そして、10:1のパルスを出して全体的な周波数特性を見てました。

まずはフィルタなしの図。

125MHzのサンプリング周波数を中心として、高いほうにも広がっていますね。

Cszminidacfftnolpfpulse

次はLCフィルタありの図。

60MHzくらいのところでカットされているのはいいのですが、125MHzのサンプリング周波数が見えてしまっています。おそらくこれはLCフィルタを通過してきたのではなく、測定の問題で拾ってしまっているだけではないかと思われます。

Cszminidacfftlpfpulse

結論を言うと、LCフィルタ自体はうまくいってそうですが、

  • ノッチの周波数が大きくずれてしまっている。推定14pFの寄生容量があるのか?
  • OPアンプのバッファ全体も含めた性能改善

が必要だということが分かった次第です。

 

| | コメント (0)

2020.08.23

Cosmo-Z Miniの出力にLPFを追加してみた

昨日作ったLPFを、Cosmo-Z Miniの出力に追加してみました。

Cszminilpf

DACでいろいろな周波数を出して特性を測ってみました。昨日の検証の結果によれば220nHのコイルに平行して入れているノッチ用の16pFのコンデンサが30pFくらいありそうだったので、このコンデンサを取り外したりもしてみました。

結果は以下のとおりでした。

Cszminilpf_20200825102601

50MHzくらいまでほぼ平坦で、そこから急に落ちるというのを期待していたのですが、予想よりはるかに速く、30MHzくらいからゲインが落ち始めていますね。

原因として考えられるのは、

  1. OPアンプの出力インピーダンスの減少が予想より速い
  2. OPアンプで作った出力バッファの特性が悪い
  3. DDSで正弦波を作っていてサンプリング周波数が125MHzであるから、そもそもこんなものである

です。

何とか検証する方法を考えていきましょう。

| | コメント (0)

2020.08.22

LCフィルタを作って測定してみた

下の回路図のLCフィルタを作って、信号ジェネレータとオシロにつないで測定してみました。

Lpf_cir

実際に作ったフィルタの写真を示します。

Lpf

当初の設計では85MHzと125MHzにノッチを追加したチェビシェフフィルタのはずなのですが、実際に入手できた部品の値の都合で少しずれるはずです。

また、信号ジェネレータの出力インピーダンスが50Ωなのに間違えて40Ωの入力抵抗を基板上に入れてしまったため、合計90Ωの信号源をつないだとしてシミュレーションしています。(本当は出力インピーダンス10Ωの信号源を想定しているフィルタです)

Lpf_sim

シミュレーション上では84MHzと123MHzにノッチ周波数が移動しています。また、チェビシェフフィルタの透過域がリップルしながらも設定した周波数より速く減衰しています。これはインピーダンスミスマッチによるものなのです。

実測の結果は下の図のようになりました。

Lpf_actual

10MHzあたりから減衰してリップル域で-15dBしてしまうのはシミュレーション通りだとして、第一のノッチ(85MHz)が62MHzのあたりに移動してしまっているのが解せないですね。

上の回路図で、L2の220nH(本来のコイル)とC4の16pF(ノッチのために追加した)で作っているのですが、C4が26pFくらいないとこのような結果にはなりません。

この回路で、L2の220nHに14pFくらいの容量が寄生していると考えられますが、そんなにあるのでしょうか。

Induc

ちなみに、1cm×1cmの銅箔を180μmの厚さで向かい合わせにした場合の静電容量が22pFくらいですから、作り方の問題で14pFもの寄生容量が入るとは考えにくいですね。

どこに原因があるのかはおいおい探っていくことにしましょう。

| | コメント (0)

2020.08.21

LCRメーターを購入

秋月に行ってLCRメーターを購入してきました。DE-5000というやつです。

Lcr

そのほかにも、専用のチップ部品プローブとか、銅板とか銅箔テープとかいろいろ。

このLCRメーターにプローブを取り付けて、キャリブレーションしていない状態で22pFのコンデンサを測ってみると・・

Cap

おおっ、いい感じ。桁があっているだけでも儲けもんと思っていたから+10%で出るとまでは思っていなかったです。

のちにセルフキャリブレーションして測ってみたら23.3pFだったので、大変良い性能です。

ちなみに秋月の10cm×15cmの片面銅箔基板を裏表に重ねて静電容量を測ってみると151pF。

Copper

ここでガラスエポキシの比誘電率を4.6として、銅版の厚みを1.6mm×2として平行板コンデンサの静電容量を計算してみると、

Plain_20200825093401

190pFくらいになるはずですが、端っこの効果とか、銅箔の間の隙間とかを考えるとこれより小さくなるはずなので、こんなものなのかな?

すると、下の図のように銅板に幅1cmの同テープを貼ったものの静電容量は25pFくらいになるはずですね。

Coppoer2

 

| | コメント (0)

2020.08.18

LCフィルタ設計の設計(4) OPアンプの出力でLCフィルタをドライブする方法

昨日のLCフィルタ回路の特性がよかったので、OPアンプの出力につないでシミュレーションしてみました。

生のLCフィルタと、OPアンプを使った場合の回路図は下の図のような感じです。

Lpf1

ところが、OPアンプを使うと、全然違う特性になったのです。

Lpf2

60MHzまでの透過域での特性がめちゃめちゃ落ちてしまって、周波数特性が大変悪いDACができてしまいます。

直感的には、LCフィルタに入れる信号ソースのインピーダンスが高いとゲインが下がります。ちゃんと計算してみれば反射なども増えているでしょう。

試しに、同じフィルタ(5次チェビシェフ)でソースのインピーダンスが1Ωと10Ωで変えてみると、

Lpf3

インピーダンスがミスマッチしている場合は全体的にゲインが小さく、また、平坦な部分が失われています。

Lpf4

ちょうどOPアンプのときと同じようなゲインの落ち方をしていますね。

逆に、フィルタの特性インピーダンスよりソースのインピーダンスのほうが低いと、ゲインは高く出ます。

Lpf6_20200819034401

  • ソースのインピーダンスが低い→ゲインが高いほうにずれる
  • ソースのインピーダンスが高い→ゲインが低いほうにずれる

気になって、シミュレーションに使ったTHS4041の出力インピーダンスを調べてみると、

Lpf5_20200819033901

このように高域になるほどインピーダンスが高くなるというグラフが出ていました。

DCでほぼ0、10MHzで3.5Ω、50MHzで9Ωです。

1Ωの特性インピーダンスのフィルタに対して9Ωでドライブするわけですから特性もずれてくるわけです。

それならば、フィルタの左半分を10Ωにスケールアップし、当初のノッチ付きフィルタをOPアンプの出力から0Ωでドライブしてみます。

Lpf7_20200819035401

すると、50MHz以上ではほぼ特性が一致し、50MHz以下の透過域ではピーク(約6dB)が出ました。

Lpf8_20200819035401

つまり、50MHz~150MHzの範囲ではOPアンプの出力がインピーダンス10Ω以上になるのでフィルタの入力インピーダンス(10Ω)とマッチして設計どおりの値になり、それ以上だとOPアンプの出力がインピーダンスが再び上昇するのと、そもそもOPアンプがついてこれなくなるためゲインが設計値より低下すると解釈できます。

50MHz以下のゲインのピーク、特に20MHz前後を抑えるには、OPアンプの出力に5Ω程度の抵抗をいれればよいでしょう。

こうしてインピーダンスを補正したOPアンプドライブのLCフィルタ回路が出来上がりました。

Lpf9_20200819040301

特性は、

Lpf10_20200819040501

です。

少し減衰するのが速くなって50MHzで-6dBダウンしてしまいましたが、ゲインのピークは1dBに収まりました。

このあたりは元のフィルタの等リップル帯域を広くしたり、実際に作れるLCの値で調整したりでなんとかなるでしょう。

 

これまでの結論をまとめると、

  • LCフィルタは、正規化フィルタをスケーリングして作るべき。
  • Lに並列にCを入れるとノッチが作れて、遮断特性を急峻にできる(そのかわり阻止域の減衰は小さくなる)。
    • バターワースやチェビシェフ、ベッセルなどの近代型フィルタでもこのテクニックは使える。もちろん厳密な特性ではなくなるが。
  • バートレッグの定理を使ってインピーダンスを変換すると、扱いやすいインダクタンスになるし、50Ωで終端してもDC成分はほとんど減衰しないDC~RFに対応したDACが作れる。
  • OPアンプの出力インピーダンスは周波数とともに変わるので、フィルタの特性も変わる。

 

| | コメント (0)

2020.08.17

LCフィルタ設計の設計(3) インピーダンス変換

昨日設計した5次チェビシェフフィルタは、特性インピーダンスが1Ωで作られていた。

Lpf9

信号源はOPアンプなので1Ωでもいいのかもしれないが、このまま50Ωの負荷をドライブすると特性に変化が生じてしまう。

Lpf10

フィルタの特性インピーダンスを50Ωにするにはインダクタンスを50倍し、キャパシタンスを50分の1にすればよい。

 

プランとしては3つある。

① OPアンプの出力に49Ωの抵抗を入れて50Ω系にスケーリング

② トランスを使う

③ アッテネータや、ノートン変換、π-T変換を使ってインピーダンスを変換する

 

まず、最初の案のOPアンプの出力に49Ωの抵抗を入れることは避けたい。

Lpf11

なぜならば、OPアンプの出力電圧が半分に減ってしまうからだ。

次にトランスを使う案であるが、巻き数比が1:7のトランスを使ってインピーダンスを49Ωに変換してやれなくもない。

Lpf12

本物のトランスを使うと直流を通さなくなるので、ノートン変換を使って次のように変換したものを考える。

Lpf13

ノートン変換を使うとコイル→トランスという構成がπ型のコイルに置き換えられる。しかし、右側のコイルのインダクタンスが負の値になるし、コイルが増えることはあまり嬉しくない。よって、トランスとノートン変換というテクニックも使えない。

トランスとノートン変換は、主にBPFフィルタを作るときに便利なテクニックなようであって、LPFの場合には使いにくい。

 

今回使えそうなのが、「バートレットの2等分定理」というものである。これは「フィルタが左右対称で、両方のポートのインピーダンスが等しい場合」に使えるそうだ。このような場合、フィルタを真ん中で分割し、その片方のインピーダンスをスケーリングしても特性が変わらないそうだ。

確かに奇数次のLCチェビシェフフィルタは左右対称になっている。

真ん中の7.95nHを2つの3.98nHに分けて、右側だけ50Ω系にしてみよう。

元の回路と変換した回路は下の図のとおり。

 

Lpf14

気になる特性はというと、あらびっくり!

Lpf15

50Ωの負荷をつないだ状態で完璧に一致している!

すごい裏技だ

しかも、1Ωと50Ωだからほとんど減衰していない。50Ω系の負荷をつないでもOPアンプの出力電圧が半分にならない。

マジかよ・・

これでDAC出力用のアンチエイリアシングフィルタの作り方が確立できた。

現実に購入できる5.6nH、2700pF+180pF、200nH、56pF、270nHでシミュレーションしてみたところ、特性にほとんどずれはない。

Lpf16

入力の5.6nH以外はそれほど大きな誤差を与えないようだ。

これなら作れるぞ!

| | コメント (0)

2020.08.16

LCフィルタ設計の勉強(3) 近代型フィルタ

「LCフィルタの設計&製作 森栄二著」という神本を使って勉強をしています。

この本では、定K型と誘導m型というLCフィルタ設計手法を古典的と称して、バターワースやチェビシェフなどのフィルタを近代的手法と言っています。

二次のバターワースLPFの場合、LとCと1.414Hと1.414Fにしたものをfc=(1/2π)の正規化フィルタとして、周波数やインピーダンスをスケーリングしていくという設計手法でできるとのことです。つまり、それって定K型と同じ形で周波数が1.4倍にあるというわけでは!?

高次になっていくと係数が単純ではなくなっていきます。

そんなこんなで設計した5次のチェビシェフフィルタとバターワースフィルタです。

 

Lpf5

バターワースの遮断周波数を60MHzに、チェビシェフは等リップル帯域を60MHzにしてリップルは1dBまで許容しました。

設計どおりピッタリです↓

Lpf6

やっぱりチェビシェフの切れはいいですね。バターワースと比べると一目瞭然です。

もう少し広い帯域で特性を見てみると、80MHzの約-30dBダウンですから、電圧で言って30分の1くらいに抑えられるのでしょう。

アンチエイリアシングフィルタとしては十分な性能かもしれません。

Lpf7

ですが、もう少し欲ばってみたい。

10MHzの方形波を通した時の波形はこんな感じです。方形波の立ち上がり時間を5nsにしました。

Lpf8

あとは、もう少し性能を欲張ってみたいのと、インピーダンス変換をして入力を1Ω、出力を50Ωにできるかどうかです。

| | コメント (0)

2020.08.15

LCフィルタ設計の勉強(2)

定K型フィルタと誘導m型フィルタの作り方がわかったので、DAC用のフィルタを設計してみた。

Lpc1

この特性は、狙った通り80MHzでノッチが効いているし、二次フィルタの特性としての高域の遮断もできている。

Lpc2

しかし、実用的ではない。

なぜならば3.53nHや1.49nHといったインダクタンスが必要であり、こんなのは3mmくらいの配線のインダクタンスに相当するものなので、実現できないだろう。また、特性インピーダンスを1Ωとして設計している。

 

さて、RedPitayaの回路を解析してみたところ、DAC出力を50Ωで終端してもしなくてもほとんど(1%も)出力電圧は変わらない。オペアンプの負帰還がかかっているからなのであるが、直流の出力インピーダンスは0.5Ω以下であると思われる。

出力インピーダンスは仕様書によればOutput load 50Ωとなっているので、50Ωであろう。

フィルタの入力側のインピーダンスは1Ωで出力インピーダンスは50Ωというインピーダンス変換が行われているのかもしれない。

 

なお、ここで設計したLPFを50Ω系に変換してみると、このようになる。

Lpc3

インダクタンスが170nHくらいになったので、作れなくはなさそうな気がしてくる。

特性はもちろん上のグラフと同じなのだけど、やはりOPアンプの出力インピーダンスが低いのが気になる。

試しに、入力インピーダンス1Ωと50Ωで特性を比較してみると、

Lpc3_20200818001701

1Ω(つまりOPアンプ直結)のときには特性にピークが生じてしまう。

インピーダンスのミスマッチと、インダクタンスが全体的に低いことを改善しないといけない。

 

また、後者の回路(50Ωのフィルタに1Ωのインピーダンスで入力した場合)、15MHzの矩形波に対する過渡解析を行ったところ大きなリンギングが生じている。

Lpc4

これも解決すべき課題といえる。

| | コメント (0)

2020.08.14

LCフィルタ設計の勉強(1)

Cosmo-Z MiniのDAC特性がRedPitayaより悪いのは出力のフィルタがないためだとわかり、一安心しています。

それならば、LCフィルタの作り方を勉強しようと思って、ワクワクテカテカしながら下の本を読んだのですが・・・

Book_20200814121801

全くの期待外れでした。

緑色のほうはGHzの話なんてほとんどなく、せいぜいkHzオーダーのフィルタの話ばっかし。それにストーリーに沿って設計手法を解説しようとしたものではなく、適当な製作記事を寄せ集めただけにすぎませんでした。

右側の「アナログフィルタ設計の基礎」も、まったくの期待外れ。バターワースとは何かとかチェビシェフ特性とは何か、といった解説すらない。まぁ、出てくるのはせいぜい二次フィルタまでだから、チェビシェフとか関係ないのかな。

3次以上のフィルタを作り方の話は全くなしです。

LCフィルタも出てこない。唐突にアクティブフィルタが出てくる。

バンドパスフィルタもBEFもいらないから、まずはLPFをきっちりと解説してくれよ。

⚡⚡

あまりにも期待外れだったので、CQ出版のWebショップで「LCフィルタの設計&製作」を注文。

Lc

しかし、到着が待ちきれず、丸の内オアゾに行って「LCフィルタの設計&製作」を買ってきました。読んでみると・・これは期待できそうな内容。LCフィルタの作り方がちゃんと書いてある!当たり前のことに感動しています。

CQ Webショップに注文はしたけど、店舗で即購入してしまった。

 

読んでみると、まずフィルタの古典的設計手法ということで「定K型フィルタ」と「誘導m型フィルタ」というのが出てくる。

定K型フィルタというのは、1Hと1FのLCフィルタを基準にして、インダクタンスや容量をN倍にしていくというもの。

Lc1

この1Hと1Fのフィルタはインピーダンスが1Ωで遮断周波数が(1/2π) 0.159Hzにある。

ただし、この本では解説はされていないのだけど、上の回路のフィルタをそのまま作ってシミュレーションすると、下の図のようにLCの共振周波数でピークが出てしまう。

Lc2_20200816072701

おそらく、信号源と、測定端を特性インピーダンス(この場合は1Ω)で終端してやらないと正しい特性にならないのだと思う。

Lc4

これで望みの特性になった。

Lc3_20200816072701

1MHzのフィルタにしたいのであれば、倍率M =1MHz/0.159Hz≒6289000であるから、L'=1H/M=0.159μH、C'=1F/M=0.159μF、にすればよい。

そして、インピーダンスを変えるにはK=目的のインピーダンス/元のインピーダンス=50/1=50として、L''=L'×K=7.95μH、C''=C'/K=3.18nFにする。

Lc5_20200816073601

うむ、完璧だ。本に書いてあるとおり遮断周波数が1.4MHzになっている。LCの共振周波数√LCからずれるのは、おそらく抵抗があるからなんだろう。

 

次に、定Kだと遮断特性がよくないので、誘導m型というのが出てくる。誘導m型というのはいわゆるノッチだ。

定Kと誘導mは組み合わせて使うことができる。

定Kで緩やかなLPFを作り、遮断周波数付近のだらだらとした下がりを、ノッチで急峻に落とすというわけだ。

試しに、遮断周波数50MHzにして、60MHzにノッチをかけたフィルタを設計してみた。

定K型、誘導m型、そして組み合わせたもの3種類を作り、シミュレーションする。

Lc8_20200816081701

結果は下の図のとおり。

Lc9

誘導mだけだとノッチした後、遮断域でスカスカに透過してしまう。K+mの組み合わせにしても遮断域の特性はよろしくない。

それならば、定Kのほうを高次にすればよい。

前段は4次の定K型フィルタ、後段は誘導m型フィルタだ。

Lc6

その特性は、

Lc7

うむ。すばらしくキレがよい。

定K型と誘導m型フィルタは、ちょっと周波数がずれるが設計は簡単で、そこそこの性能が出ることがわかった。

結論を言えば、

「LCフィルタの設計&製作 森栄治著」は神。

| | コメント (2)

2020.08.13

RedPitayaとCosmo-Z MiniのDACのスペクトラム

RedPitayaと、Cosmo-Z MiniのDACが出す正弦波のスペクトラムを比べてみました。

まず、Cosmo-Z MiniのDACから10MHz,20MHz,30MHz,40MHz,50MHzの正弦波を出力し、それをオシロで観察しました。

Cszmini_20200814121801

Cszminidacraw10mhz Cszminidacraw20mhz Cszminidacraw30mhzCszminidacraw40mhz Cszminidacraw50mhz

周波数が高くなると正弦波が歪んでくるのがわかります。20MHzから歪が目で見えるようになります。 

FFTでスペクトラムを取ってみると、基本波のほかに大きな高調波が見えています。スペクトラムの中心は100MHzで横の1divは20MHzです。

Cszminidacfft10mhz Cszminidacfft20mhz Cszminidacfft30mhz Cszminidacfft40mhz Cszminidacfft50mhz

 

次に、RedPitayaで10,20,30,40,50MHzを発生させたときの生波形とスペクトラムを示します。

Rpdacfilraw10mhz Rpdacfilraw20mhz Rpdacfilraw30mhz Rpdacfilraw40mhz Rpdacfilraw50mhz

Rpdacfilfft10mhz Rpdacfilfft20mhz Rpdacfilfft30mhz Rpdacfilfft50mhz

RedPitayaの方が波形もスペクトラムも断然綺麗です。

このように波形が綺麗になっている原因が何か気になります。

幸か不幸か、RedPitayaのLCフィルタを解析しようとしてチップコイルを壊してしまったので、ここをバイパスしてLCフィルタなしのRedPitayaを作り、試してみることにしました。

Jp_bypass

同じように測ってみたところ、

Rpdacnofilraw10mhz Rpdacnofilraw20mhz Rpdacnofilraw30mhz Rpdacnofilraw40mhz Rpdacnofilraw50mhz

Rpdacnofilfft10mhz Rpdacnofilfft20mhz Rpdacnofilfft30mhz Rpdacnofilfft40mhz Rpdacnofilfft50mhz

Cosmo-Z Miniと同じく、波形がうねったり高調波がバリバリ見えていたりします。

サンプリング周波数の3分の1くらいになると「うねり」が生じてくるのはRedPitayaも一緒のようですね。DDSというのはそういうものなのでしょう。

 

  

次に、Cosmo-Z MiniのDACとRedPitayaで30MHzの正弦波を出し、そのスペクトラムの中心を拡大してみることにします。

それでは、Cosmo-Z Miniから見ていきましょう。

まず、30MHzを中心に25MHz~35MHzのスペクトラムを見ていきます。

Cszminidacfildetail30mhz3

29MHz~31MHzの幅2MHzを拡大しましたが、余計なサイドバンドなどはなさそうです。

Cszminidacfildetail30mhz

中心の30MHzの部分を拡大してみましたが、スペクトラムの幅は10kHz程度でしょうか。

Cszminidacfildetail30mhz2

 

次にRedPitayaです。

中心の30MHzの±596kHzのところにサイドバンドが見えます。

Rpdacfildetail30mhz

スペクトラムの幅はCosmo-Z Miniと同程度でした。

Rpdacfildetail30mhz2

 

Cosmo-Z MiniもRedPitayaも、おそらくDDS(Direct Digital Synthesizer)で正弦波を発生させていると思いますが、RedPitayaのほうが波形が綺麗だったのは、切れ味の良いLCフィルタが入っているためでしょう。

様々な周波数を発生させたときに高調波の出方については、RedPitayaでは10MHz,20MHz,30MHzを発生させたときの2倍高調波は-40dBでしたが、Cosmo-Z Miniでは-60dBでした。

また、RedPitayaではサイドバンドがはっきりと確認できましたが、Cosmo-Z Miniではサイドバンドは見えませんでした。

  Cosmo-Z Mini RedPitaya
高調波 -60dB -40dB
サイドバンド 観測できず ±600kHZ程度のところにあり
アンチエイリアシングフィルタ なし あり(60MHz)
生波形 汚い 綺麗

Cosmo-ZのDACにフィルタを入れればRedPitayaを凌ぐ性能が出せるかもしれません。ですが、現在はフィルタが入っていないので汚い波形しか出ないと言えるでしょう。

フィルタの設計のための本は買ったので、あとは勉強するだけです!

Book_20200814121801

 

| | コメント (0)

2020.08.12

アンチエイリアシングフィルタ用のLPFの研究

DAコンバータの出力のアンチエイリアシングが気になっています。

聞くところによるとRedPitayaというADC/DACボードのアンチエイリアシングフィルタの特性が優れているそうなので、RedPitayaを購入してDAC出力のアンプがどのような回路になっているかを調べてみることにしました。

まず、RedPitayaで49MHzを出力してみたところです。

49mhz

山と谷が大小大小・・となっていますが、DDSで正弦波を作っているので仕方がないのかもしれません。

オシロのFFT機能でスペクトラムを見てみると、ピークの49MHzの半分くらいのところに2つに分かれた不要輻射があります。この2つに分かれたスペクトラムは出力周波数を50MHzにすると1つに重なります。また、目盛りの縦軸は20dB/divなので98MHzにいる2倍高調波は約50dB抑圧されていることになります。

Fft_20200812192201

とても優れたアンチエイリアシングフィルタなのですが、RedPitayaはオープンソースと謳われていますが回路図は一部非公開となっています。特にフィルタなどの機微な部分は秘密となっています。

そこで回路を解析してみることにしました。

Rp1

Rp2

見た感じ、おびただしい数のコイルやコンデンサが使われているようです。

ざっくり回路図を書き起こしてみると、次の図のようになっていました。

Cir

OPアンプは増幅器兼レベルシフタとして使われているようで、V+から分圧した電圧をV-に与えています。DACのオフセット電圧を打ち消すためのとても微妙な設定なのでしょう。位相補償と思われるコンデンサのパッドは空席になっています。2つの抵抗を直列並列にしてV+からぴったりの電圧を作り出しているようです。

OPアンプの前段にRCLC型の3次のLPFがあり、OPアンプの出力にはLCLCLCの6次フィルタがあります。合計9次の特性になるはずです。

 

OPアンプを外して、ファンクションジェネレータから10MHz~100MHzの信号を与え、後段のLCフィルタに通してみたところ、

Filt

という特性になりました。

約60MHzで-3dBダウンした後、70MHzで-20dB(電圧で10分の1)、80MHzで-40dB(電圧で100分の1)という、大変切れの良い特性になっていました。透過域はフラットで阻止域にノッチがあるので、連立チェビシェフフィルタではないかと推測されます。

どういうパラメータになっているのかと思い、1つ1つの部品の特性を測ろうと思ったのですが、

Rp3

このチップインダクタは外すと壊れるようになっているようで、残念ながら解析はできませんでした。

仕方がないので、自分でフィルタの本を読んで勉強することにしましょう。

昨年買って積読していたこの本があったので読んでいます。

Book

FilterCADというLinear Technology社も紹介されているのですが、FilterCADでは40MHzとパラメータを入力すると対応していないと出てしまいます。

本格的にフィルタの理論を勉強するしかなさそうですね。

| | コメント (0)

2020.08.08

SmartLynqの解析

SmartLynqを分解したら、UARTとJTAGと思われるコネクタにUARTとJTAGを接続しましょう。

Smljtag

今回はTrenzElectronic社のTE0790-03を使いました。TE0790-03はUARTとJTAGの両方が1つのUSBで作れるから便利ですし、MITOUJTAGからも使うことができます。

 

さて、起動してからUARTに表示される文字を見てみると、

なんとベアメタルなアプリケーションで作られているようです。

Linuxではない。U-Bootすら使っていないようです。

それなのに、EthernetもUSBも実装するとは、なかなかやるな。

Uart_20200809052001

起動が速いから、2秒くらいでOLEDに文字が表示されるわけだ。

 

さて、JTAGをつないだらMITOUJTAGをつないで見てみましょう。BGAの端子がViaに出ているので、JTAG信号のピン配置を見つけるのはそれほど苦労しませんでした。

ちゃんと、ZYNQの動作が見える🤔

Mj_slq

ZYNQが起動した直後のMIOの波形を解析したところ、

Mio

UARTの表示からはEMMC BOOTという文字が見えますが、JTAGロジックアナライザの解析結果では、

  • リセット時のMIO[8:2] = 1101000 → QSPIブート。MIO電圧=1.8V
  • MIO[6:1]→QSPI
  • MIO[9:8]→UART1
  • MIO[27:16]→Ether0
  • MIO[39:28]→USB0
  • MIO[45:40]→SD0
  • MIO[53:52]→I2C1 (OLED用か?)

となっていることが分かりました。いずれ、このピン配置でZYNQのデザインを作ってオリジナルのブートファイルに書き換えてみましょう。

なお、詳しくは書きませんがMIOとPLの端子が相互に接続されている箇所(もしかするとプロテクト?)らしき箇所も発見できました。

 

それから、一昨日の記事を訂正します。

USBを差し込んでもドライバのインストールが始まらないと書きましたが、どうやら知らないところでUSBのドライバがインストールされ、このSmartLynqはUSBイーサネットとして認識されていたようです。

だから、LANケーブルをつながなくても、USBだけで使えるのです。

Smj

OLEDに表示されていた「10.0.0.2 U」という表示は、このUSBイーサネットのIPアドレス意味していたようですね。

USBで接続すると、SmartLynqがDHCPサーバになって、ホストPCに対してネットワークアドレスを割り当てるようです。

Dhcp

想像以上にすごいぞ!SmaryLynq!!

そのときのUARTに表示されたログを示します。

Loaded MAC Address from EEPROM
TCF 21:51:52.031: Cannot read config.ini: No such file or directory
TCF 21:51:52.031: property get ip-mac (default)
TCF 21:51:52.031: property get ip-gw-mac (default)
TCF 21:51:52.031: property get ip-address (default)
TCF 21:51:52.032: property get ip-gateway (default)
TCF 21:51:52.032: property get usb-mac (default)
TCF 21:51:52.032: property get usb-gw-mac (default)TCF 21:51:52.032: property get usb-address (default)
Setting up Ethernet link.
ETH MAC address: 00:0a:35:XX:XX:XX
TCF 21:51:52.032: property get jtag-clock-frequency (default)
TCF 21:51:52.032: property get jtag-clock-skew (default)
TCF 21:51:52.083: Cannot create HTTP server: Invalid transport name
USB serial number 8672503XXXXX-XXXXX
USB: set interface: 0 1
USB: set interface: 1 1
USB: link up, DHCP 0
Interface un1 is up, IP address: 10.0.0.2
TCF 21:51:52.595: DHCPS: REQUEST 10.0.0.1
TCF 21:51:52.595: DHCPS: ACK 10.0.0.1

なお、TCFというのは、XILINXのJTAGサーバ(hwserver)のことです。

USBイーサとか、GigabitEtherとか、作りこみが凄すぎます。

| | コメント (0)

XILINXのSmartLynqを分解してみた

SmartLynqの動作が確認できたので、さっそく分解してみます。

Image8

まず、目につくのは大きなZYNQです。XC7Z010のCLG400でしょう。

その下にあるDDR3 SDRAMはMicronのDeviceLookupを使うとMT41K128M16JT-107:Kと出ました。1個あたり256Mバイトでx16のデータ幅。2個で512Mバイトでx32のデータ幅のシステムとなります。DDRの配線も真面目に等長配線しています。

Ddr3_20200808154701

ZYNQの左側にあるMicronの石は、eMMCで8GByteの容量のもののようです。

ただし、Winbondの25Q128FWというQSPI ROMも乗っているようなので、ブートはこのROMから行い、データ用にeMMCを乗せているのかもしれません。

Image7

基板右下にある4ピンのピンヘッダはUART(オシロで見ると115200bps)で、左下にある6ピンのコネクタはJTAGのようです。これは明日、解析することにしましょう。

基板を裏返すと、教科書のようなBGAのパターン設計が出てきました。

 

Image9

ユーザガイドで示されているような、真ん中を1列あけて端にずらすビアの打ち方です。

 

| | コメント (0)

2020.08.06

XILINXのSmartLynqを購入

XILINXのSmartLynq(スマートリンク)を購入しました!

SmartLynqというのは新しいXILINX純正JTAGケーブルで、6万6千円くらいです。

超高速という噂を聞きつけて買ってしまいました。

いざ開封!

Sl1 

まずは、この袋。中にはフライリードケーブルと、14ピンのリボンケーブル、それからGPIO用のケーブルが入っています。

Sl2 

ふむふむ。SmartLynqはJTAG以外にGPIOもついているんですね。

ACアダプタはこれ。ちっ!PSEが付いてやがる。ちゃんとしてるじゃねーか。

Sl3

ただ、12Vというのがおっかなくてしょうがない。

SmartLynqが電源12Vを必要とするわけではなく、5Vでもいいようなので、このACアダプタはお蔵入りですね。

そして、本体。

Sl4 Sl5 Sl6_20200808151401

Powered By ZYNQと書いてあることから、中にはZYNQが入っていて、おそらくXILINX TCF Serverを実装していて、Vivadoからリモートサーバとしてつながるようになっているのでしょう。

裏面にはシリアル番号やMACアドレスが書かれています。これを製造した会社はwhizzsystems.comというところなのでしょう。

Sl8

 

さて、電源を入れています。付属のACアダプタは12Vで怖くて使えないから、USBから給電します。

 

USBをPCに挿してもドライバのインストールは始まりません。何かがおかしいのですが、まぁ、いいでしょう。

最初は下の写真のように10.0.0.2というIPアドレスが表示されていますが、

Sl9

そのうちDHCPでアドレスが取得されます。

Sl10

このアドレスを見て、Vivado(ここでは2018.3)を起動して、Hardware TargetをRemoteにして、IPアドレスを入れると認識されます。

Sl7

最初の接続ではファームウェアを更新しますというメッセージが出て、BOOT_SAFE.BINというのを転送していました。

この転送が終わると本体ディスプレイの表示が2018.3に変わりました。(購入時の状態では2017.3だったはず)

「10.0.0.2 U」という表示は、おそらくDHCPでIPアドレスを取得できない環境のために、SmartLynq自体がDHCPサーバになって書き込み用PCがDHCPクライアントになるというためのものなのでしょう。

実際のターゲットにつないでみると、Remote ServerのTCPのポート3121でちゃんと認識されました。

Sl11

赤や黒のPlatform Cable USBと比較はしていませんが、体感速度的にはめっちゃ高速です。

ディスプレイの表示は

  • 10.0.0.2 U → SmartLynqがDHCPサーバになっている場合のステータス
  • 192.168.1.15 E → SmartLynqがDHCPクライアントになって取得したアドレス
  • VREF NA 1 → VREFの状態。Vivadoを起動するとNA→OFFまたはONに変化する
  • 2018.3 → ファームウェアのバージョン

という感じだと思います。

 

| | コメント (0)

« 2020年7月 | トップページ | 2020年9月 »