2022年7月 9日 (土)

高周波直列電力合成(7.2MHz)

<カテゴリ AM送信機(デジタル方式) >

前回の記事のように、10WのE級アンプが出来たので、このアンプを2台用意し、電力合成の実験を行います。 インターネットで電力合成を検索すると、並列電力合成の記事は沢山みつかるのですが、直列合成に関しては、言葉そのものは見つかりますが、その内容を解説した記事を見つける事は出来ませんでした。

特性のそろったE級アンプを2台作成し、その二つの出力を直列に接続して、実験開始です。

Eamptestschema3

パワーアンプ部は、74HC04のFETドライバーと3次LPFを実装させます。 これをカッターとリュウターで削り出した基板に実装し、下記のような2枚の基板が出来上がりました。

2eamppwb

2eamplpfin

2eamplpfout

上の波形は、2台のAMPを独立した負荷に接続し、両アンプを同相でドライブした時の、負荷抵抗のレベルと位相を見たものです。 下のアンプが少しだけ、位相が進んでいますが、おおまかな動作を見るには支障は無いものと考えます。

ふたつのアンプのそれぞれの性能は以下のようになりました。 ゲートドライバーの74HC04を3回路パラにしたので、効率もかなり改善しました。

Eamp2per729pf

Pwraddtest5v

左が、Vddを5Vにして、電力合成の結果を見たものです。 上の2行は各AMP単体の5Vでのデータとなります。 合成はLPFの出力を2台シリーズに接続し、10:7のトランスで合計100Ωのインピーダンスを50Ωに変換した後、ダミー抵抗に繋いでいます。

その結果をみていると、少し違和感があります。

まず、個々に測定した出力は、合計して、3.78Wですが、2台を同時駆動して得られた出力は4.84Wと、計算から28%も高くなっています。 しかし、いいかげんなインピーダンス変換トランスでしたので、その誤差かもしれないと、納得して、次のデータを見ます。 この次のデータは、二つの基板に電源を通電したまま、一方のアンプのゲートドライブをONさせたものです。 その時の出力は1Wと0.9W。平均して0.95Wという事は、単独の時の半分のパワーしか有りません。 どうも、片方のアンプだけの場合、負荷抵抗と、動作していないパワーアンプのアンプ側へ出力が分散されるようです。 直列合成の場合、動作停止中のアンプは、負荷抵抗と同じ働きをし、結果的に、ダミー抵抗側へ伝送される電力は1/4になるのかも知れません。

その下のデータはゲートドライブはONしたまま、終段の電源をON/OFFしたものです。 電源の入力端子をオープンにした時と、ショートした時のデータを示します。 この場合も同じように動作していないアンプは負荷抵抗になってしまうのでしょう。 電力合成を直列方式で行う場合は、合成の各電力が一定の場合、その整合もやりようがありますが、複数のアンプがON/OFFを無秩序に繰り返す場合、何か特別な手当てをしているのかも知れません。

Pwraddtest5vlpfin

二つのアンプ間の位相差が悪さをしているのでは?と、各アンプのLPF出力端より位相差が少ない、LPF前の出力トランスの2次側をいきなり直列に接続し、得たデータが左の表です。 この表で大きく前回と異なるのは、出力が単体の時の半分になってしまい、2台合成時の出力と、単体の時の出力と変わらない事。 それに、ゲートドライバーでON/OFFした時も電源をON/OFFした時でも、出力差は大差なく、2台合成出力の約28%から25%くらいしかない事です。 結局、出力OFF時の出力インピーダンスを解決しない限り、直列合成はあり得ないと思われます。 

電力合成時、複数のアンプが任意にON/OFFを繰り返すような場合、出力インピーダンスの変化は避けられず、この出力インピーダンスの影響が、アンプの動作条件に即影響する、E級アンプそのものが不適当ではないかと考え、なにか情報がないか探すと、放送機に於けるD級とE級アンプの比較レポートが見つかりました。 このレポートでは負荷変動についての評価は有りませんが、D級アンプが有利との結論になっています。 レポートの中で、D級アンプは電源電圧に対する出力のリニアリティがE級より劣るとありますが、デジタル方式のAM変調なら、その欠点は全く問題になりません。 また、NHKがレポートしているデジタル方式のAM送信機も、個々のアンプはD級とありました。 ただし、これらの検討している周波数帯は1.6MHz以下の世界であり、目標とする7MHz帯では、やはりE級アンプに軍配が上がりそうです。

そして、直列電力合成に関する文献を見つける事が出来ました。 この記事は2006年に発表されたもので、5MHz時の最大効率が90%程度を示すD級アンプの計算値がグラフデータの中にあります。 現在は7MHzで、90%台を出せるE級アンプを素人でも作る事ができますので、E級アンプの方が効率はよさそうです。 直列電力合成のヒントも判りましたので、E級アンプによる直列電力合成に再トライする事にします。 

以下のように二つのAMPを接続し、T21とT22の巻き数比とRLの抵抗値を変えながらデータを取る事にします。 T21,T22の1次側巻き数は13ターン。 使用したフェライトコアは、秋月で入手したTR-20-10-5EDです。

Pwrmix1_cshma

Pwrmix0


まず、ふたつのアンプに13:4の巻き数比(Zout=50x(4/13)2乗=4.7Ω)のトランスを接続し、単独に動作させた時のデータです。

次に、このふたつのAMPの出力を直列に接続し、両AMPを動作させ、9.4ΩのRLに接続しますが、そのとき、TC21とL21で直列共振させます。 さらに、片方ずつドライブし取得したデータです。 同様にしてT21,22の2次側の巻き数を3→2と変化させ、RLもそれに応じて変更した時のデータとなります。 各表の一番右側にある電圧比は、両AMP同時駆動時の出力電圧(電力ではありません)を100%とした時、片方だけドライブした時の出力電圧の比です。

これは、50%が理想で、試作回路にバラツキがありますが、おおむね、50%となっています。 T21,22の巻き数比を、AMPの総台数の平方根対1に設定すると、2次側の総インピーダンスが50Ωになり、都合がよさそうです。 AMPは、同一出力のMSB側と、バイナリー出力のLSB側に分かれますが、LSB側は全部合わせても1/3程度のインピーダンスですので、合成する時のインピーダンスの総数はMSB側の全台数+0.33程度になると考えられます。 これは、実際にアンプの割り振りが決まった時点で、詳細を決める必要が有りそうです。

当初、AMPを2台作成し、データを取り、良好なら、プリント基板を起こし、量産する予定でしたが、現状では、今検討中の回路で完成するか確信が持てませんので、さらに2台の基板を追加する事にします。

Eamp4sets

Eamplpf400_2

4台のE級アンプが完成しました。 上が共通の回路図となります。 個々のアンプで、出力のバラツキがありますが、出力段のLPFのインダクターを伸ばしたり、縮めたりして、出力を調整する事が出来ます。 この4台を使い、電力合成の実験を継続する事にします。

Pwrmix_4_schema

左が電力合成回路のブロック図です。

合成トランスT1からT4の巻き数比はMSB側のシュミレーションとLSB側のシュミレーションでは異なります。

MSB側のシュミレーション時は4台のAMPとも合成トランスの巻き数比は8:4で、4台の直列インピーダンスは合計して50Ωになるように設定します。

LSB側のシュミレーションでは、バイナリー出力となるように、8:4、8:2、8:1、16:1とそれぞれ電圧が半分になるように設定します。 この場合、合計のインピーダンスは50Ωになりませんが、シュミレーションですから、問題有りません。

Pwrmix_4set

最初の表は、4台のアンプの出力が一定になるように、LPFのコイルを調整し、各々、単独負荷で、測定したデータです。 NO.1と2のアンプは、作成した初期の状態では85%の効率でしたが、今回改めて測定すると、かなり悪くなっています。 原因はまだつかめていません。 しかし、出力レベルは4台とも1.56Wに揃えました。

次の真ん中の表は、MSB側のシュミレーションで、すべて、同じ出力状態で、4台同時ドライブ、3台同時、2台同時、そして1台だけドライブしたときのデータです。計算値と書いた数値が4台同時ドライブの電圧レベルを100%とした時の、計算上の電圧比で、電圧比と書かれた列の数値が実際に得られた電圧比になります。 この結果は、かなり低い値になって、リニアリティが確保できない事を表していますが、トランスの巻き数比は変えられませんが、巻き数は変える事ができますので、実際に製作する時はカットアンドトライする事にします。

一番下の表は、LSB側をシュミレーションしたもので、電圧比は計算値にかなり近い値を示します。 これは、最終的に、個々のアンプの出力レベルを微調する事で改善できます。

この合成トランスの2次側に直列共振回路を入れて、合成トランスが持つ浮遊容量や浮遊インダクタンスをキャンセルさせていますが、この共振回路のQと出力レベルは無関係で有る事を確認できましたので、最終的に送信機にまとめる時、バリコンの耐圧が許容可能な限り大きなQに設定し、スプリアスの抑制にも使う事にします。 

下が、この実験中の風景です。

Pwrmix_test_0

ここまで出来ましたので、次は、基板を8枚にして、AM送信機の予備検討をしようとして、新たに、4枚の基板の手作りを始めました。 そして、先行の1台が出来ましたので、動作テストをすると、パワーは出るのですが、効率が50%台しか出ません。 前回作成のNo.3と4の基板では80%台を出していましたので、 その原因が判りません。 Vddを5Vと12Vと交互に変化させながら、原因を検討していたところ、ゲートドライブなしの状態でIdが1mAとか2mAなど流れるようになってしまいました。 これは、明らかにFETの劣化です。 5台の試作基板で、効率が大幅に異なることと、FETの劣化というトラブルにより、この10Wアンプは安定性と信頼性が疑問になって来ました。 

そして、FETを外して単品の導通テストを行うと、約半数のFETがドレン-ソース間のON時の抵抗が増大しており、これが効率を悪くしている原因のようです。 かくして、BS170によるE級アンプは失敗に終わりました。

AMの場合、無変調時でも、10Wアンプはフルパワーを連続して出す必要がありますので、10Wクラスの連続動作可能な高効率アンプを再検討する必要がありそうです。

 

高効率E級アンプ再トライ  へ続く。

 

INDEXに戻る

2022年6月25日 (土)

E級高効率RFアンプの実験

<カテゴリ AM送信機(デジタル方式) >

7MHzで10Wくらいの安いアンプを作ろうとしています。 目標は、効率80%以上のE級アンプです。 首尾よく、試作に成功したら、これを十数台作り、電力合成して、AM送信機に仕上げる魂胆です。 

参考にしたのは、E級アンプの実践的なレポートのある、JK1LSE OM のブログです。

まずは、効率90%のE級アンプへの挑戦です。 これが意外と難しい。なかなか90%の大台が出ません。 とりあえず、80%台がでましたので、ここで一区切りし、次のstepへ進む事にしますが、以下そこまでの経過です。

Eclassamptest_0

上の回路図が今回検討開始に当たり、設定した配線図になります。 終段はBS170の2石パラレル、プッシュプル(2x2)形式で、E級アンプを構成させます。 そのドライブ回路は、FETゲートドライバーのMCP1402Tで、電源電圧を12Vにして、BS170をフルスィングします。 その前に、CMOSゲートによりデッドタイム生成を行い、ファイナルのプッシュプル回路のFETが同時にON する事を防止します。 さらにその前段にDCバイアスを調整して、7MHzの矩形波のデューティ比を調整できるようにしてあります。 7MHzの源信号は、以前作成したDDSから4.5Vppでドライブします。

Pa_pp_mcp1402t

左は、そのゲートどライブ回路を蛇の目基板に実装したところです。 VDD5Vにて、70%台の効率を出せるのですが、このゲートドライバーのMCP1402Tがかなり熱くなります。 コアや巻き数を変更しながら、電源電圧も5V、10V、12Vと変化させているうちにICが壊れてしまいました。 とりあえず、ICは4個購入してありましたので、修理交換して、各定数の最適値を探して、80%台の効率が得られる状態になりましたので、12Vで1分くらい動作させた結果、今度はBS170、4石を道連れにこのゲートドライバーも壊れてしまいました。 データシートを見る限り、電源電圧12Vは全く問題ないはずですが、ファイナルの電源電圧を12Vにすると、たちまち壊れてしまいます。 原因を調べようにも、すでに手持ちのICは全滅。 やむなく、手持ちのTC4426に改造して、再検討開始です。

Eclassamptest11

ただし、TC4426を以前RSで買った時は90円でしたが、現在は246円以上していますので、もっと安いICへ置き換えが必要です。 置き換え品は後で探す事にして、実際に組みあがった回路は以下のようになりました。3枚の写真の間はリード線や同軸ケーブルでつながれています。

Pa_pp0

Pa_pp_gate

Pa_pp_drain

Pa_pp_drainrfout

上の波形は左から、ゲート端子の電圧(10V/DIV)、ドレイン電圧(20V/DIV)、ドレンイン電圧とフィルター後の出力波形(20V/DIV)です。

見ての通り、ドレイン電圧が同じ形をしていません。 回路を非対称に作った事が影響しているかもしれません。 このような波形ですが、実測データは下のようになりました。

Pa_pptestdata_2

VDD 5V、12Vいずれの状態でも80%台の効率は確保できましたが、12V電源の場合、FET1石にかかるPdは、2x3の場合で、0.446Wとなりました。 これは、データシートから割り出した筐体内温度60度の許容値0.599Wの74%で実用レベルです。 ちなみに、2x2の場合、1石当たり0.669Wとなり、これは許容値ギリギリで、余裕が有りませんので、交信中に壊れる確率が高いです。 2x2の構成で放熱板を追加するより、FETを2石増やして2x3にした方が安くつきそうです。

Eamp_test_final

このアンプを8bitのDAコンバーター用に使うと、最低12台、欲を出して、bit数を10bitまで上げると最低21台作る必要があり、大きなフェライトコアを使った現状アンプでは、フェライトコアの材料代だけで、600円くらいしますので、21台作ろうとしたら、12,000円くらいになってしまいます。 そこで、コストダウンの為に、L1を手持ちのチョークコイル(100個くらい在庫)に変更し、T2のコアも、一回り小さなフェライトコアに変える実験を行いました。 左がその写真です。

出力トランスに使うフェライトコアをESD-R-22SDに変えると、150円くらいで手にいりますので、21台分で、3000円と少しで実現できます。 そして、検討の結果、効率は89%まで向上し、コストダウン出来た上、効率も上げる事ができました。

Eamp_test_final

1uHの空芯コイルは基板から10cm以上離れた場所で約1uHでしたが、写真のように基板に密着させた状態では0.89uHしかありませんでした。 そこで、L3とL4を0.5uHにした時のデータを取ってみました。

Eclassamptest_2

VDD5Vの時は91%の効率となりましたが、12Vの時は73%まで悪化しています。 やはり、L3,L4は1uH前後でないとダメ見たいです。 

そこで、1uHのアキシャルインダクタに変更してみました。 このインダクタの特徴は小型であることと、そこそこのQが確保できる事です。 秋月で1本7円で販売されていました。

Eclassamptest_3_3

