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をダウンロード

最新のソフトウェアです。 2023年12月15日更新

SSB_generator_160m_3.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をダウンロード

 

2024年5月

この送信機には、AM変調の機能がありますが、この送信機を開発始めた時は面倒なので、LSB信号にキャリアだけを追加したA3Hの変調形式でした。しかし、AMで変調した音をTS-850で聞いても歪だらけでした。 そこで、フィルターを変更して、両側波帯のA3に変更する事にし、このAM用FIR BPFの係数を新規に仕入れたrePhaseというアプリで作り、このフィルター係数の検証を兼ねる事にしました。

rePhaseで作ったBPFはキュリア周波数を中心に、150Hz~2750Hzの音声帯域が両側波帯に出来るようにした以下の設定で作成しました。

Am_bpffor_rephase_2

出力された係数ファイルをリネームして、SSBジェネレーターのソフトの中に組み込んで、ソフトを書き換えた結果以下の画像がえられました。

Ammoduration700hz_3

Ammodurationmusic_2

左上が、700Hzの正弦波で変調した送信機出力の波形です。 右上は、音楽を変調中のDSP出力直後のスペクトルです。 右上のスペクトルはBPFの帯域を指定した6.232KHz以下及び11.832KHz以上は綺麗にカットされています。

この変更を盛り込んだソースファイルは以下です。

SSB_generator_160m_2r01.cをダウンロード

float_TapFIR_AM_W36k_T301_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か月もつぶしてしまいました。

Bandscorp2024_2

構想は、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がPWM方式しかなくサンプリング周波数の1/4くらいの信号をクロックを完全に取り除く事は困難で、送信用信号を取り出すには、外付けのDACが必要であろうと推察されます。従い、受信機に利用出来ても、送信機には使えないという事がはっきりしました。

バンドスコープから始めたこのマイコンの検討でしたが、最終的に、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に戻る

2021年8月 1日 (日)

LCD SPC-S95417-AAAをPICでドライブ

SDRのトランシーバーが実用レベルになりましたので、現在は付いていない、バンドスコープの自作にトライしようと考えておりますが、それを実現する為には、デジタルオシロスコープを製作し、記録されたデータをFFT処理して、その結果をLCD上に表示する必要があります。

そこで、まず、この表示用LCDを入手し、そのLCD上に自由に描画できる必要がありますが、以前、アンテナアナライザに採用した、320x240のLCDはそのノウハウを得とくしているものの、値段が1900円くらいまで上昇し、かつ40pinのフラットケーブル用コネクタとこれを半田付けする基板を必要とします。コネクタは通販で入手できますが、これを実装する基板はカスタムとなり、新作するしか有りません。 1回、かつ1台だけの基板を作る訳にもいかず、このLCDはあきらめて、aitendoで扱っている基板付きの中華LCDを使う事にしますが、このLCDに対しては今までのノウハウは通じませんので、まずは、使いこなす事から始めます。

選択したLCDは★2.4インチ★TFT LCD with 基板 [LCD9325D8A]と言う品番で、1050円(税抜き)で売られていました。 動作チェックはされていましたが、PICでは無いので、ソフトは一から作る必要があります。 そこで、このLCD部分の仕様を確認しようと、リンク先をクリックすると、エラー。

インターネットで色々調べると、このLCDはSPC-S95417-AAAという品番の中華製で、携帯ゲーム機に使われていたもので有る事がわかりました。 pdf版の仕様書を入手し、ドライブIC名を探すと、ILI9325というICらしい。 そこで、このILI9325の仕様書を探し出し、ソフト製作を開始する事にしました。

Lcdtestschema0_3

上がLCD実験用のテスト回路図です。 バンドスコープに使用するPICはdsPIC33CHかPIC32MZレベルの32bit品になりますが、とりあえず、16bitのPIC24FV32KA302で、制御の仕方を勉強する事にします。

aitendoの製品は、LCDと基板は半田付けされておらず37pinのFFCを基板に自分で半田付けする必要があります。 フラックスを少々塗ったFFCを電極に張り付け、セロテープでずれないように固定してから、60Wの半田こてで半田を流しこんで、さっと半田切りを行って、目視でOKの判断をした後、通電しても、バック照明用のLEDは点灯しますが、LCD面にはなにも表示されません。 10倍の拡大鏡を使い、37pin全部の半田付け状況を確認したところ、極細の半田くずでショートしている端子が2か所。これを解消して、やっとLCD上になにか表示されるようになりましたが、これから先が悪戦苦闘の連続でした。

 

