Monthly FB NEWS 月刊FBニュース 月刊FBニュースはアマチュア無線の電子WEBマガジン。ベテランから入門まで、楽しく役立つ情報が満載です。

ものづくりやろう!

第八回 SI4732ラジオIC基板を用いたHF帯DSPラジオをつくろう(2)

JH3RGD 葭谷安正

はじめに

前回の掲載ではSI4732ラジオIC基板でHF帯DSPラジオを作成しました。作成というよりは配線といったほうが正しいのかもしれません。一部誤配線がありましたのでそれに気付いて修正しましたところ問題なくFM放送、AM放送、そしてHF帯のアマチュア無線の交信も受信できることを確認しました。前回の記事の最後に記載しましたが、このラジオのソフトウェアは公開されておりそれを多少いじることで操作性を変更することが可能です。

例えば、スイッチの機能をソフトウェアに肩代わりさせることでハードウェアであるスイッチの数を少なくしたり、操作性をソフトウェアの変更で使いやすい形にすることができます。今回の記事ではソフトウェアを触って操作性をアップしてみたいとおもいます。

操作方法の変更とソフトウェア変更

PU2CLR氏の公開ソフトウェアを一部変更することで操作方法を変更することができます。ソフトウェアを変更したのは次の箇所です。(前回の記事と文言が一部重なりますがご容赦ください。)

(1)音量調整について
音量調節の方法としては、タクトスイッチを押すと音量が上下するデジタル式と可変抵抗器のようなアナログ式のものが良く使われます。このラジオでは2つのタクトスイッチを使ってデジタル的に音量を変化させています。音量は0から63まで変化できます。ボリュームアップ用のタクトスイッチを押すと音量が1ステップ上がり、もう一つのボリュームダウン用のタクトスイッチを押すと音量が1ステップ下がります。タクトスイッチが押されるとそれを検知してボリュームを増減するようにプログラムが組まれています。

私はと言うと、音量調節は可変抵抗器のような回転式が使いやすく感じています。これを実現するためには、ロータリーエンコーダを可変抵抗器の代わりに使用することにしました。ロータリーエンコーダは周波数変更用に使用していますので、音量調整時には音量調節に使っている2つのスイッチの一つを使用し、このボリューム調整用のスイッチが押されているときはロータリーエンコーダが音量調節を行うようにソフトウェアを改変しました。

・オリジナルプログラムの該当部分処理概要


リスト1 スイッチ押下状態検出処理プログラムリスト(抜粋)

ボード上に配置された8個のスイッチが押された場合、それを検出する部分はオリジナルプログラムの611行目から736行目まで記載されています。このうちボリュームスイッチが押された場合の検知と処理がリスト1の部分です。処理内容は、

(643行目)もしボリュームアップのボタンが押されたら
(645行目)ボリュームをアップさせて
(646行目)今セットしたボリュームの量を取り出してvolumeという変数に入れておき、
(647行目)そのアップされたボリューム量(0~63の値)をOLEDに表示し、
(648行目)指定の時間停止して
(649行目)ボリュームアップの処理を終わります。
ボリュームダウンについては、ボリュームアップと同じような処理方法で650行目から656行目に記載されています。

・改変したプログラムの該当部分処理概要
一方、作成したプログラムはロータリーエンコーダの検出部分でボリュームのアップ、ダウンの処理を行いました。操作方法はvol_upのスイッチを押しながらロータリーエンコーダを回すと回転方向によりボリュームが増減するようにしました。これの実現例がリスト2のプログラムです。


リスト2 スイッチ押下状態検出処理プログラムリスト(抜粋)

Arduinoのloop処理が576行目から始まっていますが、その処理の最初に書かれているのがロータリーエンコーダです。ロータリーエンコーダが回転しているのかどうかの検出は割り込み処理を使って行われていますので、その部分はどんなプログラムが書かれているのかは考える必要はありません。ロータリーエンコーダが時計向きに回転しているときには、割り込み処理プログラムが働いて自動的に変数encoderCountに+1にセットされ、反時計方向に回転が始まったときには変数encoderCountに-1がセットされます。

(579行目)ロータリーエンコーダが回されている(encoderCount != 0 この変数が0でないとき)ときには
(581行目)同時にボリュームアップのスイッチが押されているならばボリューム調整をおこないます。
(583行目)もしロータリーエンコーダの回転方向が時計方向(encoderCountが1)ならば
(584行目)ボリュームアップを実行する処理を実行します。
(586行目) もしロータリーエンコーダの回転方向が反時計方向(encoderCountが-1ですが,1でないという判断方法をとっている)ならば
(587行目)ボリュームダウンを実行する処理を実行します。
(589行目)後処理として、いま設定した音量(0~63)を変数に格納し、
(590行目)その値をOLEDに表示します。
(591行目)指定の時間停止して
(593行目)ボリュームアップの処理をおわります。

