FM送信機(トランスミッター)の自作!光デジタル入力付き | 電子工作 デジタルTVの下に据え置いて光デジタル出力端子に接続!そして操作はテレビのリモコンからOK!… そんな便利で高性能なFMトランスミッターを作りました。
Bluetoothトランスミッター、特に受信機側では、今のところSBCコーデックが主流なので音質もさることながら音声が遅延し、動画視聴では映像とのズレが気になりますよね。
FMトランスミッターではそんな遅延は全くありません。ペアリングもいらないし、Apt-X LLコーデック対応の高価なBluetooth受信機を用意する必要もありません。
本作の背面。
・ACアダプタ 5V
・アンテナ接続
・光デジタル入力
・アナログ入力
アンテナは数十センチのビニール線で十分。
プログラムの設定を変更することで、好きなリモコンとボタンが使えます。
例えば、テレビの普段使わないボタンを割り当てると便利。
主役はデジタルFM変調方式の、シリコンラボ Si4711
これを使うと、デジタルオーディオ入力が可能になり、簡単な回路ながらもFMトランスミッタとしてはこれ以上ムリなレベルの高性能FM送信機が作れます。
同類のものとして、秋月電子にある NS73M が良く知られますが、アナログ入力しかなく、性能もSi47xxシリーズには及びません。それに、TVのアナログ出力はノイズが多いなど音質的にイマイチなので、デジタル入力にするだけで大幅な音質向上が見込めます。
さらに、ダイナミックレンジコントロールが搭載されているので、FM放送と同じような聴きやすい音質に仕上げることもできます。
ただこのチップ、QFNパッケージしかないんでハンダ付けが最大の難関。このハンダ付けのやり方もご紹介します。でも、思うよりかは意外と簡単ですよ?
そのほか、FM送信機自作のための基本情報や、トランスミッターキット、無免許で電波を飛ばせる条件などをまとめました。
4つの自作方針
FMトランスミッターの自作方法や回路には、次の4パターンあります。
1. 古典的なFM送信機の回路
電子工作で昔から見かける基本的な回路です。
LC共振回路のC容量を音声信号によって変化させることで、周波数を変化させます。
Cには、可変容量ダイオード(バリキャップ)を使う方法と、トランジスタのCE間容量を利用する方法があります。
可変容量ダイオードを利用した回路例
トランジスタのCE間容量を利用した回路例
上の2つの回路は、どちらも奥沢先生の「FMワイヤレスマイク」の回路図です。
【出典】はじめてトランジスター回路を設計する本(誠文堂新光社)
コイルは、0.7~0.8mmのポリウレタン線を直径Φ10mmの丸棒に8回巻いて、長さが10mmになるように伸ばす。中間タップは真ん中から出すとのことです。
1SV103 は多分入手できないと思いますので、代替え品を探す必要があるでしょう。TRは、高周波トランジスタの 2SC1923 (fT:500MHz)辺りが良さそうです。
これらの回路はFM変調の原理をよく示していて、周波数変調の理解を深めるのには良い回路です。当方も小学生の時に作りましたが、これでもソコソコ飛ぶんですよね。
ただ、送信周波数の安定性が悪く実用性には乏しいため、実験用としての域を出ません。今では、受信側は普通0.1MHzステップのデジタルチューニングですから、逆に合わせるのが難しくなります。それにモノラルです。
2. 基本的なステレオ送信機
先の基本回路をベースにステレオ化したトランスミッターの回路です。
ステレオトランスミッタの回路例
ステレオにするには、L信号とR信号からステレオコンポジット信号を作る必要があるんですが、これをディスクリートで組むのは大変なので、普通はステレオモジュレータと呼ばれるICを使って送信する信号を作ります。回路図中の NJM2035 というICがそれです。
しかし、今でも入手性の良いステレオモジュレータは限られており、電子工作では有名な NJM2035 一択といってもいいんじゃないでしょうか。データシート
この手の回路では、コンポジット信号を作るところまではICでやりますが、その後のFM変調を行う部分は前途の基本回路と同等ですので、安定度や音質の面でイマイチです。
また、FM変調性能(周波数特性)がコンポジット信号の50KHzくらいまでフラットでないと左右の分離度が急激に悪くなるため、ステレオセパレーションもイマイチです。
3. アナログICを使ったFMトランスミッター
ステレオコンポジット信号の生成や、PLLやVCOなどを内蔵しFM変調までも行うオールインワンなFMトランスミッターICを使う方法があります。
FM変調はアナログ方式ですが、ディスクリートで組むよりかは遥かに簡単に性能の良い送信機が作れます。しかし、実際自作するとなるとピン数が多かったりして意外と面倒だったりもします。
トランスミッターICのブロック例(SN761634)
この手のICは、2010年頃まではよく新製品が登場していましたが、製品寿命が短く次々にディスコンになっていきました。例えば、次のような品種がありましたが、今では入手不可能となっています。
・SN761634(テキサスインスツルメンツ)データシート
・BH1415, BH1416, BH1417(ローム)データシート
・THG4649(ザインエレクトロニクス)
もはや時代遅れな感もあって、あまりオススメではないですね。
4. デジタル変調方式FMトランスミッター
今では、DSPなどによるデジタルFM変調を行うICがあります。外付け部品が非常に少なく、自作ながら音質の良い高性能なFMトランスミッターを作ることができます。
デジタル変調方式のブロック例(NS73M)
デジタル変調方式の特徴は、入力された音声信号を一旦ADCで数値化するところにあります。計算によってステレオ化とFM変調を行うんですね。
回路例(NS73M)
マイコンなどによる簡単な制御プログラムが必要です。この回路例ではPICを使っていますが、NS73M の場合はネット上に多くの作例があるので困ることは無いでしょう。
デジタル方式は現在の最先端の方式ではありますが、Bluetoothの台頭やFMトランスミッターの需要低迷などにより市場が衰退してきているため、今では新製品が登場することはあまりないようです。
現在入手しやすいものとしては次のものがあります。
デジタル変調方式のトランスミッタIC
品種 | 送信周波数範囲 | 送信出力 | S/N | THD | I2S入力 |
---|
NS73M | 87.5~108MHz | 107dBuV(2mW) | 55dB | 0.4% | 無し |
---|
QN8027 | 76~108MHz | 121dBuV(25mW) | 63dB | 0.05% | 無し |
---|
Si471x | 76~108MHz | 118dBuV(13mW) | 58dB | 0.1% | 有り※ |
---|
今はなき新潟精密のFMトランスミッターモジュール。秋月電子で扱われているため、知名度が高く多くの作例があります。周波数はヨーロッパ仕様。ディスコンになって在庫限りと表明されてもう7~8年?くらい経つので、そろそろ本当にヤバイはず。当方でも2度使ったことがあります。
aitendoにある中国製です。仕組み的なことはあまり書かれていませんが、「音声信号をADC変換しデジタルFM変調する…」とあります。でも「63dB Stereo SNR, 0.05% THD」って書いてあるが本当?測定条件が書かれていないところが怪しいですが、本当ならなかなかの性能ですね。
Si471xシリーズ
シリコンラボのFMトランスミッタICで、デジタルオーディオ(I2S)入力が可能です。今の所、DSP方式のFMトランスミッタで最初に候補に挙がるICじゃないでしょうか。これでも登場してかれこれ10年近く経ち、何度かマイナーアップされています。ハンダ付けが難しいのが難点。
・Si4713(空きチャンネルスキャン&RDS付き)
データシート 注意!Si4710 はデジタル入力未サポート
シリコンラボ公式によると、Si471xシリーズはどれもデジタルオーディオ入力(I2S)をサポートしていると紹介されています。
特に、Si4710 と Si4711 は、RDS機能(海外のFM放送で使われるデータ重畳機能)が有るか無いかの違いだけで、データシートも共通、他の公式ドキュメントでも、どう見ても両者共にデジタルオーディオ入力ができるようにしか見えません。
ところが、実際に Si4710 を試してみると、デジタル入力モードのパワーアップコマンド(0x01 0xC2 0x0F)のレスポンスは、ERRフラグがセットされた応答(0xC0)が返り送信波が出てきません。
調べてみると、どうも Si4710 はデジタル入力をサポートしていないようです。
シリコンラボに問い合わせたところ、実は Si4710 をデジタル入力可能にするパッチファイルが非公式に存在していて、それを(たぶん起動時に)当てることでデジタル入力が可能となるとのこと、そしてパッチファイルを手に入れるには、Si4710 利用の背景を説明する必要がある、ということが判明しました。
なぜ最初からそのように説明されていないのか分かりませんが、仮にそのパッチファイルを入手できたとしても、当記事で勝手にパッチを公開することは恐らくNGですし、シリコンラボにコンタクトした人にしか作れない作例になってしまいます。
そういうわけで、Si4710 はあきらめ、代わりに Si4711 を使うことにしました。
たまたま見つけたこのページに、Si471xシリーズで最初からデジタルオーディオ入力が使える品種とバージョンが載っていました。
※ただし、当方で実際に確認できているのは Si4711-B30-GMR のみです。
Si471xシリーズのデジタル入力可否可能 | ・Si4711-A20-GM / Si4711-A20-GMR ・Si4711-B30-GM / Si4711-B30-GMR ・Si4713-A20-GM / Si4713-A20-GMR ・Si4713-B30-GM / Si4713-B30-GMR |
---|
不可 | ・Si4710 の全バージョン ・Si4711-A-GM / Si4711-A-GMR ・Si4712 の全バージョン |
---|
FM送信機キット
今のところ、FMトランスミッターのキットは結構ありますので、求める仕様のものがあるか一応探してみました。ワイヤレスマイクとなっているものが多いですが、大体はアナログ音声信号入力も付いているようです。
また、キットの主流はアナログ方式ですが、デジタル変調のものもあります。しかし、さすがにデジタルオーディオが入力できるものはないですね。
| FMワイヤレスマイクキット ワンダーキットのワイヤレスマイクキットです。基本的なアナログ方式で、変調回路はトリマとFCZコイルから成ります。 |
---|
| FMステレオトランスミッタ 秋月電子のよく知られるキット。しかし、回路に問題があり異常発信しやすく失敗率が高いのでオススメできません。 |
---|
| FMトランスミッタモジュール ランフィーのDSP方式デジタルFMトランスミッタモジュールで、LCD表示器付き。基板は完成品ですが裸の状態です。 |
---|
| FMワイヤレスマイクキット ロームの「BH1417F」を使用したアナログIC方式のトランスミッタキット。周波数設定はPLL方式なのでデジタル的です。 |
---|
こんな感じの作ります
欲しいものがキットや市販品にもないので、いつもながら作ることにします。
デジタルとアナログのオーディオ入力を備える。
チャンネルはとりあえず4チャンネル。
操作はリモコンで行う。
入力切替、チャンネル切替、電源ON/OFF。
圧電サウンダで操作音をピッと鳴らす。
7セグLEDで送信周波数を表示する。
電源はACアダプタ 5V。
全体ブロック図
デジタルオーディオレシーバー、Si4711、7セグLED制御用PIC、そして全体制御用PIC で構成しています。
※高音質なFMトランスミッターに見合う、高音質なトランスミッター専用FM受信機の作例を追加しました。音にこだわりたい場合はご参考にどうぞ。
より詳しく⇒FM受信機の自作!高性能アンプが特徴の専用DSPラジオ
Si4711使用のポイント
Si4711 のブロック図です。データシート
周辺回路は、最小構成だとパスコン1つとインダクタ1つだけという簡単さです。
送信出力ピンに120nH(L1)が接続されていますが、これは送信同調用のLで、内部のC(可変容量ダイオード)と接続されています。このCの容量は、自動調整または手動で設定することができ、自動の場合は何pFに設定されているのかを取得することもできます。
普通は自動調整(デフォルト)にして放置ですね。
デジタル入力モードを使う場合は、32.768KHzのクリスタルを接続することができないので外部からのリファレンスクロックが必要になるんですが、クロック入力用のプリスケーラを内蔵しているので、レジスタ設定により幅広い周波数を受け入れ可能です。
また、デジタル入力ではI2Sのスレーブ側となりますが、I2Sのマスタークロック(MCK)は不要。さらに、DFS/DINはリファレンスクロックと同期していなくても大丈夫です。
ソフト的には、ホスト側からレジスタ(プロパティー)を設定することで、色々な動作設定が可能。アナログ入力レベルやプリエンファシスはもちろん、送信周波数、送信出力、ダイナミックレンジコントロールなどなど。でも、多くはデフォルトのままでOKです。
実際のプログラミングは、データシートの情報だけではできません。AN332: Si47xx Programming Guideを参照する必要があります。
デジタルオーディオ入力のサンプリングレート
デジタルオーディオの受信側では、対応していないサンプリングレートで信号が送られてくると再生できないという問題が起こります。
本作で使うデジタルオーディオレシーバー LC89091JA は、最大192KHzまで対応しておりハイレゾ音源も受信できるんですが、サンプリングレートコンバーターの機能はないため、次の受信側である Si4711 の仕様にかかってきます。
Si4711 では、32, 40, 44.1, 48KHz のサンプリング周波数がサポートされおり、これが本機の仕様となります。これを超える信号は受信できません。
本作で想定する送信側はデジタルテレビですが、デジタルテレビの出力するサンプリング周波数は、DVDと同じ48KHzが普通です。これは、デジタル放送が48KHzと規定されているためです。
再生ソースによっては32KHzで送出するテレビもあるようですが、さすがに48KHzを超えるようなハイレゾを出力するテレビはないと思います。
それから、Si4711 ではサンプリング周波数の自動検知・切り替えをサポートしていないので、途中で周波数が変わったら再設定する必要があります。
回路図と設計
変なところや難しい部分は特にないと思います。
>別ウィンドウで開く
回路の詳細
デジタルオーディオ入力回路ですが、光デジタルのS/PDIF信号をI2Sへ変換するデジタルオーディオレシーバーには、LC89091JA を採用しています。DACなどの余計な機能が載っていないので、シンプルな回路で済みますね。サンプルレート変換機能はありせん。
また、LC89091JA のGPOピンは汎用IOとして自由に使えますので、これを利用して光ケーブルのトスリンク(PLR135/T)の電源と、クロック発振器(OSC1)のイネーブル制御を行っています。トランスミッターがスタンバイの時の消費電流を抑えるためですね。
このGPOの設定は、制御PIC(IC3)からI2C経由でレジスタを設定することで行います。
LC89091JA に供給する24.576MHzのクロックは Si4711 にも供給します。周波数安定度は±10ppmの ASFLMB-24.576MHZ-XY-T を使っています。
Si4711 周りは基本データシート通りで、説明はいらないほど簡単。送信同調用のインダクタ(L2)には、高周波用チップインダクタを使っています。
制御用PICの周辺回路です。内部OSCを使わず8MHzのセラロックを使っているのは、リモコン信号の受信処理で正確性を向上させて誤動作をさけるため。
操作音は圧電サウンダを使用して周波数可変にしました。駆動側ICの保護と安定駆動のためにR23(1K)を挿入しています。
周波数を表示する7セグのダイナミック表示は、専用に割り当てたPIC一本で行います。
ネット上では7セグデコーダやらドライバやら使ったロジック系回路をよく見かけますが、昔とは違ってPICを使えばそれ一本で済ませることができます。
制御用PICから、I2C経由で表示する値を指示します。
7セグのスキャン周波数は、首を振って見てもほぼチラつかない1KHzにしています。
また、LEDのダイナミック駆動により可聴域のノイズが電源ラインに乗るので、フィルタ(L3とC11)を設けて対策しています。アナログ入力があるので念のためですね。
この他、電源ライン随所に EMFフィルタ(EMF1~3)とフェライトビーズ(FB1~2)を配置して、高周波ノイズ対策を施しています。デジタル方式なので基本的にノイズには強いハズですが、万全を期した形です。気持ち不要輻射も減ると思います。
特にEMFの「NFM21PC105B1C3D」は、貫通コンデンサとして強力なパスコンとしても使えますので、高周波回路にオススメです。
これらのパーツは、秋月電子などで安価で手に入ります。
I2S各信号の周波数について
本作のI2Sのビットクロック(BCK)は、通常3.072MHzになります。
参考までに、I2S各信号の周波数の求め方を書いておきますと、
サンプリング周波数をFs、転送ビット幅をbとする。
※転送ビット幅は一般的に16/24/32のいずれかで、余ったビットには0が詰められる。
転送ビット幅I2S Format | 有効ビット数 | 転送ビット幅 b |
---|
32-fs | 16 | 16 |
---|
48-fs | 16 | 24 |
---|
48-fs | 20 | 24 |
---|
48-fs | 24 | 24 |
---|
64-fs | 16 | 32 |
---|
64-fs | 20 | 32 |
---|
64-fs | 24 | 32 |
---|
・MCK = 512xFs or 256xFs or 128xFs(システムや設定による)
・BCK (DCLK, SCLK) = Fs x 2 x b
・LRCK (DFS, LRCLK) = Fs
I2Sの各信号周波数例Fs | b | BCK | LRCLK |
---|
44.1KHz | 16 | 1.4112MHz | 44.1KHz |
---|
44.1KHz | 32 | 2.8224MHz | 44.1KHz |
---|
48KHz | 16 | 1.536MHz | 48KHz |
---|
48KHz | 32 | 3.072MHz | 48KHz |
---|
下は、LC89091JA の出力フォーマットです。
LC89091JA の出力は、64-fs、有効ビット数は24なので、bは32になります。
デジタルTVのFS=48KHzを入力した場合、BCK出力は3.072MHzということになりますね。
波形は、LC89091JA の実際のBCK出力です。
パーツと入手先
本作では表面実装部品がメインになります。主にMOUSERと秋月電子から入手しました。
主要パーツ
Si4711-B30-GMR(MOUSER)データシート
高性能なFMトランスミッタですが、残念ながらQFNパッケージしかありません。サフィックスが”GM”と”GMR”のものがありますが、梱包形態がトレイかリールかの違いです。
LC89091JA(MOUSER)データシート
オンセミのデジタルオーディオインターフェースレシーバー。最大サンプリング周波数は192KHzなのでハイレゾにも使えます。簡単な回路でS/PDIFをI2Sへ変換できます。
PIC16F1705T-I/SL(秋月電子)データシート
アナログ関連機能が強化されているほか、比較的新しいので何かと改善されている汎用PIC。本作ではアナログ機能は使いません。EEPROMは内蔵されていないので要注意です。
SS-N125G(マルツ)
タカチの難燃性プラケース。据え置き型FMトランスミッターを収めるのに手頃で、加工もしやすいです。
製作手順
今回は加工しやすいガラスコンポジット感光基板を使いました。
より詳しく⇒プリント基板の自作!感光基板を使った作り方で簡単製作
基板のパターンです。
緑色は銅箔、黄色は部品外形、灰色はジャンパーなどを表す補助線です。
メイン基板と全面基板、トスリンク用の超ミニ補助基板の3枚構成になってます。
※改良後のパターンのため、写真とは一部異なる部分があります。
サンハヤトの感光基板専用インクジェットフィルムPF-3R-A4にパターンを印刷します。
「基板.pbf」をmikanで開いて、外形、hole、solder、裏B、裏C の5つのレイヤを印刷。
露光して、現像が終わったところ。
エッチング中です。
エッチングが終わった直後。
ガラスエポキシやガラスコンポジット基板は、このようにパターンが裏からでも透けて見えます。
穴を開けたら基板のカッティングです。
これまでならアクリルカッターでガシガシしてパキッと割っていたのですが、今回からミニテーブルソーを導入してみました。
すると、これが超便利!激楽ちんです。もっと早く買っとけば良かったですね。
特に、こんな超小型基板をカッターで切り出すのは結構大変だったのですが、ミニテーブルソーを使うとそれはそれはもうラクラクです。
ガラス基板はダイヤモンド刃が最適。
フラックスを薄く塗って完成。
最初に表面実装品のハンダ付け。
普通の表面実装ICは、最初に端2箇所を固定してから、全体を一気にハンダ付けします。
チップ抵抗とコンデンサでは、パターンの間隔が微妙に違っていて抵抗の方が少し広いです。
パターンをまたぐ抵抗はショートに要注意。
チップ型のエミフィル(三端子コンデンサ)はこんな感じ。
チップトランジスタ。
本作で使用している高周波用チップインダクタの「0805HP-121XJRB」は、ハンダ付けする面が決まっています。
上部がハンダ付けする側ですね。
次に、最大の難関である Si4711 のハンダ付けです。
3mm角なんで小さい。
このチップは、データシートにある絵とは違って実際には側面の金属部分が使えない、というか少し露出はしていますが、恐らくダイシングカットされたままでメッキされていないので、ハンダ付けには向きません。
おまけに裏面にGNDパッドなんてモンもあって、最も難易度が高い部類に入ります。
しかし、それもハンダ付けできるのでした。
使用するハンダは、流れやすい共晶ハンダをオススメします。普通のハンダでもできるとは思いますが、成功率が落ちるかもしれません。
また、ルーペは必須だと思います。少なくとも当方は、これがないと絶対ムリです。
このルーペをこんな感じで使います。
他のやつではダメで、このようにコテを入れられるルーペじゃないと厳しいですね。
ここに付けます。方向に注意。
※一部の写真は Si4710 を付けた時のもの。
まずは、パターンの方に予備ハンダをします。
このハンダのボコボコによって、チップと基板の間に隙間ができます。これが重要。
水とは違って、ピタッと接触しすぎているとハンダが流れていきません。
チップの方は予備ハンダ不要です。
次に、フラックスをわずかに塗ってチップを置いて接着し固定します。この「固定する」というのが目的。塗りすぎるとハンダ付け不良になるかもしれないので要注意です。GNDパッドに塗るのもできるだけ避けたほうが良いでしょう。
このとき、チップの角を4つの角形パターン角に合わせます。これらのパターンの位置と大きさはそのために設計してあります。
そして、コテに共晶ハンダをタップリ乗せる→チップをピンセットで押さえつける→ハンダを1辺にペチャッと押し付けます。
これで、とりあえず足が付くハズ。
最初はピン間がショートしていていも構いません。1辺ができたら、後はピンセット無しでできますので4辺とも措置していきます。
最後に仕上げ。共晶ハンダを全辺にタップリ押し当てていく感じです。
ポイントは十分に加熱すること。
4辺と角のパターン、それぞれ3秒間づつ押し当てていきます。最近のチップは無鉛のリフローはんだ付け(220℃)に耐えられるので、そう簡単に熱で壊れたりしません。勇気を持ってやってください。失敗したら…それはその時ということで・・・
フラックスを塗りながらコテを当てて完了。
本当にうまく付いているのか?
(((( ;゚Д゚)))ガクガクブルブル
後のお楽しみですね。
フラックスは、後で洗浄剤で洗い流します。
当方は、この方法で二回やりましたが、いずれもうまくいきました。あわてずゆっくりと落ち着いてやれば成功すると思います。
裏面完成です。(洗浄後)
ここまで来たら動作確認をしておきます。
写真には写っていませんが、赤外線モジュールを仮り付けします。
ソースをビルドしてPICにプログラムを書き込み、リモコンを認識させてみます。
ファームウェアを参照してください。
ソースをいじって Si4711 をピンポイントでテストしても良いでしょう。
デフォルトでは、最初は88.6MHzで受信できるはず。FMラジオでキャリアが受信できたら、アナログモードでラグ端子を指で触れてみてノイズが聞こえるか試します。
表側の完成写真。
動作確認できたら、前面基板と接続するためのスズメッキ線を14本立てて、裏面を洗浄後、ハヤコートを吹き付けておきます。
スズメッキ線は、Φ0.5mmを使いました。
7セグなど前面基板への部品の取り付けは、高さ合わせをする必要があるのでケース加工後になります。
次に、ケースの加工です。
加工図は「外形.pbf」をmikanで開いて外形レイヤを反転印刷したものです。
(表裏が逆なので要注意)
それをマスキングテープで貼ったら、キリで印を付けます。
ドリルで穴を開けます。
先端が尖っている木工・樹脂用のドリルだと、穴位置がズレずに正確に開けやすい。
その代り、貫通スピードは遅い。
赤外線受光部用にΦ3.5mm穴を開けますが、裏側はΦ4.5でえぐっておきます。
手で回したほうが安全ですね。
前後完成したところ。
トスリンクと7セグの角穴は、下穴をつなげてヤスリでがんばります。
トスリンクの固定足は不要なので切り捨てて、ミニ補助基板を付けます。
こういった部品とビニル線のハンダ付けは、ツールクリッパーを使うと便利。
パネル部品をケースに付けて、配線を付けておきます。
次に、前面基板です。
7セグLEDと赤外線受信モジュールを挿入して、支柱に結束バンドで軽く固定します。
そいやパスコンも一つあります。
赤外線モジュールは根本から3mmくらいの部分を直角に曲げると良い。
この例では、7セグの穴空けが左に少しズレたので、ちょっと左に寄っています。
そして穴にピッタリハマるように調整しながらハンダ付けします。
7セグはケースと面一になるようにします。
一旦取り外し、接続穴に予備ハンダをしてから、洗浄→ハヤコートを吹き付けておきます。
ハヤコート後でもハンダ付けはできるんですが、少々ノリが悪くなるので予備ハンダしておくわけです。
メイン基板と前面基板を固定し、接続用のスズメッキ線をピンセットで曲げて挿入して接続。
パネル部品の配線とラグ端子もハンダ付け。
アナログ入力にシールド線を使っていますが、短いので普通のビニル線でも良いでしょう。
こんな感じですね。
この状態でICSPできるんで、デバックやソフトの改良などできます。
これ、キットとして売れそうですが…。大儲けできませんかね?
電源を入れて動作確認後、フタを閉じてゴム足を貼って完成~!
消費電流の実測値は、スタンバイ時で3mA、アクティブ時で43mAとなりました。
製作にオススメのアイテム
| ミニカッティングテーブルソー 基板のカットが楽チンになる!木材やケースの加工にも使えるミニテーブルソー。日本製の類似品よりも高品質で超オススメ。 |
---|
| ツールクリッパー TX303 パーツショップでよく見かけるTSKのツールクリッパー。電子工作では基板の固定やハンダ付けの時にとても重宝します。 |
---|
ファームウェア
全体制御PIC用と、7セグ制御PIC用の2つのプロジェクトになります。
全体制御の処理内容
複雑な処理は行っていません。割り込み処理は次の4つです。
- Tickカウンタ
- Beep音(ポートのON/OFF)
- リモコン入力
- Si4711 からのINT(CTS 及び STC)検出
全体の流れ(概略フロー)
Si4711 に対する設定(プロパティー値)
多くはデフォルトのままですが、固有の設定は次の通り。
- REFCLK_PRESCALE:リファレンスクロックプリスケール →750
- DIGITAL_INPUT_FORMAT:I2Sのフォーマット →24bit
- DIGITAL_INPUT_SAMPLE_RATE:I2Sのサンプルレート →32 or 48KHz
- TX_PREEMPHASIS:プリエンファシス →50us(日本仕様)
- TX_ACOMP_ENABLE:ダイナミックレンジコントロール →有効
- TX_ACOMP_THRESHOLD:ダイナミックレンジスレッショルド →-25dBFS
- TX_ACOMP_GAIN:ダイナミックレンジコントロールゲイン →18dB
ドキュメントには書かれていませんが、サンプルレートの設定は、パワーアップ後すぐに行うと動作不良(無音状態)になることが多々あります。周波数を設定し送信出力を行ってから設定する必要がありました。
ダイナミックレンジコントロールについて
普通の放送局に比べて音量が小さく聴こえることと、小さい音でも音声を聴きやすくするため、ダイナミックレンジコントロールを有効にしています。
これは、音楽ソースなどでよくあるのですが、ダイナミックレンジが広い場合ピーク音量時に過変調で音が歪んでしまうのを防ぐために、音量の範囲を圧縮するという技術です。
これにより、音量変化が抑えられるため、小さい音は聴きやすく、大きい音でも歪み無く聴こえるようになります。
ちなみに、普通のFM放送やAM放送でも圧縮された音声信号が流れています。
この辺りの各レベルは、接続機器や好みに合わせて調整してみてください。
LC89091JA に対するレジスタ設定
こちらも、多くはデフォルトのままでOKです。
パワーダウンやリセットのビット操作は普通に行っていますが、それ以外では、
- XOUTCK:未入力時のI2S出力 →BCKO=3.072MHz, LRCKO=48kHz
- GPOSEL:GPO出力 →本機のスタンバイ状態に基づいてHI/LOを設定
リモコンからの受信処理
赤外線リモコン受信モジュール OSRB38C9AA で受信した信号を認識します。(ポートのLOとHIの期間を測って認識する)
対応しているのは、ほとんどのリモコンで採用されているNECフォーマット。当方所有のリモコンも全てこれです。
信号タイミングの詳細は、次のページでどうぞ。
赤外線リモコンのフォーマット
7セグ制御の処理内容
全体の流れ(概略フロー)
基本的に、I2C経由で受け取った3桁数値に対応する表示データをポートに出力する。それをタイマー割り込み(1KHz周期)でグルグル回してダイナミック表示しているだけです。後、表示のON/OFF指示も受けています。
I2Cはスレーブ側となるようにSSPを設定し、クロックストレッチを有効にしています。マスター側へ送信することはありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // I2C初期化(Slave mode) ANSELBbits.ANSB1 = 0; // RB1/SDA1(8pin) ANSELBbits.ANSB4 = 0; // RB4/SCL1(11pin) SSP1ADD = I2C_ADDR << 1; SSP1MSK = 0b11111110; SSP1STAT= 0b00000000; SSP1CON1bits.SSPM = 0b0110; // I2C Slave mode, 7-bit address SSP1CON1bits.CKP = 1; SSP1CON1bits.SSPEN =1; SSP1CON2bits.SEN = 1; // Clock stretching is enabled SSP1IF = 0; SSP1IE = 1; |
表示内容です。
100MHz以上は百の位は表示しません。上は106.5MHzを示します。
アナログ入力モードでは、一桁目のドットを表示します。
ソースとビルド
全体制御用と7セグ制御用の、2つのプロジェクトを含んでいます。
解凍して出てきたプロジェクトをパソコン上の適当な場所にコピーして、MPLAB X で開けばビルドできます。ビルドに必要な外部ライブラリなどはありません。
使用したIDEのバージョンは下記の通り。
MPLAB X IDE:v5.05
XC8:v2.00
MPLAB- X IDE | Microchip Technology Inc.
注:XC8コンパイラのバージョンによって、割り込みハンドラ関数の記述方法が違います。古いコンパイラを使う場合は、記述を変更しないとビルドエラーになります。
古いVer:void interrupt Interrupt(void)
v2.00以降:void __interrupt() Interrupt(void)
書き込みやデバッグには PICkit3 を使いました。
| PICkit3 Microchip正規品。PICへのプログラムの書き込やデバッグができます。最近では安い中国製の互換品も出回っていますが微妙です。 |
---|
ソース設定値の変更
実際に使うためには、次の値を変更する必要があります。
リモコンのカスタムコード
全体制御PIC用の「main.c」にある「#define CUSTOM_CODE」を変更して、使いたいリモコンのカスタムコードを設定してください。デフォルトは当方のテレビ(REGZA)になっているので、そのままではリモコン操作できません。
| #define CUSTOM_CODE 0xBF40 // リモコン固有のコード |
リモコンのカスタムコードを調べるには、ソースの837行目:if (s_wCst == CUSTOM_CODE) の部分にブレークポイントを当てて、リモコンのボタンを押します。するとそこでブレークするので、s_wCst の値を調べればカスタムコードが分かります。
リモコンのボタン割り当て
全体制御PIC用の「main.c」の870行目にある「BYTE ToKey(BYTE code)」関数の中身を編集して、希望のボタンを割り当ててください。
当方では、普段使わないデータ放送のボタンを割り当てています。
| // ●リモコンコードからキーコードへ変換 static BYTE ToKey(BYTE code) { switch (code) { case 0x73: return KEY_INPUT; // 青ボタン //case 0x74: return KEY_POWER; // 赤ボタン case 0x75: return KEY_POWER; // 緑ボタン case 0x76: return KEY_CHAN; // 黄ボタン } return KEY_NONE; } |
リモコンボタンのコードも、カスタムコードと同様の方法で調べます。
送信周波数の設定
全体制御PIC用の「main.c」の87行目にある s_wFreqs の初期化値を変更することで周波数を設定します。(100KHz単位)
| static WORD s_wFreqs[CHAN_NUM] = { 886, 926, 971, 1065 }; // チャンネル周波数 |
チャンネル数を変更するには、CHAN_NUM の値を変えて上記設定をすればOKです。
送信出力の設定
全体制御PIC用の「main.c」の83行目にある「#define TRANS_POWER」で行います。
ソースには最大値(115dBuV)を記載してあります。
FM放送と電波法
FM周波数帯の割り当て
下表は、国内でのFM周波数帯の割り当て内容です。
放送局の周波数は0.1MHzステップと規定されており帯域幅は200KHz。
テレビ放送が地デジに変わってから、それまでアナログテレビの音声に使われていた帯域が空いたので、そこに補完放送などが割り当てられました。
テレビアナログ放送時代(~2011)
内容 | 周波数帯 |
---|
FM放送 | 76.1MHz ~ 89.9MHz |
---|
TV音声(1~3ch) | 90MHz ~ 108MHz |
---|
デジタル放送になってから
内容 | 周波数帯 |
---|
FM放送 | 76.1MHz ~ 89.9MHz |
---|
FM補完放送など | 90MHz ~ 94.9MHz |
---|
ガードバンド | 95MHz ~ 98.9MHz |
---|
マルチメディア放送 | 99MHz ~ 108MHz |
---|
この中にある「ガードバンド」は、電波干渉を避けるために放送には使われない帯域なので、ここをFMトランスミッターで利用すると良いでしょう。
ちなみに、FMラジオやトランスミッターICに搭載されているRDS(ラジオ・データ・システム)は、再生中の曲名などを受信機側で表示するための仕組みですが、日本のFM放送では導入されていません。
無免許で飛ばせる条件とは?
弱い電波なら飛ばしてもいいというのは良く見かけますが、具体的な数値が示されていないことが多くて「じゃあ一体どんくらいならいいのよ?」って思いますよね。
この場合の電波の強さは、送信機の出力ではなくて、特定の距離での電界強度で判断します。そして、FM帯域では「322MHz以下の周波数帯においては、3mの距離で500μV/m以内であれば、用途や周波数に制限は無い」とする第1号規定が当てはまります。
ほんなら、それどーやって測んのよ?
結局なにかとややこしいので、微弱無線設備であることを証明してくれるところがあるくらいです。感覚的には部屋を出たら電波が弱いというくらいじゃないでしょうかね。
読むのがイヤになってきますが、下の文書を参照してみてください。
・電波法施行規則 – 総務省
・免許を要しない無線局 – Wikipedia
・微弱無線局 – Wikipedia
少なくとも Si47xx の最大出力(115dBuV)では、国内でアンテナを繋ぐと電波法に抵触する可能性がありますので、送信出力を調整するようにしましょう。
ちなみに、総務省が現在売られているトランスミッター類の買上げ試験を行ったところ、特に中国製品において規定を大幅に超える製品がたくさん見つかったとのこと。そして今後そういった製品の規制を厳しくしていくんだとか。
実際売られてるFMトランスミッターって、多くは中国製なんじゃないでしょうかね?
まぁ出力が高くて嬉しいことはあっても、実際に被害を被ることはあまりないので、声を上げられることもなく水面下で増殖しているのかもしれません。
ダウンロード・ツール
製作に使用した全ファイルです。無断で二次配布することはご遠慮ください。ご紹介いただく場合は当記事へのリンクを張ってください。連絡は不要です。
参考
・AN332: Si47xx Programming Guide
・AN383: Si47xx Antenna, Schematic, Layout and Design Guidelines
・AN332SW(Si47xx サンプルコード)
本格的な空中線を接続するなど、電波法に抵触する恐れがある使い方をされる場合は、自己責任の範囲でご利用くださいませ。