1. はじめに

自作でトランシーバーなどを作ってると、PLLやDDSのトランシーバーにまで発展して来ます。ここまで来ると、イヤでもデジタル制御が切り離せなくなって来ます。すると操作性を考えて、ロータリーエンコーダを使う必要性が出てきます。このロータリーエンコーダとのインターフェースは、TTLを並べても作る事は不可能ではありません。しかし、DDS ICとの相性を考えると、CPU制御を考えざるを得なくなります。この手のICは、データをシリースに入れるからで、TTLを並べていては大変な回路になってしまいます。

CPUを使って問題になるのが、ロータリーエンコーダのカウントです。ゆっくりと回している時は良いのですが、早く回すにつれて読みこぼしが出てきます。そして、読みこぼしが少なくなるように、ソフトやハードとの格闘が始まります。しかし、人間の手で回しても、格段に改善されれば違いが解りますが、多少の差では全く解りません。ちょっとした回し方によっても違ってきますので、評価ができないのです。

そのために作ったのが、写真1の「ロータリーエンコーダもどき」です。本物のロータリーエンコーダの代わりに接続し、ハードやソフトの出来をテストする試験用ツールです。

写真1 このようなジャノメ基板上に組んでいます。

2. 回路とソフト

ソフトではA相もB相も、各々1000パルスずつ出すようにしています。スタートボタンを押す事でスタートし、1000パルスを出すと自動的に停止します。本体の読み取りソフトを4倍モードで組んでいる場合には、4000ステップとなります。また、UP/DOWNの切り替えはタクトスイッチを押す事で行います。REVボタンを押下してからスタートボタンを押すと、DOWNとなります。まあ、UPかDOWNかは本体側のソフトで決まる事ですので、リバースとでもした方が正しいのかもしれません。

1000パルスでなく、500パルスでも2000パルスでも良かったのですが、1000にした確たる根拠は覚えていません。本体の読み取りソフトが4倍モードでもノーマルモードでも、解りやすいようにした気もします。少な過ぎると良く解りませんし、多過ぎても時間がかかってしまいます。体験的にはちょうど良いくらいでしょう。

回路は図1のようにAVRの1200を使った簡単なものです。DIPスイッチでパルス間隔、つまり図2でいうA相とB相の時間差tの設定を行います。どのタイミングもtで動きますので、4tで1サイクルとなります。DIPスイッチは8ビットを2個使っておりますので、0~255が設定されます。1ステップ10μsですが、0を設定した時には10μsとなりますので、10μs~2560μsが設定される値となります。図2のように1サイクルの最長時は2560μs×4=10240μs=10.24msですから、1000パルスを出す時には10.24sかかる事となります。

図1 全回路図です。

図2 DIPスイッチで設定するのは、この図のtの値です。

3.製作

小型のジャノメ基板上に作成しました。電源は本体から貰うので、載せていません。普通のロータリーエンコーダと全く同じような端子を、+5V、A相、B相、Eと並べました。写真2はこの端子の比較です。どちらも左から+5Vになります。

写真2 普通のロータリーエンコーダの端子と同じように並べています。

DIPスイッチはロータリー式の16進表示を用いています。つまり00~FFのヘキサ表示となります。特にこれといった製作上の注意点はありません。普通に作れば間違いなく動作するはずです。発振器には10MHzのセラミック発振子を用いています。異なる周波数を使った場合には、パルス幅が違ってきますので注意して下さい。

4.出力

オシロスコープで動作状況を確認してみました。写真3は1msを設定した時のA相とB相になります。当然の事ですが、何ら問題の無い出力です。A相とB相の位相差も正しく出力されています。

写真3 1msを出力した時のA相とB相で、図2と全く同じです。

5.使用感

これはあると便利です。作った本人も感心する位のマニアックなツールですが、自分の作ったソフトを正しく評価できますので、ソフト開発時には手放せないものになっています。もっともDDSのトランシーバーなど、何台も作るものではありませんが、開発を始めると毎日のように使う「格闘の友」となります。

図3は横軸にパルス幅、縦軸に読み取り率(%)を取って、どの程度まで読めるのかをためしてみたものです。対象としたのは、いずれも4倍モードのソフトを使っており、(1)CQ誌2005.6~9のDDS SG(2)第20回で紹介したDDSホワイトVFO(3)開発中DDS VFO(未発表)です。写真4~6はそれぞれの測定中の様子です。使用しているロータリーエンコーダのパルス幅や、ツマミの大きさや軽さがマチマチですので、図3だけでは実際のフィーリングの良し悪しは解りません。しかし、ソフトやハードの出来ばえが実に良く見えてしまいます。(1)は見事にストンと下がってしまいますが、測定器で可変する桁を指定できるため、安定して読めれば充分と考えています。(2)は読みこぼしをしないように工夫したソフトのため、粘り強くなっています。(3)は500パルスのロータリーエンコーダの読み取り専用にCPUを使っていますので、超高速となっています。

図3 パルス間隔と読取率をグラフにしました。(3)が抜群に優秀に見えます。

写真4 DDS SGを測定中。ロータリーエンコーダは50パルスです。

写真5 DDSホワイトVFOを測定中。ロータリーエンコーダは50パルスです。

写真6 開発中のDDS VFOを測定中。ロータリーエンコーダは500パルスです。

なお、(2)はとてもクセのある特性になっていますが、ソフトを工夫し読み飛ばしをした時のフォローをしているためです。普通は、A相B相が00→01あるいは10になった時にUPかDOWNかを判定しますが、回転が速すぎて00→11になってしまった時に、直前がUPだった場合は2ステップUPし、直前がDOWNだった場合は2ステップDOWNする処理を行っています。手で回した時には、読めるスピードが上がった位にしか感じませんが、このようにグラフにすると苦手なスピードが出てしまう事が良く解ります。

次に、パルス幅(ms)とロータリーエンコーダの一回転のパルス数を掛けますと、一回転を回す時間となります。普通は一分間に何回転するかをrpmで表しますが、この場合は「一回転を何秒で」と考えた方が人間の感覚に合うように思います。図3の横軸をこの「一回転を何秒で」の(ms/r)に変えたのが図4になります。この結果では(1)と(2)はギリギリのところ。(3)は余裕というように見えますが、使用しているロータリーエンコーダの回り具合を加味しますと、(1)(2)はギリギリでもなく、(3)はそんなに余裕もなく、というフィーリングである事を付け加えておきます。ちなみに、この(ms/r)私が勝手に作った単位です。実際には、どのように評価しているのかは知りません。

図4 「一回転を何秒で」と表すと、このような読取率になりました。(3)だけは500パルスのロータリーエンコーダを使っている上にツマミが軽く回るため、実はそれ程の余裕はありません。

ロータリーエンコーダを回すスピードは、平均すると1秒で3回転くらいかと思います。つまり333ms/rですが、瞬間的なスピードはずっと早くなります。軽いフィーリングのロータリーエンコーダと回しやすいツマミであれば、おそらく瞬間的には50ms/rくらいは充分に出るのではないでしょうか。

5.おわりに

この記事の作成にあたって改めてデータをまとめてみましたが、これ程出来の良し悪しがはっきり出るとは思ってもいませんでした。結果がデータとして数値化されてしまいますが、最終的には人間のフィーリングを優先すべきものと思います。

CPUで制御するようなDDSトランシーバーを自作する方であれば、このようなツールのソフトは自分で考える事と思います。もっと上手に作られる事と思いますので、ヒント、アイデアの一助となれば幸いです。