7200KHzに周波数を固定して、C14と15を変化させた時のデータです。 5Vの電源では、91%の効率をあげる条件がありますが、同じ条件で、12Vにすると、70%くらいまで落ちてしまいます。 表の中で、色分けした条件なら、なんとか80%をキープします。 80%でも、Pdは余裕がありますので、あまり欲張らない方が良いかも知れません。

今までの実験経過から、部品のレイアウトを整然と行い、リンギングの発生を抑える事が、安定に高効率を得る条件のようですので、ゲートドライブ用のICが確保で得来た時点で基板を作り替えてみる事になりそうです。

ゲートドライバーのICと変換基板を手配できましたので、さっそく実装してみました。 ところが、ICの仕様を読み間違えたようで、入力レベルが5V以上必要なICでした。 また、TC4426を使って、Vddを12Vまで上げると、異常信号でAM変調されます。 出力段の信号がTC4426の入力にフィードバックされているような波形で、Vddを下げると、小さくはなりますが、ゼロにはなりません。 そこで、このゲートドライバーは止めて、74HC04のみでFETのゲートをドライブしてみました。 すると、異常信号によるAM成分は消えてきれいになり、かつTC4426の時より出力が出るようになりました。 以降、74HC04のみで進行する事にします。

配線図は以下です。

Eclassamptest12

Eclassamptest3

Eamp_axi1uh

上の表は、74HC04オンリーで、1uHのアキシャルインダクターを使用した時のデータです。

Vdd=12VでC14,15が709PFのとき、79%の効率で11Wを出力し、Vdd=5Vの時の効率が81%です。 12Vと5Vの時の効率があまり変わらないという事は、このアンプを10数台電力合成した時の個々の出力を、Vddを変える事により簡単に直線的に変更できることになりますので、便利です。 左の写真は、アキシャルコイル実装状態で、基板の中がかなりすっきりとなりました。

  

 

従来、プリント基板の作図を行う場合、プロ用のソフトを使っていましたが、このプロ用のソフトはWindows XP用で、それ以降のOSでは、ライセンスの関係で動かないという問題がありました。 XPがインストールされたデスクトップのPCとHD仕様のディスプレーは有るのですが、この古いPCを引っ張り出しても、狭い机が、いっそう使いにくくなりますので、最新の無償のソフトを探す事にしました。 そして、見つかったのが、KiCADという、私が以前使っていたプロ用のソフトと似たようなアプリが今、世界中で利用されている事を知りました。

さっそく、このソフトをインストールして、このE級アンプの基板の作図を始めました。 初めてのソフトでも、インターネットで検索すれば、たちまち、操作方法のアドバイスがあり、約5日間で、配線図、基板図用の、オリジナルのシンボルやフットパターンを追加しながら、基板図ができあがりましたので、できた基板図の通りカッターとリューターで銅箔をはがし、1枚だけ基板を試作しました。 下が、KiCADで作図した基板図です。

Kicad_new_pcb_0

Eamp_on_new_pcb_0


 左は、上の基板図の表面のみカッターで銅箔を削り、手作りした両面基板に部品を実装したところです。 FETとコイルとコネクター以外の抵抗、コンデンサは1608のチップで作りましたので、見た目は、かなりすっきり仕上がりました。

作図した基板には、FETゲートドライバの74HC04のパターンも用意してありましたが、今までの手作り基板と兼用する為、ゲートドライバーは、別基板に実装し、この新作基板は、BS170によるファイナル部分だけを実装しました。 いままでの回路と異なるところは、プッシュプル回路の配置が対称になったことです。 そして、12Vで測定したデータは以下のようになりました。 共振用コンデンサは707Pがよさそうです。 出力は11Wを超え、かつ1石当たりのPdも許容値内ですので、これをベースに量産する事にします。 このコンデンサの容量組み合わせは330P+330P+47Pです。 全てCH特性のチップコンデンサです。

Newpcb_eamp_0

この表の中にある842Pの状態で、エージングをしていると、約10分でFETが3石すべてがオープン状態で壊れてしまいました。 壊れた直後のFETの温度は、触れないくらい熱くなっていました。 1石当たりのPdは許容値内ですが、この数値は6石のFETにPdが均等に割り振られたもので、実際のPdは最小と最大で2倍くらいまでバラツクと想定されます。  この時の最大Pdは0.612Wくらいと予想され、60度の限界値0.599Wを超え、この為、1石がNGとなると、残りの2石で全体のPdをカバーする事になり、次々と壊れたものと思われます。 プッシュプルのもう一方の3石は無傷でした。

そこで、最初実験したデッドタイムコントロール機能を再度追加し、出力と効率を制御する事にしました。

デッドタイムコントロール回路を追加した回路図を下に示します。

Schema_add_dedtime

Dt_gate

Dt_drain

Dt_lpfout

左上から、終段のゲート電圧、終段のドレイン電圧、そして、LPFの出力の波形です。 基板のシンメトリ性が功をはくし、ドレインの波形も大幅に改善しました。 そして、デッドタイムを色々調整した結果、以下のデータとなりました。

Add_dedtime

黄色の状態でエージングを実施し、1時間OKでした。

今回の回路構成は、10台以上のアンプを直列に接続して、電力合成する必要がある為、出力整合回路と、出力設定機能を兼ねる為に、巻き数の多い絶縁トランスを採用しています。 この構成のE級プッシュプル回路の例が見つからず、製作中のアンプがほんとうに正しいのか判りません。

このE級プッシュプル回路の構成は、この記事の没頭で紹介した、JK1LSE OM のブログや周波数が異なりますが、トラ技の記事とも異なります。 多分、それが影響しているとは思いますが、C14,15とL3,L4の共振周波数の関係がこれらふたつの記事と一致しません。 ちなみに、L3,L4,L1の交点から、0.1uFでGNDへ落すと、C14とL4及びC15とL3の共振周波数は、7.2MHzより少し高い周波数の時、効率最大となりますが、効率そのものは最大でも80%でした。

Combtrans1by2

左は、コンベンショナルトランスを使った時の出力データです。 トランスの巻き数は2:4ですので、プッシュプル回路の負荷インピーダンスは12.5Ωになります。 そして、70%台の効率です。 この効率は、LPFの後で計算した場合、だいたい、どのインターネット記事も似たような数値で、一応世間並みの動作はしているようです。 この回路は、今までの回路に比べて出力は小さいですが、結構安定して動作し、出力波形もかなり綺麗です。 ただし、これを採用するかどうかは、電力合成の実験で決める事になりそうです。

今回のAM送信機は大小の出力を電力合成をするのですが、その合成のノウハウは公表されておらず、自分で実験しながら、試行錯誤するしかないようです。

高周波直列電力合成(7.2MHz)  へ続く。

INDEXに戻る

2022年5月21日 (土)

受信の音声が出ない (TS711)

Ts711_frontpanel

久しぶりに、修理情報です。 最近は自作の作業が多く、修理情報を取り上げる事は少なくなったのですが、今回のTS711の故障は、まず設計ミスが有り、さらに生産上の品質管理に問題がありましたので、かなりの頻度で発生しそうと判断し、公開する事にしました。

故障の症状は、題名のごとく、受信時にスピーカーから音が出ないという、トランシーバーとしては致命的な故障です。 ただ、音が出ないだけでなく、時々、ぶつぶつとノイズが出だし、それが継続した後、無音になる事もあります。 音量ボリュームを急激に変化させると、一瞬音が出る事もありますが、故障が直る事はありません。

オシロを使い信号の流れを追いかけると、オーディオのパワーアンプIC Q11の入力までは信号がきていますが、出力はありません。 このICの出力端子となる1番ピンのDC電圧を測ると約12V。通常、オーディオパワーアンプの出力端のDC電圧は電源電圧の1/2が正常値で、このモデルの電源電圧は13.8Vですから、出力端子のDC電圧は6.9Vでなければ音は出ない事になります。 ICのDCバイアス系が壊れているようです。 入力端子へ信号を伝達するコネクターを外すと、本来0Vであるべき入力端子のDC電圧が約12Vになります。 これらの症状から、ICの故障か周辺のDC接続された部品の故障だという事が推定できます。

Mb3713kwschema

基板をとりはずし、半田付け面を観察すると、自動ディッピング装置により、きれいに半田付けされた跡が観察できますが、5番ピンがどこにも接続されていません。 上の配線図上でも、記載がありません。 このQ11というICは富士通製のMB3713という品番です。 このICのデータシートをインターネットの中で検索しました、得られたのは中国語によるデータシートだけでした。

Mb3713このデータシートによると、5番ピンはOFFSET ADJ用と書かれており、通常は、ここに抵抗を接続して、入力端子に生じるDCオフセット電圧をキャンセルし、出力端子のDC電圧が電源電圧の1/2になるように補正するものです。 このような端子ですので、そのDC電圧を固定する必要があり、通常はGNDに接続されます。 中国語のデータシートでも実施例はGNDへ接続しています。 中国語のデータシートだから信頼性は低いので、このICを使った記事がないかインターネットを調べたところ、1件だけですが、このICを実際に使った回路図が公開されており、その回路図でも5番ピンはGNDへ接続されておりました。 

そこで、このオープン状態にある5番ピンをGNDへ落してみました。すると、音が出るではありませんか。 どうやら、5番ピンはオープン状態でも正常に動作はするけど、経時変化で、状態が変わったとき、それをカバーできなくなり、音が出ないという症状に陥るようです。

この5番ピンをGNDへ落して、1時間くらいエージングを行ったところ、また、ぶつぶつとノイズが出だし、音が出なくなりました。 

はたと、困ってしまいました。約2時間、推測を繰り返して、気になったのが、ICの半田付けが富士山状に非常にきれいに処理されているのですが、一部の端子は丸くなった団子状のはんだがあります。 この団子状のハンダ付けは、もしかしたら、自動ディップマシンによる芋半田かも?。 そこで、全てのICの半田付けをやり直す事にしました。 方法は40Wくらいのこてで半田を追加しながら、ICの足を暖めるとその内、半田のなかから蒸気のようなけむりが出だし、ICの足に半田が表面張力で張り付く状態となります。 これはICの足の温度と半田の温度が一致したときに起こる現象で、確実に半田付けされた証拠になります。

この作業を行った結果、音が出るようになりましたので、そこから約3時間エージングを行い、異常が起こらない事を確認できました。

5番ピンをGNDに落としていないのは設計ミスですが、生産上でも半田付けのミスがあったようです。

自動ディップマシンは基板をチェーンでドライブするコンベア上に乗せ、それを等速度で送りながら、半田槽の上を通過させ、全部品をはんだつけする装置ですが、このスピードはノウハウがあって、量産工程で最も半田付け不良が発生しないレベルに設定されています。 ところが、バイポーラタイプのパワーアンプは、半田付けする前に、放熱板に固定され、ICの足の熱容量は他の部品よりかなり大きくなっています。 さらに、ICの放熱効果を良くする為に、ICの足の形状は熱伝導が良くなるように設計されている為、 熱容量はいっそう大きくなります。 この辺は大出力用のハイブリッドパワーICとは対照的です。 ハイブリッドパワーICはこのハンダ付け不良を軽減する為に、丸棒タイプの足を使い、かつ途中にキンクを入れ、ハンダ付けの際に足の熱がICの放熱板側へ行かないようにしているのが大半です。 このパワーアンプ用ICで最適な品質を維持する為にコンベアの速度を遅くすると、IC以外の半田付け部分で半田タッチが増加するという問題がありますので、ベスト設定したコンベアの速度を変えるより、不完全な半田付け状態が発生するかも知れないパワーICは、ディップ装置を通過した後、再度手はんだするというのが一般的です。

TS711のパワーアンプのICの半田付けは自動ディップのみで、手はんだの跡がありません。 これが今回の故障の直接の原因と考えられます。 

2次加工に出した工場の半田付けレベルがKENWOODが考えている品質レベルに達していなかったのでしょうね。

Af_powramp_back

上の黄色の枠で囲った部分が今回再半田したところです。 これで問題の再発は起こらないかウォッチする事にします。

 

INDEXに戻る

2022年3月12日 (土)

160m用 8m高のスローパー

<カテゴリ:アンテナ>

200Wの1.8MHz用SSB送信機が出来上がりましたので、国内用のアンテナを常設すべく、再検討する事にしました。 過去の実験から、フルサイズのロングワイヤー(40m)を展開すれば、近距離しかカバーしない国内用のアンテナが出来上がる事は判っていましたが、給電部が敷地外の地上になり、敷地外(市有地)まで同軸を伸ばしたり、そこにマッチングBOXを臨時で置く事は出来ても、常設は出来ませんでした。 そこで、マッチングBOXも同軸も敷地内に置き、市有地の調整池上空のみを借用する事により、常設のアンテナを実現する事にしました。

この肝は、グランドアースをどうするかが最大の難問でしたが、ふと、思い出したのが、家の構造です。 この家は、木造鉄骨で、その鉄骨と電気的に接続された直径10cmくらいの金属パイルが16本地下へ打ち込まれています。 パイルの長さは5mから10mくらいあり、これも立派なアースとして動作するかも知れません。 まず、この鉄骨とベランダのアルミ合金の手すりが電気的につながっているか確かめ、この手すりに台所用のアルミ箔を約30cmほど巻き付け、これと、マッチングBOXのアースを繋ぎ、整合実験をすると、共振周波数でSWR1.3以下を実現できる事が判りました。

この予備実験から、逆Lではなく、高さが8mしかない短縮スローパーを作る事が出来る事が判りましたので、スローパーの斜め部分を、取れるだけとれる寸法にしたアンテンナを構築する事にしました。  以前の実験は2015年で、その時は50mのワイヤーを張る事ができましたが、調整池の周りに、雑木が生い茂り、今では、我が家で池周辺のメンテをやっている範囲内になる、36m張るのがやっとです。

160m_longwire

上が構想図です。 下が、MMANA-GALでシュミレーションした特性です。 36mの部分の線材はLANケーブルを割いて取り出したAWG24のワイヤーです。

Mmana_slowper

下の写真は、高さ8mのベランダから釣り竿を横へ張り出し、AWG24のワイヤーを張った起点です。 そして、その下がベランダの手すりに巻き付けた0.3mm厚20cm x 30cm のアルミ板に金メッキのハトメを打ち、ハトメに半田付けしたケーブルをマッチングBOXのGND端子へつなぐようにしたアンテナアース部分です。 推定静電容量は2000PF以上です。

160m_wire_end

160m_antgnd

160m_mtu

160m_machingbox_schema_2

160mlw_swr     

左上が、マッチングBOXの中で、その右が、その等価回路です。 今回のマッチングトランスはAWG28のワイヤーを2本を一束として、全部で10束のワイヤーを6ターン、FT240-#43コアに巻き、6ターンずつを、直列に接続したもので、同軸ケーブルの芯線を⑩番タップへ、アンテナへは⑦番タップから、ローディングコイルを経由して、つながります。 コイルのインダクタは5.5uHでした。 ローディングコイル込みのアンテナのインピーダンスは約25Ωです。

そして、左上がこのアンテナのSWR特性で、一応SSBバンドへ合わせてあります。

自作のアンテナアナライザで調整した後、TS-930Sから60W出してチェックしましたが、ほとんど変化はありませんでした。

