NS73Mを使ったFMトランスミッタ

製作:2011年1月~3月
執筆:2015年11月7日
全景 XL-739というFMトランスミッタを使っていたのですが、ステレオのセパレーションが悪くなり困っていました。 秋月でNS73MというFMトランスミッタを見つけたので、ポケットサイズのFMトランスミッタを自作してみようと食いついてみました。 この石はI2Cでコントロールできるのでこれまでの経験上比較的簡単かと思っていたのですが、電源が5Vではないので意外なところで苦労の連続でした。

NS73Mをコントロールするポイント

NS73Mの資料は秋月の通販サイトからダウンロードできるのですが、製品仕様書兼説明書の割にはわかりにくいと思います。 幸いネット上にはこれをうまく使いこなしている方が多数いらっしゃいましたので、そちらの資料をいろいろと参考にさせていただきました。 制御コマンドをI2Cまたは3-wireで送ると内部できちんと処理して正しい周波数で送信してくれるのですが、PLLを正しく動作させるためのパラメータなどを事前に設定しておかないとうまく動きません。 そのあたりの根拠の説明が抜けているので見よう見まねで動かすしかないです。

回路の概要

回路は何のひねりもなくI2Cで接続し、操作用のプッシュスイッチとインジケータのLEDが付いているだけです。 PICは初めのうちは余っている12C509を使う予定だったのですが、OTPタイプではデバッグのしようが無いので12F675に変更しています。

電波強度 いろんなサイトでダミーロードを付けてね!という記述があったので一応51Ωの抵抗も入れてあります。 いろいろ調べていくうちに免許の要らない電波強度の図が見つかったのですが、測定器が無いので測りようがありません。制御コマンドで送信パワーが変更できるようなので、そちらも実装する予定にしましょう。

ソフトウエア

ソースリスト Ver.1.3

ソフトウエアI2Cの実装

I2C PIC 12F675はハードウエアのI2Cマスター機能を持っていないためソフトで実装しなければいけません。 Lレベルを出力する時は、GPIOを出力モードにしてLを出力します。PIC内部でGNDへ接地されるのでポートはLレベルとなります。 Hレベルを出力する時は、GPIOを入力モードにしてハイインピーダンスにします。するとプルアップ抵抗を通してVccへ接続されるのでHレベルになります。 つまり、GPIOを0に固定したままTRISだけを操作するとよいわけです。

ソースのコメントに「キーモード確認でLEDを点灯させるとハングする」と記載がありますが、つい最近気圧高度計を製作しているときにこのルーチンを流用してハングアップする原因が分かりました。 LEDを点灯させるためにBCF GPIO,2でGP2ポートをLレベルにしていたのですが、Read Modify Writeの影響でGPIOのGP0とGP1が勝手に1に書き換わっていたのです。

PLLの設定値とCEXパラメータの関係

私が書いたソフトウエアでは、設定できる周波数を84.0MHz~90.0MHz、およびアナログテレビの1~3ch(95.75MHz、101.75MHz、107.75MHz)の64チャンネルとしています。 NS73Mの仕様書上の下限周波数は87.5MHzですが、実際に動作テストをしてみると85.5MHzあたりまではきちんとPLLがロックしていました。
PLLを正常動作させるためにCEXというパラメータがありますが、仕様書ではPLLのロックが外れたらフラグが立つからCEXを変えてねという趣旨の記載になっているようです。 常にロックの状態をモニターするならキー入力の監視もひと手間多くなるため、実際に動作させた結果からCEXをハードコードした方が楽です。FMラジオの周波数帯ではCEX=0で問題なく、TV-1~3の時にCEXを1、2、3と増やすと安定動作しました。 今の時代はアナログテレビが存在せずFMラジオだけカバーすればよいので、CEX=0で固定しても問題ないでしょう。

ケースへの組み込み

組み込み スイッチ付きの単4乾電池4本の電池ボックスの2本分のエリアに基板をおさめます。6センチぐらいのケースにすっぽり収まってしまいました。 ねじ等で固定しなくてもカバーを閉めれば押さえつけられて動かないので、電池を交換する時だけ気を付ければOKです。

製作過程で苦労した点