FM Transmitter のお遊び
車の中で携帯音楽プレーヤを聞くことがあったので簡単な装置を購入したのですが、その音があまり感心したものではありませんでした。 そこで自分で作ることにしました。若い頃に何台か微弱電波の FM 送信機を作ったことがあります。 30年ほど前にステレオのものをディスクリートで設計したときはかなり複雑なものになりました。 左右の差信号をつくって、それで 38kHz をDSB 変調し、位相の合った 19kHz のパイロットを作り、 目的周波数の発振器を PLL で作り、FM 変調をし、逓倍し、目的外信号を除去し、、、といった回路を組んでいくと、 とても大きなものになりました。
最近はデジタルの IC でそういったことをやってくれるので楽になりました。 NS73M というチップを使ってみることにします。 このチップはもう廃品種で、LCC (リード無し)パッケージですが BOB (Break out board) に載せたものが今でも入手できますから、半田付けが楽になります。
この IC は電源投入時に初期化が必要ですので、外部に簡単なプロセッサをつながなくてはいけません。
回路はこんなものになりました:


大きく分けて4つの部分からできています。 NS73M 周辺と、プロセッサ周りと、低周波増幅と、充電回路です。 順に説明しますが、このサイトはアナログ関連ですので、それに重点を置きます。
まずお断りしなければいけないのはケースです。 ものすごく小さなものを買ってしまったので、スペースの制約を受けてしまいました。 そのため、回路を節約しなければなりませんでした。 あちこちにそれが垣間見えます。
NS73M 周辺この BOB には当該チップの他に、デカップリング・キャパシタとクリスタルが乗っています。 チップの仕様書はやや難のあるものなので手探りで試験するようなところがありました。 (後述) 右図の赤いものが BOB です。 スペース節約のため、ここは二階建てになっていて、一階部分に PIC があります。
仕様では電源の最低電圧は 2.7V ですが、この個体は実際には 2.05V から動作しました。 それで、単4のNiMH 電池を使うことにしました。 アルカリ電池(3V)でも動きます。
IIC 端子を落として、3線式で制御します。
送信下限の周波数は仕様では 87.5MHz ですが、探ったところ、この個体では 2.5V 時で 84.1MHz でした。 84.0MHz では途切れます。
コントローラの PIC から、プログラミング時に高い電圧が来ますので、入力端子を 10kΩで保護しています。
BOB への加工としては、AF 入力端子は(仕様書に記述がないので)念のため 100kΩ で落として 0V バイアスしています。 また 15 番ピンから RFO ランドに行くプリント配線を切断して 177MHz のトラップを追加しています。 これは第2高調波が大きかったのでその対策です。
音声入力は最高感度設定で 100mV が定格です。 これは携帯プレーヤでは届きませんので、外部にアンプを設けることにします。
ケースが金属ですからアンテナは外に出す必要があります。 外に出ている線は唯一入力信号線だけですので、そのシールド外皮にのせることにします。 1uH 程度のコイルで分離します。 シールド線の場合では高周波は外皮の外面に流れますので、芯線はそのまま繋ぎます。 コアは AMIDON のトロイダルの T37 Yellow を使いました。 6回巻です。
RFO の出力インピーダンスは仕様書にはありませんが、測ってみたところ 21Ω 程度のようです。 この値が分からないとフィルターの設計などが行えません。
PIC コントローラ
コントローラには PIC を用いました。 その中でも、これより簡単なものはない、というほどの 12F509 です。 12F508 でも充分です。
12F509 は非常に古くからある PIC ですが、まだ使い道があるようですね。 このチップは使うときの注意点がいくつかあります。
1.アナログ部分がありません。 ですから、ほんとは電池電圧を監視して充電管理がしたかったのですが、あきらめています。 AD 変換のできる16ピンの PIC を載せるスペースがありません。
2.WDT (Watch-dog Timer) が常時動いています。 ですから 18ms 以内ごとに WDT をクリアするコマンドを与え続けなければいけません。 または WDT を殺してしまうかです。 私は後者を使いました。
3.プログラミングに 4.5V 以上の高い電圧を使います。 NS73M の最大定格を超えますので、回路で保護の仕組みを作っておく必要があります。 Vdd にある 1SS106 のショットキバリアダイオードはそのためです。 また GPIO 端子に繋がっている 10kΩもそのためです。
4.Weak Pull-up は IO の 0, 1, 3 に有効です。 ですから、その3つを入力信号に使うといいでしょう。 私の回路はそれに反していますが、それは私の間違いで、その結果コードの中で GPIO をクリアする動作をしつこくやっています。 やらないと初期に Pull-up を ON にしたときに出力が出てしまいます。 (出ても、Latch 信号が来る時点でオーバーフローして消されますので害にはなりませんが、気持ちの問題)
5.PIC 全部に言えることですが、引き算をして負になると Carry が 0 になります。 これは他のプロセッサとは逆ですのでよく勘違いします。 (今回のコードでは使っていません)
6.Power-on Reset で、最高アドレスからスタートします。 そのアドレスには工場で書き込まれた命令があって、W reg に 4MHz Clock の補正値を入れます。 そのあと wrap around して自動的にアドレス 0 にやってきます。 ですから、ユーザが最初に実行する命令は W reg をキャリブレーションレジスタに書き込む作業です。
7.スタックは2つしかありませんので、サブルーチンの深さは2までです。
ジャンパ・ピンで周波数を選択させています。 そのピンに 2.2kΩをかませていますが、出力ピンの保護のためと、プログラム時の動作保証のためです。
ジャンパの組み合わせは5通りできますからそれをコードの中で検出しています。
12F509 のコードは次の通りです(やや汚いコードでお恥ずかしい):
send のルーチンで NS73M のレジスタを設定しているパルスの例を右に示します。
これはリセットで、レジスタ 0xe にデータ b'00000101' を送りだしているところです。 黄色がクロック、緑がデータです。
4ビットのアドレスと8ビットのデータを下側 (LSB) から順に送っています。データ信号を落とすタイミングは、クロックを落とす時点と同じでいいのですが、なんとなく 1us 後にしています。 理由はありません。 まあパルス列を見る人が迷わなくていいかな、と思っただけ。
GP5 につないである LED は、PLL がロックしないエラーが発生したときに点灯するようにしています。
設定後は最後に SLEEP します。 その時は非常に消費電流が少なくなり、困ったことが起きます。
電源スイッチを切って、またすぐ投入すると、デカップリングに残っている電荷のためにパワーオン・リセットに入りません。 なので電波が出ないことになります。 1SS106 に並列に 100k を入れてリークさせ 0.15uF の電荷を逃がしてやります。 同様に、電源回路にある 100uF のデカップリングも放電させなければいけませんので、電源スイッチに 1kΩをつないで落としています。
低周波増幅
ごく単純な回路です。 ここでの問題(というほどのこともないけど)は、2V 程度しかない電源電圧の有効利用です。 このごろは Rail-to-Rail のいいオペアンプが出回るようになりましたから楽です。 低雑音低歪みの LME49721 を採用してみました。
もうひとつ、普通なら NF にある 27kΩの下側に 10uF ほどのキャパシタを入れて直流分を切る所ですが、そのスペースがありません。 ですから直流増幅しています。 オフセットが小さいオペアンプですから問題にはなりません。 入出力はカップリング・キャパシタを入れています。
入力信号のレベルですが、携帯プレーヤで通常イヤフォンで聞いているボリューム位置にしておいて FM 送信したときに、 他の放送局と同じレベルで聞こえるような増幅度にしました。 結果的には 13dB のゲインです。
本来は携帯プレーヤ用ですが、ついでに左チャンネルだけエレクトレットマイクも使えるようにしました。 入力端子に 1kΩでバイアスをかけられるようにしています。 またN-MOS スイッチでゲインを上げるようにしました。

