2011年6月18日土曜日

【AVR】 DDS Control Part 3

DDS-VFOの機能
 DDS-VFOのつづきだ。 ここからはプログラムによって実現した機能の話しになる。回路図を見てもわからない部分だから、どこまで伝えられるかちょっと心配だ。 これはプログラム・リストを公開したからと言って伝わるものではないそうだ。(BASCOMは簡単とは言え、誰もがプログラムを読める訳じゃない。実際、他人サマが書いたものを解るのも容易じゃないし・・)

 マイコン単独で機能が完結する「マイコン製作もの」なら機能説明も難しくないだろう。 しかし重要な部分ではあってもDDS-VFOは通信機の構成要素の一部に過ぎない。 従って、そのコントロールには通信機の機能が密接に関わりを持っている。

 このDDS-VFOの動きを納得するにはスーパー・ヘテロダイン式受信機(←リンク)の知識が必要そうだ。たぶんこうした物に興味を持つようなお方なら大丈夫。十分ご存知という前提で話しを進めさせてもらおう。

旨く伝えられれば、「便利なVFO」だとわかってもらえるに違いない。


想定のトランシーバ
 説明の助けとするために、このDDS-VFOの使用を想定する機器(トランシーバ)のブロック・ダイヤグラムを書いてみた。 受信部は局発を上側にとったシングル・スーパー、送信部はDDS-VFOのあと3段ストレート増幅だ。

 いかにもそれっぽいデバイス名が書いてあるが言わば余興である。但し、その通り作ることだってあり得るラインナップにしておいた。 探しまわる人がいると気の毒なので、近代的でポピュラーな半導体ばかりでレアなデバイスは一切使ってない。(笑)

 受信状態ではモードスイッチによって発振周波数が変化する。これは、受信モードによって実際の受信周波数と表示周波数の間で誤差が発生しないようにするためだ。スーパー・ヘテロダインの仕組みがわかれば理解できると思うが、これは重要な機能である。USB、LSB、CWにモードを切り替えても受信周波数が変化しないようにしている。

 アナログVFOの時代には受信モードごとダイヤルに3本のカーソル線を引いていた。DDSなら発振周波数そのものを補正してしまう。なお、SSB受信ではキャリヤ・センターで、CW受信ではフィルタ・センターで周波数表示される。 送信モードではCWの受信と一致させているので、フィルタ・センターと等価になる。

 混乱するかもしれないが、USBにしろ、LSBにしろキャリヤの周波数は自在に設定できる。もちろんCWモードのフィルタの中心周波数も自由に設定できる。使用するIFフィルタの都合に合わせられる。 以下、具体例でモードとDDS-VFOの発振周波数の関係を示しておこう。(ほかダブルスーパ用に表示のシフト機能もあるのでもう少し複雑なこともできるのだが、キリがないので省略させてもらった)

ダイヤル・スピード
 ダイヤルスピード、すなわち1回転あたりの周波数変化は、一つにロータリ・エンコーダの分解能で決まる。 使用したエンコーダは安価なものなのでダイヤルの1回転で96ステップしか得られない。従って、10Hzステップでは1回転で1kHzに満たない変化しか得られない。

 そうかと言って100Hzステップでは刻みが荒すぎる。CWのトーンがステップ状に変わるのを感じてしまう。それに100Hzステップでさえ1回転で9.6kHzしか変化しない。バンド内の大きな移動には不便である。

 結局、4種類のスピードに切り替えることにした。10Hz、100Hz、1kHz、20kHzステップである。最高速は100kHzステップにしたかったが、内部変数の関係で20kHzになった。それでもダイヤル1回転で約2MHz変化するからHF帯のリグなら大丈夫だろう。

 10Hz、100Hz、1kHzはセンターオフのスナップスイッチで切り替える。20KHzは押したときだけONになるプッシュスイッチを使う。この20kHzスイッチはいつでも最優先で機能する。上記ブロック・ダイヤグラムと前回の回路図を参照。

