PSoCで電波時計を作ろう

by K.I
2005/03/01〜07/31

Index


概要


[top]

素直に増幅してみる

PSoCのPGAを使えば、最大×48(33dB)の増幅が出来る。 単純に×48のPGAを2段でやってみたら、どうなるんだろ? いわゆるストレートラジオだよね。 →なんか変だな〜

発振してる?

→増幅率を下げると振幅が0.4Vp-pぐらいと急に小さくなったけど、波形が見えてきた

フィルタを掛けてみる

それに、こんなに目茶苦茶に信号が混ざった状態では電波時計の信号を取り出すなんて無理だ。 但しPSoCでは、2段のBPFの後にPGAを接続出来ないみたいなので、出力電圧は小さくなっている。
1本当に秒単位かどうかは、はっきりしないけど。
2これに気が付かずに数日無駄にしたんだけど。。PSoCの仕様書の アーキテクチャの図を見ていて気が付いた。
3頑張って調整すれば何とかなるかもしれないけど。

[top]

やっぱりヘテロダインかな

SCFによる周波数変換

うーん、難しいなぁ。良く分からない。。

構成を考えてみる

Wimさんの電波時計の資料を参考に構成を考える この際、構成をちょっと変えようと思ったんだけど、意外と配置に制限があって難しい。 中間周波数って、どれぐらいが適当なんだろう。 全体で、43.6dB(約150倍)程度だが、ちょっとゲインが足りないか?

なかなか難しい

→出力がゼロなので、2段目は写真撮らなかったけど

ゲインの再計算

もっと、BPFのゲインが取れるようにしたい。
C1 C2 C3 C4 CA CB Q gain dB OSR
31 4 4 1 32 32 30 248 48 50
28 4 4 1 32 32 30 224 47 50
25 4 4 1 32 32 30 200 46 50
13 4 4 1 32 32 30 100 40 50
6 4 4 1 32 32 30 50 34 50
3 4 4 1 32 32 30 20 26 50
1 4 4 1 32 32 30 10 20 50
31 4 4 8 32 32 4 31 30 50
28 4 4 8 32 32 4 28 29 50
10 4 4 8 32 32 4 10 20 50
3 4 4 8 32 32 4 3 10 50
2 4 4 8 32 32 4 2 6 50
1 4 4 8 32 32 4 1 1 50
この考え方で、無理矢理ゲインを上げてみた。 →2重に見えるけど、これはひとつの波形です

信号検出はどうしようか

増幅出来たところで、今度は肝心の信号検出を行わなければならない。 →拡大するとコンパレータ出力が分かりにくいので、広い時間範囲で見ている。
4これは普通思い付かない方法だ。よく考え付いたと思う。

[top]

先人はどうやってるの?

単純にコンパレータ出力を処理しようと思ったんだけど、信号が本当に正しいかどうかは置いといても、かなり難しそうだ。 ここでWimさんのやり方を見てみると、結構難解で複雑な方法を取っている。 簡単に、訳すとこんな感じかな。分かったような、分かんないような。。。

また分からないことだらけ

何で、こんなに面倒なやり方5をしているんだろう。 でも、この手順の実現方法が良くわからない。特にコンパレータによる割込み

コンパレータの割込みはどうやるの?

PSoCの割込みって これだけ? そういえば、タイマ割込みってデジタルブロックの割込みなんだよね。GPIOはI/Oポートだし、、

ヒステリシスを持たせることって出来るの?

コンパレータの割込み設定を、動的に変化させればヒステリシスを持たせることが出来るかもしれない。 多分、こんな風にやってるんじゃないかな。

タイマによるデータの判断

コンパレータ出力は不連続なので、このままではデータを取り出すことが出来ない。 最後のデータ判断の方法が、なかなか理解出来なかった。 これを基に考えてみた。 このカウンタ値を直接見るだけでは、閾値以上でも1になることはある。 で判断出来るはずだ。

フィルタを掛けてゲインをコントロール

立上りから下がりまでの時間を、振幅の見做してPGAやBPFのゲインをコントロールしている。 うーん、多分タイマカウンタをチェックすれば良さそうだ。

雑音除去は?

でも受信した信号は雑音だらけなので、このままでは使い物にならない。

最終周波数について

分からなかったので適当に130Hzにしたけど、ちょっと小さかったかな?
5この解釈が正しいかどうかは保証出来ないけれども。。
6全然関連なく勉強したことが役に立ったりするんだなぁ。
7実際はソフトでやるんだけど。

[top]

信号検出をやってみよう

まず、以下のようなレジスタを用意する。これはソフトウェア上の変数になる。 ここまでは、PSoC Designerによるモジュールの配線と設定、プログラムはスタート処理ぐらいだったが、割込み処理部分は、さすがにプログラムで記述しなければならない。

コンパレータ割込み

コンパレータ割込みの動作は、 →ヒステリシス・コンパレータは意外と簡単に実現出来た でも、ゲインコントロールは後回しだな。

タイマ割込み