さっそく、その日の晩にテストON AIRしました。 残念ながら自作の200W機は動作が安定せず、TS-930Sによるアンテナだけのテストになりました。 こちらからコールしたQSOが2局、相手からコール頂いたQSOが2局。 いずれも双方で59から59+20dBのレポートでした。 そして、CWの時とは比べ物にならないレベルのノイズに閉口しました。 この4局以外の方からもコール頂いたのですが、結局コールサインを取る事が出来ず交信不成立でした。 

その後、1週間くらい使った感じですが、3エリアを含めた西側の3,4,5,6エリアがカバー範囲で、2エリア以東は、相手の方の設備が平均以上の性能の場合のみ交信可能のようです。 アンテナの打ち上げ角からしたら、シュミレーション通りの結果ですので、ローカルラグチューには最適のようです。

約3週間使った結果、せめてゲインをプラスにできないものかと、再度逆Lにトライしました。 しかも、マッチングBOXと同軸ケーブルは敷地内に収まるとという条件です。 

3階のシャックから同軸ケーブルを一度地上まで降ろし、そこから土の上を10mくらい這わせて、マッチングBOXの位置を決めたところ、同軸ケーブルの長さは約40mとなりました。

そして、下のように展開しました。

160m_l_2

L

160m_machingbox_l_2

Swrl_2

ゲインが0.1dBアップしましたが実際は誤差内です。 今回のマッチングBOX内は延長コイルでなく、短縮コンデンサとなり、インピーダンス比は1:1のトランスとなりました。 この延長コイルが無くなった分だけロスが減ったとおもわれますが、どのくらいかは不明です。 実際に使った感じはあまり変わりませんでした。

 

せめて、ゲインがプラスにならないものかと3回目の改良です。 今まで使用していたワイヤーは、調整池の上空に展開する事から、あまり目立たない、LANケーブルを割いて取り出したAWG24のワイヤーを使っていました。 このワイヤーの直径は0.5mmくらいです。 これを1.6φのマグネットワイヤーに変更する事にしました。 マグネットワイヤーは茶色に着色されており、昼間でもあまり目立ちません。 ワイヤーを張り替えるついでに長さも2mほど延長しました。  また、マッチングBOXのGND端子は池の周りに張り巡らされている金網に地中を通った2φのアルミ線で接続しました。

Mgwire_2

L1r6


Trans3

Iwl1r6

短縮コンデンサは1340PFになり、トランスの巻き数比は10:8になりました。 アンテナのインピーダンスは短縮コンデンサ込みで、32オームです。 そしてゲインは +1,86dBとなり 前回より2.2dB上がりました。 200Wの出力が332Wになった事に相当します。

約10日間使用した結果、ワイヤーが少し伸びたようで、中心周波数が1.834MHzまで下がってしまいましたので、短縮コンデンサの値を1250PFに変更しました。

 

給電点の高さを11mまで上げ、ATUで整合させたスローパーもどきのアンテナはこちらにあります。

  

INDEXに戻る

 

2022年2月13日 (日)

160m SSB 送信機 ケースイン

カテゴリ<SDR> [1.8MHz  自作  dsPIC]

200Wリニアアンプも完成しましたので、いよいよ、160m SSB送信機をケースに収納します。

手配しておりましたIDEALのケースが届きましたので、2月中旬の屋外で、ケース加工を行い、2日間で、組み立て完了しました。

160mssbtxfront

160mssbtxinsaide1

とりあえず、通電テストは完了しました。 ケースの高さの計算を間違い、ファイナルのコアが天板ぎりぎりです。 巻線があると、この巻線の直径分のみ天井が膨らみますので、コアが天板に近い部分の巻線をずらしました。 写真で青色のコアが直に見えているところがそれです。 出力3.5W以下なので、多分OK? これから詳細の確認にはいります。

200Wのリニアアンプに接続したところ、出力が出すぎますので、マイクボリューム最大及びCW送信時に200W出るようにVR7を調整してゲインを下げました。最終的なこのユニットでの出力は約3.2Wくらいになりました。

 

T4(終段の出力トランス)の1.8MHzに於ける1次側インピーダンスが60Ωくらいしか無く、ちょっと少ない気がしますので、コアをESD-R-18SDから、ESD-R-25L-Aへ変更しました。 これで1次側のインピーダンスは130Ωくらいになり、実際のインピーダンス12.5Ωの約10倍になりましたが、出力が若干落ちたものの、IMDはあまり変わりませんでした。

下が、その変更後の出力トランスです。

160mtxt4corechange_2

この状態で、実際にダイナミックマイクをつないで、交信のシュミレーションをしてみました。 マイクの出力インピーダンスを50KΩに設定してあったのですが、ゲインが不足します。マイクとの距離を20cmくらいにしたとき、マイクVR最大でも、ピークで30Wくらいしか出ません。 マイクアンプのゲイン設定を間違ったようです。 本来、ALCアンプの入力レベルは-40dBくらい必要なのですが、ALCが動作開始する入力レベルは-28dBしかなく、12dBの不足です。 やむなく、ALCアンプのゲイン設定を40dBから60dBに変更し、8dBのオーバー分はマイクVRを絞って使う事にしました。 

 

一応は使える状態になりましたので、これでTSSへ保証認定依頼する事にします。

 TSSへ送ったブロックダイヤグラム 160m_SDR_TX_BLOCK.pdfをダウンロード

TSSへ日曜日に送り、保証料の振り込みを月曜日の朝一に実行するように銀行へ依頼したら、月曜日の夕方には、保証認定する旨のメールが届き、正式認定書はその週の金曜日に届きました。 さらに次の月曜日の朝、総通へ変更申請を行うと、火曜日に審査終了し、免許状送付用の封筒を送れというメールが総通よりきましたので、水曜日に返信用封筒を送ると、翌週の月曜日に変更された免許状が届きました。 ただ、アンテナがまだ張られていない事。 200W送信機用のAC/DCコンバーターから約100KHzおきに発生するS9オーバーのノイズ対策が出来ていない事もあり、すぐにはON AIRできそうもありません。

AC/DCコンバーター電源からのノイズは対策できました。

アンテナが出来ました。

アンテナの動作確認出来た次の日、午後7時過ぎにこの送信機+200WリニアでCQを出しました。 香川県高松市からコール頂き、送信機も正常に動作している事を確認できました。 ただ、送信機の回路に不安定要素があるみたいで、電源ONしてもメインマイコンがSTOPしてしまう事があったり、マイクから変調がかからないと言う故障があります。 原因は、チップ部品のハンダ付け不良と、ジャンパー線の被覆が薄い事もあり、基板のビス締め等の外圧により、チップ部品のハンダや電極が割れたり、ショートする事があるみたいです。 ON AIR前に一通りは修理対応を行いましたが、その内、また発生するかも知れません。 

使い始めてから1か月たちましたが、同様な問題の発生はなくなりましたが、時々送信モードにしても電波が出ないという現象が出ます。多分、マイクスタンドのスタンバイSWのチャタリングだろうと、波形をチェックしてみました。 通常の操作ではなんともないのですが、たまに左下のような波形がマイコン端子に加わり、異常動作しているものでした。 対策として、マイコンの入力端子に接続してある0.1uFのコンデンサを1uFに変更しました。 右下がその波形で、何回かトライし、最悪状態での波形になります。 PTT Swが切り替わったかどうかの判断期間を50mSECに修正。

C_0r1_160mtx

C_1r0_160mtx


たまに、送信周波数とLCD表示が一致しないという問題が発生しました。 ロータリーエンコーダーのチェックは1m秒間隔で行っていますが、LCD表示の更新には約15m秒かかります。 15m秒の間に、DDSの周波数を変更し、次に周波数表示を変更しますが、DDSの周波数変更中に周波数の変更があった場合、この新しい周波数を表示してしまうというバグです。 対策としては、ロータリーエンコーダーのチェック間隔を4mSECに変更し、周波数変更があったら、DDSと表示の周波数変更を連続して行い、その間に周波数の変更が有っても、それは次のステップで処理するというプログラムに修正しました。 LCDの表示の追従がやや遅れますが、表示と送信周波数の不一致は無くなりました。 また、ラストメモリーの周波数がずれるというバグも修正しました。

音声信号の低域をカットしすぎでしたので、60HzまでFIRフィルターを伸ばしました。 ただしLSB用のフィルターで100Hzくらいまでしか対応できないので、実質は100Hz止まりです。

Send_swon

送信と受信を何回も繰り返していると、時々、送信モードには切り替わるけど。電波が送信されないというトラブルが出続けていました。 この現象は、ラグチューで交信時間が30分以上になるとき、特に頻繁に発生していました。 そこで、この現象が発生した時のSEND SWの信号ラインの電圧変化をモニターする事にしました。 そして、数十回の操作の結果、その症状が現れるときのSENDラインの異常波形をとらえる事に成功しました。 左上のデジタルオシロの波形の時、この送信されない現象が発生しました。 原因はわかりませんが、SENDにした途端、マイナス1.7Vくらいの電圧が発生し、このマイナス電圧で、システムマイコンがラッチアップしてしまう事がわかりました。 対策はこのラインにマイナス方向のパルスを吸収するダイオードを追加する事にしました。ダイオードを追加した結果、このマイナスパルスの先頭値は-0.3Vくらいに押さえられ、実験の最中では、異常現象は発生しません。 多分対策出来たと思えますので、しばらく様子を見る事にします。
 
 

最終配線図 160m_tx_5.pdfをダウンロード

最新のソフトウェアです。 2022年4月28日更新

SSB_generator_160m_2.cをダウンロード

160m_dspSSB_TX_2.cをダウンロード

float_TapFIR_AM_S36k_T301_BPF.hをダウンロード

float_TapFIR_B2R8k_S36k_T201_BPF.hをダウンロード

float_TapFIR_LSB2R8k_S36k_T401_BPF.hをダウンロード

 

INDEXへ戻る

2022年1月23日 (日)

160m SSB 200W リニアアンプ

