![見出し画像](https://assets.st-note.com/production/uploads/images/163170835/rectangle_large_type_2_fa564ca20ecd9121b549ed0d30c90a92.jpeg?width=1200)
Simple SDR Receiver (PSoC-5LP)
1. はじめに
KF6SJ 製作の "Simple SDR Receiver" を見つけて試そうと思ったら PSoC3を使ったものでした。PSoC3開発キットはなく、評価ボードはとても高価です。おなじPSoCシリーズで PSoC 5LP Prototyping Kit【CY8CKIT-059】はマルツで入手可能なので移植を試みました。
https://tapr.org/wp-content/uploads/DCC2010-simpleSDR-KF6SJ.pdf
2. ブレッドボードの試作
オリジナルのPSoC3のプロジェクトをダウンロードしてみると、かなり難解そうです。まずは入力のコイルを巻いてブレッドボードに組んでみました。
![](https://assets.st-note.com/img/1732461517-PSpIn9b8wXgF7MDiQCW6vkAO.jpg?width=1200)
![](https://assets.st-note.com/img/1732461538-xQ8alBo5vLiAm7DF9OgZS2E0.jpg?width=1200)
USBインタフェースだけでは不便なので、FreeRTOSでタスク化してロータリーエンコーダと選局ボタンを追加し、USBUARTのAPIやフィルタ定数をPSoC-5LP用に修正…等々といじっていたらBCL帯バーアンテナでAMラジオが聞こえてきました。
![](https://assets.st-note.com/img/1732461930-EvOQyTVBM2WCIjkhixUSAGsw.jpg?width=1200)
SSBモードなので周波数がずれているとビート音が出ますが、DDSの周波数補正値をEEPROMに保存してほぼ0にできます。CORDICの演算でAM復調を試すと「さしすせそ」に歪みがあって、結局はSSBで4kHzのフィルターを通すほうが余程いい音になります。
DDSはAD9850を使っているので40MHzまでですが20MHzを越えるとDDSの出力レベルが落ちてきます。従って、4分周してI/Qクロックを生成するので実用的にはAMラジオです。それでもラジオを聞きながらデバッグ出来るようになったので楽しいです。
![](https://assets.st-note.com/img/1732462282-KBDuw79aHUc0tMvqPbQgTLpR.png?width=1200)
![](https://assets.st-note.com/img/1732462301-GtU1dBzhvkLceMAfIYo7PQw5.png?width=1200)
![](https://assets.st-note.com/img/1732462293-vcgKVw5iyEWeDaO3qXFG08jd.png?width=1200)
3. PLL Module (Si5351)の調査
SDRラジオの受信周波数を上げるためAD9851(up to 70MHz)のDDSモジュールをeBayで購入したものの、やはり20MHz以上では出力レベルが下がり過ぎて使えませんでした。それではとSi5351のモジュールをマルツで購入しました。LSIは3.3V動作だというのでI2Cのレベル変換モジュールも購入しましたが、Adafruitのブレークアウト・モジュールはI2Cが5VでもOKとういことで無駄になりました。
![](https://assets.st-note.com/img/1732463091-vBGnJj6U9xkyFgctWXVYNPp1.jpg?width=1200)
PSoC-5LPのサンプルコードを探すとK6JQが公開しているコードが見つかりました。I2Cモジュールを置くだけなのでプロジェクトはすぐに出来て、X'talの周波数を25MHzに修正すると無事コンパイル出来ました。40MHzに設定した出力をSDR#で確認すると400Hzのズレなので補正すれば問題なさそうです。
![](https://assets.st-note.com/img/1732463270-mwYug5vFkJstURihzDGKMbQN.jpg?width=1200)
![](https://assets.st-note.com/img/1732463279-EpenYa6UGXl8gDz79TwSihty.png?width=1200)
4. PSoC-5LP版の製作
ブレッドボードに組んだものはDDSの制限(※受信周波数の4倍が必要)で受信周波数がせいぜい5MHzまでなのと、PSoC5LPのUSBUARTにFIFOがないのでHamRadioDeluxeから制御できないなど、実用的にはいまひとつです。DDSの代りにSI5351モジュールを試行してみると、これはTTL出力なのでPSoC-5LPのGPIOに直接接続できます(i.e.,コンパレータを使わないので周波数レンジが広い)。USBUARTのFIFOは実装例を公開しているサイトのコードを参考にして、HamRadioDeluxeとの通信が出来るようになりました(※0.5msタイマー割り込みでTX/RXパッファを監視)。
勝算ができたので、オリジナルの外観に似せてタカチのMX型ケースに入るようにCLCDやロータリーエンコーダを止め、そのかわり中華製のD級アンプを載せました。今回はモジュールを直付けにしたので、AWG30のラッピング用電線を使ってデジタル部分は手動のラッピングで空中配線を試してみた(※世代的には結構好きだったりする…)。嵌まったのはDPLLモジュールの周波数校正で、コード修正に半日溶かしました(※ちなみに10MHzで-118Hzの補正なのでX'talの精度はDDSより悪い)。
![](https://assets.st-note.com/img/1732463874-kqQEPW3F4Htjz9aV271ypxuZ.jpg?width=1200)
![](https://assets.st-note.com/img/1732502027-UZLoPRMtBFhve2EcSIuNGyJn.jpg?width=1200)
![](https://assets.st-note.com/img/1732463897-hTUolb6XyPAJgsNZ5IFEGu4e.png?width=1200)
![](https://assets.st-note.com/img/1732463913-yJ8BemtPlAH5pbgQ1sOCWNVh.png?width=1200)
プロジェクトファイルは以下に置いています。AMの復調や強い信号が入ると歪むのでAGC周りは改善が必要です。
コマンドはHamRadioDeluxに対応しています。
![](https://assets.st-note.com/img/1732463931-xrwAc02okjVUYfISy8FZz1D7.png?width=1200)
HFのアンテナを繋いで7MHzを受信するとLSBモードではダメでUSBモードで音声になる(!?)。復調部分には手を加えていないので追いかけると、PSoCで生成しているI/Qクロックが逆…でした。改めて7MHzのLSBモードを聞くと結構良い音だし、CWの切れも良い(※中学生の頃組み立てた高1中2の受信機と較べると隔世の感がある…というのを体感できる)。
電源を入れた状態で周波数はNHK仙台第一(897kHz)/USBモード/4kHzフィルターに初期化しているので、当面はやはりAMラジオ代わりか?
5. 簡単な制御アプリ
作成したPSoC-5LP版の"Simple SDR Receiver"は、DefaultでNHKが聞こえるようにしています。PCが立ち上がっている間はすぐラジオが聞けて便利ですが、TBCに切り替えるのにHamRadioDeluxeを立ち上げるしかなく、フィルターの帯域が2kHz以下しかコマンドがありません。ラジオを切り替える簡単なアプリを作ろうと思い、VC#でCOMポートを操作する方法をネットで検索すると、簡単なサンプルが見つかったので、少し改造してAMラジオ・セレクターのアプリを作りました。もうちょっと凝ったものをと思いましたが、Deluxeがあるので要らないか…。
![](https://assets.st-note.com/img/1732464396-io6gwqNzZfJudK1cbGWYMBjL.png)