FMラジオ15 (Si4735モジュール)

Si4735モジュールによるFM/AMラジオ。VS1063によるMP3録音機能付き。RTC(リアルタイムクロック)でタイマ録音にも挑戦してみた。

更新:2015/12/14, 2015/12/31, 2016/03/24


ブロック図

VS1063のパッチデータはVLSI Solutionが公開している(ここ)。
開発当初はこのデータを外付けEEPROMに入れて使う予定だったが、テストしている内にEEPROMの動作が不調になってきた(原因不明)。原因調査は後回しにしてパッチデータをSDカードに置く方式に変更した(録音しなくてもSDカード必須になる)。

FM/AMラジオモジュール

ビット・トレード・ワンのSi4735ラジオモジュールを使った。
Si4735はAM、FMだけでなくLW、SWも受信できるが今回は対象外。FMをメインとし、AMはどちらかというとついでです。

VS1063

SparkFunのVS1063モジュール(SFE-BOB-11684)。 MP3のデコードだけではなくエンコードも出来る。
(残念ながらこのモジュールは2015年12月現在、廃番になっている。)

RTC

  • Strawberry LinuxのRTCモジュール(M41T62)。
  • CR2032電池ホルダーも付属していて、これも利用している。
  • モジュール上のI2Cプルアップを有効にしている。
  • 2015年11月中ごろからRTCのバッテリバックアップを継続中。

回路図

  • VS1063のオーディオ出力まわりの回路はVLSI Solutionのここの記事に従った。
  • RTCのアラーム(IRQ)は電源回路を経由してPICと繋がっている。RTCのタイマによって予約録音時の電源オン、録音の開始、録音の終了の3つのコントロールをしているが、録音の開始・終了とパワースイッチによる電源オフとの区別はプログラムで行っている。
    RTCの消費電流を最低限に、とくにバックアップバッテリの消費を最低限にする回路およびプログラムになっているかどうかは自信がない。
  • I2CのプルアップはRTCモジュール上のプルアップ抵抗による。

PICのピン割り当て

結果的に1ピン余った(RA3。LCDのリセットなどに必要になる可能性を考慮して余らせていた)ので、プッシュボタンをもう一つ付けても良かった。

AM用バーアンテナ

ストレート用バーアンテナBA-200(左写真・上)では感度よくない。窓際でようやく1局受信できるだけである。
スーパーヘテロダイン用バーアンテナAR-140(左写真・下)ならばローカル局が一通り受信できる。
AR-140を使うことにする。

プログラムの構造

  • 電源オン直後はFMラジオモード。Modeボタンを押すごとにAMラジオモード、プレイバックモードの順に切り替わる
  • FM・AMラジオモードにおいてRecボタンを押すことにより録音を開始する。
  • 録音されたデータはSDカードのルートにYYMMDDnn.MP3のファイル名で保存される。nnはYYMMDDの日付ごとの連番(01~99)。
  • 録音時のMP3エンコード条件(サンプルレート、ビットレート、ステレオ/モノラル)は、「エンコード条件設定」機能にて事前に選択しておく。
  • プレイバックモードでは録音済みのファイルから選択して再生(デコード)を開始する。

開発環境

  • CCS社のPIC18用Cコンパイラ(PCH V5.046) + MPLAB X IDE v3.15
  • PICへのHEXファイルの書き込みはPicKit3
  • SDカードのFATファイルシステムにFatFs R0.10a
  • ソース一式はこれ

タイマ録音

  • タイマ録音の条件設定は、左のようなテキストファイルをSDカードのルートに置くことで行う。
  • 1行1録音で複数の設定を事前に記述しておくことができる。
  • #で始まる行はコメント行で、それ以外の各行には録音開始日付、同時刻、録音終了日付、同時刻、AM/FMの別、周波数、録音時スピーカをならすか、エンコード条件、を記述する。(左の例では15年12月28日から16年1月1日までの毎日6時から6時55分まで、FM82.5MHzを予約している)
  • 記述したタイマ録音を有効にするためには一度通常通りの起動をしなければならない。電源オン時、このファイルが存在すれば直近の録音予定が読み込まれてRTCに設定される(録音開始日時が過ぎた行は無視される)。
  • 録音開始の60秒前に電源がオンされる。あるいはそのとき既に電源がオンされていて他局を受信中であれば録音対象局に切り替わる。ただしそのときすでに録音中の場合、タイマ録音は実施されない。
  • 録音終了時刻が来たら録音を停止し、次のタイマ録音の予定をSDカードから読み取ってRTCに設定する。録音開始時に電源オフだったら電源をオフにする。
  • 2つの録音を60秒以上空けなければならないのが現状の問題点。

エンコード条件

VS1063 Datasheet 8.2.1 Supported MP3 (MPEG layer III) Encoding Formats にあるエンコード条件の内、赤枠で囲った書式をプログラム中にハードコードして選択できるようにした。

実装

  • ケースはTAKACHIのSY-190B。
  • 実験ボードをそのまま完成作にしたので音質的には不利になったかもしれない。

インプレッション/評価

2015年12月31日現在、まだ評価と改良の途中だが....。
  • 録音しないときでもVS1063を経由するのでバッテリ消費が多め(FM放送受信+エンコード時に150mA程度。プレイバック時に100mA程度。)。
  • FM受信について。全体的に感度は良いが、最もよく聴くNHKに対してだけなぜか感度が良くない印象。
  • AM受信について。感度は悪くないがノイズが大きい。(PICとVS1063が発するデジタルノイズ? 実験ボードの段階において焦点はFMで、AMはあまりテストをしなかったが)
2016年3月24日現在。
  • 年が明けてから平日の朝6時~6時55分の番組をタイマ録音し、週末にまとめて聴く、ということを繰り返してみた。
  • メインバッテリのエネループPROは大体2週間に1回のペースで充電が必要になった。
  • RTCのバックアップバッテリは昨年の11月から連続運用してきたが、3月になってついに交換が必要になった。1年以上もってくれることを期待したが。


トップページに戻る