sorry. japanese only.![]()
[YES!AVR!へ戻る]
AVR(ATtiny2313)を使った周波数カウンタ&基準周波数発生器
TCXO(温度補償型水晶発振器)を基準にしてPLLによる基準周波数(10.000000Hz)の発生器に 0.1Hzの分解能で10MHzまでカウント可能な周波数カウンタを作ってみました。 (年度末があって忙しくて追いつかないけど,ページはいろいろと作り中...)周波数カウンタのブロックダイアグラム 周波数カウンタの回路図 ●製作物こんな感じで作ってみた。最初は10MHzの基準周波数発生器だけのつもりでAVRにはPLLの 初期化制御(プログラマブルPLLにMB87014Aを使用しており,こいつはシリアルで分周比を 設定する必要がある)だけやっていたのだが,勿体無いのでLCDをつけて周波数カウンタに 仕上げてみました。10MHzを計測したかったのでAVRには倍速オーバクロックの20MHzを注入w 基板表面には,コントローラ部(ATtiny2313)とTCXO部(秋月の12.8MHzの奴)が見えます。 ケースの中身はこんな感じで,内部の温度変化を小さくして精度を上げるため,断熱用の ウレタンフォームをミッチリ充填w 基板裏面には,PLL部(MB87014A)とVCO部(HCU04とバリキャップ)および分周器(HC74)が見えます。 VCOは,H8Sジャンクから引っこ抜いた20MHzX'talを使用して±3kHzの狭い範囲で制御します。 ループフィルタは転がってるCR部品を適当に使ったので,c/oが0.7Hzというノンビリ仕様w (写真左に写っているフラットケーブルは,AVRのISP用のケーブル) 稼動中のLCD表示。1行目は10点サンプルの平均を表示(0.1Hz単位)で0の場合はご覧のとおり。 2行目は1秒間のカウントで, 右端はゲートタイム表示代わりのハートビートw。起動後3分 経過でハートビートが'*'点滅に変わりOSCの安定領域にあることを示す。 (とりあえず確度は25℃で10.0000000MHzと0.1Hzまで追込んであるが,約-0.2ppm/℃の温度 係数と長期安定度が不明で悲しいw) 稼動中のLCD表示2。2行目右端のハートビート表示が'U'点滅で起動後3分以内の安定域にない 場合であることを示す。 PLLフィルタがノンビリ仕様なので30秒くらいは,基準周波数がユラユラと揺らぎながら安定 域に近づいてゆくのでw 3分間は不安定としている。 起動時
起動後3分以内
稼動中のLCD表示の遷移状態。 今回ファームはCで作成したが,ちょっと表示に凝ったら殆ど空き領域なし(98%)に... ●プログラムのソース ・ソースはWinAVR用に記述してある。プロジェクト自体はavr-studioを使用している。 ・なんか変更途上のまま放置されていたものなので...いろいろスマンがAS-ISで。 HEXファイルも同梱したプロジェクトファイル一式を置いておきます。 (avr-studio+WinAVR-20071221の環境下でbuildします) ●よもやま (1) 基準周波数をお手軽に安く得るつもりだったが,確度をどうにかしたくてGPSDOを オークションでゲット。結局高くついてしまったw (2) AVRにはシリアルの口を残してあるが,もう一杯一杯で計測カウントを垂れ流しで 出力することもできない。全体を見直してみるか... (3) つうか元はH8Sジャンクで周波数カウンタを作ろうとして基準周波数発生器を作って いたはずなんだけど...いつのまにかこんな風になってしまった... (4) 試しに秋月のH8SジャンクのRTC用のXtalの周波数を測ってみたら,軒並み32770〜 32775と若干高めになってた(気温23℃時)。たぶん気温が30℃程度だと規定どおり 32768Hzなのかも知れんが,精度の高い時計とするには,温度での補正は必要かも 知れない。 (ジャンクの時計アプリは補正値0x21(33) x 3.052ppm= 100ppmの減算補正になって いるから原発は32771Hzちょいということで,大体はあってる計算だな) [ご注意] ・このページの記載事項については,一切無保証です。 起動後3分経過後