dsPICでSSBトランシーバー(AGCの改善)
カテゴリ<SDR> [SSB 7MHz トランシーバー 自作]
dsPICにてSSBジェネレーターを作り、送信はLSB,USB,AM,CWすべてが思った以上の完成度で動作するのですが、受信機が、今ひとつです。 その原因は、AGCの動作レンジが狭く、強い信号の頭で波形がクリップし、歪音が発生します。 特に、強力な信号強度で入感するローカル局は、この頻度が高く、せっかくゆっくりラグチューを楽しもうと思っても、気になって仕方がありませんでした。
ちょうど、Step ATTを作ったので、AGCの応答特性を調べてみました。
左(画1)の一番上が、2nd IFのDSP前のアナログ信号です。 Step ATTにより途中で、信号強度を10dBアップした時の波形になります。
10dBアップする前に信号がなくなっていますが、これはATTが切り替わるときに一瞬オープン状態になる為に起こる現象です。
そして、10dBアップした後、約4msec間、レベルを維持した後、AGCのフィードバックがかかりだし、レベルがダウン始めますが、ダウンしすぎて、アップする前の信号より小さくなってしまいます。 この状態は次第に解消して、本来安定すべきレベルに復帰します。 この現象を実際にスピーカーで聞くと、最初の大きな振幅の状態では、波形がクリップし、歪んだ後、急に音量が下がり、ひどい時は無音になって、3秒くらいすると、正常音量に復帰します。
この原因は、AGC用の直流出力を復調前のFIRフィルターの後から拾っている為、約4msecの遅れがあるという事です。 2番目のラインはそのdsPICのPWM出力で、3番目のラインはRFアンプのデュアルゲートFETのG2の電圧波形です。 この出力が、dsPIC内部処理の遅れにより、同様に遅れている為であり、dsPICの内部信号を使ったAGCの場合、避ける事が出来ない現象で有る事を、やっと理解できました。 FIRフィルターによる遅延は直線遅延(全帯域が一応に遅延)で、その時間はTAP数/2をADCのサンプリング周期に乗算した値になるという解説をインターネットで見つけました。 このdsPICで行っているFIRフィルターの場合、301TAPであり、ADCのサンプリング周期25.6usecで計算すると、約3.9msecになります。 実測では4msecくらいとなっていますので、ほぼ合っています。
左(画2)は、AGC用の信号をADCの直後で取り出したものです。 2番目のラインがIF信号のアップに同期して立ち上がり始めていますので、デジタルディレーの時間は、最小になり、約100usecくらいです。 ところが、出力されたDC電圧のリカバリタイムを3秒くらいまで確保する為に挿入したコンデンサ容量とdsPICのPWM出力回路の出力インピーダンスの為、実際にゲインを絞り始めるのは、4msecくらい経過してからです。
そこで、第2IFをダイオードで整流し、得られた直流で2重にAGCをかける事にしました。
左のデータがアナログ検出した電圧とADCの後で検出したデジタル信号を同時にAGC回路へ加えたときのものです。 アナログ検出のAGC回路のリカバリ時間は50msecくらいにしましたので、信号がアップしてから1.5msecくらいからAGCがかかるようになりました。
大きな信号が来るたびに1.5msecくらいは歪むことになりますが、マニュアルのRF ATTと併用して、頭の歪と、強入力時、音量が一瞬下がるという現象はなくなりました。
このAGCの調整は、実際に交信を聞きながらカットアンドトライした方が良いようです。
Step ATTを使い、こうあるべきだと設定しても、聴感上は満足できませんでした。
何度か調整をやり直したり、ハード的にアタック、リカバリタイムを変更している内に、以前のAGCの状態と異なってきました。 昨日までの最良調整状態がくるってしまい、同じように調整しようとしても、同じ状態を再現できません。 原因を調べる事3日間。 dsPICのi/oポートが壊れていました。 壊れた原因は、AGCのアタックタイムを速くするためにPWM出力ポートにいきなり0.1uFのコンデンサを繋いだ事、その端子をPIC16F1983の入力端子へダイレクトに接続した事のようです。 改めて、このdsPICの電気的特性をチェックしてみました。 i/oポートの最大出力電流は、ポートによって若干異なりますが、一番厳しいポートは最大8mAとなっています。 この端子に直接コンデンサを接続すると、i/oポートの出力インピーダンスが100Ωと仮定した場合、ピークで33mA流れる事になり、完全にスペックオーバーです。 また、dsPICやPICのプログラムを書き換える時に、PICKIT3を繋ぎますが、この時のi/o条件は不定であり、端子によっては、Hを出力している事があり、これが接続された相手のPICの出力がLの場合、同様に33mAの電流が流れる事になります。 結局この繰り返しの為、今までPWM出力に設定していたRB5端子が壊れてしまい、まともにPWM出力を出さなくなって、この症状に陥ってしまったようです。
そこで、壊れたRB5は未使用とし、PWM出力端子をRB2へ移し、かつ、端子に直列に470Ωを入れ、ラッシュ電流を8mA以下に抑えて、時定数決定のコンデンサへ接続する事にしました。 また、メインマイコンへPWM出力を渡す回路にもシリーズに10KΩを入れ、dsPICを保護する事にしました。
これらの対策で、AGC回路が正常に動作するようになりましたので、2nd IFから直接取り出したAGC信号とdsPIC内のFIRフィルターを通過した後のAGC信号をMIXして、RFアンプへAGCをかける事にしました。 アナログ2nd IFから検出したリアルタイムのAGC電圧を軽くRF段へフィードバックさせ、FIRフィルターにより遅れたAGC電圧で、さらに強くAGCをかける事により、アタックタイム時の頭の歪と帯域外の信号による空振りのAGCの影響を最小にするように、動作レベルを調整した結果、強入力時の頭信号の歪もかなり改善し、RF ATTをいちいち調整する手間がかなり少なくなりました。
上のAGCデータは一番左が、無信号からいきなりS9の信号を加えた時の2nd IF波形と、AGC用DC電圧の変化です。そして、順に、いきなり+10dB、+20dB、+30dBを加えたときの波形になります。 2nd IFの振幅は+10dBでも+30dBでもほとんど変化がなく、AGCがうまくかかっていることになります。
後は、実際にSSB信号を聞きながら、アナログAGCとデジタルAGCのレベルを調整して最適状態を探る事にします。
土日の2日間、AGCの動作ポイントの調整を行いましたが、アナログ検出のAGCはルーフィングフィルターとなるBW=6KHzのクリスタルフィルターしか利用できないので、2nd IFのFIRフィルターを通過した信号は、6KHzのバンド内にある信号で制御され、つねに音量がフワフワして、非常に聞きにくい状態です。 最終的には、アナログ検出のAGCは、2ndIFが飽和しない程度に弱くかけ、デジタル検出のAGCでたとえ+40dBの信号でも歪まないように深くかける事にしました。 この為、急激な強入力があった場合、頭で一瞬歪みますが、それは1回限りの歪ですので、我慢する事にしました。 さらに大きな信号や、話し方で強弱の激しいSSBの場合、RFゲインを絞る事にしました。
2021年IARU Foneに参加してみました。 送信は全く問題ないのですが、受信がダメですねエ。 送信から受信に切り替えた時、タイミングによってAGCがかかりっぱなしになり、頭の部分が聞こえません。 通常の交信では、大きな声を連続して出す事は少なく、AGC回路の時定数コンデンサの電圧は、次第に低くなりますが、コンテストの場合、つい大きな声で叫んで、即送信終了となる為、受信時より時定数コンデンサの電圧が高くなり、受信に切り替えたとき、音量が下がってしまうのが原因見たいです。 対策として、アナログ検出のAGC入力は、受信信号しかピックアップしないように結線を変更し、かつ、送受信の切り替え時に行うdsPICリセットに同期して、時定数コンデンサを強制放電させることにしました。 また、アナログ検出のAGCループは、時定数を長くして、スローコントロールにすると、聞きやすくなる事が判りましたので、この時定数を決めるコンデンサC52を3.3uFから33uFに変更しました。
FIRフィルターのディレー時間を短くしたら、AGCのアタックタイムも短くなり、もっと使いやすいAGCが実現できるかも知れないと、Tap数を49まで削減し、ディレー時間を1msec以下にしたもので実験しましたが、選択度を犠牲にした見返りに得られる改善度合いはかなり低く、また、従来のFIRフィルターにもどしました。
左は、アナログ検出のAGC回路を追加したdsPIC側の基板です。 なんとか、隙間を見つけマウントできました。
このアナログAGCを追加してから、この自作トランシーバーの了解度がTS-930やTS-850より良いという事もあり、7MHzのワッチはSSBもAMも、このトランシーバーしか使わなくなりました。
アナログによるAGCループがスローで動くと、信号強度に関係するDCレベルは、このアナログ回路のAGC電圧がほとんどとなり、dspの中で検出したデジタル信号のレベルだけで表示しているSメーターは実体と全く異なる数値を表示するようになりました。 Sメーターの為のDC信号はアナログ、デジタルの合成されたAGC信号を使用しないと、まともにSメーターは動作しません。 そこで、Sメーターの信号を合成信号から取り、かつSメーターテーブルをTS-850Sと同じ表示になるように校正しました。 また、従来有った送信時の信号強度表示は廃止しました。
時々、LCD表示と送信周波数が一致しないというバグを修正しました。
オーディオ周波数特性の低音を切りすぎていましたので、FIRフィルターを若干修正しました。 SSBではあまり効果はありませんが、AMモード時は70Hzくらいまで伸びました。
しばらく使っていると、出力波形が振幅変調を受けたように歪ます。原因を調べたところ、電源のSWingに使ったQ7の発振でした。 対策として、C23を0.47uFから10uFに変更しました。
これらの変更を網羅した配線図とマイコンソフトは以下の通りです。
最終更新日2024年11月4日
受信時のスピーカー音量が小さく、ずーと気になっていました。ちょうど、Dspicのメンテの為、AMとCWキャリアの微調整をする機会がありましたので、音量ボリュウームとスピーカーアンプの間に1石アンプを追加する事にしました。 部品箱をひっくり返しても2SC2712が見つかりません。やむなく高周波用の2SC3110で低周波アンプを作り、ボリューム最大で信号が飽和するくらいまで約12dBゲインを上げました。
float_TapAUDIOwide201_BPF_BL.hをダウンロード
float_TapUSBwide401_BPF_BL.hをダウンロード
float_TapLSB301_BPF_BL.hをダウンロード
float_TapCW301_BPF_HM.hをダウンロード
float_TapAM301_BPF_BL.hをダウンロード
160m SSB送信機の記事はこちら。