RITコントロール
 今どきのメーカー製無線機は殆どすべてが周波数シンセサイザ化されたので、交信中に周波数が変動するものなど皆無だろう。

 しかし、QRPerの多い7003kHzをワッチしていると、結構ずれて呼んでくる局や、QRH(周波数変動)する自作局もあるのが実体だ。 従って、自身の送信周波数はそのままに、受信している周波数だけを微調整するRITは未だに不可欠な機能である。
 
 RITは昔ながらの可変抵抗器を使っている。但し、すぐにA/D変換してしまいデジタル的に行なうようにした。 A/Dコンバータの分解能は10bitあるが、VRの接触状態次第で少しふらつくので感度を1/10にしている。全部で約100ステップある可変範囲において、1ステップあたり10Hzの変化として安定動作を優先した。従ってRITの操作範囲は±約500Hzである。

 この程度の可変範囲で支障ないと思うがもう少し拡大しても大丈夫そうだ。このあたりは、自在に変更しうる。メインダイヤルと同じようにロータリ・エンコーダを使う手もある。(ソフトウエアの変更を要する)

送信モードの発振周波数
 いま、ダイヤルは7000.00kHzに合わせてある。(最小表示は10Hzの桁) 送信モードにするとDDSは7000.000kHzを発振する。写真の右上は、周波数カウンタによる実測値である。この状態では「表示周波数=発振周波数」の関係になっている訳だ。 

 従って、ブロック・ダイヤグラムにもあるように、DDSの出力を送信アンプに導いて所定のパワーになるまで増幅すれば簡単にCW送信機になる。これがDDS-VFOの基本状態である。(注:実際には7000.000kHz丁度で送信するとオフバンドになる)

参考:以下いずれの写真も周波数カウンタの表示は設定値にピッタリ合っている。少々ウオームアップしてから周波数の校正を行なえばこのように良く合う。特別に撮影用の工夫をした訳ではない。DDS-VFOはクロックの水晶発振器と同じ周波数安定度が得られるのでかなり安定だ。

CWの受信モード
 上記と同じ状態でTX/RXスイッチを切り替えて受信モードにする。いま受信モードはCWである。

 想定している受信機はシングルスーパーであって、使っているCWフィルタの中心周波数は455kHzと想定している。

 従ってDDSは7455.000kHzを発振する。「発振周波数=受信周波数+IFフィルタの中心周波数」の関係だ。 なお、CW受信のためのBFOはフィルタの中心周波数から上か下に700〜800Hzくらい離れた周波数にする。 可変周波数形のBFOでも良い。


USBの受信モード
 次に、USB受信モードにしてみよう。SSB受信フィルタは中心周波数が455kHzで帯域幅は3kHzのものを想定している。USB受信するにはSSB復調器に与えるキャリヤ発振周波数は453.5kHzになるはずだ。従って、DDS発振器は7453.500kHzになる。

 「発振周波数=受信周波数+(USBの)キャリヤ周波数」と言う関係になる。

 もちろん、フィルタの特性によりキャリヤ周波数は必ずしも453.5kHzとは限らない。このキャリヤ周波数は「変数」としてセットできるから、ある程度任意に設定できる。


LSBの受信モード
 同じく、LSB受信モードにしてみよう。 LSB受信では456.5kHzのキャリヤで復調することを想定している。

 USBと同じように、「発振周波数=受信周波数+(LSBの)キャリヤ発振周波数」の関係になる。 従って、発振周波数は7456.500kHzとなる。

 USBのときと同じようにキャリヤ周波数は「変数」でセットできる。もちろんある程度任意である。

 以上、いずれもブロック・ダイヤグラムに従った説明用なので、教科書的な周波数関係になっている。 そのようになるようプログラムを初期設定しておいたからだ。 実態に合わせてプログラム的に初期値を変更できるのは勿論だ。

IFフィルタも自由自在
 以上、受信モードと発振周波数の関係を示したが、かなり自由な設定が出来る。

 写真は左からCollinsのSSB用・メカフィル、MurataのAM用・セラフィル(R)、そして自作のCW用・世羅多フィルタである。