充電回路
絶対的にスペースがありません。 そのため、ものすごく単純な回路で定電流定電圧のような仕掛けを作ることにします。 最少の部品数で済ませるように右のようにしました。
で、困ったのが R です。 通常の場合は、たとえば 15Ω程度にしておけばいいのですが、もし電池が完全放電していたり、ショートしているような場合は消費電力が大きくなって大型の抵抗が必要です。 でないと焦げてしまいます。
「キュリー点が 60℃ 位にある 15Ωのポジスタ」なんてものが手近にあるといいのですが、それもままなりません。
いろいろ考えて、真っ赤に焼けてもいいものを思いつきました。 ランプです。
流す電流が大きくなると赤熱して抵抗が高くなります。 これは定電流に近づくということですからもっけの幸い。
高電流でのトランジスタの発熱も小さくなります。 ちょうど大昔に買った 8V 50mA のワイヤ球が手元にありました。
右の図のように直径 3mm 位の小さいものです。 その特性を測ってみました。
買ったお店のラベルには 8V40mA と書かれていますが、実際には 48mA 流れます。
どうやらパールライティング社の T3 型の 8V50mA のようです。 これを4つパラにして 200mA として使います。
その会社から T4.2 の 8V100mA が出ていますから、それを 2 パラにする方がスマートでしょう。ライフは定格で 10,000 時間ですが、低い電圧で使うとまあ 10 乗に逆比例する程度でしょうから問題にはなりません。 10000/(2.5/8)^10 で 10億時間。
電圧と電流と抵抗の関係を測定した結果は次の図です。

