2024.03.25

究極のFMステレオ・トランスミッター

 はじめに

 FMステレオ・トランスミッターを作りました。ライン出力やヘッドフォン出力のアナログ(ステレオ)信号をFMの電波に乗せて送信する、小さな放送局です。レベルメーターとトーン発生器も付けました。




 スペック 

 使い方


 下のクルクルダイヤル(ロータリーエンコーダー)で送信周波数(87.5〜107.9MHz、0.1MHz刻み)、音量(左右共通で、-95dB〜+9dB、1dB刻み)、トーン周波数(1KHzと、27.5Hzのラの音から、ラ#、シ、…と上がって行き、26581Hzのソ#の音まで)を可変できます。上の写真はすべてを最大に設定した時の様子。Fの下が黒い四角になっていますが、Tと■が交互に表示されており、この状態では、ダイヤルを回すとトーンが上下出来ます。ダイヤルを(下向きに)押すと、F→V→T→F… のように順に設定項目を切り替えることができ、押したときのその項目の設定値を、PIC#1のEE-PROMに記憶するので、電源を切っても、設定値は保存されます。右上のトグルスイッチは、3.5mmステレオプラグからの入力と、サイン波発生器からのサイン波を切り替えるスイッチ。ロータリーエンコーダー左の黄色いPUSH-SWは、当初「EE-PROMを更新せずに設定項目を切り替える」ボタンに使うつもりで付けましたが、現在は未使用です。


 ブロック図



 回路図はこちら

 3.5mmステレオジャックから入ったオーディオ信号と、AD9833からのサイン波をトグルスイッチで切り替え、電子ボリウムに加えて音量を上下(mute、-95dB〜+9dB)してFMトランスミッタとレベル検出(全波整流回路)に加えます。FMトランスミッタはアンテナからFMステレオ放送の電波をラジオに飛ばします。レベル検出回路は、FMトランスミッタに加えられている音量を電圧(0-5V)に変えて PIC#2に加え、PIC#2は入力電圧に応じてLEDを点灯します。
 NS73MとNJU72341は I2C制御ですが、電圧が違うので、低い方の3.3Vにプルアップして共通に制御しています。PICによるI2Cの制御(マスター側)については、PIC内蔵のハードウエアは使わず、I/OピンのIN/OUTをソフト的に切り替えて制御しています。AD9833は3線シリアル制御なので、PIC#1から3本I/Oをつないで設定しています。


 内部
 一枚のユニバーサル基板に収まらなかったので、2段構造にしました。下側に主要なパーツを集めており、上側の基板には、16文字2段のキャラクター表示液晶と、レベルメーター用のLED、それを制御するPIC#2だけを乗せています。


内側


外側


 主要パーツ

NS73M  秋月電子のFMステレオ・トランスミッター・キットを分解してパーツを流用。ソフトもI2Cで設定しているところは参考にさせてもらいました。
レベル検出  NS73M(FMトランスミッターの主要部品)の入力信号を、LMC660を使った全波整流回路で整流し、もう一つのPICマイコンでADCし、{-18dB、-12dB、-6dB、0dB、+6dB}の6dB刻み・5段階でレベルを検出し、5連のBAR LEDを点灯させています。こちらはここからアイデアをもらいました。全波整流のところはほぼパクリです。参考文献では、16文字x2行のLCDに、1dB刻み・45段階でBAR表示させており、当方もPICマイコンを1つにしたかったのですが、手持ちのPICが18ピン(2BYTE-I/O)だったため、I/Oピン数の関係で、2個使いにしたので(3BYTE-I/O品とかも市販はされている)、レベルについてはLCD表示をあきらめて、LED表示にしました。5連のBAR LEDは、緑が4つと一番上が赤になっており、赤が点いている状態はレベル過大で音が割れ、緑が1つしか点かないような状態は音が小さすぎるので、ボリウムでレベルを調整して、緑が3〜4個点いているような状態にすれば、適正変調レベルとすることが出来ます。VUメーターの規格は、音量が変わった時に針が指示する値に位置するまでの所要時間は300msで、本レベルメーターはそれより若干敏感な感じがしますが、目的は果たせているので、良しとします(ハード的、ソフト的に、もう少し近づけることは可能ですが…)
電子ボリウム  回路内でゲインを稼がずに済ませたかったので、ゲインアップ出来て、ステレオ(2ch)以上の電子ボリウムを探し、 日清紡マイクロデバイス(旧新日本無線)のNJU72341を使わせてもらいました。単電源で、ゲインアップも出来るので重宝しました。
トーン発生器  きれいなサイン波を発生させるのは難しいのですが、デジタルでカウンターを回し、サイン波テーブルでサイン波を発生させるアナログデバイセズのAD9833を使うことで高純度のサイン波を簡単に発生させることが出来ました。実際は、25MHzの水晶も搭載した小基板がamazonに売られていたので、こちらを使っていますが、この小基板の電圧が分からず(AD9833は、+2.3〜5.5Vの範囲で動作することは分かっていますが、一緒に乗っている水晶発振器にも定格電源電圧があるはず)、出品者に問い合わせて「工場は、モジュールの定格電圧は5V、つまり5V電源であると答えました」との回答だったので、5Vを入れて使っていますが、小基板に乗っている水晶は、1.8Vでも発振はしていました。
ロータリーエンコーダー  今回は対応する周波数レンジが広いので(全部で205チャンネル)、上下ボタンをポチポチ押すのは大変と考え、ロータリーエンコーダーをくるくる回して周波数やボリウムを変える方式にしました。アリエクスプレスで、arduino用のロータリーエンコーダーを見つけて、使わせてもらいました。
LCD表示器 秋月電子のバックライトがオレンジ色のやつを使わせてもらいました。バックライトは常時点灯させており、明るいところでは気が付かないくらいですが、暗いところでの視認性は十分です。


 プログラミング

 今どきのICチップは、制御にI2Cを使うことが多いので、簡単なことをやらせるにも、I2Cが制御できるマイコンが必要になります。今回改造した、秋月電子の「FMステレオ・トランスミッター・キット」でも、PICマイコン(こちらは3V電源、4MHzクロックのPIC16F648A)が使われています。当方、ちょっとしたことをさせたくなった時に、16FタイプのPICマイコンを使うことがあり、わりあい精通しています。命令が限られており、特にテーブル引きとかしたくなった時は、大小比較を繰り返す必要があり、プログラムが長くなりがちですが、プログラミングは謎解きに似ており、好きな作業です。今回のpic#2もそうですが、見た目は18ピンDIPの小さなICですが、プログラムを書き込めば、入力電圧をADCして、その電圧のログテーブルを引いて、5つのLEDを順次光らせる、という仕事を、外付け部品無しにやらせることが出来ます。

 PICのアセンブラプログラムを見ても、他に流用出来るわけでもなく、汎用性はありませんが、主に自分の備忘録として、ここに乗せておきます。

 PIC#1のプログラムはこちら
 PIC#2のプログラムはこちら

 これ↑のファイル名から、.txtを取り、.asmとして、MPLABX IDEでアセンブルして、PIC16F88に書き込めば動作するものです。(文字化けする場合は一度セーブして、UTF-8で開ければ見られるかも)


 おわりに

 今考えると隔世の感がありますが、当方が中学・高校の頃は、FM東京(今は東京FMと呼びます)で、土曜日午後に、歌謡ベストテンや、ポップスベストテンがあって、10位までの曲をフルコーラス流してくれていたので、FMチューナーで受信して、カセットテープに録音していました。カセットテープは、ヒスノイズ(サーッという背景ノイズ)が大きく、クロームテープとか、ドルビーBとかの手法で ある程度は改善されましたが、入力レベルがちょっとでも大きいとクリップして歪む(音が割れる)し、小さいと音楽がノイズに埋もれるので、レベル設定はシビアでした。今回、FMトランスミッターに、トーン発生器(サイン波発生回路)とレベルメーターを付けてみて、当時のことを懐かしく思い出しました。電子ボリウムNJU72341は、+9dB(2.8倍)から、0dB(1倍)、下は-95dB(1/56234倍)まで1dB刻みで変化させることが出来ますが、-60dB(1/1000倍)とかまで下げると、FMラジオで受信しても、ノイズに埋もれて聞こえません。FMの頃は、この程度のS/N比だったなー、と思い出しました。

 プログラマブル波形発生器やPICマイコンが使えるようになって、サイン波の発生とか、レベル表示(なんちゃって、ですが)とかが簡単に実現できる時代になりましたが、今の時代、逆にスマホでいくらでも曲が(サブスクとかで)聞けて、ブルートゥースのワイヤレスヘッドフォンも簡単につながるので、FMトランスミッターの実用性自体があまりない、というのが残念。当方こういうの作るの(プログラムのコーディングも含め)好きです。デバッグは謎解きのようなわくわく感(分からない時の不完全燃焼感)、うまく動いた時の達成感があります。

 「究極のFMステレオ・トランスミッター」というタイトルを付けましたが、昨今のFM放送局では、番組の送出にコンパンダーが使われています。どうせ車の中とかノイズが多い環境で(FM放送を)聞いているでしょうから、ノイズにかき消されるような小さな音は聞こえるように圧縮して送る、という放送局側の処理です。民放では当たり前で(NHKは使っていないらしい)コミュニティFM局でも使われているようです(例えばこちら)。まだ上には上があります。

 今回は、秋月電子で購入した新潟精密のFMトランスミッターモジュールを使わせて頂きましたが、同様のチップとして、スカイワークス社に買収された旧シリコンラボに、Si4712/13というチップもあるようで、3.5mmステレオジャックや送信に必要な部品が付いた小基板が、¥1,000しない値段で売られています。時間があれば、こちらも同様にトーン発生器とレベルメーターを付けて性能の違いを試してみたいと思います。

[Top Page]