これらは、少しずつ中心周波数がずれているので、昔のアナログVFOを使ったリグにおいては一緒に使うのはかなり厄介だった。 このCollins製SSBフィルタの中心周波数は453.5kHzである。 キャリヤ・ポイントはUSBが約452.000kHz、LSBは約455.000kHzになるだろう。 AMフィルタの中心周波数は標準的な455kHzである。一方、自作したCW用・世羅多フィルタの中心周波数は約439.4kHzである。

 このようにだいぶずれた中心周波数のフィルタを混在して使うのはアナログVFOではいささか厄介なことになる。 モードを切り替えるたびに受信周波数が大きく飛んでしまったからだ。 切換えのたびにダイヤルCALが必要なのでは実用的でない。

 しかしDDS-VFOなら支障はない。モードに従った発振周波数の補正でフィルタ周波数の違いを吸収できる。 極端なはなし、CW用は455kHzのフィルタを使い、SSB用は2MHzのフィルタを使うと言うような芸当もこなせる。 モードを切り替えても受信周波数は自動的に調整されるから、もちろんダイヤルを合わせ直す必要はない。

# こうした目的によって変える必要がある一連の「変数」はプログラム初期化部分にまとめておいたので、後々の活用も容易だろう・・・と自己満足。(笑)

DDS-ICのテスト・プログラム
 難解にならない範囲でプログラムのことも書いておこう。初めてDDS-ICを使うときは不安なものだ。いきなり複雑なものが動くのか心配になる。このプログラムは非常にプリミティブな「DDS版のLEDチカチカ」のようなものだ。(笑)

 ごく簡単で確実なプログラムで基本的な動作を確認しておけば、トラブルがあっても問題の分離が容易になる。 このプログラム・リストはあらかじめ判っている周波数データをDDS-ICにセットし、正しくその周波数で発振するのを確認するものだ。 :プログラムの転載おことわり。

 DDS制御のエッセンスを凝縮した必要最低限の部分だけでできている。 この短いプログラムが正常に動作すればマイコンからAD9834:DDS-ICへのデータ転送はうまく行っている。 マイコンもDDS-ICにも回路的な(=ハードウエア的な)問題はないことがわかる。 あとは必要な機能を実現するためのプログラムを頑張れば良い。

 なお、例示のプログラムはDDS-ICに与えるクロック発振器の周波数誤差は補正していない。従ってジャスト7000.000kHzにはならぬだろうが、せいぜい1kHz以内の誤差に収まるはずだ。 DDSの動作を受信機や周波数カウンタで確認してみる。

 もしも67.10886MHz以外のクロック発振器を使うなら、発生周波数は周波数比だけずれる。周波数の計算はごく簡単だ。(例えばクロックが50MHzなら、約5215406Hzになる)DDS-VFOを作ったら、まずはごく簡単なこうしたことから確かめることが非常に重要な一歩だと思う。 これが確かに動かぬようでは、どんな「高級プログラム」もマトモに動きはしない。

参考:このテスト・プログラムを走らせるAVRマイコンは何でも良い。但し、PortC.0にDDS-ICのFSYNC、PortC.1に同SDATA、PortC.2に同SCLKを配線する。ヒューズビットを操作しクロックは内蔵RC発振の8MHzにセットする。ATmega8、ATmega88、ATmega168、ATmega328がお薦め。 或はプログラムの必要箇所を書き換えてPortBやDを使うようにすれば、手持ちのATtiny2313やATtiny26(L)、ATtiny861Aで試すこともできる。(修正は簡単だ。方法は私に聞かず各自努力で)


DDS-ICへデータ転送・1
 写真はマイコンからAD9834:DDS-ICへデータ転送している様子だ。クロックに同期して16Bit分のデータが連続3回送られる。 BASCOM-AVRのShift outコマンドで16bitデータを簡単に送ることができる。

  開発の初期段階では、様々な原因で正常に動作してくれなかった。 回路的な問題なのかプログラムに何か欠陥があるのか、それぞれ旨く分離できなかった。 そこで、実際に送られるデータをデジタル・オシロスコープで直接観測して確認すると言った作業が必要になった。 上記のようなごく簡単なプログラムを作成し一歩ずつ確認する作業を進めて完成へと前進して行った。

 こうして観測してみると色々なことがわかる。 AD9834に一つの周波数データを送信するのに要する時間は約126μSであった。 ロータリ・エンコーダを読み込むタイマー割り込みの周期は約2mSである。従ってデータ転送には十分余裕があり、合間に周波数データの演算処理は問題なくできることがわかる。 また、2mSおきにのべつ幕無しにデータを送り続ける訳ではない。状態に変化がない限り送らぬようにしている。 一番処理時間が掛かっているLCD表示にも十分な時間を割当できているようだ。