このLCDのイニシャライズプログラムをインターネット上で探し出し、とりあえず、それをそのままコピペしたのですが、縦横のスキャンやカラーが思ったように表示されません。 やむなく、ILI9325の英文仕様書の関係しそうな項目をGoogle翻訳で訳し、何度も読み直して、やっとわかった事は、このICの標準姿勢は縦長であるという事でした。 私はこれをオシロやスペアナにして使うつもりなので、横長が標準です。 それが判ると、横長に置いて、左から右へ、上から下へスキャンできるようになりましたが、カラー設定が仕様書に記載されたBGRの設定と逆になってしまいました。 結局、この設定が反転した理由が判らないままですが、動作的に異常はないので、このまま行く事にしました。

グーグル翻訳の場合、pdfの文字列の改行の部分で、文章終了と判断する為、日本語の並びに不自然さがありますが、せっかく作った翻訳仕様書ですので、公開して置きます。

ILI9325の和文翻訳仕様書(抜粋版) ili9325.docxをダウンロード

Lcdtest0

左の写真が完成したテストプログラムによるLCD表示のサンプルです。

表示している、文字は、過去PIC用に作成した自作のフォントです。 黄色のフォントは今回、このLCDに合わせて新作しましたが、コードジェネレーターのバグなのかわかりませんが、スペースのみゴミが表示されます。 その内、改善しようと思います。 写真では、LEDシリーズ抵抗として22Ωが見えていますが、この裏側に10Ωの抵抗が付いており、トータル6.8Ωの抵抗となっています。

LCD表示の速さは、使っているPICのクロックが32MHzの為、ILI9325のspecぎりぎりになっていません。 もっと早いクロックでもディレーを挿入する事なく動作するかも知れませんが、それは、実際にバンドスコープを作る時に確認する事にします。

 

黄色の文字のスペースにゴミがある原因を調べていましたら、X方向のbit数が8を超えるフォントの構造に誤りが有る事が判りました。 この構造の誤りがある状態で、LCD上に正常に文字を表示できる、表示プログラムも誤っている訳で、過去作成したすべてのプログラムが間違っている事になります。

今回、フォントコードジェネレーターを作り替え、X方向のbit数に関係なく、正常に構成出来るようにしましたので、8bit以上のフォントファイルも作り替えました。 表示プログラムもフォントのサイズごとに作っていたものを、ひとつの関数で全部処理出来るように変更しました。

テストプログラム lcds95417aaa_0.cをダウンロード

関連フォント Font5_6.hをダウンロード   Font9.hをダウンロード   Font12.hをダウンロード

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

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

 

INDEXに戻る

2021年7月 6日 (火)

DC72V AC/DCコンバーター電源(リニアアンプ用)

 <カテゴリ 電源> [スィッチング電源 ノイズ ラインフィルター 1.8MHz]

200Wのリニアアンプ用として、64V7Aくらいの電源が必要になりますが、アマゾンから購入した中国製のACDC電源3台をシリーズに使い、72V 8.9AのDC電源装置としてまとめました。

Acdcfrontlcd

Acdcback_2

Acdctop

上の写真は、3台のACDCコンバーターを1台の電源装置にまとめた前後パネルの写真ですが、3台のACDCコンバーターは12V30A、24V20A、36V8.9Aの定格のもので、これらをシリーズに接続し、標準で72V8.9Aの定格容量になります。 3台のACDCコンバーターを縦に積み重ねたので、そのままでは、下や中間の電圧調整半固定抵抗を回す事ができません。そこで、積み重ねるとき、少しずつ後方へずらし、長いドライバーで調整出来るようにしてあります。 実際に、200Wリニアアンプを使用するときは、64Vに設定してあり、この時の最大電流は6A程度です。 個々のACDCコンバーターは定格出力の+/-15%くらいは可変できますので、12Vの電源を12.6Vの出力に設定し、24Vと36Vの電圧を調整して、64.4Vくらいになるように設定しています。 電源からのノイズですが、少なくとも、7MHz全バンド内では全く問題なしでした。