→撮ったは良いが我ながら分かり難い写真だなぁ そういえば、WimさんはBPFの定数をどうしてるんだ? 計算テーブルで、またちょっと計算してみよう。
C1 C2 C3 C4 CA CB Q gain dB OSR
31 1 1 2 32 32 15 500 54 200
20 1 1 2 32 32 15 320 50 200
6 1 1 2 32 32 15 100 40 200
2 1 1 2 32 32 15 31 30 200
1 1 1 2 32 32 15 16 24 200
31 1 1 1 32 32 30 1000 60 200
18 1 1 1 32 32 30 576 55 200
10 1 1 1 32 32 30 320 50 200
4 1 1 1 32 32 30 125 42 200
3 1 1 1 32 32 30 100 40 200
1 1 1 1 32 32 30 31 30 200
→クロック系を作りなおし

シリアルポートでデバッグ用出力

これで、シリアルポートでデバッグ出来るようになった。(はずだ)

LCDでデバッグ出力

アダプタが見つからないので、暫くやる気を無くす。。。 でも、今度は出力が出なくなってしまった。 また、暫くやる気を無くす。 疲れた。。。。。

タイマのカウント値を確認する

For the Timer, Counter, Dead Band, and CRCPRS functions, a read of the DxBxxDR0 register returns 00h and transfers DxBxxDR0 to DxBxxDR2.

ゲインをコントロールしてみよう

タイマのカウント値を目安にPGAとBPFのゲインをコントロールしてみる。 ×48 → 0Ch ×24 → 1Ch ×16 → 08h ×8 → 18h ×5.33→ 28h
No PGA gain BPF C1
0 ×1.14 1
1 ×1.23 3
2 ×1.33 5
3 ×1.46 7
4 ×1.60 9
5 ×1.78 11
6 ×2.00 13
7 ×2.27 15
8 ×2.67 17
9 ×3.20 19
10 ×4.00 21
11 ×5.33 23
12 ×8.00 25
13 ×16.0 27
14 ×24.0 29
15 ×48.0 31

この波形で本当に大丈夫?

最初から雑音を増幅してるんじゃないかという不安はあったけど、欲目で少しは信号が混じっているかもっていう期待は結構ある。
8考えてみると、PSoCデザイナを弄ってるとこういう訳の分からない不思議なことが良く起こる。気のせいかと思ってたんだけど。。
9面倒だったってこともあるけど、もう少しキレイに整形してからっていうことで、なかなか出来なかったんだよね。

[top]

構成を考え直す

このままでは埓があかないので、構成を変えることを考えよう。

Cloneが出来ない?

いままでのプログラムは残しておいて、構成を変えたものを作ってみるか。

PWMの入力クロック

最初に40kHzのフィルタを通したらどうだろう。
C1 C2 C3 C4 CA CB Q gain dB OSR
1 4 4 1 32 32 30 8 20 50
4 4 4 1 32 32 30 32 30 50
13 4 4 1 32 32 30 104 40 50
31 4 4 1 32 32 30 250 48 50
1 1 1 1 32 32 30 32 30 150
3 1 1 1 32 32 30 96 40 150
→こんな構成はどうかな? ここで、またちょっと嵌まってしまった。 ところが、BPFの出力が出ない。。クロックが供給されていない感じ。 変更してみると、ようやくBPFが動作するようになった。ふぅ。。。

出力が出ない

もう一つ、つまらない事で嵌まったので、ちょっと書いておく。 あれ、SCFを直列に繋ぐのはInvertingで良いと思うんだけど。。。 元に戻して考え直す。 これで気が付くのに時間が掛かったのは、 つまらない間違えだけど、2回やったので記録として残しておこう。

秒信号が見えない?

いろんな構成で、最初からやり直してみた。 増幅率は最大にすると簡単に発振、少なくとも飽和するので、そうならないように適当に調整している。 このいずれの構成でも、秒毎の変動は殆ど感じることが出来ない。うーん何故だ? 同調回路を調整しなおしてみるか。。

同調回路の調整

CQ出版の HAMjournal No.104、 40kHz発信器を利用した同調容量の確認という記事を参考にしてやってみた。 同調回路の調整用に40kHzの矩形波発振器を作る。

抵抗ドライブで出来ないかなぁ

そういえば、同調回路はPSoCに接続されている。
        ・Port0_6を抵抗ドライブで反転させる試作プログラム(失敗)
        PRT0DM1 |= 0x40;
        PRT0DM0 &= 0x40;        →出力をハイインピーダンスに
        PRT0DR  ^= 0x40;        →データ反転
                                →データに合わせて抵抗ドライブを再設定
        PRT0DM0  = (PRT0DM0 & ~0x40) | (PRT0DR & 0x40);
        PRT0DM1  = (PRT0DM1     & ~0x40) | (PRT0DR & 0x40);

素直にPWMで作ろう

まぁ、素直に他のポートから40kHzを出して、抵抗で繋ぐしか無いか。。。 ???、えーっと。これはいったい何なんでしょう? →きれいな正弦波になった。振幅も5倍ぐらいに。。 最初から、やり直しかぁ。。。
[top]

ふりだしに戻る

うーん、期待してたけどあまり良く分からないなぁ。。。

電波時計の信号が見えた

全く変動が見えない。がっかりだな。。 →そのままだと変動無しだが、アンテナを付けると変動がみえる10 うーん、これは困った。結局アースに繋ぐのが良いって事だよなぁ。

増幅率を変えてみる

→アニメGIFなので表示に時間が掛かります。。

もう一度挑戦

→信号が入ると波形が変わってる! なるほどね。やっとどうなるのかが解かったよ。。
10これはアニメーションGIFなので動く速さは実際と違ってます。


comments powered by Disqus