DDS-ICへデータ転送・2
 写真はAD9834:DDS-ICへデータを送り始めた先頭の部分である。 下段のシフトクロックに同期して、シリアルにデータが送られている様子がわかる。

 X軸のカーソルで示すように、SCLK:シフト・クロックの周期は約2.4μSである。 また、画面に記入したようにSDATAの様子を見れば実際にどんなデータが送られているのかも解析可能である。

 AVRマイコンからDDSへのデータ送信が旨く行かないのなら、こうした泥臭い解析も必要になってくる。 開発の過程では何でもアリだと思ってやってみる決意こそが必要なようだ。 お陰でまたまたデジタル古城の主に。(爆)

               ☆ ☆ ☆ ☆ ☆

 MIZUHOのVFOを目標にして開発を始めた。具体的に使用機器を想定すると、様々な配慮が必要になってくる。そうした実用上のニーズもうまく盛り込むことができたようだ。

 DDS-ICにデータを送ることができ、所定の周波数で発振が確認された時点で一つのハードルはクリヤできたといえる。 しかし、実用性を高め汎用性も確保するには種々の機能を取り込む必要がある。 プログラムの基本はAD9834:DDS-ICへのデータセッティングにあるが、セットすべきデータをどのように加工するのかは各自工夫の部分だ。

 どんな構成のRigに使うのか構想を描きながらプログラム開発を進め、それが実現できるのは楽しいものだ。 完成した後でもプログラミングの範囲なら思い立ったらすぐ自在に変更できる便利さもある。そしてバグが発見されたら直すことも。hi マイコンを使ったRigの製作は自作HAM向きだと思っている。

 もちろん、いつものように以上は自身の要求に基づいた「私的な開発品」である。各人それぞれ考えが違えば要求も異なって当然だろう。 お薦めするような物ではないが、開発の過程を備忘にとどめる意味でBlogにしておいた。例によって「読み物風」になったが悪しからず。

 着手してから約1ヶ月半、あれから数えれば数年掛かってしまったがAVRマイコンを始めた自身の目標がまた一つ達成できた。これでやっと肩の荷が下りた気分である。今夜はビールが旨いぞー。 de JA9TTT/1

参考(追記:2013.05.10):AD9850搭載の中華DDSモジュールを扱った別編は:→こちら

(おわり)

2011年6月13日月曜日

【AVR】 DDS Control Part 2


高安定な可変周波発振器
 安定で任意の周波数に可変できる発振器は通信機にとって長年のテーマである。スーパーヘテロダイン受信機の周波数安定度を決めるからだ。写真はそうした可変周波発振器の例だ。良い物を知らずしてより良き物は作れない。

 左は泣く子も黙ると言われたCollinsの70H-12形VFO(PTO)である。右はTRIOのVFOでTS-130に使われたもののようだ。ほぼ同等のVFOはTS-510からTS-830の時代まで使われ、これまた歴史のある優れモノだ。

 いずれもLC発振回路を内蔵し巧みな温度補償により周波数安定度を得ていた。周波数シンセサイザ以前の時代にあって、高安定な発振器を製作するには高度な技術を要していた。


減速ギヤとダイヤルメカ
 発振回路だけでは実用にならない。十分な減速比をもったギヤメカと読み取りに必要なダイヤル機構が必要だ。

 CollinsのPTOはネジ機構を使ったコアの出し入れで周波数の微動機構を実現している。コイルの巻き方で周波数直線性を確保し、シャフトの10回転で1MHzをカバーする。

 写真のようにTRIOのVFOはエアーバリコンと減速ダブルギヤでバックラッシュを防ぎ、1kHz以下まで読めるダイヤルを実現している。周波数の直線性はバリコンの羽曲げで調整しているはずだ。いずれにしてもメカ+電気の技術で実現していた。


