« dsPICでSSBトランシーバー(製作開始) | メイン | dsPICでSSBトランシーバー(10Wリニアアンプ) »

2020年7月26日 (日)

dsPICでSSBトランシーバー(CW,AMモード追加)

カテゴリ<SDR>

dsPICを使い、SSBジェネレーターと、周辺の回路を検討し、リニアアンプ以外、目標の機能が動作するようになりました。 動作確認できたのは、LSBとUSBの送受信機能だけで、当初の構想である、CWとAMのモードはまだ実装されていませんでした。(前回の記事

次は、CWとAMモードをdsPICの中に追加します。

Modelist_2

上の表は、dsPICの中に組み込まれた、Pre BPF、MIXER、Post BPFがモードにより、どのような動作をするかまとめたものです。 例えば、LSB送信モードの時は、200-2800HzのBPFを通った後、サブキャリアとのミキサーを経て、第2IFのUSBバンドのみを通過させ、LO2(24MHz)との第2ミキサーへ供給されます。 LSB受信モードの場合、PreとPostのBPFが逆になって音声信号を復調します。

CW受信時は、SSBのときと全く同じ動作ですが、Pre及びPostのBPFがCW用の狭帯域となります。 そして、受信の時だけ、LO2の周波数を950Hz低い方へシフトします。 CW送信時は、ADCの出力は使用しませんので、Pre BPFをスキップした後、サブキャリアと直流を掛け算して、約9.8KHzのキャリアのみをミキサーで作り、Keyでon/off出来るようにした後、これをAM用のPost BPFを通して、第2ミキサーへ供給します。 CWのトーン周波数は、当初、750Hzに設定していましたが、ちょうど、スピーカーの周波数特性のディップポイントにはまり、音量が伸びません。 そこで、低周波を手でスイープさせて調べたところ、950Hz付近が一番音量が大きくなる事がわかりましたので、950Hzに変更しました。 このスピーカーの特性も一種のフィルターですから、有効活用です。

Dsp110pctmod

AMの場合、ADCの出力にDC成分を加算して、サブキャリアとミックスすれば、AM信号が得られますので、ADCのレベルとDC加算レベルを調整して、ピークがSSBのピークを越えないAM信号を作り、AM用のBPF(LSB.USB全帯域をカバーするBPF)を通した後、第2ミキサーへ供給します。 この様にしてDSPの中で計算により作られたAM信号は、後段のリニアアンプが飽和しない範囲ならオーバー変調しても帯域幅が広がらない(スプラッタが発生しない)というメリットが有り、例え包絡線検波による復調でも、歪感が少ないという特徴があります。 左上の波形は約110%の変調波形です。 オーバー変調したAM波を聞いても、モガモガ音が少しづつ増えるだけです。  一方、AM受信は、Pre BPFのAM BPFを通した後、その出力のマイナス信号をゼロにします。 ダイオードによるAM検波と同じ理屈で、キャリアの正電圧のみを取り出し、この後にあるミキサーはスキップさせます。 当然、この信号には、キャリアのエンベロープ以外に多くの高調波を含みますが、これらは、Post BPFで除去され、音声信号のみが取り出せます。 この検波方式は、理屈では判っていましたが、はたして、ダイオードによる半波整流をソフトウェアで実行して、ほんとに音声信号が得られるのか不安でした。しかし、dsPICにその仕掛けをすると、ちゃんと音声信号を復調できました。 dsPICに入力された信号の1/2の振幅しか使いませんので、SSB復調時より音量が約半分になります。 よって、AMの時だけ、DACの前でデジタル信号の振幅を2倍にしています。


各モードの送信時のdsPIC出力のスペクトルは以下のようになりました。 上から順に、LSB、USB,CW,AMです。 出力レベルは、dsPICのDACが飽和しない安全なピークレベルに合わせてあります。 これらの確認をする上で、Wave Spectraは大変有効です。

Lsb_tx1

Usb_tx1

Cw_tx1

Am_tx1

CW以外、すべて1KHzでの変調ですが、1KHzのレベルはマイクアンプのリミッターレベルより1dBくらい低いところに設定してあります。 リミッターが動作するレベルでは、歪が3%くらいになりますので、その影響が出ないようにして測定しました。 リミッターIC SA2011の歪特性は、あまり良くなく、これよりさらにレベルを下げても、1%以下にはなりません。 このリミッターICが無い時は、0.3%以下の歪になります。

 

LSBとUSBのデータから、逆サイドバンドの減衰量は-70dB以上ありますので、問題なしです。 また、サブキャリアの漏れは、USBよりLSBの方が悪いですが、それでも-70dBくらいはありますので、これも問題なしです。 最初、このSSBのPost BPFはPre BPFと同じ251タップで設定していましたが、 モードを切り替える時、dsPICをresetする事にしましたので、PreとPost BPFのTAP数を合わせる必要がなくなりました。 よって、音声帯域の BPFを201TAP、サブキャリア帯域の BPFを301TAPに変更しました。

CWは、余計な信号が全くないきれいなスペクトルです。

AMは、100%変調した時のピークレベルがSSBのピークと一致するように、キャリアレベルと変調信号のレベルを調整しました。 この状態は、SSBの最大出力が10Wの場合、AM時のキャリア出力は2.5Wになる事を意味します。

Txout_lsb

Txout_usb

Txout_am

上の波形は、7MHz RF出力で、左からLSB、USB、AMです。振幅は、オシロスコープの入力ATT値が異なりますので、無視してください。

Image_lsb左は、7MHz LSB出力時の24MHz第2ミキサーで生じた24MHz LO2のキャリア漏れと、約20KHz離れたイメージ信号です。クリスタルフィルターのDipポイントに合わせこんだイメージ信号は、約-58dBくらいのレベルになっています。 一方、LO2漏れと表示してあるスプリアスは、第2IFを作る為に加えた約24MHzのキャリアLO2の漏れです。 このミキサーは、アナログ回路によるダブルバランスドミキサーとして、動作しますが、アナログ式によるバラツキの為、-48dBくらいしか減衰していません。 クリスタルフィルターにより、LO2の減衰は-30dBくらい確保していますので、ミキサーのバランス効果は-18dBくらいしかないという事です。 これは、必ず-50dB以下にしないと新スプリアス規制に合致しませんので、対策が必要です。 対策案と実施が出来たら、追記します。

 

対策出来ました。 下は、対策したクリスタルフィルター周りの配線図です。

Counterloreak_schema

Loreaklsb

クリスタルが3個つながる回路のGNDを全体のGNDから浮かし、33PでGNDへ接続。 配線図には有りませんが、T4とT5の間にシールドの仕切りをいれました。 そして、T4とT5のバランス巻線の中点は、10Kの抵抗を介して完全独立としました。 さらに、T5のアンバランスを補正する為に100Pを追加した結果、左のスペアナのごとく、LSB(逆サイド)は-62dB程度まで、24MHzのLO漏れは-57dBくらいまで改善し、新スプリアス規制をクリアしました。  この問題は、アナログSWの2G66周りの配線が、SDR-3で使っていいるアナログSW 1G3157と違うのが原因かもしれないと、昨日、アマゾンで10個311円のこのICを発注したばかりでしたが、不要となりました。

 

当初、dsPIC33FJで不足なら、dsPIC33CHに乗り換えるつもりでしたが、その心配は全くなくなりました。

次は、この回路の中に、エレキーを追加します。 昔作った、PIC12F675をそのまま基板上に載せますが、モニタートーンの周波数は、950Hzに変更します。

Pic12f675add

モニター周波数を変更する事と、Hi-tech CのソースをXC8に置き換える為、新規にプロジェクトを作って、コンパイル、プログラム書き込みをやったのですが、ベリファイの結果、0番地のデータが違うというコメントが付いてエラーになります。 2時間くらい悩んで、判った事は、電源電圧でした。 今回のトランシーバーのメイン電圧は3.3Vです。PIC12F675も3.3Vで動作しますので、PICkit3から3.275Vを供給して書き込みをしたのがいけなかったようです。 プログラム時は5Vの電圧で行い、実際の動作は3.3Vでやれば問題なしでした。 このプログラム書き込み中に他の回路へ5Vが逆流しないように、逆流防止のダイオードを追加しました。 なにせ、前回のエレキー製作は6年前の事であり、すっかり忘れていました。  そして、このドサクサの間に、バグも発見され、それを修復しました。 しかし、バグが有りながら、どうしてまともに動いていたのか不思議です。 このオリジナルソフトはスリープモードが有りましたが、トランシーバー内蔵という事で、少しでも応答を早くする為に削除しました。 この弊害か判りませんが、電源をONした時、一瞬、トーンが聞こえます。 対策として、電源やi/o条件が安定するまで、1秒間のディレーを入れ割り込み開始を遅らせました。 また、950Hzのトーン信号がダッシュとドットで少し違うというバグも修正しました。

CWのセミブレークインを検討する為、dsPICにresetをかけた後、ADCの割り込みが発生するまでの時間を調べてみたところ、約8mSでした。従い、キーdownしてから送信状態になるまで、最低8mSはかかる為、CWの信号は、余裕を見て、11mS遅らせます。 これは、送信信号が11mS遅れるのみで、モニター音や受信音にはミリセックレベルの遅れは有りません。

Cw50ps

Cw150ps_o

Cw150ps_4

上の波形は、CWによるセミブレークイン時の最初の信号の頭切れを観測したものです。 一番上のラインがPIC12F675からのキーイング波形です。 上から3番目が、キーイング開始に伴い、モードを即送信状態にしています。 そして、上から2番目のラインが、ディレーさせたキーイング信号です。 一番下が、実際に送信される7MHzのCW信号になります。 左が、約50字/分の送信時の単点で始まる符号です。 真ん中の波形は150文字/分のコンテストスピードで長点で始まる符号、一番右は、同じく150文字/分の短点で開始した符号です。波形で見る限り、先頭の符号で頭切れを起こしている形跡は有りません。

 

送信時のミキサー出力は、Q6バッファーアンプの出力にて、3Vppあります。ここは、電源電圧11Vで動作していますので、8Vppくらいまでは、アップできますが、そこまで上げるかどうかは、後段のリニアアンプ次第です。 このアンプの動作確認を夜やっていましたら、SSBの入力信号がゼロなのに、この出力が8Vppくらいあります。 

7mhzbpf_1k

しかも、かなり変動しています。 原因を調べると、7200KHz以上にあるAM放送局のキャリアがQSBを伴いながら、漏れてきているものでした。 クリスタルフィルター前のアナログSWの受信出力が、送信側へ漏れています。 対策として、RF段のFETのAGC制御電圧をゼロにすると、トータル100dB以上の減衰が得られますので、送信時、このAGC制御電圧をFETでGNDへ落す事にしました。 

左は、このRFアンプの前にあるBPFの特性です。 配線図の中で、コイルのインダクタンスが1uHとなっていますが、1.5uHの間違いです。 この状態で、夜になると、7200KHz以上のAM放送局のQRMを受けます。 これを少しでも改善する為に、共振回路のQをもう少し上げる事にしました。 コイルインダクタンスは4.7uHか5.6uH当たりがよさそうなのですが、あいにく、Qを管理したチップインダクタは2.7uHか12uHしか手持ちしていません。 帯域が狭くなり過ぎるかもしれませんが、12uHで作り直す事にしました。

Frontend_1

7mhz_bpf BPF部分の各定数は上の回路図のようになりました。 そして、このBPFの通過特性を自作のSGとオシロで実測した結果が上のグラフです。BPFのセンター周波数が7120KH付近で、-3dBの周波数が約7000KHzと7300KHzとなっています。あと50KHzくらい低い方へシフトしたかったのですが、ここでコン尽きて諦めました。

MODEセレクタのボタンを何回か押すと、受信音が聞こえなくなるトラブルが発生し続けていました。 dsPICのソフトの問題か?、コントローラーのタイミングの問題か? と丸1日検討した結果、原因はMODEスィッチのチャタリングでした。 このチャタリングの状況をデジタルオシロでモニターすると、4個あるプッシュSWの内、MODE SWだけが、極端にチャタリングがひどい状態でした。 原因が判ると、対策は簡単で、スィッチの両端に0.47uFのコンデンサを入れ、振動を抑制して解決しました。

前回の記事で、AGCの状況は確認していたのですが、何時間も7MHzをワッチしていると、局により、最初の言葉が歪んだり、音量が急に下がり、無音になるような現象が生じます。 さらに、最大感度が低い為、音量の強弱の差が大きく、特にS7くらいの信号はS/Nは良好なのに、ボリュームを一ぱいに上げても、聞き取れないという問題もありました。 そこで、2nd IF段に約20dBのゲインのあるAGC付きアンプを追加し、弱入力時の音量をアップさせる対策を行いました。 また、AGCのアタックタイムを調整する為に半固定抵抗VR7を追加しました。

2ndif_agcamp

Addvr_agcamp

左上が2nd IFに追加したAGC付きアンプ、右上が、アタックタイム調整用のVR7を追加した回路図です。 このハード変更をした上で、デュアルゲートFETのG2の電圧を変化させた時のATT量を調べ、AGC制御電圧が最適になるようにソフトで、加工しました。

Bf1211_agc

Agcv_curve

 

左上が、FETのG2の電圧を可変した時のデータで、G2電圧をリニアに変化させると、ATT量は対数で変化する事を示しています。 このため、急に信号が大きくなると、必要以上のATTをかける為、音量が消えるという現象が現れる事が判りました。 (これは、間違いで、本当の原因はFIRフィルターによる遅延時間の為、リアルタイムでAGCがかからないのが原因でした。) 言葉の頭が歪むのは、マイコンで処理する遅延時間が影響しているようで、実際に信号が大きくなってからAGCが効き始めるまで20mSくらいの遅れが有る事によるようです。アタックタイムの改善は、現状では無理ですので、せめてATTの効き過ぎによる過渡応答を改善する為に、検出した2nd IFのレベルを圧縮する事にしました。 

S4to30dbin

右上のグラフが2nd IFのレベルをAGCアンプへ出力する間に、レベル変換するカーブです。 このカーブはソフトで、補間して作ってありますが、実際にSSB信号を聞きながら、実験的に合わせこみました。 この対策で、+30dBくらいまでの信号は自然に聞けるようになりました。 左のデータは、S4のノイズ状態から、いきなり+30dB程度の信号が入ったときのデータですが、一番上の2nd IFの信号は、クリップなしです。 しかし、+30dBを超えるような信号の場合、頭で歪ますので、その対策として、アンテナ入力に20dBのATTを追加し、これを必要によりON/OFFする事にしました。

このAGCの問題は、トランシーバーとして完成度が上がるに従い、最大の問題点となって行きました。 そして、AGCの補間処理や、追加したFETへのAGCは廃止されました。 詳細は後述します。

ここまでで、気が付いた問題点は、対策完了しました。 このトランシーバーの受信時の消費電流は、12V電源で180mAです。 これは、移動運用を電池で行う時、役立ちます。 今まで、車で行けない、山頂や電波の飛びそうな場所へ、持っていけるSSBトランシーバーが有りませんでしたので、期待が持てそうです。

ここまでできますと、次は、リニアアンプです。 すでにHDSDR用のダイレクトコンバーショントランシーバーで10Wのアンプは作っていますが、これとは別に新たに作ります。 もちろん、すでに自作した100Wリニアアンプも使えるようにします。

SSBジェネレーター回路図 SSB_generator5.pdfをダウンロード

アナログ回路図 DSP-TRX5.pdfをダウンロード

ここまでのソフトです。 以下のファイルは全て開発途中のものであり、必要により更新されます。

SSB_generator_5.cをダウンロード

float_Tap950_BPF.hをダウンロード

float_TapAUDIO201_BPF_BL.hをダウンロード

float_TapAM301_BPF_BL.hをダウンロード

float_TapCW301_BPF_HM.hをダウンロード

float_TapLSB301_BPF_BL.hをダウンロード

float_TapUSB301_BPF_BL.hをダウンロード

7MHz_dspSSB_TRX_5.cをダウンロード

elekey_950HzMonitor.cをダウンロード  

 

dsPICでSSBトランシーバー(10Wリニアアンプ)へ続く 

 

INDEXに戻る