STM32F103VE(STBee)でAMトランスミッタを作ってみました。
市販品はFMトランスミッタですが、FMラジオの周波数帯をマイコンで扱うのは辛い、FM変調を作るのは更に辛い、等の理由によりAMとしました。もっとも、変調はAMですが周波数帯は中波ではなく長波なので、市販のAMラジオでは聞けないと思います。今回はIC-R6を使って動作確認をしました。
画面右下にあるのが受信に使用したIC-R6で、音声出力がカメラの音声入力に入っています。画面中央部にあるプローブが刺さったボードがSTBeeで、これがマイク入力とRF出力を行っています。マイクは基盤右上の黒い丸の部分です。基盤左下から右上に向かっている赤い線が空中線代わりのジャンパワイヤです。送信出力が非常に低いため、この距離でもスケルチがぎりぎり開く程度で、撮影の時はIC-R6のアンテナとトランスミッタのアンテナを接触させています(被覆で絶縁されてますが)。
(こういうブロック図を簡単に作る方法って何かないかな)
今回は100kHz(0.100MHz)のAM波を送信するため、正位相・逆位相を出力するために2本のDACを使用しました。これはTIM3のタイミングでDMA転送し、DMAのHTとTCで割り込みを発生させ、その割り込みでマイクのバッファに入っているアナログデータを生成します。
図中ではTIM3から割り込みが発生してる風ですが、実際にはDMAから発生させています。
音質もラジオで衰退してる割には近距離であれば問題無いですし、電波で遊びたいという欲求はかなり解消できたかな、と思っています。100kHzではアンテナの利得は無いも同然で、送受信共に感度が低いので長距離通信はおろか、1mも離したらスケルチが閉じっぱなしになってしまいますが。
現行法に対応した形で簡単に無線で遊ぶのはコレが限界かな、とも思います(コレも厳密にはどうかわかりませんが)。
2015年10月6日火曜日
2014年11月14日金曜日
IC-R6リモート
こんな感じになりました
COMポートの選択はテンキーで行うように変更されています
それとスケルチロードはdisconnectの横にある緑の丸がフラグになっています
緑でロード 灰色でロードせず ですが、OFFではSメーターと同じなので、悪いUIの見本みたいな感じになっています
それとdisconnect(COMポートの開放)はまだC#のボタンです
全体的に最適化して、下側を使ったリスト選択を自由に作れるようになったら、メニュー操作も突っ込もうと思います
それと地味な追加機能として、スケルチオープンのフラグを作りました
S00の左にある丸を触るとOpen/Closeが変化します
とりあえず右下の選択画面は1ページに5項目を表示でき、項目数が5よりも多い場合は1で前ページ、7で次ページ という感じにスクロールできます
現在は数字を選択するとすぐに確定ですが、7セグは文字色を自由に設定できるので、数字で選択し、Eで確定 という感じの実装もアリかなと思っています
とりあえず、全体的に複雑なコードなので、もうちょっと最適化を進めてからになります
最初はこのコードで問題ないだろ と思っても 機能追加していくとどんどん不便になっていきます
いままでまじめにプログラミングやってなかったツケを払ってる感じです
次に似たようなものを作るときはもっと上手く作れる と信じて書き直しではなく、修正で頑張っていますが、こんなUIもう二度と作らないと思います。。。
IC-R6をリモートで
(コマンドの叩き方を調べて見てる人がいたら、前回のエントリを参照してください)
IC-R6の周波数とモードを表示するソフトを作ってみました
とりあえず周波数と、下にSメーターがありますが、基本入感したらメーター振り切るのであんまり意味無いです せいぜいイヤホン外してる時に入感してることを知る程度
それと現在の時刻も表示しています
今は表示だけですが、モード・周波数の変更と、スケルチオープンを操作できれば結構使えるようになりそうです
今回はマウスホイールなどで文字を操作したくて、となるとかなり厳密にマウスの位置と文字の位置を比較する必要があります
ということで自分でフォントを作ってみました
本来は固定幅フォントをキャプチャしてビットマップフォント化とかをするべきなんですが、今回は16segLEDっぽい表示にしてみました
謀らずもレトロな感じです
とりあえずもうちょっと機能を作りこんで、その後はマイコンに移植かな
といっても、C#をCにするので全く互換性がありませんが
マイコンから操作できればテンキーみたいなインターフェースを作れるので、便利になると思います
ま、基本メモリに入れちゃえばいいので完全にネタになっちゃいますが
IC-R6の周波数とモードを表示するソフトを作ってみました
とりあえず周波数と、下にSメーターがありますが、基本入感したらメーター振り切るのであんまり意味無いです せいぜいイヤホン外してる時に入感してることを知る程度
それと現在の時刻も表示しています
今は表示だけですが、モード・周波数の変更と、スケルチオープンを操作できれば結構使えるようになりそうです
今回はマウスホイールなどで文字を操作したくて、となるとかなり厳密にマウスの位置と文字の位置を比較する必要があります
ということで自分でフォントを作ってみました
本来は固定幅フォントをキャプチャしてビットマップフォント化とかをするべきなんですが、今回は16segLEDっぽい表示にしてみました
謀らずもレトロな感じです
とりあえずもうちょっと機能を作りこんで、その後はマイコンに移植かな
といっても、C#をCにするので全く互換性がありませんが
マイコンから操作できればテンキーみたいなインターフェースを作れるので、便利になると思います
ま、基本メモリに入れちゃえばいいので完全にネタになっちゃいますが
2014年11月12日水曜日
IC-R6のコマンド
/*
バイナリビューアはしばらくお休みします
ネタ切れしてます
*/
IC-R6を買ったので、早速コマンドを叩いてみました
FE FE 7E 00 03 FDを送ると、FE FE 00 7E 03 00 00 60 32 01 FDが帰ってきました
コマンド03は表示周波数を返すコマンドです
03コマンドのリターンはBCD(二進化十進表現)で下位桁からです
そのまま表示すると下位の桁が左に表示されるため
順番を入れ替えると01 32 60 00 00となります
数字としてみると0132600000で、MHzにすると132.6MHzです
IC-R6で北海道東セクタの管制を聞いているので、ちゃんと表示している周波数が帰っています
ボーレートは1200で上手く行ったので、気を良くして9600にしたら帰ってこなくなりました
結構ゆっくり送る必要があります
また、最初はC#ではなく、X-CTUのアセンブリパケットで送っていました
が、ボーレートを変えようが何しようが戻ってきません
もしかしたらX-CTUは1バイトごとに適当なdelayが入っていて、IC-R6でタイムアウトしているのかもしれません
IC-R6に限らず、X-CTUでコマンド叩いて上手く動かない場合は別の方法でコマンドを叩いてみるといいかもしれません
気が向いたらロジアナでタイミングを確認しようかと思っていますが…
とりあえずコマンドは正常に機能しているようなので、まずはC#でGUIで動くプログラムを作ってみようと思います
その後でてきとーなマイコンでスタンドアロンで動く表示・変更用の機材を作ってみようと思います
IC-R6を買った時に一緒に買ったオプションや、運用環境についてはまた改めて別のエントリに書きたいと思います
登録:
投稿 (Atom)