自作VFOも
 160m Band専用受信機のために自作したLC発振VFOである。大きな容量のエアーバリコンを使って安定度を向上させている。周波数が低く、簡略ながら温度補償もおこなってあるから安定度はかなり良好だ。

 バリコンはギヤとボールドライブで減速され同調しやすい。周波数は表示補正機能つきの周波数カウンタで読み取っている。受信周波数と表示を一致させるためにカウンタ基板にあるデジタル・スイッチで補正値を設定する。マイコン以前の昔のテクノロジーで周波数直読を実現したものである。

 こうしたVFOを自作するのはなかなか大変だ。当時は手持ちの部品があったので製作できたが、いまどき1から部品を集めるのでは大変だろう。あえて自作するなら古い無線機から部品取りするのが手っ取り早い方法かもしれない。


ミズホ通信機のVFOとは
 開発の目標としたミズホ通信製VFOユニットである。どんな物か概略わかるようCQ出版の書籍より情報を抜粋しておいた。5MHz帯のVFO-5と7MHz帯のVFO-7があった。

 ミズホのVFOは誰でも買える既製のVFOとしては唯一のものであった。アマチュアの手作りより周波数安定度に優れ、規格化されたVFOは機器の製作再現性に役立っていた。多くの自作記事で標準モジュールとして活用されてきた。

 5MHz帯のVFO-5は9MHzのSSBジェネレータと組み合わせて14MHzあるいは3.5MHzのSSB送信機の製作に使われた。VFO-7は7MHz帯のダイレクトコンバージョン受信機やQRP送信機用だろう。図の左のような初期型から周波数安定度を向上させた右の改良D型へと進化しながら長く販売された。

 しかし、良質な部品やダイヤル減速用のボールドライブなどが入手困難になり販売終了してしまった。 自作に重宝なユニットがなくなってしまったのは残念だ。これも近年の部品事情を反映したものだ。 VFOを自作しようと思っても同じような問題に直面してしまうだろう。結局、これからのVFOは近代技術で解決するべきなのだ。

 MIZUHOのVFOは登場した当時4,600円で、改良D型になってからは6,000円で販売されていたようだ。周波数安定度を確保するノウハウ・苦労や手間を考えたら十分リーズナブルな価格であったと思う。


DDS-VFO開発用基板
 写真はDDS-VFOの開発に使った基板だ。試作検討には十分だが、実用には表示器を延長し基板構造も変更すべきだろう。マイコンはATmega8を使っている。

 同じ28pinのシリーズ:ATmega88/168/328のいずれも使用できる。メモリサイズからATmega48は残念ながら使えない。またBASCOM-AVRも試用版ではコンパイル時に容量オーバーになってしまう。

 手持ちのありあわせ部品で作ったので、スイッチなど機能のみでデザインは考慮していない。実際に使う際は別の物を使おうと思う。なお、ダイヤルの早送りスイッチと、モード切り替えスイッチは写真撮影のあとで追加したため写っていない。

 肝心のDDS-ICはアナログ・デバイセス社のAD9834である。マイコンに搭載した制御ソフトはわずかな変更で他のDDS-ICに使える。なお、データ転送ルーチンを小変更するだけで秋月のDDS基板にも活用可能なように考えておいた。AVRマイコンは内部RCオシレータ(8MHz)で動作する。DDS用クロックジェネレータは67.10886MHzの水晶発振モジュールを使った。詳細は以下の回路図を参照。