Acdcfrontinside

左は、この電源装置の前面パネルを外した状態で、各ACDCコンバーターについているファンの効果が失われないように間隔を確保して組み込んであります。

当初、電源のみで、その出力電圧や出力電流の表示は有りませんでしたが、使っている内に不便を感じましたので、12V、12+24V、12+24+36Vの3種類の電圧と、12V電源に流れる電流を表示させることにしました。電圧表示は、プッシュSWを押すたびにL,M,Hと切り替わります。

電圧も電流も10bitのADコンバーターで読んでいますので、小数点以下1桁の最大3桁表示しかできませんが、目安にはなります。

この表示の為にaitendoで扱っていたACS712という電流センサーを使いました。 ホール素子を使った電流センサーでAC/DC両用ですが、今回はDCしか使いません。

DCで使用する場合、センサー電源が5Vなら、その1/2の2.5Vの時が、電流ゼロとなりますので、ソフト的に、何らかの対応が必要です。

取った対応は、電流がゼロの時の、センサー出力をADCで読み込み、これをEEPROMに記憶させ、電流が流れて、センサーの出力レベルが高くなると、この時の電圧から電流ゼロの時の電圧を引き算し、その値を実際の電流値に換算させる方法をとっています。

この為、プッシュSWを押したまま電源をONすると、キャリブレーションモードになり、電流ゼロの時のセンサー電圧をEEPROMにセーブできるようにしました。

電流、電圧計の回路図とPICマイコンのソフトは以下です。

配線図 IVmeter_01.pdfをダウンロード

マイコンのソフトウェア V_A_Meter_unit.cをダウンロード

 

2022年2月

突然ジリジリと言う音の後、ごげ臭い匂いがして、電源電圧が急激に下がってしまいました。 何が起こったのかと調べると、電流センサーICが黒焦げになっていました。 原因を確かめる為、フロントパネルを開けると、電流センサに接続されるリード線が端子台より外れていました。 ここがオープンになった為に多段接続された電源の負荷側を通って、電流検出のICに逆電圧が印加され、ICが破壊したものでした。 対策は、端子台を接続し直し、ICの電流端子をショートして電流の検出をやめることしか有りませんでした。 とりあえずは動いていますが、対策案が出来るまでは、当分の間電流監視はなしです。 

2022年3月

1.8MHzの200W SSB送信機が出来、この電源を使って、送受信しようとすると、送信時は全く問題はないのですが、受信時に約100KHz置きにビート音が出ます。 しかもそのレベルはS9+20dBくらいです。 狭いSSBバンドですから、ビートを避けてQSOする事も出来ず、このAC/DCコンバーターが発生するノイズ対策がマストとなってきました。 色々と検討した結果、AC入力、及び3台のAC/DCコンバーター出力へ、ラインフィルターを追加することにし、計4台のラインフィルターを手配しました。 新規に手配したのは、2台だけで、残りの2台は6年くらい前に入手し、他の機器で使っていたものですが、それを取り外して、この電源に使います。 4台とも、ACDC共用250V 10A品です。 12Vラインには少し電流不足ですが、止むを得ません。

さらに、このフィルターを含めてシールドする為に、金属製のケースが必要になりますが、 このケースはヤフオクでPCのケースをゲットする事にしました。 PCケースは、そのノイズ対策がマストですので、ノイズを封じ込めるには好都合です。 ケースはタワーPC用で800円でした。 ただし、送料だけで1400円近くになりました。

下の写真がその入手したPCケースで、12VのFANも付いていましたので、これは有効活用しようと思います。 

Pbox_b4side

Pbox_b4_front

Pbox_b4_back

Pbox_aft_left

Pbox_aft_front

Pbox_aft_back




そして、上のように中身を全部入れ替えました。フロントパネルには4個のクロス型メーターを使い、それぞれの電源の電圧と電流を表示させるようにし、従来有ったデジタルの電圧計は廃止しました。 このクロスメーターはSWRメーターの修理残骸から流用しました。 バックサイドには、従来の電源に使用していた端子板を90度回転させて取り付け、おまけで付いていたファンはその下に置き、エアーを吸引してAC/DCユニットへ循環させます。