(2)周波数表示について
このラジオの周波数変更はロータリーエンコーダで行っており、最小1kHzステップで周波数を変化させることができます。そのため1kHz以下の微調整はBFOで行っており、メインの周波数表示とBFOの周波数表示が別々になっています。いま受信している周波数がいくらなのかは、OLEDの1行目に表示されているメインの周波数と3行目に表示されているBFOを足し算して求めます。オリジナルのソフトではBFOの周波数はロータリーエンコーダを反時計方向に回転させるとマイナスの数値ででてきますので受信周波数を理解するのに一呼吸おいてしまうことがあります。これを統合して表示すると現在の受信周波数がいくらなのかが解りやすくなります。

・オリジナルプログラムの該当部分処理概要
BFOをOnにした場合、メイン周波数が1行目、BFOの周波数は3行目にとまったく別に表示されています。形式的にBFOの周波数をプラスとマイナスにわけてロータリーエンコーダの回転を検出して現在のBFO周波数にステップ数(ロータリーエンコーダの回転を検出した場合いくら増減させるのかの数値)を加減して変化後のBFO周波数を求めています。

(588行目)BFOスイッチが押されたら
(590行目)新しいBFO周波数をロータリーエンコーダの回転方向を判断して、現在BFO周波数にプラス、またはマイナスして決めます。
(591行目)BFO周波数を設定するコマンドに渡して設定します。
(592行目)そして、OLED上のBFO周波数を更新します。


リスト3 BFO周波数設定プログラムリスト(抜粋)

・改変したプログラムの該当部分処理概要
改変したプログラムをリスト4に示します。


リスト4 改変したプログラム

(593行目)BFO周波数設定のボタンが押されたら
(595行目)新しいBFO周波数をロータリーエンコーダの回転方向によって、currentBFO+currentBFOStep(時計回りの場合)またはcurrentBFO-currentBFOStep(反時計回りの場合)で計算します。
(596行目)もし新しく設定するBFOの周波数が1000Hzを超えている場合は
(597行目)新たなBFOの周波数から1000Hz分引き算し、
(598行目)1000Hz(=1kHz)分は、メイン周波数を+1(kHz)しておき、
(599行目)メインの周波数を1kHzアップの更新処理を実行しておきます。
     BFOの周波数は606行目で更新処理を実行します。
(601行目)もし、新たなBFOの周波数がマイナスの場合は
(602行目)新しいBFOの周波数をプラス表示するために1000(Hz)プラスし、
(603行目)1000Hz(=1kHz)のアップ分をメイン周波数で吸収させるため、メイン周波数をマイナス1(kHz)し、
(604行目)メイン周波数を1kHzダウンの更新処理を実行します。
(606行目)BFOの周波数がアップ、ダウンいずれの場合もBFOの周波数更新が必要ですので更新処理を実行します。
(607行目)また、OLED上への表示更新を実行します。


図1 オリジナルソフトの表示例(1)
(BFOが1000Hzを超過してもメイン周波数に反映されない。)


図2 オリジナルソフトの表示例(2)
(BFOがマイナスの周波数を表示するため、実周波数がすぐに判読し辛い。)


図3 改変したソフトの表示例
(BFOを900Hzから100Hz増加すると、メイン周波数が1kHz増加し、BFOが0Hzになる。)

オリジナルプログラム改善版プログラムをサーバにおいていただきますので必要に応じてダウンロードしてください。

(3)その他
本来であれば今回作成したラジオをプロトタイプとして新たに作り直そうとしていました。その先に
(a)シャーシ加工
(b)組み立て
と繋げる予定でしたが、シャーシ加工に失敗し、作成することができず、時間切れとなってしまいました。私が目論んでいたラジオの一端でも理解いただけるのではないかと思い、ラジオを収める予定だったシャーシの写真を掲載しておきます。なお、シャーシなどの機械加工は安全第一をこころがけてください。このシャーシの加工で手を切ってしまいました。くれぐれも安全第一で!


図4 ラジオ収納用アルミシャーシ
(シャーシサイズ 横160mm×縦100mm×奥50mm)

ものづくりやろう! バックナンバー

2022年1月号トップへ戻る

次号は 12月 1日(木) に公開予定

サイトのご利用について

©2024 月刊FBニュース編集部 All Rights Reserved.