DDS-VFOの回路
 なるべく簡単にするため少ない外付け部品になるようにした。しかし、多様な機能を持たせた関係でスイッチやVRがいろいろ付いている。受信機だけではなく、トランシーバに使うことも念頭におき送受回路の制御機能もある程度内蔵した。

 SSBトランシーバは複雑なので作るのは少し難しいがCWトランシーバならたいへん簡単に製作できる。受信部より簡単なくらいだ。送信モードに切り替えればDDS-VFOが送信周波数を発生するからだ。受信周波数に追従するのでトランシーブできる。従ってDDS発振器のあとに数段のアンプを設ければ簡単にQRPトランシーバ(送信機)ができる。

 一方,使用を予想する受信部もかなり様々な回路構成を考えた。オーソドックスに世羅多フィルタを使ったLA1600受信機や、数MHzの自作ラダー形フィルタを使った受信部に対応する。スーパー・ヘテロダイン型を第一に想定しているが、ダイレクト・コンバージョン受信機ももちろん可能だ。 またスーパー・ヘテロダイン受信機においては、CWあるいはSSBフィルタの中心周波数の違いを吸収できる。 帯域幅により中心周波数が移動する世羅多フィルタを含む自作ラダー型フィルタでは特に便利だろう。当たり前であるが、受信モードを切り替えても正確に「表示周波数=実受信周波数」が維持される。

 回路図にモードスイッチや送受切り替えがあるのはそうした機能のためだ。詳細はあらためて「つづき」の機能説明のところででも。

 消費電流はLCD表示器のバックライトOFFで約45mA、バックライトONでは約80mAであった。ミズホのVFO-5/VFO-7の消費電流は20mAだそうなのでその点でははだいぶ負けている。(要するに大食い・笑)

AD9834の優位性
 昨今はアナログ・デバイセス社のAD9834を採用する無線機が増えている。消費電流が少ないのでポータブルな機器に向いているからだ。しかも低コストなのも理由だろう。 より高性能・広帯域のDDSチップも登場しているが消費電流から汎用のVFOにはこれを使うのが最適だと思う。 もちろん消費電力をいとわない機器なら別のDDS-ICの方が良い。マイコンの制御ソフトはそれらにも対応できる。

 AD9834はそのかわりクロック周波数の上限は低めなので発生可能な上限周波数は低めだ。 簡易なリグならDDS出力を直接使用することになるのだが、67.10886MHzのクロックでせいぜい21MHzバンドあたりまでにするのが良い。スプリアスから考えて、クロック周波数の1/3くらいまでで使うのが良い。(特性の良いLPFを付加してクロック周波数の40%あたりまで)

 それ以上のバンドではPLLを併用する。 周波数分解能は十分あるので4倍の周波数のVCOをロックすれば良い。 50MHzバンドの無線機にはそのように使うべきだ。 DDS-ICとして下限はそれこそ1Hzでも可能なのだが、上記の回路ではおおよそ500kHzくらいまでである。

 なお、AD9834には供給クロックの上限周波数が50MHzのAD9834BRUZと75MHzのAD9834CRUZがある。かなり余裕があるらしく、BRUZでも67.10886MHzで使えるが、これから入手するなら75MHzのチップが良いと思う。そちらは100MHzのクロックでも動作すると言う。だいたい1個1,000円〜2,000円で購入できる。(2011年6月現在)


クロック発振器は良いものを
 先のBlogで扱ったが、DDS-VFOには良好なクロックを供給する必要がある。クロックに基づいたタイミングでサイン波のデータを読み出しD/A変換して出力しているからだ。

 基準が揺らいでいては出力信号も揺らいでしまう。奇麗なサイン波にならない。写真は以前販売されていた普通の水晶発振器だったころの67.10886MHzのモジュールである。右手前は同じく秋月電子通商の店頭で売られていた50MHzの小型オシレータだ。

 プログラムによる計算が簡単なので2^Nのクロックが向いている。従って67.108864MHzのオシレータが好ましい。しかし、先のBlogのように最近販売のものはジッタの多いオシレータになってしまった。

 従って、必ずしも2^Nのオシレータでなくても良いよう対策する必要ができた。当初は67.10886MHzを使う前提で開発を始めたが、秋月の事情があってから任意のクロックが使えるようプログラムを改造することにした。現在の最新パージョンでは入手容易な50MHzなど任意周波数のモジュールが使えるようになっている。 なるべく高めの周波数の方が良いが、良く見かける写真のような48.000MHzでも旨く動作する。(但し上限周波数は16MHzあたりになる)