従来が木製のキャビでしたので、あまり騒音は気にする事は無かったのですが、今回金属になった為、ACDCユニットのファンの音がケースに共鳴して、うるさくなりました。 ただ、QSOには差し支えないレベルです。

肝心のノイズですが、約100KHzおきに発生していたノイズはS3くらいでビート音として聞こえますが、かなり帯域幅が狭くなり、SSBの1845KHzから1875KHzの間では、外来ノイズにかき消されて聞こえません。

使用したラインフィルターはかき集め品ですから、品種が異なります。

AC100VラインはRSHN   12Vと36VはRSEN 24VはRSAN でいずれもTDK製です。 下の特性の内、カラーのデータがRSEN、白黒の左がRSAN、右がRSHNです。

Hsen_spec

Tdk_rsan2010

Tdk_rshn2010

Cosel_filter

12Vラインと24Vラインのフィルターの電流容量が電源定格に対して不足していましたので、新たに30A用と20A用を手配し、左のように入れ替えました。

これで、3台のACDCコンバーターとも定格電流相当のフィルターがそろいました。 特に12V用はリニアの電源以外に、親機の電源もまかないますので、今まで、10Aのフィルターはぎりぎりでした。 また、200WのPWM変調のAM送信機の場合、最大で9Aくらい消費しますので、その他の機器へ並列に電源供給すると、簡単に10Aを超えてしまいますので、これで安心です。

手配したのはCOSELのフィルターで、そのフィルター特性は以下のようになっています。

Coselnbc20472

Coselnbh30432_4

配線図 ACDCpower.pdfをダウンロード

  

2023年9月

調子よく動作していた電源でしたが、突然24V電源が動作しなくなりました。 一度黒焦げになり、自前で修理した電源です。 電源を入れた直後は動作しますが、数10秒で出力がゼロになります。 怪しいところを再半田したりすると、数分間はOKなのですが、それを過ぎると同じ症状になります。 回路図もないしどうにも手に負えませんので、買い替える事にしました。

購入したのはCUREブランド、24V20A、アマゾンで3611円でした。 このくらいの価格なら、壊れたら買い替えるのが得策のようです。 ところで、このACDCコンバーターは昔からありますが、最近価格が上がっていますね。 円安の性でしょうか?

 

INDEXに戻る

2021年5月19日 (水)

7MHz用水平ベントダイポール

<カテゴリ:アンテナ>

国内QSO用に水平ツェップアンテナを使いますが、家の敷地外まで展開する為、使う時だけ架設していました。 性能に不満はないのですが、平日の夜、国内交信をしようとすると、常設の垂直ダイポールしかなく、これが、国内にさっぱり飛ばないシロモノでした。 そこで、常設出来る国内用の水平系アンテナを模索した結果、あまり目立たないLANケーブルを割いて取り出したAWG24のワイヤーを使い、敷地内で完成するアンテナを設置する事にしました。

7mhzbentrstailjpg

左が水平ベントアンテナの構造図です。 一般に言われるベントダイポールより逆Vに近いですが。

3階のベランダに2.7m間隔で長さ3mの釣り竿を2本建て、図のように展開しました。 水平部分は、給電エレメントの片側だけが、水平で、その両脇は、敷地内で地上に向け斜めに張っています。

給電点の高さは10mで、給電点から約2.5m下にある、MTUへ平行フィーダーで接続し、MTUで整合を取っています。

 

7mhzbentswr

調整したSWR特性は、左のようになりました。

国内交信の目的が、AMやSSBでのラグチュウですので、最良ポイント周波数を7150KHzに合わせてあります。 このアンテナでCWの運用する機会は少ないので、これで問題なしです。


水平部分が少ないのに、結構バンド幅を確保できました。 この幅はフルサイズのツェップより広いです。

雨対策として、給電部分のポールの先端にコーラのペットボトルを半分に切って、逆さまにかぶせてあります。

7mhzbentrad

MMANAによるシュミレーション結果は上のようになり、国内QSOには、最適な打ち上げ角と無指向性です。 

耐電力はSSB 200W 、AM 150W(ピーク600W)でもOKでした。

このアンテナの設置場所が、電線から一番離れた位置にある事が幸いし、従来のツェップアンテナよりノイズがSひとつ分だけ落ちました。

 

INDEXに戻る