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 完了

 

 ⑥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ピクセルに棒グラフで表せれば良いのですが、グラフ画面のチラツキが激しく、安定したスペクトルを見る事が出来ません。 ちなにみ、実数の隣にある虚数を含めて二乗和の平方根とすると、かなり安定した、グラフが得られます。 バンドスコープとしては、この安定した状態のほうが見やすいので、理論的なFFTの結果と合致していないかも知れませんが、この方法でグラフ表示する事にします。

用意した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をダウンロード

 

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に戻る

2021年5月 4日 (火)

dsPICでSSBトランシーバー(AGCの改善)

カテゴリ<SDR> [SSB 7MHz トランシーバー 自作]

dsPICにてSSBジェネレーターを作り、送信はLSB,USB,AM,CWすべてが思った以上の完成度で動作するのですが、受信機が、今ひとつです。 その原因は、AGCの動作レンジが狭く、強い信号の頭で波形がクリップし、歪音が発生します。 特に、強力な信号強度で入感するローカル局は、この頻度が高く、せっかくゆっくりラグチューを楽しもうと思っても、気になって仕方がありませんでした。

ちょうど、Step ATTを作ったので、AGCの応答特性を調べてみました。

 

Dsp_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くらいとなっていますので、ほぼ合っています。

Dspagconly

左(画2)は、AGC用の信号をADCの直後で取り出したものです。 2番目のラインがIF信号のアップに同期して立ち上がり始めていますので、デジタルディレーの時間は、最小になり、約100usecくらいです。 ところが、出力されたDC電圧のリカバリタイムを3秒くらいまで確保する為に挿入したコンデンサ容量とdsPICのPWM出力回路の出力インピーダンスの為、実際にゲインを絞り始めるのは、4msecくらい経過してからです。 

 

そこで、第2IFをダイオードで整流し、得られた直流で2重にAGCをかける事にしました。 

Dspanalog

左のデータがアナログ検出した電圧と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をいちいち調整する手間がかなり少なくなりました。

0tos9

0to10db

0to20db

0to30db

上の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フィルターにもどしました。

Newagcampadd

左は、アナログ検出の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に変更しました。

これらの変更を網羅した配線図とマイコンソフトは以下の通りです。

 

最終更新日2022年4月30日

SSB_generator11.pdfをダウンロード

7MHz_SDR-TRX11.pdfをダウンロード

7MHz_dspSSB_TRX_11.cをダウンロード

SSB_generator_11.cをダウンロード

float_TapAUDIOwide201_BPF_BL.hをダウンロード

float_TapUSBwide401_BPF_BL.hをダウンロード

  

160m SSB送信機の記事はこちら

INDEXへ戻る

2021年4月23日 (金)

Step ATT (ステップアッテネーター)自作

受信機を自作していると、安定した微弱信号が必要になってきます。 信号発生器SGは以前、DDS ICで作って有ったのですが、ATTが無い為、受信機の調整には使いづらい状態でした。 そこで、秋月で小さなスライドスィッチを手配し、ATTの抵抗は全てチップ抵抗によるStep ATT(ステップアッテネーター)を作る事にしました。

Stepattsw

左は、今回、Step ATT用に手配した、2.5mmピッチの2回路2接点スライドSWです。 SWのスライド方向のピッチは2.5mmですが、2回路間のピッチは3.3mmであり、ユニバーサル基板が使えません。 従い、ガラスエポキシ両面基板を切り出して、穴あけ加工を行い、パターンはカッターで切り出しました。

インターネットを検索すると、Step ATTの自作例はたくさん出てきますので、このSWを7個並べ、2dBステップで最大84dBのATTを作る事にし、抵抗はπ型でE24シリーズで作ります。 チップ抵抗で作る為、最大通過電力は100mWくらいにしかなりませんが、受信機用なら、問題ありません。

下に配線図を示します。

Stepattschma

Att2db

左は、2dBのATTを1608タイプのチップ抵抗で構成したクローズアップです。 基板はカッターによる削り出しですから、見栄えは良くありませんが、回路図通り、配線できました。

手元に、測定器が無いので、どのくらいの精度で出来ているかはわかりませんが、7MHzの受信機の前に挿入すると、一応はそれらしく反応します。 チャンスがあれば、ネットワークアナライザでS21をチェックしてみる事にします。

 

Stepatt_back

Stepatt_top

厚さ0.5mmの銅板を金切りバサミで切って加工しましたが、側板を半田付けした事により、強度を確保する事ができました。

Stepattdata_2

 

上のグラフはネットワークアナライザによる実測データです。 100MHzくらいまで使えそうです。 -60dBの1MHz以下のギザギザはアナライザのノイズを拾ったもので、ATTが出している訳ではありません。

受信機を調整する時は、必需品になりますが、使ったスライドSWがちいさすぎて、ATTの切り替えはドライバーかピンセットで行う必要があり、非常に使いづらいです。 再度作り替える場合、SWを大きなスライドタイプにするか、スナップSWに変更しようと思います。 また、ネジ止めタイプのBNCコネクタは何度も同軸ケーブルを付けたり、外したりする内にゆるんできて回転するようになります。 これも次回はビス止め可能なフランジ式のコネクタに変更するつもりです。

 

INDEXに戻る

2021年3月13日 (土)

デジタルDC電圧計

[PIC DC100V ]

200Wのリニアアンプが完成しましたが、この電源は65V 6Aくらいの容量が必要です。 そのため、12V、24Vの固定電圧電源と、48Vの可変電圧電源、計3台を直列接続して、65Vの電源を構築する必要がありました。 固定電圧電源は、問題ないのですが、可変電圧電源は、リニアアンプ以外の機器の電源として、利用する事もあり、いざ、リニアアンプを使おうとすると、毎回、電源電圧の確認をデジタルテスターで行うと言う面倒がありました。 そこで、簡単なデジタル電圧計をリニアアンプに内蔵させ、常に電圧のチェックが出来るようにする為、デジタル電圧計を作る事にします。