クロック発振器には誤差がある
 上記のような簡便なクロック発振器(Simple Packaged Crystal Oscillator:SPXOとも言う)には周波数誤差があるのが普通だ。密封されたパッケージに入っており周波数の微調整はできない。そのクロック誤差はそのままDDSの周波数誤差になる。

 クロック発振器に与える電源電圧:Vccを加減すると周波数が変動するので、それを逆手にとって周波数微調整する例も見るが調整可能か否かは運しだいだろう。 定格電源電圧を大きく外れると発振振幅に影響が出るうえ発振状態も不安定になってくるので、ダメそうなら別の発振器に交換してみるしかない。

 ここではそうした不確実な手法は採用しなかった。VR1:F-ADJ(写真参照)の値をA/D変換で読み取り、それに基づいてソフトウエアで周波数調整できるようにした。即ち周波数誤差はプログラム内部で数値的に補正する。発振周波数に少々誤差があっても支障は無い。誤差補正は固定値の加減算ではなく、発生周波数を係数とした補正で行なっている。従って特定スポットの周波数だけでなく全周波数範囲で良好な精度が得られている。

 デジタル的に補正する関係でDDSの分解能以下の補正はできないが、50MHzのクロックで約0.1863Hz刻みの補正ができる。67.108864MHzなら0.25Hz刻みである。むしろ、補正しきれない残留誤差よりクロック発振器の周波数変動の方が気になるくらいだ。

 半固定抵抗器:VR1の調節なので、あたかもアナログ的な調整のような感触である。0.1ppm以下の誤差までスムースに合わせ込めるが、実用上の周波数精度はクロック発振器のドリフトしだいだ。総合的に見て校正後の精度・安定度はおおよそ1ppm程度のようであった。もちろん、アナログなVFOと比べたら比較にならぬほど安定している。たぶんCollinsのPTOよりも優秀だ。(笑)

                 ☆ ☆ ☆ ☆ ☆

 DDS-VFOのPart2では開発の目標を明らかにしハードウエア的な部分(=回路や部品の部分)を採り上げてみた。 さすがにミズホのVFOより複雑な回路ではあるがそれほどの規模でもない。思ったよりも製作は容易である。ダイヤルの減速ギヤや周波数直読などの機能を電気的に実現・解決したと考えれば妥当な回路規模と言える。製作の手間を考慮しない「部品コスト」だけで言えばミズホのVFOよりも安価である。全部品を揃えても5,000円で十分なお釣が来るだろう。 もちろんマイコンを使った製作ではプログラムも大切な要素であり、回路に魂を入れる部分だ。 次回は実現した各種の機能を採り上げ、その動きを追って見たいと思う。 de JA9TTT/1

つづく)←リンク

続編)←リンク(おなじAD9834を使った発展バージョンへリンクします)

2011年6月5日日曜日

【AVR】Modification of rotary encoders

ロータリ・エンコーダの改造
 DDS式VFOを作っている。 昔のVFOと同じフィーリングになるよう周波数はダイヤル・ノブで変えられるようにしたい。 それにはロータリ・エンコーダを使うことになる。

 写真は秋月電子通商で売っている中国製ロータリ・エンコーダだ。 クリック付き24ポジションで15度分解能のものだ。 軸の回転量に応じた数のパルスを出力するインクリメンタル型である。 初期位置の概念はなく、回転した/回転していると言う情報だけが取り出せる。 単に回転軸で接点を開閉する構造では回転方向がわからないので回転角に対し開閉位置をずらせた一対の接点が設けてある。

 操作フィーリングや、耐久性にも影響するので市販無線機ではずっと良い物が使われている。しかし、安価に何時でも手に入ると言えば写真の物に限られるようだ。 秋月電子通商では200円で購入できる。 少々チャチで壊れ易いが、何しろ安価なので我慢することにしよう。 本来はクリック付きの24ポジションである。それを接点の「変化検出式」で使い4倍の96パルス式として使う。 無線通信機にはもっとポジション数の多いものが良いのだが、4倍化することで取りあえず使い物にはなる。

 4倍の96パルス式で使うにはクリックを外す必要がある。 以下はその手順だ。 このあと、このエンコーダをDDS-VFOに使うにあたっては必須の作業になる。

