最小ハードウェアによるSDRの試みとして、LPC-Link2にアンテナとスピーカを直結してAMラジオにしてみました。マイクロコントローラの機能だけを使用して、RF信号の受信から、スピーカの出力まで、アンプも何も無しに放送を受信できています。
以前FMラジオの実験をしたときは、フロントエンドとオーディオコーデックを外付けしました。ソフトウェアの力でどれだけシンプルに作れるかというチャレンジとして、最小限の構成を検討しました。
RFの入力は、さすがにVHF帯をアンプ無しで入力するのは難しいですが、MF帯のAM放送であれば信号が強力ですので、ADCへの入力は可能です。というか、嫌でもノイズとして混ざってしまうこともあるくらいです。
オーディオ出力は、LPC4370にDACが無いのでI2SコーデックであるTLV320AIC3204を外付けしていましたが、シンプルに削ぎ落とすために最小ハードウェアですむPWMでのオーディオ出力にチャレンジしてみました。音質に期待ができないことは承知のうえです。Raspberry Piに標準搭載の音声出力がPWMで、音質が残念なことになっていますね。
以上を踏まえて、あとは実験しながら進めます。
まずはADCにアンテナを直結して、本当に信号が取れるのか試してみました。実際にLPC-Link2でADCを走らせて、キャプチャしたデータをデバッガでエクスポートして、グラフ化してみました。
ノイズっぽく見えますが、スペクトラムでは放送波のところにピークが見えています。これならなんとかなるような気がします。
FMラジオのコードをベースに、最小限の改造でAM対応してみたところ、ちゃんと音を出すことができました。この段階ではI2Sコーデックを使用していましたが、あとはこれを削除すべく引き続きPWMの検討に移りました。
LPC4370でのPWMの実現には、データシートの検討と実験に時間を要しましたが、mbedを参考にSCTを使ったPWMを実装し、あとはこれに48kHzのオーディオデータをDMAで送り込み、ダイナミックに変化するPWMを連続動作させることができました。
ただ、PWMなので音質は酷いことになっています。ポストフィルタが欲しいところですが、シンプルさを優先しています。どうせならPWMではなく、ΣΔで実装できると良いのですが、サイクル数を消費しないように実装するのは難しそうです。
LPC-Link2で問題になるのが、1.27mmピッチのピンヘッダです。高密度2列のピンヘッダは信号の繋ぎ込みに苦労します。今回は、使用するピン数が少ないので、秋月で売っている1.27mm1列ピンソケットを2ピン分にカット、ヤスリで仕上げて、ヘッダに差し込んで接続しました。アンテナ用に短いワイヤを2ピンヘッダに接続してボードに差し込みます。スピーカ用には電解コンデンサを入れてミニジャックで繋がるようにしました。この方法なら実験し易いと思います。すべて秋月で揃えることができます。
中身の実装についての詳しい内容はまた別途紹介したいと思います。
こんな感じに動かせています。
リファレンス
- LPC-Link2によるFMラジオ
- シンプル構成のSDRの先行例としてはおじさん工房のAPB-2があります。FPGAワンチップで、ADCすら使わずに実装されているところが凄い。https://ojisankoubou.web.fc2.com/apb-2/fpga_radio.html#20120215
- NXPのLPC-Link2製品紹介
- LPC-Link2の設計元Embedded ArtistsのLPC-Link2製品紹介
- 今回使用したピンソケット https://akizukidenshi.com/catalog/g/gC-03872/