使用するのは、PIC12F675という8ピンの8bitマイコンと、aitendoで99円で売れられていたLCDです。 このPICはピン数が少ないだけでなく、プログラムROMも、データ用RAMも容量が少なく、電圧計を構成できるか、不安でしたが、なんとか制限容量内に収まり、完成できました。

まず、回路図です。

Vmeter150_chema

測定しようとするDC電圧を抵抗で分圧し、それを10bitのADコンバーターでデジタル化し、その電圧値をLCDに表示するだけの機能ですが、PICの電源は5Vの3端子レギュレーターから供給されますが、この電源がOFF状態で、測定しようとするDC電圧がADの入力に加わった場合、PICがラッチアップする可能性があります。 そこで、PICの電源がOFFの状態で、測定しようとするDC電圧が印加された場合、AD入力にDC電圧が印加されないようにし、Q1でAD入力をショートし、PICの電源がONになったら、Q2でQ1をOFFにして、ADに電圧が印加されるようにしてあります。

この電圧計を完成させた状態で、PIC12F675のプログラムROM使用量は61%、データRAMの使用量は73%でした。

電圧表示は小数点第1位まで表示し、58Vの電源のとき、表示誤差は手持ちのデジタルテスターに対して+/-0.1Vの誤差でした。 ADCの都合から、測定できる最大電圧は100Vですが、10V以下なら、ATTの値を変更する事により小数点以下2桁まで表示する事も出来ます。

Vmeter150_0

上は、バラック状態で約43Vの電圧を測定しているところです。

この電圧計の校正は通常印加するDC電圧を加えておき、市販のデジタルテスターで電圧を読み、同じ表示になるようにVR1を調整するだけです。

これをリニアアンプに実装したのが以下です。

Vmeter150_1

このデジタル電圧計の最大の欠点は、LCDの視野角が狭い事です。 LCDを正面から見ても、文字が良く見えません。 LCDを下から見上げるようにすると、綺麗なコントラストで文字が見えます。 従い、リニアアンプに実装した時は、かなり斜めに設置し、正面からLCDを見たとき、LCDの下側から見上げる角度になるようにしました。

PICのソースコード V_Meter_DC100V.cをダウンロード  

INDEXに戻る

2021年2月18日 (木)

7MHz 200Wリニアアンプ 2