分解
 4カ所でカシメてあるツメを起こすと簡単に分解できる。 シャフトに直結した接点円盤の部分と接点ブラシの部分に分解できる。 少々デリケートな部分なので円盤やブラシの部分には手を触れない方が良い。

 円盤には摩耗を防ぐ意味からグリースが塗布してあるようだ。 そのまま触れないようにしておこう。 なお、固定用のナットとワッシャを外した方が作業し易かった。 元に戻す関係から、必要以上にツメは起こさない方が良さそうだ。

クリック解除
 クリック感は接点円盤の周囲にある刻みと、写真の押しバネによって得ている。 従って、この押しバネが円盤の刻みに当たらないようしてやればクリックはなくなる。

 ドライバの先などでバネの出っ張り部分を押し込んでしまおう。 またクリック付きに戻すつもりがなければグッと奥まで押し込んで良い。 中途半端にクリックが残っても困るので良く押し込んでおくのをお薦めする。

 これだけで、クリックなしに改造できる。 クリックなしのモデルもあるだそうだが、改造は簡単なのでクリック付きの手持ちがあれば改造して使えば良い。


接点円盤
 内側の放射状にならぶ24個の電極が接点である。 反対側の接点バネの接触位置を僅かにずらせることで二相出力を得ているのだ。

 円周の周辺にある24個の歯車状のものがクリックを作る部分である。こちらは電気的な接点ではない。

 こちら側は観察のみで手を触れずにもとに戻しておこう。 改造が済んだら手順を逆に辿り、押さえていた4カ所のツメをカシメなおせば改造完了だ。 塗布されたグリースのためか回した感触は少し粘るようではあるが、スムースに回るようなら問題はない。 クリックの部分以外、内部構造に手をつけなければ失敗はないだろう。

4倍化の仕組み
 他のサイトに詳しく書かれているのでごく簡単にしておく。 いま必要なことは、どちらの方向へ回転したのかと言う情報とツマミの一回転で96段階のステップが得られるようにすることだ。

 ロジック回路的に行なおうとすると結構厄介かもしれない。 しかし、マイコン式なら容易だ。 まずは上段の右回転で説明してみよう。 いま「1」の位置にツマミがあったとしよう。 A相、B相ともに「L」である。 ツマミを回転し「2」の位置にくるとA相が「H」になり、B相は「L」のままだ。即ちLL→HLに変わったら右回転である。 おなじ「1」のポジションにあっても、左回転ならLL→LHに変化する。そのように変化したら左に回ったと考えれば良い。
 良く見ると、右回転の状態変化1→2、2→3、3→4、4→5の4種類と、同様に左回転の1→2、2→3、3→4、4→5は、それぞれユニークである。 即ち回転方向の判定は状態の前後比較により間違いなくできる。また状態変化がなければ回転軸は停止していると考えれば良い。

 マイコンを使った処理なら、前の状態を記憶し、その後の状態との比較で回転の有無や回転方向を簡単に検出できる。 このあたり、web上のサイトにもたくさん情報や事例があるので参照を。 私のプログラムでは「状態比較」の切っ掛けを一定間隔のタイマー割り込みで得ている。 もちろん、ほかの手法もあるだろう。

                  ー・・・ー

 DDS発振器は周波数データを送り込んでやれば動作する。 しかし、人間とのインターフェースは慣れ親しんだダイヤル操作が一番だ。 サムホイール・スイッチで周波数切換えするようでは実用的ではないだろう。 人の操作とDDS発振の仲立ちをするのがロータリ・エンコーダだ。

 ロータリ・エンコーダの読み込みに関しては随分前に試作済みであった。 概ね確立できた技術としてその当時のプログラムをそっくり移植して実験を進めていた。 しかし妙な飛び方をするうえ、旨く96ポジションにはならなかった。 ちょっと悩んでエンコーダのクリックを外さないとダメだったと言うのを思い出した次第。 さっそく改造して目出度く思い通りの動作にできた。 前のことをすっかり忘れてしまうほどの時間が経っていた。(笑) de JA9TTT/1

つづく)←リンク