抵抗値は 20mA - 200mA の範囲では電流値に比例します。 20mA 以下ではほぼ一定です。 ということは、 8V を与えたときの Inrush Current は定格の 10 倍ということですね。 ついでにフィラメントの時定数も測っておきました。 Inrush current の変化で測定して 2.4ms でした。
これを元の回路の R に入れてみて特性を測定しました。
左の図の青い線がそれで、負荷が重たくなったときに電流がうまく制限されている様子が分かります。
赤い線はランプでなく 15Ωの抵抗を使ったときの参考用の計算値です。USB からの電圧は開放で 5.04V、コネクタ先端から PC 側を見込んだ内部抵抗は 0.68Ω、Ta=20℃ でした。
回路中の LED は GaN の緑発光のものでした。 グラフの定電圧部分は 2.9V 位になっています。 丁度いい具合ですが、これは 680Ωの抵抗を調整して合わせた結果です。 1kΩなら 2.8V になります。
1S953 はトランジスタの BE の温度特性を補償し、GaN LED の温度特性は電池の充電終止電圧の温度特性を補償します。
この状態で、つなぎっぱなしにしても 2.9V で止まりますから過充電にはなりません。 0.15C 充電程度ですから一晩充電して使う形になります。
USB の線は細いと抵抗があります。
ケーブルのシールド(ソケットの外側金属部分と接続されている)も負極として使って、抵抗を小さくするようにします。なお、シリーズに入っているトランジスタの損失が気になりましたので、非常におおざっぱですが計算しておきました。 小さな SMD なので気になっていましたが、大丈夫なようです。
完成
完成品の消費電流は 2.5V 時で 35mA です。 他社の製品に比べると消費電流がやや大きい IC です。
きれいに音楽が流れていますが、電波はそれほどきれいではありません。 スプリアスがあちこちに出ています。 一番大きいものは送信周波数からローカルオシレータ(304kHz)の反対側の、+608kHz 位置で -20dB です。
+304kHz のスプリアスは -32dB ほどです。
また両サイドに AM 変調による 1MHz から 3MHz の広い山があります。 この AM ノイズは、9番ピンをデカップリングしても、AF input を落としても変わりません。 もう少しきれいな波でいてほしいですね。
下の図をごらんください。
トラップ無しのとき
トラップ付きのとき
なお、これは実験用ですからそのままでは商品に使えません。 ちゃんと電界強度を測定して許可を受けないといけません。
[余談]
NS73M の仕様書についてですが、これはテクニカルライタの手によるものではないようです。 基本的な情報が多く欠落しており、また英語の言い回しがとても不自然です。
いくつか例を挙げますと:
- Lin, Rin 端子について
内部でバイアスがあるかどうか分からない。
外部からバイアスをかけていいかどうか分からない。 - TEB 端子について
「TEB」 が何の略か不明である。
Pin TEB 表示にオーバーバーが無いので真値は+と読める、
しかるに信号名は Unlock Detect Output、よって+で Unlock detect になるが実際には逆。
例に掲げられているルーチンでは TEB High>25 でエラーになっているがこれは逆。 - CEX は重要な設定項目であるにも拘わらず説明が一切無い。
- 説明がない
FMG, FA, TAS, PAB, MPTEST, SEL_TEST (他20個ほど)の設定項目に一切の説明がない。
[余談2]
上記の例ではランプを並列につなぎました。
ランプは直列につないではいけません。 どれかがフィラメントがわずかに細くなるなどすると、温度が上がり、抵抗が増え、かかる電圧の負担分が増え、さらに温度が上がり、、、という悪循環になってその球が破断します。 全体としてライフが短くなるのです。 昔、クリスマスのデコレーションのランプが、100V に対してたくさん直列接続されていましたが、すぐに切れていましたね。
トランスレス5球スーパーもよく真空管のヒーターが切れていました。 学生時代に、電気屋さんのアルバイトでお客様のうちへラジオの修理をしに行くときは、まず中間周波増幅の 12BD6 のヒータを疑う事から始めていました。