カテゴリ<SDR> <RFパワーアンプ(リニアアンプ>  [1.8MHz  自作]

160mバンド用のQRP SSB送信機の基本機能が完成しましたので、次は、160mバンド用200Wリニアアンプの製作です。 製作と言っても、すでに完成状態にある40mバンド用200Wリニアアンプに1.8MHzのLPFを追加し、2バンド仕様に改造するものです。

回路図は以下のようになります。

40m160m_200w_amp

40m160m_lpf

いままでの40mバンド用LPFに160mバンドのLPFを追加し、これをリレーで選択します。

Lpf2mhz_200w

左のデータがこの160mバンド用LPFの単体特性です。 使用したカーボニルコアはT68-2で、1mmφ UEWを約30回巻いて、必要なインダクタになるように巻き数を調整しました。  一応アンプ部は広帯域設計ですので、160mバンドもまともに動作してくれるはずです。

この追加改造は終わりましたので、TS-930を信号源として、動作確認を行いました。 

 

その結果、1.85MHzでのリニアリティが全く取れません。 リニアリティが取れない最大の原因は、過去の例から、T2のインダクタンス不足とアンバランスが考えられますので、バイファイラ巻きのトランスT2を巻きなおし、なおかつ、コイルの極性も吟味した結果以下のようになりました。

160m_200w_data

左が、7MHzのリニアアンプの仕様のまま、LPFのみ2MHz用に切り替えた入出力特性です。130Wを過ぎたあたりから、リニアリティが悪くなっています。 

真ん中は、T2の巻線を従来の3.5Tから7.5Tに変更したもので、180Wくらいまではリニアリティを確保出来ています。 そして、200W出力時の入力は3.4Wくらいです。実際の1.85MHzの送信機の最大出力は3.3Wくらいに留めて置く事にします。

右端は、T2を変更した後の7MHzのデータでリニアリティは前回と同じくらいですが、ゲインと最大出力が少し落ち、5W入力でやっと200Wでています。 この原因は伝送線路トランスのインダクタを増やした事により生じたもので、伝送線路トランスの最適インダクタンスが7MHzと1.8MHzとは異なるようです。 その後、色々調整などを行った結果、7MHzも1.8MHzもゲインが下がり、7MHzではCWで7W入力で、1.8MHzは同じくCWにて5Wの入力で200W出る状態で落ち着いています。

この状態で、高調波レベルを確認してみました。 第2高調波が-44dBくらいしか取れません。 T2のバランスが崩れているかもと、巻線を1.5D2Vに代えてみましたが、芯線と外皮のDC抵抗の差により、かえって悪くなる始末。 念の為とT3のインダクタンスをチェックすると41uHくらいです。1.8MHzでは460Ωくらいのインピーダンスで、実際のインピーダンス50Ωに対して9倍です。 そこで、このインダクタンスを90uHくらいまで増やしてみましたが、高調波のレベルは変わらず、出力のみが落ちていきます。 従い、T3は現状のままとしました。 さらに、T2のバイファイラ巻線はバラツキが大きい為、2本のワイヤーを撚ったものではなく、AWG24ですが、平行コードに変更すると、若干の改善は見られましたが、ケーブルのDC抵抗により7MHzで180Wくらいしか出なくなりました。 T2の巻線を0.50SQに戻し、2本のワイヤーのより密度を1.5倍くらいにし、ターン数は7.5Tにもどすと、7MHzでも200Wをクリアし、やっと-50dBくらいになりました。

この検討の途中でT3がDC直結になっているのが問題かもと考え、0.1uFのコンデンサでDCカットをしてみましたが、第2高調波のレベルは全く変わりませんでした。 実はこの検討のさなかに、操作ミスや不注意によるFET破壊が2回もあり、現在はebayで手配したU$2.20の中華製偽ブランド品の2SK1530を使っていますが、この偽ブランド品は正規品の東芝製より特性が良いという情報がインターネット上に有りました。 そこで、改めて、高調波歪が最小となるアイドル電流を調整すると、なんと、100W出力時、第2高調波が10dBくらい下がるポイントがあります。 しかも、7MHzと1.8MHzでの高調波最小ポイントは一致しています。

結局、第2高調波が多いのは、東芝製に比べて、バイアス電流を少し少なくする事で解決する事が出来ました。

以下の写真は160mバンドを追加した最終状態です。

2band_riner_00

1r8mhz_200w

左のスペアナデータは、1.8MHzにて200W送信時の高調波データです。

第2高調波が-55dB程度で一番大きくなっていますが、新スプリアス規制に対して合格ラインです。

 

2Band化した配線図です。  

160m_PWR-AMP200W_2.pdfをダウンロード

 

 

次に気にしていたIMDの確認です。 700Hzと2300Hzの2-tone信号によります。

160m100pep

160m200pep


Imd_100w_005

Imd_200w_006

左上が100Wpep時、右上が200Wpep時の2-tone波形と3rd IMDです。 100Wpepで-29dBc程度、200Wpepで-23dBc程度。決して良くはありませんが、許容できる限界でしょう。 

200w時のIMDが悪いのは明らかにリニアリティ不足であり、まともに200Wが出力されていない事が原因です。 周波数が低くなればIMDも良くなるのかと思っていましたが、どうもそうではないようですね。 この問題は、少し時間をかけて解決策をさぐろうと思います。
 

160m SSB 送信機 ケースイン へ続く

 

INDEXへ戻る

2022年1月10日 (月)

160m SSB送信機 QRP パワーアンプ

カテゴリ<SDR> [1.8MHz  自作  dsPIC]

1.8MHz用SSB送信機から出力が得られるようになりましたので、これで200Wリニアアンプをドライブできる出力、約5Wが得られるQRPリニアアンプの製作です。

リニアアンプの製作にかかる前に2MHzのLPFを作ります。

2mhzlpfschema

2mhzlpfshumiratiton

インターネット上の計算で求めた2MHz LPFの各定数が左上の回路図です。 その時のシュミレーションデータが右上になります。 

1.9MHzまでフラットで、第2高調波となる3.6MHz付近で,-35dBくらいの7次LPFとしては一般的な特性です。

Im2mhz_lpf_2

Lpf2mhzdata

そして、実際に作られたLPFが上の写真で、その実測データが左の特性になります。

計算のままの定数で作ると、1.8MHz当たりで-2dBくらいになりますので、C2の2660Pを2100Pに変更してあります。 実物の写真でもC2を作る560Pのコンデンサのリードを半田付けせず宙に浮いているのが判ると思います。

この修正を行っても第2高調波付近の減衰は-35dBくらいを確保できていますので、このLPFで進行します。

使用しましたカーボニルコアはT50-2で、0.5UEWを約30回巻いて5uHをめざしましたが、ぴったり5uHになっていません。 また、7uHも実際は7.14uHになっていましたので、計算通りにはいかないようです。 LPFの各シールド壁を貫通する貫通コンデンサは100Pのものですので、それを加算してあります。

コイルのインダクタンスはこれで計測しました。

160mpwramp_sch

160m_5w_ampunit

そして、上の回路図が、5W QRP AMPの構想レベルです。

下の写真がそれを実際に組んだ状態です。

終段は7MHzと同じ、2SK2796Lのプッシュプルで、そのドライバーは手持ちの関係で2SK2382です。 当初ドライバーをトランジスターで検討したのですが、入力インピーダンスが低すぎて、前段のリニアリティが確保しにくい状態でしたので、ジャンク箱の中で眠っていたスィッチング用高出力のFETを使用する事にしました。  このFETはモールドパックの外観をしており、放熱板にビス止めし、無信号時の発熱を防止すると共に、ソースに0.33Ωの抵抗を挿入し、かつダイオードによる熱補正もかけて安定化を図っています。

次にファイナルにダミー抵抗を接続し、特性の確認をおこないました。 結果はNGでした。 最大出力は10Wくらいは得えられますが、とにかくリニアリティがものすごく悪い。 2トーン信号を加えて波形を見ていると、2Wくらいまではなんとか見られる波形をしていますが、それを超えたとたん波形がゆがんできます。 波形が左右で歪むので、原因はフェライトコアと思われます。

調査した結果、ドライバー段のトランスが原因でした。 このトランスのコアは、7MHzと同じものでしたが、今回のドライバーのFETは電流が多くなっている事に加えて、周波数が低いからと、7MHzのとき1次側が2Tであったものを4Tに替えた事が原因で、コアが磁気飽和したものでした。 そこで、磁気飽和がおこりにくくするため、コアサイズをツーランクアップしTDKのHF70BB9.5x10.4x4.9という品番の変更し、巻き数も2Tにもどしました。 しかし、2Tに戻した事により1.8MHzでのロスが生じますので、2次を4Tにするのではなく、6Tとし、かつ全巻線をバイファイラ巻きとしました。 これらの変更を行った結果2W以上でも歪は発生しなくなりましたが、10Wで歪始める状況でしたので、L3のコアをESD-R-28C-1に変更しました。 また、T4のコアは予定通りESD-R-18SDのままですが、1次側を4T、2次側8Tとしたバイファイラ巻きにした結果、クリップ開始は12Wくらいになり、最大出力は16Wとなりました。

160mpwramp2_sch

上の配線図がこれらの変更を加えた最終状態です。 その最終実装状態は下のようになりました。

10wampwtlpf

5wpep

10wpep


左上の波形が5Wpep、右上が10Wpepの波形で、一応まともな波形をしています。 実際に動作するのはMAX5Wの状態です。

5wpwroutwide

左は5W出力時の広帯域スプリアスデータです。 基本波の前後、百数十KHzの範囲にスプリアスが見えますが、問題ないレベルです。 また、高調波は完全に無視できます。

10Wの時も測定していますが、同じ状態でした。

ただ、リニアリティは、前回の7MHz用10Wアンプに比べ、良くありません。

5Wpepのとき、3次IMDが-28dBくらいでした。 このままでは、SDRの名が廃れますので、ON AIRする訳にはいきません。 

 

 

Imd5wpep_3

詳細調べたところ、ドライバーFETの入力インピーダンスがまだかなり低く、その前の2SC2712のアンプで歪んでいることがわかりました。 そこで、パワーアンプの前にマッチングトランスを置いて、インピーダンスマッチングを行った結果、ドライバー段入力部で3次IMDが-37dBとなりました。 しかし、7MHzアンプでは、この段のIMDは-50dBくらいありました。 そして、5Wpep出力時のIMDは左のデータのごとく-28dBしか有りません。 まず、ミキサーに問題がありそうです。 さらに、ドライバーFETに問題があると考え、手持ちの他のFETやトランジスターに変更してみましたが、どの条件でもあまり変化が無い事が判りました。 ただ、7MHzの時と同じようにドライバーをRF電力増幅用の素子に変えると若干の改善がみられます。 終段の2SK2796Lは7MHzのアンプで実績がありましたので、疑っていなかったのですが、試しに、片方のアイドリング電流を変化させると、IMDのデータが変わります。 どうも、7MHzのアンプは、たまたま特性のそろったFETを使用した為、すんなり好成績がえられましたが、プッシュプルで使用するFETの特性をペアでそろえる必要があるみたいです。 

160mimd

 

そこで、全回路を再点検する事にしました。 DSPの出力をOP-AMPでバッファリングしていますが、このアンプの出力ポイントでの3次IMDは、-60dB以上ありました。 従い、ミキサーに問題があるようです。 前回の7MHzミキサーと異なる部分がありますので、定数を7MHzミキサーに合わせました。 R49は7MHz版には無かったのですが、効果がありそうという事で、追加しました。 その結果、Q4の出力ポイントでの3次IMDは-44dBくらいまで改善しました。 

Pwramp02

Imd5wpep


次に、ドライバーのFETはCB用のトランジスター2SC2078に変更しました。 入力インピーダンスが下がりますが、 トランスを追加しましたので、問題なく動作します。 トランジスターにした事により、出力インピーダンスが変わりましたので、T3の巻き数比を2:6から2:4に変えました。 そして、ファイナルのアイドリング電流をIMDがベストになるように調整した結果、5Wpep時の3次IMDが-35dB、5次IMDが-40dBまで改善できました。
7MHzのようにはいきませんでしたが、一応納得できるレベルです。

  

 

 H3e100pct_2

気にしていました、H3Eの変調波形を確認してみました。 左の波形が100%変調のAMから片側のサイドバンドを削除した状態です。

この波形をエンベロープ検波すると、歪だらけになると思われ、実際に音楽を変調してTS-850にて聞いてみると、歪だらけの音でした。 しかし、音声だけならあまり気にならなく、SSBの時より了解度はアップします。 多分、歪んだ高調波のおかげで、サシスセソの音がはっきり聞こえる為に生じる現象と思われますので、キャリアレベルはSSBの最大振幅の半分(電力では1/4)に設定し、もし、QSOの相手局より歪が多いですと言われたら、H3Eであると言い訳する事にします。

 

これまでの全ての変更を網羅した配線図 160m_tx_4.pdfをダウンロード

 

次は200Wリニアアンプの検討になります。

 


160m SSB 200W リニアアンプ へ続く。
 

INDEXへ戻る

2021年12月31日 (金)

160m SSB送信機 組み立て開始

カテゴリ<SDR> [1.8MHz  自作  dsPIC]

dsPICによるSSBジェネレーターの構想がまとまりましたので、これをベースにブロックダイヤグラムを検討し、実際の送信機製作にかかります。

まず、ブロックダイヤグラムグラムです。

160mtx_block

 今回、製作するのは、上のブロックダイヤグラムの緑色の枠で囲った部分のみです。 リニアアンプは出力5Wくらいのアンプを想定し、この後にさらに200Wのアンプを繋ぎますが、まだ、どのような構想にするか白紙状態です。

構成は、前回の7MHz用トランシーバーと全く同じですが、受信が有りませんので、かなりすっきりとしたブロックになっております。変わったところは、マイクアンプのリミッターアンプとして、ONセミコンのSA2011の手持ちがありませんので、秋月で入手できるNJM2783に変更した事とと、DSPの出力バッファとして3V電源の使用が標準となるOP-AMP AD8352に変更したくらいです。 それに加えて、前回の記事で紹介した周波数関係に修正しました。

160tx_mainpcb

回路の実装は秋月で扱っているユニバーサル基板で一番安い95mm x 72mm片面基板上に行いますが、この実寸大の図面をJWW CADで作成し、それに個々の部品を配置して、全体の信号の配置を把握してから作業にかかります。

左がその図面で、これを作図するようになってから、基板配線の作り替えが無くなりました。

一応、部品の外形寸法は実物を実測したものを使っています。配置が悪くて部品を移動したいときは、JWWの選択機能を使い、移動もしくは、複写で対応します。 実際の配線に移る時に、配線のやりやすい配置が見つかり、このJWW図面の通り出来上がる事はありませんが、それでも最初に作図して置けば、最後に部品を収納できずに基板が2枚に別れるような問題は生じません。

160mtx_mainpcb_front

160mtx_mainpcb_back

160mtx_pwr_suppcb_

JWWの配置図をベースに実装した基板が上の状態です。左が、部品実装面、右が配線とチップ部品の実装面です。今回はdsPICとPICを乗せた基板にRF回路も実装しましたが、電源部分を収納できませんでしたので、左の基板のように、電源部のみ専用の小基板で作成しました。 電源と言っても、12Vの外部電源から5Vの電源を作る事と、受信機やリニアアンプの送受信切り替えなどのインターフェースのみ実装してあります。

これらの基板は、まだ組みあがったばかりで、一部アナログ回路のベース抵抗も未実装です。 これは、信号を加えながら、歪最良点を探した後、固定抵抗に置き換えます。 

これらの回路の仮の配線図です。 160m_tx_0.pdfをダウンロード

まだ、実働テストをしていませんので、この配線図の通りで動作する補償はないのですが、配線図が無ければ、試作もできませんので、とりあえず机上で作成された配線図になります。 リニアアンプ部は仮の状態で、まだ使用する石も決まっていません。

今後、通電テストやソフトのインストールを繰り返しながら完成度を上げていく事にします。

まず、マイクアンプから。 1石アンプの初段のベース抵抗を決めます。 当初の設定は5V電源で47Kでしたが、電源電圧を9V近くまで上げましたから、5V設定時の抵抗のままでは、予想通り波形の半分がクリップしていました。 ここは500KΩの可変抵抗をもってきて、最適値を探したところ、180KΩとでましたので、180Kの固定抵抗に決定。ちなみに、この時の電源電圧は8.5Vでした。 この1石アンプのゲインは計算上で29dBあります。

次に初めて使います、JRCのALCアンプです。 マイクVRの部分で-6dBのロスがありますので、このALCアンプのゲインを40dBに設定すれば、通常のマイクアンプゲイン約60dBになりますので、このALCアンプのゲイン設定は40dBとしました。 次に、出力レベルですが、dsPICのAD入力は3VppがMAXですから、ICとしての出力レベルは、この後に続く、CRによる3次LPFの通過損失をカバーできる4Vppくらいが必要です。 実測値は3Vppくらいいしか有りませんでしたので、ポストアンプで2.5dBくらいのゲインを確保しないといけません。 そこで、初期設定で0dBのゲインにしていたものを、約2.6dBのゲインが得られるよう回路変更しました。

下の配線図で、R13, R14, C5 の追加です。 

160mtx_alcampchange

次にCRによる3次LPFですが、CR LPFを多段接続した時のノウハウがアナデバの技術情報として公開されていましたので、これを利用しました。 公開されているのは2次まででしたが、この考え方で3次を作成したら、良好な結果が得られました。 基本的な考え方はCRによるターンオーバー周波数を一定にしながら、CとRを10倍単位で変化させる事です。 私の回路では、シリーズに入る抵抗の合計は9.9KΩでしたので、82+820+8.2Kの構成で良いのですが、最適なコンデンサの容量を手持ちしていませんでしたので75+750+7.5Kのシリーズ抵抗に0.33, 0.033, 0.0033uFのコンデンサで構成することにしました。 左上の回路図で、R75,R23,R22,C44,C43,C27が該当します。

160mtx_alcampinout

160mtx_alcampfreq

上のふたつのグラフが最終的なALCアンプのデータです。 左上は、外部入力端子から入力を加え、リミッターが動作した時の特性で、オーバーレベル30dBでも振幅を一定に保ち、歪もありません。 マイクアンプとしては、全く問題なしです。 右上のグラフは青の線がALCアンプの振幅制限がかかっていないレベルでの、周波数特性です。 高域は10KHzまでフラットになっています。 赤色のデータは3次のCR LPFを通過した後の、dsPICのAD入力に加わるレベルの周波数特性です。3KHzで約-3dB、10KHzで-20dBとなっています。 18KHz以上の信号が入力されるとエイリアシングノイズが発生しますが、信号源がマイクですので、問題は無いでしょう。 グラフ上では1KHzのレベル差は無しとなっていますが、実際はLPFの前後で2.5dBのゲイン差があります。 このCR定数を決めるのに丸1日かかっていますが、CR多段接続時のノウハウが取得出来た事で大きな成果となりました。 この多段接続の最大のノウハウはLPFへ出力するアンプの出力インピーダンスが、せめて初段の抵抗の半分以下で有る事、シリーズ抵抗の合計値は負荷となるアンプ及びバイアス供給回路からなる負荷インピーダンスの1/4以下である事でした。

ここまで出来たので、次はdsPICの中身になりますが、その前に、システムマイコンをまともに動作させることが先決です。 

以下2022年1月1日からの作業になります。

システムマイコンは、受信機能を廃止するだけで簡単にできると考えていましたが、いつものコネクターのPIN番号の逆順が発生し、1日、棒に振った後、なんとか動作を確認できました。 この確認の最中に、送信インジケーターが抜けていることに気づき、コネクタの変更も生じましたが下の写真のごとく、とりあえず、必要な機能は表面上は正常に動いています。

160mtx_micon

システムマイコンがOKとなりましたので、次はLO2とLO1の確認です。

Lo2_16mhz

Lo1_18mhz

左上がLO2、右上が1850KHz送信時のLO1です。 両方ともスペアナの校正は画面のセンター周波数のみで行われており、表示されている周波数は誤差がありますが、実際の周波数は標準電波で校正した周波数カウンターで、LO2は16003.937KHz付近に、LO1は17879.855KHzに合わせてあります。 LO2は2SC2712によるコルピッツ発振器、LO1はSi5351による可変周波数発振器からです。LO1の10.7MHz付近に-52dBくらいのスプリアスがありますが、これが問題になる事はないでしょう。 その他、高調波も問題になりません。

次は、dsPICによるSSBジェネレーターの確認です。

Lsbout

Cwout

Amout

上の3枚のスペクトルはWSにてPC上に表示させたdsPICの出力です。 dspPICの入力からホワイトノイズを加え、上から順にLSB,CW,AMモードです。 一応期待通りの出力が得られております。 AMはLSBにキャリアを加えただけのH3E形式です。   WSでモニターすると、DSPの中でデジタル的なオーバーフローがある場合、スペクトルがメチャメチャになりますので、適正レベルで動作しているかも一目瞭然です。

これらのレベルは、とりあえず、正常に動く範囲で設定しましたが、最終的には、スプリアスレベルやリニアアンプのリニアリティを見ながら再調整しますので、上の画像が最終状態ではありません。

さて、次は二つのダブルバランスミキサーとスプリアス確認となります。

1.8MHzに変換した後の、16MHzのキャリアリークとUSBイメージは-30dBから-40dBくらいで、全く話にならない状態でしたが、以下のように対策できました。

Tx_out_1r8m

Tx_out_16m_reak

160mmix

左上のスペクトルが1.8MHz LSB出力のワイドバンドです。高調波以外目立ったスプリアスはありません。 右上は、LSB信号の近傍の16MHzキャリアリークとイメージとなるUSB信号のスペクトルです。 キャリアもれは、-62.7dBで全く問題なし。  USBもれは、ノイズに埋まって見えません。(第1ミキサーで、LSB/USBが反転しますので、USBのイメージはキャリアの下(左側)に出ます。) これらの対策は、その下の配線図に赤枠で囲ったコンデンサ、C9及びC25の追加です。 手法は前回の7MHzトランシーバーと同じですが、容量が異なります。  

ここまで、確認した後、第1ローカルOSC(LO1)の周波数校正がまだ終わっていない事に気づきました。 そこで以下の手順でLO1の校正をおこないました。

①TS-930で10MHzのBPM(中国の標準電波)をAMモードで受信します。

②この送信機のLO1の周波数を10000.000KHzに設定し、ビート音を確認します。 そして、ビートの周期が1Hz以内になるように、LO1の設定周波数を変えていきます。 すると、9999.994KHzのとき、ビート音が約0.5Hz(2秒周期)で聞こえます。 この時の周波数と10MHzの比は1.0000006となります。

③この比を現在のSI5351の水晶発振周波数24999633Hzに掛け算すると、24999648Hzとなります。 この状態でLO1の周波数を10,000.000KHzに再設定し、ビート音を確認すると、2秒周期くらいでしたので、さらにSi5351の周波数を1Hz単位で変化させ、ビートの周期が一番ながくなる数値を探します。 結果は24999646Hzのとき4秒周期くらいになりましたので、LO1の校正終了です。 校正結果は10MHzに対して+/-0.25Hzの誤差です。

④次にCW送信状態にして、LO2の周波数を校正済み周波数カウンターで測定し、16003937Hzに合わせますが、トリーマーを調整して、ぴったり合わせるのは無理ですから、+/-100Hz以内に追い込めたら良しとします。 LCDの表示周波数を1850.000KHzに設定しておき、送信周波数を測定します。 そして、測定結果が1850.000KHzになるように、PCのプログラム上で設定した周波数を修正します。 今回は測定された送信周波数が1850.071KHzとでましたので、 LO2の周波数を16003937-71=16003866Hzに設定すると、送信周波数はLCD表示通り1850.000KHzとなりました。 

 

ここまでの配線図(ALCアンプのゲイン設定は60dBのまま) 160m_tx_1.pdfをダウンロード

SSBジェネレーターソフト SSB_generator_160m_0.cをダウンロード

システムマイコンソフト  160m_dspSSB_TX_0.cをダウンロード

SSBジェネレーターのCWとAMのキャリアレベル及びAMの信号レベルは仮の値です。 システムマイコンに追加したCW tone信号は正常に機能し、14KHzのサンプリング周波数で8bitのDAコンバーター(PWM)で出力されています。 トーンは約700Hzの正弦波ですが、トーンの開始及び終わりが必ずゼロレベルになるようにソフトを組み、キークリック音を防止しています。 下の写真は検討の為、仮組した送信機です。

スピーカーへのコネクタとRF OUTのコネクタがどちらもXHタイプの2pinで、このコネクターを間違い、入れ替えて接続してしまい、スピーカーアンプが煙を出して壊れました。 対策として、スピーカー側のコネクタをPHに変更しました。

160mtx_balack

 

以上で、SSBジェネレーターは完成しましたので、次の課題としてリニアアンプの検討を開始します。 その中で、最適なCWキャリアレベルやAMのキャリアレベルを決めていく事にします。

160m SSB送信機 QRP パワーアンプ   へ続く

 

INDEXへ戻る

2021年12月20日 (月)

160m SSB送信機 LO2の決定

カテゴリ<SDR> [1.8MHz  自作  dsPIC]

2020年に160mバンドでのSSB運用が解禁され、夜になると、ちらほらSSBの信号が聞こえます。 前回、7MHz用オールモードのトランシーバーを作成し、実用していますが、コンディションの悪化は一向に解消されす、さらにはレーダーパルスにつぶされる事が頻発して、ON AIRのチャンスが少なくなっていました。 特に夜は、ほとんど国内QSOのチャンスはありませんので、コロナでどうせ暇ですから、160mバンド用のSSBの送信機を作成する事にしました。

dsPICを使ったSSBジェネレーターはそのノウハウが判っていますので、前回のアプローチと異なる手法で送信機を構築する事にします。

まず、最初は2nd IFの周波数をクリスタルフィルターの特性を調べて決め、その周波数データを基に、dsPIcのFoscを決めるという逆のパターンで進めます。

Xtal16m_filter_2

16mhzlpf_schema_negate_2

 

 左上が、測定に使った治具。右上が治具の回路図です。

1st IF用に選んだクリスタルフィルターの周波数は16MHz。 このフィルターの並列共振周波数でイメージを抑圧出来るようにLO2の周波数を割り出せば、自動的にdsPICの中でミキシングするサブキャリアの周波数が決まります。 以下のスペアナの画面は実際に作成したクリスタル3個による実測データです。 通過帯域のリップルが大きいですが、ここをフラットにすると、イメージ信号の抑圧が-50dBくらいしか取れなくなりますので、この状態で我慢する事にします。

Sdr_160mtx_lo2_config1

クリスタルフィルターの直列共振による、ほぼフラットな部分が15994.855KHzから15997.802KHzまでの約3KHzありますので、これをベースにキャリアポイントとして15994.855KHzを選択します。 この時のSSB信号はUSBモードです。 そして、並列共振により、約-59dB以上の減衰を確保出来る周波数帯は、D3の16009.441KHzから、D2の16013.537KHとなります。 そして、イメージとなるLSBのキャリア周波数はこのD2が最高値となります。この周波数関係で成立する為の2nd ローカルOSC(以後LO2)の周波数は16004.196KHzとなります。 ここで、D2とD3の間には4.096KHzの幅がありますので、LSBのキャリア周波数は、後1KHzくらいは低くなってもOKです。 仮に1KHz低くなった場合のLO2の周波数は、500Hz低くなった、16003.696KHzまで、下げて良い事になります。 これらの条件からdsPIC内でミキシングするサブキャリアの周波数は9.341KHzから8.841KHzの範囲にあればOKとなります。 従って、dsPICのクロック条件を設定する場合、この中央値、9.091KHzをターゲットに検討する事にします。  1st IFの帯域の左端にキャリアポイントを置きましたので、AMは単側波帯、全搬送波(H3E)になります。

(注:ここでは、16MHz帯を1st IF  9KHz帯を2nd IFと呼んでいます。)

以上の周波数データからdsPICのクロックを詰めていくと、一番近い周波数の関係は以下のようになります。

160mtx_osc_config

Foscが74.4MHzですから、Fcyはこの1/2の37.2MHz。  ADCのクロックはFcyを1/1024とすると、36.328KHzとなり、サブキャリアはこの1/4ですから、9.082KHz。クリスタルフィルターの特性から導き出されたターゲット周波数は9.091KHzですから、差は9Hz。 従い、サブキャリアを9.082KHに修正し、実際のLO2は16003.937KHzとします。

このようにして作られた第1IFは可変発振器(LO1)とMIXして、送信周波数(TXFreq)へ変換されます。 これらの関係式は以下のようになります。

LO1 = LO2 - Sub Catrr + TXFreq

TXFreqが1800KHzの場合、LO1は17794.855KHzとなります。

dsPICの中でサブキャリアでミキシングしたDSB信号の内、LSB信号をBPFで選択出力し、LO2とMIXした時、USBに変わり、さらにLO1とMIXした時、LSBに戻ります。

これらの数値を使い、dsPICのソフトを開発していきますが、その中身は、前回の7MHzトランシーバーのソフトからOSC関連の数値を変える事と、受信機やその他の不要な機能を廃止する事で完成します。

dsPICの中での処理は以下のブロックが実現出来るように構成しますが、基本は7MHzのトランシーバーと同じです。

160mtx_dsp_block

 

160m SS送信機 組み立て開始へ続く。

 

INDEXへ戻る

2021年12月17日 (金)

とうとう故障・・・修理依頼

Ft991

発売まもなく購入したFT991でしたが、先日突然故障しました。 症状は、FMモードでは問題ないが、その他のモードにしたら、全バンド、受信状態なのに、パワーメーターが赤のマークのあるところまで振れて、音は出ない。 送信にしたら、一応送信モードにはなるけど、電波は出ない。メーターも受信の時と同じ。 工場出荷状態にリセットしても変化なし。 時間を空けて電源をONする度に症状が悪化していきます。

この症状、以前、FT450でも有ったような記憶。どうやら。450と同じ人が設計したソフトみたい。

このような場合、自力での修理は不可能で、さっさと諦めて、八重洲無線のカスタマーサポートへ送る事に。 このカスタマーサポートセンターが福島に移転したようで、広島からの運賃は1950円。

東京より500円くらい高くなって、かつ配達まで2日もかかるとの事。

Ic275

サポートセンターの受付からの連絡によると納期は1~2か月かかるとの事で、このモデルは2mの交信にしか使っていませんでしたので、倉庫に押し込んだICOMのIC-275を引っ張り出す事にします。 もう6年も火をいれていないから動くのかなアと心配しましたが、動作OKでした。

  

2月初旬に、申告された現象が出ないというメールが届いたので、やむなく、ファームウェアのアップデートと動作確認を依頼し、戻ってきました。 いざ、確認すると、HFの全バンドで出力が最大で1Wしか出ません。 VHFはどうかとチェックすると、こちらはOKで、50W出ています。 すぐにサービスセンターに連絡し、着払いで送り返す合意は得ましたが、ちょうど3日連休に入りましたので、その他も調査を兼ねて、再度全バンド、全モードの動作確認を行いました。 430メガバンドの送信テストを行い、HFに戻ると、あら不思議。ちゃんと50Wの出力が出ているではないか。 どうもRESETがかかったようで、設定したファンクションやラスト周波数が全部デフォルトへ戻っていました。 ほんとに直ったのかな?と改めてテストすると、1.8MHz以外全て正常でした。 1.8MHzはCWもSSBも最大で10W しか出ません。 結局、またサービスセンターへ送り返す事に。 サービスセンターが確認したところ、確かに指摘の現象が出ており、原因はファイナルのFET RD100HHF1が不良との事で、これを無償で交換する事になりました。

ファイナルのFETが不良の為、3.5MHz以上は正常に動作するのに、1.8MHzだけが出力不足というのも、ゲセない話ですが、コンベンショナルトランスを使ったファイナルの場合、1.8MHzのゲインが落ちる事もあるので、そんなもんかな? でとりあえず、この修理は終わりました。

今後、様子見ですね、

2023年7月

メイン機だったTS-930Sを売り払い、今はこの50W機がメインになっておりますが、ラッキーがありました。 21MHzで4U1Aというウィーンの国連施設にある局がCWで聞こえます。 交信相手はEUの局が大半でJAから呼ぶ局はちらほらです。 超ナロースカイドアアンテナを使い50Wで呼んでみました。 すると、一発で応答が有り、交信成立。 DXCCエンティティー239番目のNEWになりました。

INDEXへ戻る

2021年11月21日 (日)

dsPICでバンドスコープ 1 

dsPICを使った自作のSSBトランシーバーにバンドスコープを追加しようと、トライしましたが、2nd IFの帯域幅が6KHzしかなく、全く役に立ちませんでしたので、帯域幅をせめて50KHz以上確保できるバンドスコープを一から検討する事にしました。

せっかく作るなら、ダイレクトコンバージョン受信機にして、SSBの復調も出来るものをと、欲張った結果、これが失敗で、2か月も棒に振ることなってしまいました。 その断片はここで紹介しています。

採用したDSPは、2ch同時AD変換可能なdsPIC33CH64MP202、秋月で400円でしたが、前回製作したSSBトランシーバーのようにはいかず、SSBの復調音を出す事にこだわったのがいけなかったようです。 そして、+/-50KHzのバンドスコープとSSB受信機は、400円のdsPICでは両立しないという事を悟る事になってしまいました。

PCを使用したバンドスコープの帯域幅は使用されているサウンドカードの中に有る、ADコンバーターのサンプリング周波数にほぼ等しく、沢山あるインターネット上の解説でもナイキスト周波数以下のプラス周波数とマイナス周波数を使えるから実用可能な帯域幅はナイキスト周波数の2倍、すなわち、サンプリング周波数と同数の帯域幅が得られると説明されています。

また、ダイレクトコンバージョン式の受信機の場合、ADC前のアンチエイリアシングフィルターを簡単にする為、オーバーサンプリングを行い、デジタル処理の中で、デシメーション処理を行い、デジタルフィルターを有効活用すると解説されています。

これらの、情報から、バンドスコープも、オーバーサンプリングやデシメーションが有効であろうと、勝手に判断して、下のブロックのようなバンドスコープを、ああでもない、こうでもないと、さらに1か月もつぶしてしまいました。

Bscopr_block_1

構想は、XC16でFFTの記事で紹介したfft4g.c によるFFTが緑色の部分になりますが、ダイレクトコンバージョン受信機のIQミキサーで作成されたI信号をFFTの入力配列である a[k*2] に渡し、 Q信号を a[k*2+1]に渡して、FFTを実行させ、出てきた実数と虚数のデータをそれぞれ2乗した後加算し、これをLCD Displayで表示するというものです。

左下のLCD画面は、上のブロック図の緑で示すFFTブロックとその後ろに繋がるブロックのみにして、(左側の全てのブロックが無い状態) FFTの実数枠にsin信号を、虚数枠に0.0の数字を入れたもので、出ているスペクトルは+/-15.625KHzの信号です。 右下のスペクトルは、実数枠にはsin信号を、虚数枠にcos信号を加えたもので、-15.625KHzのスペクトルが消えています。 この実験では、サンプリング周波数を50KHzとしましたので、ナイキスト周波数以下の、+/-25KHz、合計50KHzの帯域のバンドスコープが実現できる事を示しています。

256ポイントのFFT結果をLCD上に表示するに当たり FFTが出力した a[] の配列の0から255までが、0KHzから25KHzを表し、256から511までが-25KHzから0KHzを表しますので、グラフ化する時点でデータを並べ替えてあります。

Fftwithimage

Fftnoimage

for (k=0;k<256;k++) {
     a[k*2]=sin(2.0*PI*k*15625.0/50000.0);//spot周波数/サンプリング周波数
     a[k*2+1]=cos(2.0*PI*k*15625.0/50000.0);
//  a[k*2+1]=0.0;
}

FFTexec();//FFT実行

実験に使ったsin cos信号は上記のようなもので、FFTの a[] 配列に代入した後、FFTを実行させています。 a[k*2+1]=0.0; は左側の画面が得られる時の代入式です。 窓関数をかけていませんので、スペクトルが細くなるスポット周波数を選んで実験しました。

また、写真はありませんが、サイン信号とコサイン信号を入れ替えて負の周波数にしてやれば、-15.625KHzのところにスペクトルが現れ、+15.625KHzのスペクトルは消えます。

 

以上の確認が終えた後、実際にブロック図のごとくデジタル処理を行ったのですが、どうしてもイメージが消えません。キャリア周波数から1~3KHzくらいなら-10dBくらいのレベル差はつきますが、それ以上の周波数ではだんだん差がなくなり、25KHzも離れるとほとんどレベル差は無くなってしまいます。 また、正の周波数も負の周波数もそのスペクトルの位置は同じで、グラフ上の右半分しか機能しません。 まる3日、弄り回して、結局判らず、あきらめました。

dsPIcのメモリー容量が許す限り最大のTAP数でフィルターを構成したのですが、ダメでした。 固定小数点が使えないので、極性付き整数計算をしている事が原因かもと考え、FFT単体のテストの時、FFTの入力に加えるサイン、コサイン信号を12bitの極性付き整数とし、これを浮動小数点に変換したもので行っても正常に動作しておりました。

本当の原因は判らないままですが、これでバンドスコープをあきらめたくないので、サンプリング周波数100KHzで正の周波数しか使わないバンドスコープを作る事にします。

Bs_block_2

上がそのブロック図でFFTの虚数枠に加えていたQ信号を切断し、ここには0.0を代入し、かつデシメーション後のサンプリング周波数を100KHzとして、帯域を50KHz確保します。

 

Fft7172a

Fft7172b

上の2枚の画像は7150KHzから7200KHz間の50KHzスパンのバンドスペクトルです。 画面上には50KHzサンプリイングと表示していますが、実際は100KHzです。  ちょうど、レーダーパルスが7100KHzくらいでパタパタと激しく出ており、そのあおりで、イメージ混信だらけになっている状態です。左がパルス有り、右が一瞬パルスが無いときの状態です。

やはりイメージ対策をちゃんとやらないと実用化できないという見本になりました。

半分諦めていたdsPICによるバンドスコープでしたが、サンプリング周波数と同じ帯域幅を確保できるバンドスコープを諦めきれず、何か思いつけば、実験を続けてきました。 そのなかで、以下のように、100KHzのサンプリング周波数で100KHzのバンド幅を確保できる条件を見つける事ができました。

Bs20k

Bs20k_2

左上が7120KHzの信号を受けた状態、右上が7080KHzの信号を受けた状態です。 左の+20KHzのイメージは-30dBくらいを確保して、グラフ上では見えていません。 右の-20KHzでは、-17dBくらいしか確保出来ていませんが、トータルで100KHzのバンド幅を確保出来ています。

この状態を作る条件は以下のブロック構成で実現できました。

Bs_block3

 ダイレクトコンバージョン受信機で、アナログによるIQミキシングを実施した後、OPアンプ2段によるアンプ兼3次のCRフィルターを経由して、dsPICへ加え、ここで100KHzのサンプリング周波数でAD変換した後、いきなり、FFTに接続しました。ADCのデジタル出力には一切手を加えていません。 その結果、イメージの完全除去は出来ませんでしたが、そこそこのスペクトル表示が可能になったものです。 もちろん、IQミキサーとその後段のフィルターがアナログですので、全帯域で90度の位相差とレベル差ゼロを確保するのは難しく、キャリアの位相調整の為に、トリーマーを追加したり、レベル調整の為に半固定抵抗を追加したりして、調整した結果です。 また、0KHzのところに立つスペクトルはDCオフセットが出ているもので、これも半固定抵抗を追加し、オフセットを最小に調整できるようにしました。

色々調整した結果、プラスとマイナスの周波数でレベルが一致しなく、片方をベストに調整すると、反対側のイメージが増加するとい繰り返しで、どこかで妥協するしかありません。 一応20dBくらいあれば、外来ノイズでイメージが判らなくなりますので、実用的には、使えるかも知れません。 実力を見ようと、7MHzをワッチしましたが、いつも以上の強さでレーダーパルスが発生しており、写真に撮るのはまたの機会にします。

この構成の配線図は以下です。 DAC出力は一応オーディオアンプ経由でスピーカーへつながっていますが、実際には使用していません。 この音声出力はイメージ処理をしていませんので、隣のチャンネルの音声がUSBモードで混信します。

dsPIC_Bandscorp_2.pdfをダウンロード 

MCLR端子にあるC24 103Kは時々、ICのIDを返さない原因でしたので、廃止しました。

ソースファイルを以下に示しますが、不要な関数や変数などが含まれています。

Config_BandScorp.hをダウンロード

MAS_Bandscorp_2.cをダウンロード

SLA_Bandscorp_2.cをダウンロード

float_TapFIR_B3k_S200k_T125_BPF.hをダウンロード

Font12.hをダウンロード

FFT関係とその他のフォントはこちらを参照ください。

 

Wf2

左は、64行のウォーターフォールを追加した画面です。

レベルによる色の階調は4bit 16階調とし、1バイトの中に、2ピクセル分のデータを収納し、データメモリー98%の使用状態でなんとか実現できました。

真ん中の赤のラインはDCオフセットの漏れで、右側のレベルの高い信号が本信号で左側の低いレベルがイメージ信号です。 この状態はSSGからATT経由で信号を入れていますので、ノイズレベルが少なく、イメージ信号が、はっきりと見えていますが、実際のアンテナに繋ぐと、外来ノイズによりイメージ信号はわからなくなります。 

実際の7MHzのバンドスコープは下の画像になります。 左下は午後8時ごろの7150+/-50KHzのスペクトルです。この時はレーダーパルスは有りませんでした。 50KHz以上離れた信号によるエイリアシングノイズは取り切れていなく、いくつか表示されています。 右下は、7150KHz付近にレーダーパルスが出ていましたが、低い周波数では、あまり影響がなく、午前10時くらいのスペクトルです。 +/-0KHzのDCオフセットのスペクトルは強制的に表示しないようにしました。

Bandscorp3

Wf12051

このウォーターフォールを実現する為にはMasterのソフトだけを、前述のソフトと交換すれば可能です。

ウォーターフォール付きマスター用ソフト

MAS_Bandscorp_WF.cをダウンロード

 

これらのスペクトルは、AD変換したデータをいきなり、FFTへ渡したもので、例えば、一度、未使用のワーキングレジスタや、グローバル定義した変数に移し、これを元のワーキングレジスタに戻した後、FFTへ渡すと、90度の位相差が崩れてしまい、実質位相差なしとなり、イメージのスペクトルが発生します。 なにが原因なのか判りません。

そこで、バンドスコープはここまでにして、dsPICの正しい使い方を勉強する為に、dsPICの実験に戻る事にしました。 そして、ここに書いたような問題の為、このDual Core dsPIC33CHはSDR向きではない(Microchipはデジタル電源やモーター制御用と言っている)という事が判りましたので、これ以上の検討は中止しました。

 

INDEXへ戻る

2021年10月25日 (月)

dsPIC33CH トラブル事例

<dsPIC33CH Trap Reset モジュロアドレッシング atpack>

New_sdr211025

左は、dsPIC33CH64MP202を使い、SDRを開発しているスナップですが、この開発中に遭遇したトラブル事例を紹介します。

①モジュロアドレッシングの為にワーキングレジスタを専用割り当てした時は、このレジスタをコンパイラーが勝手に使わないように処理する必要がある。

FIRフィルターを2種類設定しリングメモリーを構築する為に、モジュロアドレッシングの設定をおこないますが、ひとつのリングメモリーのコントロールの為に、ひとつのワーキングレジスタを専用に割り当てます。 このワーキングレジスタはW8とかW10が良く使われますが、一旦、この専用レジスタを割り当てた後、他の目的に同じレジスタを使用すると、トラップが発生し、RESETがかかってしまいます。 コンパイラーの説明によると、このように専用レジスタを設定した後は、コンパイラーがこのレジスタを使わない様にユーザー側で設定する必要があると説明されております。

その方法は、MPLAB X XC16 GCCのオプション欄に以下のように記述します。 この例では、W8とW11をコンパイラーは使用しなくなります。

-ffixed-w8  -ffixed-w11    

全て小文字で記述する事。  最初wを大文字にした為、全く効果がなく焦りました。

 

②割り込みにて、トラップが発生し、RESETされる。特に、32bitや64bitの演算のとき、16bit単位の演算途中に割り込みが発生した場合、直前のデータの回復ができなくなる事があり、演算結果に誤りが発生したり、ひどい時はトラップが発生するもの。

特に、C言語で複数の演算式を1行の命令文として記述した時に発生しやすい。演算式をひとつづつに分解して、かつ途中に中継用の変数をおけば、かなり改善される。 それでも、10usecに1回くらいの頻度で割り込みがかかるような場合、かなりの頻度でトラップが発生する。

対策としては、割り込みの周期を変えても良い場合、トラップの発生する演算の期間中、割り込みを遅延させる。 割り込みを遅延させる方法で一番簡単な方法は、該当する演算命令の直前に割り込みの優先順位を0にして、演算が終わったら優先順位を元にもどせば良い。

ただし、ADCのタイミングなどのように周期をずらせない場合、対応不可なので、あきらめる事になります。

この現象はdsPICに限らず、PIC24FJでもFFT処理時、発生していました。その場合、一旦周期的な割り込みを禁止して、FFTの計算をやらせていました。

これらの事が理解できるまで1か月以上かかりました。結局 dsPIC33CHの場合、10usecの割り込みはスレーブ側だけにし、浮動小数点の計算やlong intを扱う演算などは、定期割り込みがかからないマスター側のみで行う事にします。 実際に実現できるかトライした結果OKとなりました。

 

③ レジスタ変数の禁止

古い資料には、ワーキングレジスタを16bitの変数に指定すると、そのワーキングレジスタはコンパイラーが専用と認識し、他の用途には使用されないと説明されていますが、これは当時から非推奨となっていました。 そして、現在は、そのような記述をするとエラーになります。

 

④ Slaveという文字の非推奨

XC16 V1.50で、エラーに近いワーニングが出て、コンパイラをアップデートしろと怒られます。 そこで、V1.70に変更しましたら、今後 Slave という文字は secondary に変えろとコメントが付きます。 この変更を実施したら、コンパイラの出力から赤文字がなくなりました。

 

⑤ 発振回路とPLL設定

SDRとして使う為に、クリスタルによる発振をベースとしたクロック回路を構築しようとしましたが、なぜか、Foscが生成されません。 通常、以下のようにコンフィギファイルを設定しますが、クリスタル発振回路は正常に動作しているのに、PLL回路への信号が途中で途絶えているみたいで、動作しません。 

#pragma config FNOSC = PRIPLL     //プライマリ-オシレーター、PLLモード     
#pragma config POSCMD = HS    //8MHz以上のクリスタル発振

何日も原因が判らず、先へ進めなくなりましたので、クリスタル発振を外部発振回路に変え、コンフィギファイルを以下のように書き換え、OSCの出力にFosc/2が出てくるようにしましたが、信号は有りませんでした。

#pragma config POSCMD = EC           // 外部クロック
#pragma config OSCIOFNC = OFF     //

結局解決できず、再度マニュアルを読み直すと、どの説明も、最初FRCモードで立ち上げ、その後で、外部発振やクリスタル発振モードへ移行する例しか書いてありません。 そこで、そのサンプル通りに設定すると、晴れて、正常にFosc/2が出力され、プロブラムが実行されるようになりました。 このFosc/2がFRCによるものか、外部クリスタル発振器によるものかは、接続した周波数カウンターで簡単に見分けがつきます。 FRCの場合、周波数が1000Hz以上ばらつきますが、クリスタルの場合、バラツキは1Hz以内です。 以前、dsPIC33FJにて、SSBジェネレーターを作った時は、従来のやり方で問題無かったのに、と焦りましたが、動き出しましたので、とりあえず、納得です。

最終的に、コンフィギファイルを以下のように設定した上で

#pragma config FNOSC = FRC           // Oscillator Source Selection (Fast RC Oscillator with PLL module (FRCPLL) )
#pragma config IESO = ON               // Two-speed Oscillator Start-up Enable bit (Start up with user-selected oscillator source)

// FOSC
#pragma config POSCMD = EC     

Mainプログラムの中で、以下のように記述することで、動作OKとなりました。

 // POSCとPLLの設定 FRCで起動して、外部clockのPLLモードへ切り替える

 PLLFBDbits.PLLFBDIV = 100 ; // M FPLL=819.2 Fosc=204.8
 CLKDIVbits.PLLPRE = 3;  // N1 1/3 Xtal=24.576MHz
 PLLDIVbits.POST1DIV = 2; // N2
 PLLDIVbits.POST2DIV = 1; // N3
   
 // Initiate Clock Switch to FRC with PLL (NOSC=0b001)
    __builtin_write_OSCCONH(0x3);
    __builtin_write_OSCCONL(OSCCON | 0x01);
 // Wait for Clock switch to occur
 while (OSCCONbits.OSWEN != 0);//Clock SW 切り替え完了
 while (OSCCONbits.LOCK != 1); //PLL Rock 完了

ちなみに、この設定をdsPIC33FJで行った所、Foscは生成されませんでした。 

 ⑥CCP3の怪

周期割り込み用のタイミングを取る為に、CCP1 CCP2と単純なタイマー仕様で利用していましたが、さらに割り込みが必要になり、同じようにCCP3を設定しました。 設定した割り込みタイミングは約6KHz程度の周期でしたが、出てきたタイミングは、周期が乱れた約850KHzくらいの異常周期でした。 設定が間違ったかと、何度もチェックしましたが、間違っていません。 試しにCCP3の3の数字をすべて4に変えたら、設定通り6.25KHzの周期で割り込みが発生します。

CCP3の異常の原因はわかりませんでしたが、とりあえずCCP4で正常に動作していますので、そのままです。

<半年後に追記>この原因は多分Timer3をADコンバーターのサンプリングレート設定に使っている事が原因かも知れません。

 

⑦DACがsigned intで動かない。 unsigned intオンリーです。

どこかに設定があるかもと、日本語、英語、類似dsPIcの資料を読みあさりましたが、結局、極性付整数によるドライブが出来るという説明は見つかりませんでした。 多分、極性付整数は扱えないのでしょう。 FIRフィルターなどをデジタル処理する上で極性付きはマストですから、DSPの計算部分は極性付きで実行させ、DACに出力する直前にsignedからunsignedへ変換すれば良いようです。

Singned_int

Unsingned_int

左上は、signed intのデータをそのままDACに出力したものです。 右は、DACに出力する前に、データに2048を加算したものです。 12bitのDACですから、その半分のオフセットを加えてやれば、データが全部正の値になりますので、正常に出力出来ています。 ただし、この状態を作る為には、DSP内のデータは整数で有る事が必要で、TAP係数もADCの設定もすべて、signed intにしておくことが必要でした。

  

⑧配列変数の要素数が確保した要素数をオーバーしてもコンパイルエラーがでず、ハングアップする。

通常、配列変数の宣言を要素数を指定して行いますが、誤って、その要素数をオーバーしても、コンパイラはエラーをはかずに、そのままリンク完了してしまいます。 その為、いざRUNさせると、ハングアップを起こし、動かなくなります。 どこでハングアップしているのかを、LED点灯を目印に調べていくと、その原因が要素数のオーバーらしいという事がわかりました。 エラーなしでコンパイル完了したのに、プログラムが止まった場合、最初に疑えば、解決がはやくなりそうです。 XC8では、ちゃんとエラーが出たような記憶でしたが。

 

⑨2021年12月の時点でXC16 V1.70がインストールされている状態で新規にプロジェクトを作ると、Configの記述が変更されており、XC16 v1.50の記述のままではエラーになる。

I/OポートをMasterが使うかSlaveが使うかを記述するときの記号が変更されている。

MSTR → MAIN            SLV1 → SEC1

どうやら、マスターとかスレーブという語句を全て禁止したみたい。 なにもエラーにしなくても、ワーニングにして変更を開示すれば良いのに。   この変更を加えた事により、エラー表示は無くなり、コンパイルが成功するのですが、マスター側は正常に動作しているのに、スレーブ側がランしていません。 まだ、何か変更事項があるらしい。

Microchip.dsPIC33CH-MP_DFP.1.10.223.atpackというファイルをMicrochip(US)のホームページで見つけ、これを下記のようにインストールしたら、スレーブも動き出しました。

Atpack_install ターゲットファイルは、USBメモリーの中にダウンロードしてありましたので、そのファイルを選択するだけです。

Atpack_tgt

 後で判ったのですが、MPLAB Xのupdateリストを調べたら、このatpackもリストの中に含まれていました。 updateファイルは自動的にインストールされる事はなく、MPLAB Xのバージョンアップ時、それまでのatpackはアップデートされるみたい。 このatpackがリリースされたのが2021年11月3日だったようで、マニュアルによるインストールが必要なようです。 このatpackをインストールした後、プロジェクトのプロパティを開き、以下のようにPacksをセレクトすると、このupdateが適用されます。 MainもSecondも両方設定必要です。

After_atpack

これらの設定で、一応スレーブは起動できたのですが、IQミキサーを構成して、IとQの信号を引き算して、DACへ通すと、出力はゼロになります。 これは、IQ信号に90度の位相差が無い事を意味し、以前と同じ状態で、正常に動作していない事を示しています。 さらに、この対応する前はFIRフィルターは機能していましたが、今回の設定でハングアップするようになりました。 これらのソースプログラムは、すべてdsPIC33FJ用として作成され、このdsPIC上では正常に動作し、トランシーバーを実用しているものですが、このdsPIC33CH上では正常に動かないようです。

MicrochipのXC16のバージョン履歴を見ますと、V1.61というのが存在し、これはV1.60のバグフィックス版と説明されていますので、XC16 V1.70またはdsPIC33CHのファームウェアにバグがあるのかも知れません。 しばらく、このICを使うのは延期した方が良さそうです。

一方、かろうじてミキシング動作だけはOKのIQミキサーですが、DACからの出力をオシロで観察すると、無歪で取り出せるレベルは0.18Vppくらいで、スプリアスレベルが-50dBくらいしか確保できません。 実際の送信機の基準レベルは、この限界値より3dBくらい低い値に設定し、これ以上レベルが上がらないようにALCをかけますので、スプリアスは良くても-47dBくらいにしかならず、不適合となります。 これは、12bitのDACによる基本性能によるもので、16bit DACを備えたdsPIC33FJより24dBも悪化しており、受信機に利用出来ても、送信機には使えないという事がはっきりしました。

バンドスコープから始めたこのマイコンの検討でしたが、最終的に、400KHzくらいのキャリアをもつSSBジェネレーターを目標としていましたので、これできっぱりと諦めがつきました。 このマイコンによるSDRの開発は中止する事にします。

 

INDEXに戻る

2021年8月28日 (土)

PICでFFT (XC16でFFTにトライ)

<バンドスコープ、自作,PIC>

デジタルオシロスコープが基本動作としては、可能になり、ADCでデータを取り込む方法、そのデータをTFT LCD上に表示する方法が可能になりましたので、次はいよいよFFTにトライします。 WEB上で色々検索した結果、FFTのいろはも良く判っていない輩にとっては、どれも思考がついていかない為、PICで実行が可能かも知れない大浦先生のC言語によるパッケージを検討する事にしました。 このパッケージは、標準的なC言語で作成されており、該当する変換関数を1回実行すれば、回転因子の作成や、ビットリバースなど全部関数の内部でやってしまい、処理完了したら、入力した同名の配列にFFT結果を返すというもので、中身をよく知らない私には打ってつけのソースです。

さっそく、先生のホームページから、zipファイルをダウンロードし、解凍すると、沢山のファイルとテスト用のサンプルまで同梱されていました。

fftsgと言われる、大浦先生のソースは、XC16でも問題なくコンパイルできます。 動作テスト以前の問題として、全ソースがXC16でコンパイルできるか試したところ、すべてOKでした。

今回、これらのソースをインストールするのは、PIC24FJ64GA002です。 プログラムメモリーは64Kありますが、RAMが8Kしかなく、PICKit3経由でターゲットPICを決め、いざ、コンパイルすると、データメモリー不足で即エラーになります。 トライしたのは、沢山のプログラムの中で、一番高速だと言われるfftsg.cでした。 浮動小数点がdoubleで表現されているので、これをすべてfloatに置換してトライしましたが、やはりダメでした。 そこで、プログラムをfft4g.cに代えてトライすると、メモリー使用量88%でやっとコンパイル成功しました。 大浦先生の解説では、このプログラムが有名なCooley-Tukey 型 FFTで基数型とも言われるものらしく、コンパイルに失敗したソフトはこれより高速なSplit-Radix型と言うものらしい。

高速に越した事はありませんが、コンパイル出来なければ話になりませんので、今回はfft4g.cで進める事にします。

先に、FFTが成功し、例の320x240TFT LCDに表示できたところを紹介し、そこまでの工程を以下説明します。

2ksqw_with_windowfunc

Wg_2k_sqw

左上が、2KHzの矩形波をFFTして、そのスペクトルを表示したものです。 源信号は矩形波ですので、奇数次の高調波がきれいに並んでいます。 右上が、ウェブジェネレーター(WG)で発生させた2KHzの源信号です。 左上の画像で、水平方向は、2KHzスパンでメモリを合わせましたが、垂直方向は校正されていません。単位はdBです。

このc言語のパッケージは、オリジナルがdoubleの浮動小数点形式で作成されており、小規模なマイコン用ではなく、windows95が出たころのPC用に作られていると思われ、メモリーはかなりセーブしているように見えますが、16bitのPICには、まだ無理があります。 そこで、浮動小数点をfloatに代えて、メモリーの量とスピードをなんとかカバーしなければなりません。

FFTを実行する場合、サンプリング数が最小分解能を決めますが、この数は2のn乗でなければなりません。 今回は、LCDの横のピクセルサイズが320しかありませんので、これ以上多くしても表示は同じになります。 そして、320以内に収まる2のn乗の最大値は256ですので、FFTも256個のサンプル数で進めます。 また、サンプリング周波数ですが、バンドスコープで表示しようとしているIF帯域のキャリア周波数が約9.8KHzですから、最高で20KHzまで表示出来たらよいので、サンプリング周波数はその2倍の40KHzくらいで良い事になります。

従い、PICのADCはタイマー3から40KHzの周期で割り込みをかけ、そのたびにADCから10bitのデータを取り出し、これを256個だけメモリーに格納し、割り込みを中止した後、このデータをFFT関数に渡してFFT処理してもらいます。

FFT関数はa[]という配列変数に、「実数」「虚数」「実数」「虚数」・・・の順にサンプル数の2倍の配列数となっており、今回はa[512]の配列となります。 今回のFFTでは、虚数は使いませんので、ADCで得られたfloatのデータを実数部分に、0.0のデータを虚数部分に代入したあと、FFT関数に渡してやれば良いわけです。 下のfor文がそれを実行しているところです。 ADCの出力は符号付きintで取得し、これを512で割って、floatに変換し、a[]に代入しています。 途中のadfloatの変数は、CASTの不安定さを取り除くために、挿入したダミー変数です。これを中継して行わないと、時々プログラムがおかしくなります。

for (k=0;k <256;k++) {
adfloat=(float)ADdata[k]/512;
adfloat = adfloat * hanning256[k];
a[k*2]=adfloat;
a[k*2+1]=0.0;
}

2ksqw_no_windowfunc

 hanning256[k]はハニング窓関数で、この処理をしていないと、左の画像のごとく、低い周波数のすそ野が広がってしまいますので、必ず実行します。

このハニング関数は、エクセルで計算し、それをhanning256.hというファイルに編集してあります。

エクセルファイルの実物は、後で、ダウンロードできるようにしておきます。

このパッケージの中には、FFTの関数として、以下の2つの関数が紹介されています。

cdft: 複素離散フーリエ変換
rdft: 実離散フーリエ変換

両方とも実験したところ、スペクトルが細くなるのがcdftの方で、rdftの場合、窓関数を掛けても左上の窓関数なしのcdftくらいにしかなりませんでした。 また、両方ともメモリーの使用量は同じくらいでしたが、rdftの方が、処理速度が速いようです。 しかし、この実験ではcdftで進行します。

FFTを実行すると、a[]の中に結果が格納されて終了しますが、このデータの中で周波数スペクトルを表す実数はプラスとマイナスが有り、256ポイントの0から127ポイントまでが正の周波数を表し、128から255ポイントまでが負の周波数を表します。 今回の目的は0から20KHzまでの周波数スペクトルを256ピクセルのグラフで表す事ですので、負の周波数のデータが必要ありません。 従いa[]の0番目から127番目までの実数データだけを二乗平方根して、これを256ピクセルに棒グラフで表せれば良いのですが、グラフ画面のチラツキが激しく、安定したスペクトルを見る事が出来ません。 ちなにみ、実数の隣にある虚数を含めて二乗和の平方根とすると、かなり安定した、グラフが得られます。 バンドスコープとしては、この安定した状態のほうが見やすいので、この方法でグラフ表示する事にします。

用意したLCDの表示ピクセルは256ですから、結果的にふたつのピクセル列に同じデータを書き込む事になります。256のピクセルを有効活用しようとすれば、ADCのサンプリング数を512にすれば良いのですが、それを実行すると、即メモリー不足でエラーになりますので、このPICでは出来ません。

この、グラフの縦の目盛は対数としますので、二乗和は行いますが、平方根は実行しません。 この結果対数計算値は平方根を実行した場合の2倍になりますので、この結果に10を掛け算すると電圧レベルのdB値になります。

for (k = 0;k <= 127;k++) {//FFT結果の負の周波数は無視する。
j0=a[k*2];j1=a[k*2+1];
lvl=(int)4*(10*log10f(j0*j0+j1*j1));

lvl = Goffset - lvl;
if (lvl > DSdata[k]) {
      write_HVline(m,DSdata[k],m+1,lvl,backcolor);//xs<=xe ys<=yeの事
     }
     write_HVline(m,lvl,m+1,208,linecolor2);//xs<=xe ys<=yeの事
     DSdata[k] = lvl;
     m=m+2;
    }

 
この辺の計算式は1行で済ませるより、一度変数に格納してから、処理させると、実行時間が早くなるようです。

また、X方向に2ピクセルだけグラフデータを棒グラフで書き込む前に、前回書き込んだデータを消しますが、消す範囲は、今回のレベルより前回のレベルが高い場合のみで、かつ今回分から高かった表示のみ消していますので、グラフ画面全体のチラツキも最小限になっています。

ここまでやって先に紹介したようなスペクトルグラフが得られるわけですが、その処理時間は、実用レベルとはかけ離れていました。

FFTの計算時間は約78msecかかりました。

FFTの計算を含んだLCD描画時間は約120mescでした。

この時間では、実用は無理です。少なくと、現在の120msecを30msec以下にしないとダメでしょう。

結局、Tcyが16MHzの16bitマイコンでは、無理と判りましたので、もっと早く実行できるPIC用のソフトをさがすか、32bitマイコンに乗せ換えるか考えねばなりません。

今回の配線図です。

Fft_test_schema

2ksqw_final

上は、表示レベルを拡大したもので、縦方向のメモリが10dB/divくらいになっています。

この実験に使ったすべてのソースファイルです。 MPLAB Xのプロジェクトは左のようなファイル構成になっています。

Mplab_x0

bandscorp_float.cをダウンロード

fft4g_float.cをダウンロード

FFTexec_float.cをダウンロード

Hanning256.hをダウンロード

Font5.hをダウンロード

Font6.hをダウンロード

ハニング窓関数を作成するエクセル Hanning_coef.xlsxをダウンロード

 

 

 

 

  

 

7mhzband_scrp_0

完成ではありませんが、20KHzまでのスペアナができましたので、自作のSSBトランシーバーの2nd IFの出力につないでみたのが左の画像です。 使ったプログラムは上のソースファイルとは異なる実験用なので、上のソースファイルで左の画像が得られるわけでは有りません。

キャリア周波数が9.766KHzですから、その周波数を中心に+/-4KHzくらいは、反応があるはずと見てみると、LSBとUSBが反転しています。 これは、その通りで7MHzのLSB信号は、2nd IFでは反転し、USBになっていますので、この場合、負の周波数を表示しないと、グラフの周波数が逆になってしまう事を納得。

また、真ん中より少し上に淡い水平一直線のオビが見えますが、これは、ウォーターフォールのディスプレイを実験的に行ったものです。 たった5行のウォーターフォールですので、何がなんだかわかりませんが、このPICの残り少ないRAMを使って作りましたので、これが限界です。 それと、ウォーターホールを含めた、MAINルーチンの1周時間は140msecくらいになってしまい、スペクトルが見慣れたPCのバンドスコープのようには見えません。 この第2IF信号を使ったバンドスコープをしばらく見ていましたが、表示される範囲は、ルーフィングフィルターとなる24MHzのクリスタルフィルターの帯域内のみで、+/-3KHzが表示されるだけです。 HDSDRを経験した身としては、面白くありません。 せっかく作るなら、せめて+/-50KHzくらいはカバーしたい。

 

これらの課題を抱えて、実用的なバンドスコープをどうやって作るか再検討する事にします。

 

INDEXに戻る

2021年8月22日 (日)

PICでオシロスコープ 2

このプロジェクトを始めたのは、自作のトランシーバーにバンドスコープを追加する目的でしたが、その途中のオシロスコープが中途半端に出来上がると、せめてオーディオ信号くらいは、表示できるオシロに仕上げられないかと、開発を継続する事にしました。

前回、PIC24FV32KA302というマイコンで、オシロスコープの基本動作を確認し、LCDに描画された波形を静止する検討を行いましたが、RAMが2Kバイトしかなく、静止する事はできましたが、その頻度が少なく、画面のチラつきが目立つ状態でした。 そこで、RAMが8Kバイトある、PIC24FJ64GA002に変更して、再挑戦です。

Oscv2_schema

 

上が、今回の回路図です。PICは変更してあります。 そして、描画された波形を静止させるためのトリガレベルの調整機能を半固定抵抗で追加してあります。 このレベルはLCD画面の左側に赤色のラインで位置を示し、かつ左下に、ADCの出力レベルをそのまま数値で表示してあります。 この数値はソフトを変更する事により電圧値の表示に変更は可能です。

Osc2_1khzsin

Osc2_10khzsin_2

左上が、Seep時間 500usec/divでの1KHz、右上が100usec/divの10KHzの波形です。

このマイコンのADCは最高500KHzspsのスピードまで可能ですが、右上の時は、457KHzspsくらいでスイープしており、10KHzの波形もなんとか見れる状態になりました。 まだ、スイープタイムの可変機能が有りませんので、プログラムを書き換えて取ったデータです。

この改良型オシロは、デジタルデータを1024ポイント分取り込み、その中で、予め設定したトリガレベルを10番目から712番目までの中から探し、そのメモリー位置から255メモリー分のみLCDへ表示します。 前回のオシロの実験中にも、この機能を入れて検討を行いましたが、検索できるメモリーの範囲が先頭から69番目くらいしか出来ず、たまに、描画できる波形を検出して、LCDに表示しますが、その頻度が1秒間に数回程度でした。 今回は712番目まで検索範囲を拡大しましたので、前回より10倍の頻度で静止波形を描画できるのですが、実際は5倍くらいにしかなりませんでした。 原因を調べるも、良くわからず、不明のまま、完成度を上げていく事にします。(原因が判りました。後述します。) それでも、トリガレベルを起点にきれいに静止した波形を見る事が出来ます。 このソフトは立ち上がりのトリガレベルしか検出していませんが、ソフトをスィッチで選択できるようにし、立ち上がりも、立下りのエッジも検出可能にする事は可能です。

このテストボードには、スイープタイムや入力レベルの設定回路は、付いていませんが、ソフト的には、未使用i/oを使用して取り込み可能です。

また、前回のソフトでは、格子メモリを描画する為に、かなりの時間を必要としていましたので、以前、アンテナアナライザー開発時に得たいくつかの高速描画手法を取り込みました。 斜めのラインは従来のままですが、水平、垂直のラインに限っては、前回のソフトより4倍以上速くなっています。 その上で、波形を3回書き換える毎に格子目盛を再描画して、全体の描画速度を上げてあります。 また、LCDへの書き込みもLCDのWindow機能を最大限に生かすべく、手直ししてあります。

デバッグの為、ADCが出力したデータを数値でLCD上に表示させてみると、同じ数値が二つならんで表示されています。1024ポイントのデータを取得したつもりでしたが、実際は512しか取得していない事が判りました。 原因はADCをスキャンして、入力信号とトリガーレベルを同時に取得した為に発生したようです。 トリガーレベルの取得をやめると、データの取得数は1024になります。 トリガがかかる頻度が予想の半分くらいしかないのはこれが原因でした、

Osc3_1khzsin


そこで、タイマー3による割り込み時は、入力信号のみ取得し、トリガーレベルは、タイマー3による割り込みがかからない時間に、単独で取得する事にしました。 データの更新がほんの少し長くなりますが、LCDに表示される波形が滑らかになりました。 

左の画像は、対策後の波形で、以前の波形より滑らかになっているのが判ります。

 

トリガーレベルの検出頻度が上がって、描画回数は増えたのですが、旧波形をバックグラウンド色で再描画する事により一旦全部消して、新しい波形を再描画するプログラムでは、波形のチラツキは解消されませんでした。 そこで、以前、アンテナアナライザのアナログメーターの指針描画の手法を取り入れ、旧波形のひとつの直線を消したら、同じ列に新たな直線を即書き込むようにプログラム変更しました。 すると、うそのようにチラツキはぴたりと止まり、きれいな静止波形が描画され続けます。 

斜めの線の描画速度を高める為に、線の太さを1ピクセルに限定した高速関数をふたつ作り、従来の関数との描画時間の比較を行いました。

斜め線は開始点がx=20,y=50 終点がx=250,y=150で、左うえから右下へ斜めに走る線です。

① write_Line(m,j0,m+1,j1,0,linecolor);//開始x,y 終了x,y 線幅(0or1) 色
② write_HSLine(m,j0,m+1,j1,linecolor);//開始x,y 終了x,y 色
③ Bresenhamline(m,j0,m+1,j1,linecolor);//開始x,y 終了x,y 色

従来の線幅を変えられる①の関数の場合、描画時間は6.5msec

高速描画の②の関数では、 2.8msec

ブレゼンハムの③の関数では、2.3msec

でした。ただし、③はまだ完成度が低く、線が連続せず、破線としか描画出来ていません。

下の画像は左が①の関数、右が②の関数です。、

 

Normalspeed2khz

Highspeed2khz_2

右側の正弦波はピーク付近で、うまく描写出来ていない波形となっております。 また、チラツキはほとんど無く、差はありません。 結局、オシロスコープの波形表示としては、描画速度より、線の太さを変えられる①の方がメリットがありそうです。 ちなみに、線幅を2ピクセルとした時の先の斜め線の描画時間は8msecで2倍になることはなく、波形がきれいに見えます。

従来の①のみのソース oscillo_64GA_1.cをダウンロード

②と③を選択できるソース oscillo_64GA_hs1.cをダウンロード

Font5_6.hをダウンロード

 

斜め直線では、上記のような描画時間となりましたが、実際の正弦波を描画させた時の時間を検討してみました。

検討に使ったソース oscillo_64GA_hs2.cをダウンロード

この中で、次の6つの関数を計測しました。 いずれも2KHzの正弦波を1画面描画する条件です。

① write_Line(m,j0,m+1,j1,1,linecolor);//開始x,y 終了x,y 線幅(0or1) 色// 
② write_HSLine(m,j0,m+1,j1,linecolor);//開始x,y 終了x,y 色
③   write_HS2Line(m,j0,m+1,j1,linecolor);//開始x,y 終了x,y 色
④   Bresenhamline(m,j0,m+1,j1,linecolor);//開始x,y 終了x,y 色
⑤   write_oscline(m,j0,j1,linecolor);
⑥   write_osc2line(m,j0,j1,linecolor);

①はLCDの全画面に、かつ斜め線の角度の制限なしで線幅を指定できる関数で線幅1ピクセル時の時間は49msec、X及びY方向に各2ピクセル、計4ピクセル描画時63msec。1ピクセルの場合、他の1ピクセル描画の関数と変わりませんが、2ピクセルの場合、X,Y各方向へ2ピクセルなので、水平、垂直いずれの線幅も2ピクセル分となり、特に水平が含まれる矩形波の描画は一番きれいです。

② LCDの全画面に角度の制限なしで描画する線幅1ピクセル専用の関数です。描画時間は22msec。

③ ②の線幅2ピクセル版です。 描画時間は31msec。 2ピクセルはY方向だけで、斜め線や水平直線は2ピクセルで描画しますが、垂直線は1ピクセルの線となります。

④ ブレゼンハムの関数で、線幅1ピクセルのみです。描画時間は10msec。 ただし、破線にしかなりません。 多分、ソースの詰めがまだ甘いのでしょうが、破線を実線に改善すると、当然時間も増えますので、単純見積もりで②と同じくらいにしかならないと思われます。

⑤ オシロスコープの描画ではX方向は常に1ピクセルしか増えないので、その理屈を利用して、掛け算と割り算を無くした関数で、線幅1ピクセル専用です。 時間は12msec。 

⑥ は⑤のアルゴリズムのままで、2ピクセルの線幅にしたものです。描画時間は23msec。2ピクセルはX方向のみで、水平線は1ピクセルにしか描画されません。

Originalline

Original2line

左の画像の内、左側が①の関数による線幅1ピクセルの2KHzです。 右側は、同じく①の関数で線幅2ピクセルです。

この①の2ピクセルが一番きれいに波形を描画出来ています。

Hsline

Hs2line

 この列の左側が②の関数、右側が③の関数になります。③の関数は2ピクセルの線幅なので、斜め線はきれいですが、水平線は1ピクセル時と同じとなります。

 

 

Oscline

Osc2line

この列の左側は⑤の関数による線幅1ピクセルの波形です。1ピクセルの波形では一番きれいに見えます。

右側が⑥の線幅2ピクセルの波形です。③よりラインが滑らかですが、水平線は1ピクセルでの描画です。

 Brezenline

最後の左の1枚が④のブレゼンハムのラインで破線になっています。

結局、実用的オシロスコープの描画関数は波形のきれいさを追求したい場合、①の2ピクセルが最適。 描画の速さを追求したいときは⑤という選択がありそうです。

 

 

Osc2y_2ksq

Osc2_2ksq

気になって、⑥のX方向に2ピクセルした時の矩形波と、Y方向に2ピクセルした時の波形を確認してみました。 左がX方向、右がY方向を2ピクセルにしたものです。 クローズアップすれば、差が判りますが、遠くから見るとどっちもあまり変わりませんでした。

 

これらの検討結果は、本格的なデジタルオシロを自作するときの参考にする事にします。 

 

PICでFFT (XC16でFFTにトライ)へ続く

  

INDEXに戻る

2021年8月14日 (土)

PICでオシロスコープ

「デジタルオシロ 自作 TFT LCD」

自作のSSBトランシーバーにバンドスコープを追加する為には、デジタルオシロスコープで、タイムドメインのデータを収集し、このデータをFFTにて、周波数ドメインに変換して、TFT LCD上にそのスペクトラムを表示させる必要がありますが、前回、このTFT LCDをPICマイコンで制御できるところまでできました。 今回は、アナログ信号をADコンバーターで取り込み、デジタルデータとしてメモリーに記憶させる部分の検討を行います。

バンドスコープの構成上は信号波形をLCD上にグラフィックで表示する必要はないのですが、デジタルデータが目標通り取り込めたかどうかを確認する為に、取り込んだデータをLCD上に表示する事で目標達成とします。

使用するPICマイコンはLCDの駆動に使ったPIC24FV32KA302をそのまま使います。 このマイコンのADコンバーター(以下ADC)は12bit対応ですが、最高サンプリング周波数は100KHzとなっています。 バンドスコープの対象周波数範囲は最高で20KHzであり、100KHzのサンプリング周波数でも十分なのですが、内蔵するRAM容量が2Kバイトしかなく、本格的なデータ収集器にはなり得ません。 その為、基本機能を実現する為のテストバージョンとして、デジタルオシロスコープを作る事にします。

Oscv2_schema_2

 

上が、今回のデジタルオシロテストバージョンの回路図です。 PICの品番はPIC24FV32KA302でRAM2Kバイト品です。

デジタルオシロを安いPICとLCDでいかに実現するかは、実際にやりながら、カットアンドトライしていく事にしました。

AD変換は12bit対応のままで、最高速度で変換させるように設定すると、約75nsecで変換完了する事が判りました。ただし、この場合、AD入力に接続される側の出力インピーダンスを極力小さくして、リニアリティの確保をしなければなりません。実際は低出力インピーダンスのOPアンプで駆動必要ですが、実験では、最高レベル付近でのリニアリティが悪化する事を承知で、発振器の出力を直結です。 発振器の出力インピーダンスは、多分120Ωくらいですので、大きく悪化する事は無いと予想しています。

私は、実際のデジタルオシロがどのような構成で動作しているのか知らないので、表面上の動きから推測した以下の工程で、実現する事にしました。

① ADCはタイマー3によるトリガーで、サンプリングを開始するようにし、タイマー3の周期を変えて、サンプリング周期を設定する事にします。

② タイマー3の割り込みで得られたADCのデジタルデータは、320ワードのメモリーへ記録させます。 サンプリング周期が100KHzくらいですから、C言語で書かれたソフトでも十分間に合います。 メモリー一杯データを記録したら、一旦データの取り込みを中止します。

③ メモリーに記録されたデータをLCD上にグラフとして表示させます。 表示は各メモリーごとのデータを線で結ぶ直線補間方式としました。

④ メモリーのデータを表示し終えたら、また、①に戻りこれを繰り返します。

⑤ ただし、このままでは、先に描画したグラフデータが残っていますので、2回目のグラフデータを書く前に1回目のグラフデータを消す必要があります。 消す方法は、③の書き込み処理をバックグラウンド色で再描画する事により消します。 前のデータを消す方法として、グラフ描画エリア全体を、バックグラウンド色で塗りつぶす方法もありますが、これは結構時間がかかり、グラフィックのチラつきの元になりますので、採用しません。

⑥ オシロスコープですから、LCD画面上に格子のメモリが必要になりますが、今回使用するローコストのLCDグラフィックボードのメモリーは1面分しか有りませんので、この格子パターンも③や⑤の描画で消えてしまいます。従い、⑤のグラフ消し完了後、毎回格子模様を再描画する事にします。

⑦ このオシロスコープは、トリガーなしで、繰り返し描画をおこないますが、そのままでは、前回のグラフデータと同期がとれなく、見た目では、波形が左右に流れる現象が発生します。 この為、繰り返し描画を停止させて、その瞬間の波形のみを表示し続けられるスィッチを追加してあります。

⑧ 通常のオシロはいわゆる「シンクロスコープ」であり、例え繰り返し描画でも、そのトリガーレベルを調整する事により、波形が流れずに、静止して見える機能がありますが、このトリガポイントを検出するには、メモリーが不足し、完全に静止した画面が得られません。 記憶させるメモリーの量を増やし、全く同じ位相のデータを、メモリーの中から拾い出し、それを、続けて描画していけば、波形は静止するはずですが、2Kのメモリーでは実現できませんでした。 これは、PIC24FJ64GA002のRAM 8Kバイト品を入手してから、再検討する事にします。

これらの試行錯誤の結果から得られたLCDの画面は以下です。 ①②⑤⑥③⑦①②・・・の順序で繰り返し動作し、⑧は処理していません。

Iosctest1khz

Iosctest10khz_2

左上が1KHzの正弦波、右上が10KHzの正弦波です。 直線補間していますので、16KHzくらいまでは、それらしく描画できますが、実用的には10KHzくらいまでです。 この時の水平方向のsweep時間をグラフの格子メモリの端から端まで2msecとすると、ADCサンプリング周波数は約133KHzで、PICのスペックをオーバーしていますが、なんとか表示出来ています。

実験に使ったソースは以下です。

oscillo_0.cをダウンロード

Font5_6.hをダウンロード

下の写真は蛇の目基板に組んだテストバージョンのオシロで矩形波を表示させているところです。

Iosctestallview

RAMが2Kしかなかったので、8KのPICに変更します。 この中で、直線や斜め線を描画する、アルゴリズムも改善し、LCDのイニシャライズも修正したプログラムを「PICでオシロスコープ2」 で使っています。

PICでオシロスコープ 2  へ続く。

 

INDEXに戻る