<RFパワーアンプ(リニアアンプ> [FET TR 自作 2SK1530]

スーパージャンクションFETの放熱の限界が見えて、200Wリニアアンプの開発は頓挫していましたが、今になって考えれば、FETを3個も小さな銅片に集中させた事が熱暴走の主因だったと気がつきましたので、まだ諦めきれません。 大きな放熱板にFET1石のみを半田付けした銅板を間隔を開けて実装すれば、200Wも可能かも知れません。いつか再トライしたいと思います。

スーパージャンクションFETの代わりに最新の高fTのトランジスターは使えないものかと、実験を開始しました。 トランジスタは全て秋月で入手できるものばかりです。 用意したのは、時間的な差はありますが以下の3種類です。

Trcomp2全て、オーディオパワーアンプ用ですが、沢山の種類の中から、fTが高そうな石をピックアップしました。 PCの大きさから、プッシュプル回路で、効率が50%とした時、1石のPC相当が出力電力となりますので、いずれも100Wアンプをめざし、それが実現したら、電力合成で200W出力を得ることにします。 今まで、出力の確認はLPFなしの状態で測定していましたが、歪波形の場合、効率が100%を超える事があり、あきらかに誤計測していますので、以降全て7MHzのLPFを通した後の出力をクラニシの電力計で測る事にします。

 

Trcomp2

上のグラフは、候補の3石でリニアアンプを構成した時の入力対主力特性です。VCCは40V、出力トランスは1:4のインピーダンス比に固定した時のデータです。 青色が実測値、赤色は理想特性です。 この中で、最も出力が大きいのはサンケンの2SC3519Aで、他の2石は20%以上少なくなりました。 従い、以降、2SC3519Aに絞って検討する事にします。 

Tramp1

この2SC3519AはVCC=50Vくらいから熱暴走が起こります。 オーディオアンプの場合、エミッターに抵抗を入れるのは常識ですから、この石も抵抗を入れる前提で設計されているのではと考え、以後、0.1Ωのエミッター抵抗を入れ、かつ温度検出用のダイオードは、TRと共締めするのではなく、コレクタフィンに密着させ、かつシリコングリスで覆う事で、70V電圧でも熱暴走する事はなくなりました。

2sc3519a_max

2sc3519a_pp_1

2SC3519Aを70Vの電源で動作させ、最大出力が得られるようにT3の巻き数比を調整した結果が上のデータです。 この時の最大効率は40%くらいでした。 5W入力で90W得られていますが、これはCWの時のみ利用出来る出力で、SSBの場合、少し歪みますが70Wくらいが限界と思われます。 Vccの電圧をこれ以上、上げると、負荷電流が3Aを超えるに伴い電圧が下がってきますので、レギュレーションを確保出来る限界です。 仮に80Vまで上げたとしてもSSB推定出力は91Wくらいです。

この回路で100W以上出す事が出来たら、2台用意して電力合成し、200Wを達成するつもりでしたが、あきらめました。

次は、SiCを含めて MOSFETの安いものが無いか探す事にします。

SiC構造で、1000円以下のFETを探すと、何石か候補が出てきます。 それらのspecを眺めていると、普通のSi構造のFETでも似たような特性を持つFETが、存在します。 

Fetcomp2

上の表に有るFETは、上から順に、E級アンプに良く利用されるIRF640、サムウェイがHF 500Wアンプに使用している2SK2482、JA1QVM OMがブログ上で紹介しているオーディオパワーアンプ用の2SK1530、1000円以下で買えるPd=150WクラスのSiC FET SCT10N120H。 一番下のSiC FETを使ったリニアアンプの記事は、まだ見つかっていませんので、本当にHFのリニアアンプに使えるかは不明です。

その中で、IRF640に注目しました。 このFETはEクラスアンプでの使用例はWEB上に沢山ありますが、リニアアンプに使った例を見た事が有りません。 specシートを見た状態では、Ciss以外、SiC FETに匹敵する数値を示すのに、なぜ使われていないのか? 手元にチップタイプのIRF640Nが2石有りましたので。これを使い確認する事にしました。

Irf640data 上のグラフは、IRF640Nをリニアアンプとして、使用した時の入力対出力特性です。 使ったチップタイプ(表面実装用)のFETを20mm x 30mmの銅板にハンダ付けし、この銅板を放熱板に固定したもので、温度補償用のダイオードは0.3mmの銅板に包んで、ドレインの近くにハンダ付けし、かつ、熱暴走を防止する為、ソースに0.1Ωの抵抗を入れてあります。 青色の直線がリニアリティOKの理想カーブを示しますが、赤色の実測データは、とてもリニアリティが確保されているとは言い難いカーブをしています。 このFETはスィッチング用ですから、VgとIdの間にリニアリティは必要なく、その特性は全く考慮されておりません。 Vddをもっと上げたら改善するのだろうかと、50Vまで上げ、5W入力を10W入力にしたとたん、FETが煙を出して死にました。  このFETではリニアアンプを作れない事が判りましたので、ここで検討は終了です。

そこで、IRF640はリニアアンプには使えないが、2SK2482や2SK1530はなぜリニアアンプに使えるのかをデータシートの中から、考察しました。

Fetcompidvg リニアアンプのリニアリティを見る場合、Vg対Id特性が一番重要ですので、上の4石のFETのVg対Id特性を抜粋しました。 IRF640と2SK2482はIdが対数目盛で作成されていましたので、IRF640のみ、リニア目盛に書き換えてあります。 このグラフを見ていると、どのFETでもグラフの線がほぼ直線になる条件は存在しますが、IRF640の場合、動作領域となるId 3A以下の部分では、直線となっていません。 またリニアアンプとして実績のある、2SK1530はその動作域(1A~5A)で、1A付近はアイドル電流でカバーするとすれば、直線に近くなっています。 特に2SK1530はオーディオアンプ用ですから、このリニアリティの確保に最重点を置いたFET設計になっているのでしょう。

こういう風にみると、SiCのSCT10N120Hもリニアアンプとしてそこそこ使えるかも知れません。 ただし、1000円を切ったとは言え、簡単に飛ばせる価格ではないし、どこのメーカー品を見ても、Vg対Idの温度依存性がSiに比べて4倍くらい悪化しています。 とりあえず、SiCではありませんが、通販サイトで入手した2SK1530で実験を再開する事にします。

190 x 165 x37mmのサイズの放熱板に2SK1530 2石と入出力トランスをマウントし、オリジナルの紹介回路図とは少し異なる回路で検討をスタートしました。 ファンは臨時に直径14cmの扇風機を使用しています。

I200w_2sk1530_2

最初、2石のアイドル電流の調整を1個の半固定VRだけにして、2石合計で0.8Aに設定したのですが、出力が出ません。 入力レベルを1Wにしても、電流だけは4A以上流れますが出力が有りません。 どうも出力トランスで、PPの出力がキャンセルされているようです。 そこで、2石のアイドル電流を個別に測ってみました。 一方が0.7A、もう片方が0.1Aで、0.1A側の出力は位相が反転せず、2石が同相となっていました。 結局、通販で買った4石のFETの特性はバラバラで、アイドル電流は個別に合わせないとアンプとして動作しない事が判りました。 バイアス回路を変更し、アイドル電流を個別に調整できるようにしました。

一応出力が出るようになりましたので、Vd=50Vと60Vでテストしてみました。 入力端子のSWRは1.7くらいです。

Data2sk1530_50v

Data2sk1530_60v

Graf2sk1530_50v

Graf2sk1530_60v

左上がVd=50Vの時の入出力データとそのグラフ、右上がVd=60Vの時の入出力データとグラフです。 Vd=60Vの時、5W入力時、195Wの出力が得られていますが、この測定が終わった直後にFETが熱暴走を起こし壊れました。 ダイオードによる温度検出で、温度補償を行ったつもりでいたが、不十分でした。 今まで、温度補償用のダイオードはFETの樹脂の表面に押し当てていたのですが、どうもうまく温度をピックアップしてくれません。そこで、FETのドレインに一番近い放熱板に押し当てる事にしました。 さらに、安全の為、ソースに0.05Ωの抵抗を挿入する事にしました。 出力が落ちますが、落ちたらVdを上げてカバーします。

Data2sk1530re_50v

Data2sk1530re_55v

Graf2sk1530re_50v

Graf2sk1530re_55v

温度補償用ダイオードの位置を変更し、ダイオードの数も4本にし、かつソースに0.05Ωの抵抗を追加した時のVd=50VとVd=55Vのデータです。 Vd=55V時に飽和しかかりの状態で205Wの出力が得られています。 ここで、ソース抵抗を入れた事により効率も向上しています。 リニアリティの実測データは、100W以下で、多少出すぎになっていますが、温度による差と考えられ、測定の時間差により出てきた数値と思われます。 従い、大きな歪はないと思われます。

使用したRFパワー計がクラニシのMAX200Wであり、長くパワーを印加できないので、オイル冷却のダミーと、コメットのSWRパワーメーターに変更し、60Vで熱暴走の有無を確認する事にします。

現在の状態での配線図は以下です。 トランスに使用したフェライトコアは配線図の中に書き込みました。 使用したケーブルはエーモンブランド0.75SQの自動車用低圧ケーブルで、ホームセンターの車用部品売り場で見つけたものです。

Sch2sk1530

2sk1530_60v

 左のデータはVd=60V時の入出力特性です。 200W出力を2分間キープした後で測定したデータとなります。 さすがに、200Wを2分間もキープすると、焦げ臭いにおいも漂いますが、熱暴走は起こらず、Idは次第に減少していく傾向にあります。 グラフデータを見る限り完全なリニアリティが確保された出力は170Wくらいですが、TSSで200Wの認証を受けるには、ちょうどぐらいの出力です。 

これから、実際のケースに収めて、エージング試験を行い、実用レベルを確かめる事にします。

 

 

 

 

200wpa_unit

従来の100Wアンプユニットを取り外し、今回の200Wアンプユニットをケースに収納しました。 LPFやアンテナ出力切り替えリレー及び、ファンの移動を行い、ぴったりと収まりました。

このケースインした後の確認事項は、電源からアンプまでの配線が長くなったことによる電圧降下と、ファンによる冷却効果です。 以下の配線図のごとく、配線し、順次確認していく事にします。

配線図 PWR-AMP200W_2sK1530.pdfをダウンロード

 

200wpa_unit_tuitate

ケースインした状態で、アイドリング電流の安定度の確認を行いました。 DC61Vの電源で、それぞれのアイドリング電流を0.41Aに設定、合計0.82Aとした状態で、無信号状態で、放置テストをしました。すると、次第にアイドリング電流が増え、3分後には0.98Aまで増えます。 この原因は、ファンの風が、温度補償用ダイオードに直接当たり、FETよりダイオードの冷却効果が大きい事のようです。 そこで、ダイオードとファンの間に、衝立を立て、ファンの風がダイオードに直接当たらないようにしました。すると、5分経過してもアイドリング電流は0.88Aどまりで、増加しなくまりました。

SDRトランシーバーに接続し、2信号特性を見てみました。 電源電圧は無信号送信時64Vです。 この状態で、アイドリング電流を各0.41A 合計0.82Aに合わせ直してあります。 

Sdr100wpep

Sdr140wpep

Sdr200wpep

 

左から順に100Wpep,140Wpep,200Wpep時の2信号特性です。 従来の100W機よりは改善しておりますが、200Wフルパワー時はかなりつぶれます。 マイクアンプリミッターによる出力制限を200Wに置いても、電源電圧や、ファイナルのFETで決まるリニアリティ悪化開始出力が200Wに近かったら、先頭波形がつぶれるのは止むを得ません。 

140waging

アンプのケースを完全にかぶせた状態ではありませんが、200Wで2分連続、140Wで30分連続のエージングテストを終了し、残すところ、ケースに完全収納し、実際の設置状態でのエージングテストを実施するのみとなりました。 左は、オープン状態でのエージング風景です。 200W連続の時のドレイン電流は下がり気味でしたが、140W時のドレイン電流は開始から終了までの間に20mA増加しました。 エージング終了時に入力をゼロにした時、急速に元のアイドリング電流に戻ろうとしますが、その時間は5分くらいかかりました。 

200wagingcomp

Botom_open

リニアアンプユニットにケースの上蓋をかぶせ、最終チェックです。 200Wで2分間、続けて140Wで30分間エージングした結果、200W時の電流変化はオープン時と同じでしたが、140W30分のエージングの間、電流の変化は5mA以下の減少となりました。 推測ですが、ファンによる風量は変化はないものの、ケースがかぶさった事により、風速が上がり、冷却効果を高めたものと考えられます。 140W出力から信号をゼロにすると、元のアイドリング電流に戻るのに、4分弱でした。 ケースをかぶせた場合、良くなっているようです。 放熱板の下の底板は右上の写真のように、大きな開口になっており、ここからエアーを吸い込みます。

140Wを30分間も連続送信するような実使用は無いでしょうから、以上のテストで、安心して運用出来ます。

200wsprias

200W出力時のスプリアスは左のようになりました。 7MHz近傍のスプリアスはdsPICトランシーバー由来のもので、リニアアンプ有り無しで変わりませんが、高調波は、第2高調波が-62dBくらい、3次以上はノイズに隠れて見えません。 いずれのスプリアスも新スプリアス規制に合致しています。

このリニアアンプは最大出力が300W以上あり、200Wに制限する為に、マイクアンプにリミッターICを使用し、大きなマイク入力が有っても、200Wを超えないようにして有ります。 また、CWのキャリアレベルも200Wを超えないようにdsPICの中で固定してあります。 AMの場合、AM100%変調時のピーク値が200Wを超えてもOKなので、キャリアレベルで60Wに設定してあります。 最終的な電源電圧は、12V+24V+36VのDC電源の電圧を調整し、アイドル状態で64.1V、200W出力時63.5Vで、200W出力時の入力は4Wになりました。

Pa200w_vmeter_2

DC電源を3台合成して使う関係で、電源電圧の監視がマストになりますので、上の写真のように、簡単なDC電圧計を追加しました。 この電圧計は+/-0.1Vの精度があります。 写真に写っているQRPトランシーバーの記事はこちらにあります。

 

2021年3月

そして、下記ブロックダイアグラムを添付してTSSに認定申請する事にしました。

SDR_200W_TX_BLOCK.pdfをダウンロード

TSSに申請して2日後に、SSBジェネレーターについて、質問がありましたが、最終的に上のブロック図のごとく修正して、1週間でTSSの認可が降り、即日(金曜日)、総通へ申請したところ、次の週の水曜日には審査終了となりました。 今回も指定事項の変更は無いので、即ON AIRできます。 ただし、実際にON AIR出来るのは、次の土曜日です。

その土曜日の朝からZeppアンテナを張り、200WでCQを出しましたが、QSOには至りませんでした。 コンディションが悪いですねエ。

 

2021年4月

トラブル発生です。 交信中に突然、電流が15Aとなり、FETがショートモードで死んでしまいました。 とりあえず、TS930SをONして、ファイナルだけは送った後、ケースを開けてチェックしました。 原因は、FETを止めるビス穴がバカ穴になっており、FETが放熱板に密着しなくなったものでした。 放熱板に切ったタップがバカになっており、きつくビス締めしてもFETが指で簡単に回転してしまいます。 

Fetholder

Nfresistor

対策は、左上の写真のごとく、アルミ板をコの字型に加工し、これを生きているタップ穴を使い締め付けました。 また、このFET交換に伴い、取り外したNF用のCR回路に使った1/6W 1KΩの抵抗が黒く焦げていました。 この焦げはPPの両方のFETとも同じようになっていましたので、サイズが3倍くらいある、公称1/4Wの抵抗に変更しました。 FET交換後、バイアス電流を64V時、0.4Aづつ合計0.8Aに合わせて、簡単な動作チェックを行い、200W出る事を確認して修理完了です。 今回の事故で2SK1530のストックがなくなりましたので、手配して置かないと危ないですね。

予想は的中し、もう片方のFETもビスバカで壊れてしまいました。 放熱板のアルミ材に粘り強さがなく、タップを切っても、綺麗に切れず、ボロボロになった上、長さの短いビスの為、タップ穴を貫通していなかった事が要因みたいです。 もう片方も写真と同じように追加加工を行いました。 このトラブルが発生したのは、2SK1530が入手できた次の日でした。 ラッキー!

そして、3回目のトラブル。 最初のトラブルの場合、FETの絶縁にはマイカを使用し、シリコングリスたっぷりで固定しましたが、2回目のFET交換時、シリコンラバーで絶縁しました。 そして、このシリコンラバーで絶縁したFETが、またも破壊しました。 修理は、最初のFETと同じく、マイカとシリコングリスで行いましたが、大丈夫だろうか?

後日、インターネットで検索すると、シリコンラバーよりシリコングリスの方が熱伝導は良好であるけど、マイカはラバーより劣るとの事。 使ったマイカはFETサイズの半分くらいのサイズで、単に絶縁するだけの機能とし、残り半分の面積をシリコングリスのみで絶縁した事になりますが、その効果はいかに。 5月連休中、毎日1時間以上の交信を行いましたが、異常なしでした。

 

2021年7月

順調に運用を続けてきたリニアアンプでしたが、6月末、交信中にFETがショートモード壊れてヒューズが飛びました。 当然、交信は尻切れで終了。 原因は、熱暴走のようでした。 翌日、FETを交換し、ダミー抵抗を使って、修理確認をしていたところ、電流は流れますが、出力が半分くらいしか出ません。 原因はなんだろうと、入力電力を10Wまで上げたところ、また、FETがショートモードで壊れてしまいました。 仕方なく、手持ち最後の2SK1530に交換したのですが、この交換したFETでも出力は半分しか出ず、最大出力は120W位で、効率も従来の半分くらいでした。

2現象オシロを持ってきて、ゲートやドレインの波形を観測すると、ゲートは正常ですが、ドレインの波形は、正弦波のピークが折り返してつぶれています。 どうも、終段のトランスT2の磁気飽和のようです。 今まで、パワーに対して、あまり大きくないフェライトコアを使用していましたが、プッシュプルのFETのドレイン電流が、フェライトコアの中で、直流による磁界をキャンセルさせていたので、大きな問題になりませんでしたが、FETを交換した事により、DCバランスが崩れ、そのため、フェライトコアが磁気飽和を起こし、FETの熱破壊が早まったのが原因のようです。 このリニアアンプの検討の初期段階で、アイドル電流の調整を1個の半固定抵抗で行った為、ドレイン電流がアンバランスになり、出力がさっぱり出なかった事がありましたが、察するに、この時もフェライトコアの磁気飽和が原因だったと思われます。

そこで、現在ZCATタイプのコア1個で作られているトランスをコア2個とし、かつ、インダクタンスも可能な限り少なくすることにしました。

従来のトランスのインダクタンスは129uHくらいでしたが、これを110uHくらいまで減少させ、ドレイン電流のアンバランスによる磁気飽和の起こる確率を1/2以下にしました。 また、トランスをバイファイラ巻きで作っても、完全なバランストランスは不可能ですので、FETのバラツキと反対のバラツキになるようにトランスの接続を選択する事にします。

Inoutvsrb 上のデータは、熱暴走防止対策として、ソース抵抗を0.05Ωから0.1Ωに変更し、終段のトランスT2のコアをZCAT-3035-1330 2個使いとし、巻き数は3.5ターンの状態で、巻線の接続を入れ替えたデータの比較です。 表にあるLは巻線のインダクタンスで単位はマイクロヘンリーです。 VGはアイドル電流を0.4Aを流すためのゲート電圧です。 数値的に大きく離れているわけではありませんが、これだけの差でフェライトコア1個の場合、磁気飽和を起こしていました。 左のデータは理想値に対して、200Wまで直線に伸びていますが、右側のデータは150Wを過ぎたあたりから、理想値より出力が伸び悩んでいます。 多分この伸び悩む原因がコアの飽和現象ではないかと思われます。

今回の修理は、上の左側のデータになる状態で収束させる事にしました。 200Wを出す為の入力は従来の4Wから4.5Wにゲインダウンしましたが、QRPトランシーバーの出力はMAX4Wのままで据え置き、最大180Wくらいで運用する事にします。

今回の修理で2SK1530の手持ちがなくなりましたので、手配して置くことにします。

200wpa_mk3

フェライトコア面に書かれた1530は1330の誤りです。訂正して置きます。

 

200wpa_3

配線図 PWR-AMP200W_2sK1530_2.pdfをダウンロード

 

このリニアアンプに2MHzのLPFを追加し、2-Band仕様にした記事はこちらにあります。

 

INDEXに戻る

2021年1月26日 (火)

中国製 ACDCスィッチング電源の修理

Acdccomp

 リニアアンプ駆動用に24V20Aという中国製のACDCスィッチング電源を購入したのですが、使い始めて2日目に誤って出力をショートしてしまい、煙を出して壊れてしまいました。 この種の電源には通常保護機能が有り、ショートが発生すると、自動的に出力OFFになる物が多いのですが、価格が安いので、そこまで対応していないようです。

物は、アマゾンで見かける左の外観をしたACDCコンバーターです。 購入金額は3580円でしたので、修理しても、修理代が高いのではと、1か月以上放置してありました。

 

最近少し、暇になりましたので、修理できないものかと、分解してみる事にしました。

   

Acdcb4_1Acdcb4_2_2

 

中を開けてみると、ファンの近くに黒焦げのFETかTRか判らない石が2石並んでおり、半田付けされた基板も黒焦げなっていました。 完全にすすけた表面を拡大鏡を使って調べるとメーカー名は不明ですが「13009」という文字が読めます。「13009」をインターネットで検索すると、「BJT 13009」という文字が検索されました。 BJTとは、バイポーラジャンクショントランジスタの事で、一般に言うトランジスターの正式名称です。 通販情報を探すと、ONセミコン製でRSでも扱っています。 400V12Aという極普通のトランジスタですが、実装されていた石は中国ブランド品みたいで、パッケージがTO-247タイプです。 ONセミコン製はTO-3Pタイプで少し形状は異なりますが、実装は可能です。  価格は1石183円、ただしMOQ=5ですから、税と送料を入れると1500円くらいになります。 

Acdcb4_3

このTR以外に壊れた部品がないか調べていくと、「茶黒金」のカラーコードのある抵抗が無限大Ωを示します。 表示から0.1Ω、形状から1Wくらいの抵抗ですが、断線しているようです。 幸い、3Wですが0.1Ωの抵抗は手持ちしていましたので、少し大きいですが、これに交換します。 それ以外の抵抗やダイオードはOKのようです。

RSからTRが届きましたので、まず基板をKURE印の接点復活剤で清掃した後、TRと抵抗を交換し、放熱板に取り付けない状態で、かつ無負荷でAC100Vを通電してみました。 グリーンのLEDが点灯し、テスターで出力電圧を当たると、24V出ていました。

Acdcafter_1_2

無負荷試験はOKでしたので、元のケースに収めますが、オリジナルは、シリコンラバーだけでTRを止めていました。 この際、シリコンラバーの裏表にシリコングリスを塗り、密着性を改善した上で、ケースインしました。

最後にDC出力端子に10Ω 10Wのセメント抵抗を接続し、通電すると、確かに24Vの電圧があり、セメント抵抗がみるみる内に変色しますので、即ACプラグを抜きました。 この試験で2.4Aの負荷でもOKでしたので、修理完了したと判断しました。

この24Vの電源と12Vの電源を直列に接続し、送信機の電源として使います。 送信機には10Aのヒューズを入れてあります。

INDEXに戻る

2020年11月21日 (土)

7MHz 200Wリニアアンプ

カテゴリ<SDR> [7MHz FET 自作]

SDR用100Wのリニアアンプは完成し、すでにQSOに使っていますが、このアンプを収納するケースは200Wアンプも収納できるスペースを確保していました。 そこで、100Wリニアアンプと同様のスーパージャンクションFETを使ったリニアアンプにトライします。

スーパージャンクションFETを使ったリニアアンプの構造はすでに100Wリニアアンプの記事で紹介済みですが、今回は、整理を含めて、すべての工程を写真入りで紹介する事にします。

200Wアンプもコンベンショナルトランスを使いますが、まず、このトランス用のコアの選択です。 メーカーのカタログより、以下の3品種を候補に絞り、特性を取ってみました。

Coresform200w

Coreselect200w

左上が出力トランス候補の北川工業製GTFC-20-10-10で、これを8個並べた時のインピーダンス特性が左の茶色のグラフです。 真ん中はTDK製のZCAT2032で入力トランス用で、これを2個並べた時のインピーダンス特性が左の青色のデータです。 右上はトーキン製のESD-R-17S-1で、同じく入力用で、2個並べた時のインピーダンスと特性が左の紫のデータになります。 緑色のデータは、TS-930に使われているメガネコアの特性です。 これらのデータから、出力トランス用は北川工業に決めました。 一方、入力側は、従来の判定では、グラフデータが寝ていますので、ロスが多くて使用不可としてきたのですが、

Losstest200w

コアに左のような1ターンの1次及び2次巻線を施し、Vinに7MHzにセットしたアンテナアナライザーを接続し、Voutにハイインピーダンスのオシロのプローブを接続して、VinとVoutのレベル差を比較します。 すると、TDK製は-0.5dB以下の減衰に対して、トーキン製は、-6dB以上も減衰します。 いずれも、メーカー発表のデータシートからは優越が判定できなかったのですが、実測すると、はっきりとその差が判ります。 結局入力トランス用はTDK製で決まりです。(参考:コモンモードフィルターに使う場合、トーキン製が有利です)

トランスのコアがきまりましたので、コアをコンベンショナルトランスに組み立てます。

200wtrans

左上が入力用、右上が出力用です。 入力用も出力用もケーブルを挟める構造の分割コアでしたので、ふたつのコアをビニールテープで縛り、バラケないようにした上で、内側の穴に0.3tの銅板をパイプ状にして挿入し、両端をガラスエポキシ基板で挟み、半田付けしてあります。 これで、トランスのサイズが決まりましたので、アマゾンで手配したサイズW100 D80 H27の放熱板を含めて、構造設計をJW-CADで行いました。

200wamp_jw_2

基板サイズは150mm x 116mmとなり、アンプ部とBias温度補償回路をこの範囲にの中に実装します。

リニアアンプ部の回路図は以下です。

200wamp_schema

200Wの出力を確保する為、FETは東芝のTK12Q60W 3石パラレル、プッシュプルの6石構成とします。 このFETのPdは100Wありますので、全体のPdは600Wとなり、実力が半分としても300Wの放熱が可能です。 200W出力時の効率が50%とすると、熱損失は200Wですから、余裕でカバーします。 また、TSSが要求する定格出力200Wの4倍以下のPdをクリアーします。

パワーのロスを少なくする為、100Wの時、FETのソースに挿入した0.33Ωの抵抗は0.1Ωに変更しました。 この関係で、ダイオードをセンサーとした温度補償回路の能力が不足すると考えられるため、Bias温度補償回路のOPアンプのゲインを上げる事にします。

200wbaias_schema

ゲインは約2倍に上げ、Bias調整用VR1,VR2を最大にしてもBias電圧が6Vを超えないように、新たにVR5を追加してあります。 FET3石合計のIdをいくらにするかは、実際に動作させながら決める事にします。

次に3パラFETのマウント加工です。

Fetmount4_2

Fetmount2

左上は、FETを3石、横に並べて半田付けする1mm厚の銅板です。 サイズは20mm x 35mmです。 右上は、マウントするFETを整列させ両面テープで固定した上で、銅板の両端にこれも両面テーブで、左右の位置決めを行います。

Fetmount1

Fetmount0

左上は、FETのドレイン金属部分に予備半田をした状態。 右上は、FETを裏返し、銅板上に半田付けした状態です。 この銅板に半田付けする前に、銅板にも予備半田をして置き、100Wの半田こてで銅板を暖め、半田が溶けだしたら、3個のFETをその上に乗せ、位置決めしたい位置にすべらし、半田が冷えるのを待ちます。

この様にして、作ったFETマウントユニットが下の写真です。

Fetmount3

FETが少し傾いていますが、良しとします。

Raverset

Fetmount5

FETを放熱板に張り付ける前に、絶縁用のラバーシートを敷きます。複数のシートを敷く場合、多少隙間が有っても問題なしです。 そのラバーシートの上に、FETを張り付けた銅板をビス止めします。 この時、ビスにスプリングワッシャーを挿入しておきます。 熱により、絶縁ワッシャがつぶれて、銅板への密着が不足し、FETが熱破壊する事を防ぐ為です。

Fetsorcer

Tempsencer

FETのソースに0.1Ωの抵抗を配線し、3石のFETのゲートに直列に入る抵抗は、3.3Ωのチップ抵抗を3本パラにして、合計抵抗値を1.1Ωとしてあります。この基板の裏側の銅箔を使い、3石のドレインを結合します。 そして、銅板に巻き付けた温度センサー用のダイオードをセンターFETのドレイン部分に半田付けします。 これらの作業は100Wアンプと同じです。

Pwbmount

200wamptesting

左上が、マウント完了したパワーアンプ基板です。 この基板の左上に半固定抵抗が乗った小基板がありますが、これがOPアンプによるBias温度補償回路です。 右上は、実際にTS-930から7MHzのキャリアを加え、動作確認をしている状況です。

動作確認中に放熱板を冷やす、扇風機の電源を入れ忘れ、FETが熱破壊するという事故もありましたが、20Vくらいの電源電圧から、徐々にDC電圧を上げていき、35Vの時、最大出力225Wを確認できました。

以下、動作確認と効率アップの検討内容です。 ただし、まだ出力端にはLPFが入っていません。

200wampadj

上の表は、出力トランスの2次側巻き数、C14やアイドリング電流を変えた時の出力と効率です。 まだ、基板単体をバラック状態で動かしただけですが、電源電圧35Vにて、最大225Wの出力が得られ、その時の効率が52.1%でした。 ただし、10W入力時の出力は、完全につぶれた波形ですので、リニアアンプの出力としては使えません。 35Vの電源で、140Wがリニアアンプとしての実力です。

200wamptest1

そこで、100Wアンプのシャーシ加工を行い、200Wアンプユニットを収納できるように改造し、出力テストを実施しました。 残念ながら、35Vの電源で140Wしか出ません。 原因を確かめると、リニア電源の能力不足と、アンプユニット内の電源回路網に於ける電圧降下で、10W 入力の状態で、ファイナルのドレイン電圧が27Vまで下がっていました。 この内訳はリニア電源の出力が5Vダウンし、30Vしかない事、アンプの電源回路で3Vも落ちていました。 ユニット単体の時は、リニア電源はアンプユニット専用で、ファンやバイアス回路は別電源でしたが、これらの別電源をリニア電源からとったら、たった0.5Aの電流増加で、リニア電源のフの字特性が働き始めたものでした。 また、LPFの損失が10%くらいありました。 電源回路の再検討が必要になりましたので、しばらく休止です。

Acdc36v20a

電源容量不足が判明してから、1週間経ちました。 色々検討した結果、既成のACDCスィッチング電源を用意する事がコスト的に最良で有る事が判りましたので、今回、24V20Aの電源をアマゾンで手配しました。 価格は3600円弱でした。 これに、以前、AM200W機用に手配していました、12V30Aの電源をシリーズに接続し、36Vの電源を確保します。 電源をシリーズに接続した場合、合成電圧は、各電源の合計値になりますが、電流は、その中の最小定格電流に依存します。 12Vの電源の最大定格は30Aですが、24Vの最大定格が20Aなので、36Vの時でも、最大電流は20Aとなります。 2台のACDCを写真のごとく結合し、12V出力端子と24V出力端子を設け、QRPの親機は12V電源から、リニアアンプは36V電源から電力供給する事にしました。

200wamp_inputswr

電源の準備が完了しましたので、36Vの電源で、バイアスを再調整、アイドル電流を6石合計で500mAにしておき、今まで無かった、リニアアンプの入力部分に3dB ATTを追加した状態での入力SWRをチェックしてみました。 左の写真がCAA-500MK2による測定状態で、1.5くらいになりました。 また、今までの検討の中で、FANの風量に不足を感じましたので、FANモーターに加わるDC電圧を少し上げました。

36Vの電圧でリニアリティを確保した出力は150Wでした。、もちろん、入力を上げると180Wくらいはでますが、完全につぶれた波形です。 このACDC電源は最大で40Vまで電圧を上げる事ができます。 そこで、26V+14Vという組み合わせで、トライしてみました。 残念ながら、出力を確認する前に、26Vの電源を誤ってショートさせてしまい、バリバリという音と、煙が出て、26V電源は壊れてしまいました。 そこで、26Vの電源を従来のアナログ電源に変更し、acdcの14Vとアナログ電源の26Vで40Vの電圧を確保し、トライしました。 しかし、最大出力を得る前に、アナログ電源がショートモードで壊れてしまい、いきなり、57V+14Vの電圧がリニアアンプに加わり、アンプもショートモードで壊れてしまいました。  このアナログ電源はその後修理しました。 また壊れた24V出力のACDCスィッチング電源も修理し、復活しました。

200Wのアンプの前に、電源をちゃんと確保しないと先へ進めなくなりましたので、アンプは一旦休止し、電源を検討する事にします。 

40Vで10A確保できる電源が出来たので、この電源でトライしました。 残念ながら、半田付けした温度検出用のダイオードが溶けて外れるという事故が2回も発生し、当然、外れた時点で、FETは熱暴走し、壊れました。 小さな銅板に3石のFETを置いた事により、放熱容量が不足し破壊に至ったものでした。 スーパージャンクションのFETの限界が見えた状態でした。 結論として、スーパージャンクションのFET3石を1枚の銅板に張り付けるやり方では、リニアアンプは150Wくらいが限界と思われます。

 

配線図 PWR-AMP200W_1.pdfをダウンロード

 

この最初にトライした200Wリニアアンプは、結局実用レベルにはならず、再検討を加えた実用中の200Wリニアアンプの記事は次へ続きます。

7MHz 200Wリニアアンプ 2 へ続く。

INDEXに戻る

2020年9月27日 (日)

ツェップアンテナ(7MHz用)

<カテゴリ:アンテナ>

コンディションが悪い中、国内QSOがメインとなっている7MHzで、垂直ダイポールは、飛ばない、聞こえない、台風でフルサイズに伸ばせない、など使い勝手が悪い状態でしたので、臨時に仮設でき、ホームでも移動でもつかえるツェップアンテナを製作する事にしました。

インターネットで検索すると、沢山の情報がヒットしますので、工作は簡単です。

Zdant0

材料は40φの塩ビパイプと、1.5φのマグネットワイヤー(PEW線)です。 マグネットワイヤーを22ターン巻いて、11.3uHのインダクタンスとなりましたので、これに、5.1KΩのダミー抵抗を付けた状態で、7100KHzに共振するように、コンデンサの値を調整します。 調整した結果は、左下の配線図のようになりました。

Zdant3_3

Zdant1_2

 

実際にパイプの内側に取り付けられたコンデンサは、右上の写真のようになりました。

22Pは3KV、10Pは1KV耐圧の村田製です。 この状態で最小SWRは1.3くらいでした。

Zdant2

Zdant4

このユニットを高さ8mのベランダから2mくらい横に突き出した棒の先端に吊り下げ、そこから、LANケーブルを割いて取り出したAWG24のワイヤーを約20m伸ばし、水の無い池の上に展開し、7100KHzでSWR最小になるようワイヤーをカットした結果、切りすぎて最小SWRは7150KHzで1.3くらいになりました。 7200KHzではSWR1.5くらいですが、7000KHzでは、2.5くらいになってしまいました。もう少し低い方へシフトしたいのですが、調整は次の機会にして、とりあえずこのまま使います。 

このアンテナを使い、自作のトーランシーバによる1st QSOがSSB,CW,AMいずれも成功しました。

このツェップアンテナと従来の垂直ダイポールを比較すると、5エリア、6エリアや3エリアの局はツェップの方がSで20dBくらい高く受信できます。 1エリアの局は+10dBくらい、7や8エリアの局はあまり変わらない状況です。 4エリアはスキップして入感なしでした。 国内QSO用なら、垂直ダイポールは不要というのが判ります。

このアンテナは臨時仮設用ですから、平日は、片づけてしまいます。また移動運用するときは、ポールとこのアンテナを持っていく事にします。

次の週に再度架設するに当たり、給電部を10mの高さまで上げ、水平に約10m、さらに直角に折り曲げながら、斜めに約10m引き下ろし、一番端の高さが3mくらいになりました。

Zepp10mhight

 この際、ワイヤーの長さを前回より54cmほど長くした状態で測定したSWRは左のようになりました。 Zepp_cover

このアンテナは100W AM送信でも問題なく使えました。耐圧は400Wピークでも大丈夫でした。

コイルの防水対策として、右上の写真のように、熱収縮チューブで覆いましたが、効果はあるものの、良好とは言えませんでした。 リニアアンプを使う関係で、シャック内にあるマニュアルチューナーで、アンプと同軸とのマッチングを取ってごまかして使用しています。

このアンテナは常設ではないので、平日の夜、国内がオープンしても使う事が出来ませんでした。 そこで、常設のベントダイポールを作成する事にしました。

 

INDEXに戻る