JR0VLTのblog

無線機の製作を主なテーマとしたブログです。

幼少期に父の影響で電子回路に興味を示し1970年代にJA0N**でアマチュア無線局を開局、1980年代にJR0VLTで再開局。従免は3個、局免は2個あるものの無線機などを作ってばかりいて、電波利用料の元が取れるほど波は出していません。 レガシー系IT技術者、白黒鍵盤とフランス車が好み、おもな生息域は燕三条地区

フルデジタル方式のSSBジェネレータを作っています。

直近の記事ではADコンバータにPCM1808を使っていましたが、最終出力でキャリアリークが多かったのでいろいろと原因を考えてみました。

Weaver方式の致命的な欠点は、キャリアリークがあると帯域内にサブキャリア(通常1.5kHz程度)の変調波がインバンドに表れてビートとして検出されることです。

フィルターやPSN方式では、キャリアリークがあってもゼロビートになるので、恥ずかしい思いをすればいいのですが ?、Weaver方式では使い物になりません。

キャリアリークの原因は、被変調波に直流成分が含まれていることです。
ADコンバータのPCM1808に原因があるものと当たりをつけて、PCM1804に変更することにしました。

PCM1808はシングルエンド入力ですが、PCM1804は差動入力でアナログ電源電圧の1/2にバイアス電圧をかけるように設計されていて、このための基準電圧を与える端子が用意されているので、例によって入力トランスの中点に、この電圧を印加する方法にしました。

PCM1804はSSOPの28pinなので、変換基板に乗せてC型基板で追加拡張して実装しています。
ADC_PCM1804_1次df1704_v2.0
DSC_3200
DSC_3197
DSC_3199

一通りの部品をシャーシに実装していますが、完成というにはほど遠く、テストベンチ然としています。

周波数の設定は、とりあえずサムロータリスイッチですが、今後ロータリーエンコーダなども併用するつもりです。

ご訪問ありがとうございました

このところ涼しくなって、ハンダ付けをする元気が復活してきたので、定番の電子工作をしています。

数年前に、基板を起こしてフルデジタルのSSBジェネレータを作って、それなりに動作していたのですが、拡張性というか試行錯誤に不向きなことから、秋月の汎用基板を使って作り直しました。

きっかけはバーブラウンのデジタルフィルタDF1704が入手できたことによるものです。
このICはPCM1704というマルチビットのDAコンバータとセットで使うように設計されたようです。
どちらも製造中止らしく、市場では骨董品のように扱われていて、とりわけPCM1704は高額で取引されているようです。

DF1704は、AD変換と一次変調後のデジタル信号を768kHzまでインターポレーションすることに使います。

0無題


1ADC1次df1704_v2.0
3ax1パラ2次_df1704_DAC904

5ax2

基板は秋月のB型Mesh二枚です。

左の基板(一次変調回路)の動作
・PCM1808で24kHzのレートでAD変換
・24kHzのワードクロック信号から1.5kHzの2相信号を生成、I/Q変調
・サンプルレートコンバータSRC4190をサンプルレート3kHzで動作させLPFとして1.5kHz以下の成分を抽出
・SRC4190とDF1704で768kHzまでインターポレーション

右の基板(二次変調回路)の動作
・74HC164/74VHC595による24bitのシリアルイン・パラレルアウトのシフトレジスタで2組の並列信号に変換
・並列のI/Q信号の上位14bitをTayloe方式で変調後DA変換


Tayloe方式の変調と記しましたが、I相・Q相・not(I相)・not(Q相) の順序で信号を選択することで変調する方式ですが、原典は畔津明仁氏の記事です。

ご訪問ありがとうございました

Weaver式SSBジェネレータのハードウェアは、大体作り終わったのですが、これを制御するArduinoのプログラムで苦戦しています。

GitHubからダウンロードしたDL2MAN他作のuSDXのファームウェアの出来が良いので、これをパクッて実装しようという、ずるい方法を考えています。

このファームウェアは結構洗練されていて、とりわけユーザインタフェースと、起動時に前回の周波数やモードなどの情報が復元されることが気に入っています。

ソースコードは総ステップ数が5Kstep、正味3Kstep程度です。
ソースコードの中では#ifdef~#else~#endifが多用されていて、LCD,OLEDなどの選択のほかCAT,CW keyer/decoderからSWRメーターまで多彩な機能をoptionで追加できるようになっています。

あまり多くのオプションを選択するとメモリーオーバーするので、I2C_LCD,CATだけを選択することにしました。

周波数情報などを保存する部分のコードではCPU内のeepromに情報を書き込んでいるのですが、この部分を改修した際に不具合を紛れ込ませてしまったようで、書き込み後に起動した際、ブートローダが壊れて、その後書き込みができないという現象が発生しました。
再度ブートローダを書き込むことで復活するのですが、なんとも罰が当たったようです。

もともとがトランシーバ用のファームウェアなので、AGCの時定数、受信フィルタなどの部分のソースコードを削除したことが不具合の原因かもしれません。

初心に戻り、流用元のソースコードを最小限の改修で対応することで作業中です。
無題

今までArduino IDE又はサクラエディタでソースコードを編集していたのですが、Visual Studio Codeを使うことで、だいぶ開発効率が良くなったようです。
ここで編集した結果を書き込み、Arduino IDEでコンパイルしています。

文字列の色分けはともかく、#ifdefで未定義の行が暗く表示されていて、わかりやすいです。

他人の作ったソースコードの解析は骨が折れますが、高度な内容が含まれていて、大変参考になります。

ご訪問ありがとうございます

↑このページのトップヘ