PSoCをつかったワンチップ電波時計の製作
2005/8/21 作成
2005/8/29 起動時に周波数切り替えスイッチがスキャンされないバグを修正
2008/5/15 連絡先追加

■連絡先
 2008/5/15追記:間抜けなことにFTPのパスワードを忘れて更新できない状態だったのでしばらく放置してしまいました。
連絡先を書いておこうと思います。mega_mega_ah_mega アットマーク yahoo.co.jp
アットマークを@に変えてスペースを削除してください。
■はじめに
 PSoCの素晴らしいところは、なんといってもアナログブロックがあるという点です。今回はアナログブロックを活用して電波時計を作ってみました。
完成してからもうすぐ一年たちます。半年くらい連続稼働で使用していますが特に問題なく動いています。
■ワンチップ電波時計の概要
仕様
・受信周波数:40kHz/60kHz手動切り替え式
・動作電圧:5V
・動作クロック:24MHz
・その他性能など:出たとこ勝負…
感度は980円とかで売られてる電波時計と同等か一応勝てる程度です。埼玉にて40kHz、60kHzの両方が受信できています。ただし60kHzは送信所からの距離が遠いためコンディションの良いとき、または屋外に出たときしか受信できないようです。

外付け回路はアンテナと液晶モジュールだけで動作可能です。

ラインデコーダと7セグメントドライバを外付けすることで、7セグメントLEDで時刻表示することも出来ます。LEDも外付け回路なしでやりたいところですがポートが足りないので仕方ありません。



この写真はLEDも付けていますがLEDを省けば左側に見える基板一枚+液晶モジュール+アンテナだけですみます。



まだ受信完了していないので表示しているのは出鱈目な時刻です。液晶の下のバーグラフは受信信号の振幅を示していて、一秒おきに長くなり、またすぐ短くなります。



アンテナ部です。
■電波時計の原理
 40kHzと60kHzで送信されている標準電波には、タイムコードが振幅変調されています。
タイムコードは1Hzのパルスで、パルスの立ち上がりの瞬間が秒の変わり目となっています。
時刻などのデータは、タイムコードのパルス幅で表されていています。
詳しくは日本標準時グループのサイトをご覧ください。
PSoCでこれをデコードするには、アナログブロックでタイムコードを復調してAD変換し、ソフト側でレベル判定、パルス幅判定をすればいいわけです。
■受信アンテナについて
■バーアンテナ
 受信にはAMラジオなどと同じようにフェライトバーアンテナを使いました。
フェライトバーに巻いたコイルと同調用のコンデンサで並列共振回路を構成しています。
フェライトバーは拾ってきたラジオをバラして再利用しています。
同調用のコンデンサは、秋月電子で39000pF 1%のフィルムコンが安く売っていたのでコレを2個直列にして使いました。
巻き数はインダクタンスを実測しながらカットアンドトライで決めました。
(アンテナの写真)
■40kHz/60kHz切り替え回路
 JJYには40kHz(福島)と60kHz(佐賀)の2つの周波数があるので、両方を受信可能にするには同調周波数の切り替え回路を作る必要があります。
切り替えの方法として考えられるのは、
・コイルにタップを設けて切り替える(容量は固定)
・コンデンサの容量を切り替える(巻き数は固定)
などがありますが、同調周波数が微調整しやすいと思われる前者を選びました。
■受信原理
■ヘテロダイン方式について
 長波JJYの帯域はノイズが多いようで、かなり選択度を高くしないと正常な動作が期待できません。
そこで、比較的簡単に選択度が得られるへテロダイン方式を使うことにしました。
局発の周波数は、
・40kHz受信時
39.02kHz
・60kHz受信時
59.11kHz
としました。
中途半端な周波数なのはクロックの24MHzを分周しているためです。
中間周波数は約1kHzということになります。
■イメージ受信に注意
 このように中間周波数を低くした場合、特に気を付けなくてはいけないのがイメージ受信です。
ヘテロダインでは、(局発の周波数)+-(中間周波数)の二つの周波数に対して感度を持ちますが、目的の周波数は一つなので、もう一つの邪魔な方をイメージ周波数と呼びます。
この場合は40kHz受信時は38kHz、60kHz受信時には58kHzがイメージ周波数となるため、この周波数の信号はアンテナの同調回路で影響が出ない程度まで除去する必要があります。
■全体の構成
 全体の構成は次のブロック図のようになっています。


実際には使用できるアナログブロック数の関係で最後のLPFは省略しています。
というのは、使用したADCが64倍オーバーサンプリングが可能なΣΔ型なので、サンプリング周波数を落としてしまえばLPFをかけたのと同じように扱えるからです。

■回路図

やっつけ作業ですいません…

■PSoCブロックの構成
これがInterconnect画面全体です。


信号が通る順番に説明していきます。
■アナロググラウンド電圧の出力
AnalogOutBus_2はなにも接続されていませんが、これはアナロググラウンド電圧を出力するように設定しています。
ACBxxCR2レジスタの設定によってAnalogOutBusからリファレンス電圧を出力することが出来ます。
この場合は
ACB02CR2=ACB02CR2|0x14;
としています。
詳しくはデータシートの113ページ13.1.24 ACBxxCR2をご覧ください。
■PGA(プログラマブル・ゲイン・アンプ)
アンテナからの信号はPort_0_7から入ってきます。
アンテナからの信号はACB00とACB01の2段のPGAで増幅されます。
ゲインは1倍から144倍までソフト側で調整できるようにしています。
PGA一個で最高48倍までゲインが取れるので、2段で2304倍までとれますがあまり高くするとオフセットなどの影響で全く増幅できなくなってしまいます。
■LPF2_1(ローパスフィルタ)
PGA3から出てきた信号はLPF2_1に入ります。
これは周波数変換用のミキサとして使っています。
ASCブロックは、極性反転機能を持っているので、局発によって極性反転して周波数を変換します。
極性を反転するということは方形波をかけ算するのと同じ事です。
極性反転機能の設定は、AMD_CRレジスタによって行います。
詳しくは、AN2111、AN2044、データシートの170ページ13.2.11 AMD_CR0をご覧ください。
この場合はPWM16_2が接続されているGOE1によって極性を反転させています。
■BPF2_1,BPF2_2
LPF2_1から出てきた周波数変換された信号からJJYの信号を選択します。
ASC21とASC12の間は直接接続できないので、BPF2_1の出力をいったんport0_5に出力し、再びACB02のPGAで再びport0_5から入力してASC12のBPF2_2に接続しています。
■SCBLOCK_1
BPFの出力を整流します。BPF2_2のコンパレータ出力によってゼロクロス点を検出し、それに合わせて極性反転を行うことで整流します。
■DELSIG8_1
ADコンバーターで、SCBLOCK_1からの信号をAD変換します。64倍オーバーサンプリングを行うADコンバータのため、サンプリング周波数をわざと低くし、LPFとしての機能を持たせています。
■プロジェクトファイル一式
dempa.zip

■参考文献
[1] 桑野雅彦,"はじめてのPSoCマイコン",CQ出版

[2] パステルマジック,http://www.pastelmagic.com/

[3] データシート