自作電子小物/掛時計/暗所用環状ドット表示電波時計
自作電子小物/掛時計/暗所用環状ドット表示電波時計
Wall Clock V0.1
2010年7月1日木曜日
針式の時計と同じ表現方法で、自発光表示する壁掛け時計です。寝室等の薄暗い部屋で時刻を知るのに適するように作りました。停電でも光り続けますので、イザと言う時、真っ暗闇になった部屋で出口を見つけるのに、役に立つと思います。製作費は約3000円、専用ICを使わないJJY電波時計で、制御部にサイプレスセミコンダクタ社の PSoC1 を使用し、ソフトウエアはC言語にてコーディングしています。専用のプリント基板も設計しており、キャラクタLCDモジュールと組み合わせれば単なるデジタル表示の電波時計にもなります。
<機能/特徴>
■遠目からでも判別しやすい、時刻を直感的に把握できる
■電波時計なので時刻合わせ不要
■簡易的な出口誘導灯に、落下してもガラス片が飛び散らない
■単純、安価、製作容易、補正作業不要
■地震の前兆の一つと言われている、電波の乱れを教えてくれる かも
<仕様>
名称:暗所用環状ドット表示式壁掛時計
分類:掛時計・疑似針表示・自発光・電波クロック
表示機能:
円形ドット表示(60ドット)で時分を表示、時は3ドット、分は1ドット
7セグメントLED、4桁×2行で年月日を表示
時刻合わせ中は表示されません。
キャラクタLCDモジュールSC1602を取付ければ、日時をデジタル表示します。
日時自動設定機能:
1日1回(3時33分)、標準電波40kHzを受信して設定
受信が完了しなかった場合、1時間毎(毎時33分)に受信を再試行する
同期誤差1秒以下、60kHzには未対応
警告機能:標準電波の受信が完了できなかった場合、7セグメントLEDに”unsync”と表示
設定機能:
背面のプッシュスイッチにより日時を手動設定可能
手動での標準電波受信起動とキャンセル
外形:直径115mm、高さ36mm
電源:USB ACアダプタ 5V 200mA以上 消費電力は平均約0.5W(年間約100円)
製作費:約3000円
<技術的なポイント>
■ハードウエア
・Cypress semiconductor社のCY8C27443マイクロコントローラ
・32,768Hz時計用水晶
・バックアップ用バッテリのフローティング充電と過放電防止対策
・JJYの受信
PC+フリーソフトウエアを利用した、長波帯用スペクトラムアナライザの活用
汎用AMラジオ用バーアンテナを使用した、長波帯微小信号の選択・増幅・抽出
ヘテロダイン方式
PSoCでの実装
・高倍率増幅で問題になる入力オフセットのキャンセル法
負帰還方式
アナロググラウンドバイアス式
■ソフトウエア
・プログラミング言語はC、開発環境はPSoC Designer、コンパイラはICC(ImageCraft C compiler)
・タイマ割込でカレンダ時計の実装
・I2C接続の7セグメントLEDの制御
・I2C接続の60セグメント円形LEDの制御
・アナログブロックの変調機能の有効化(周波数変換、全波整流)
・アナログブロックのコンパレータ出力の有効化
・動的なPGA/AMPINVの増幅率変更
・JJY信号(タイムコード)のデコード
・キャラクタ型LCDでのバーグラフ表示
・SLEEP時の消費電流削減
・独自sprintfの利用
<どんな感じにするのか>
夜間でも視認し易いようにしたいと言う事で、次の様な物を考えてみました。
●大型7セグ表示
自分の知識の範囲では、手っ取り早く掛け時計を考えると、やはり7セグメントディスプレイが初めに思い浮かびます。遠目に見える様にする為には、大きめの表示器にする必要があります。
LEDの場合、自発光しますので、この用途としては好都合です。ただ、大型表示器は値段が極端に跳ね上がるので、7セグメント表示器自体も単体LEDで作ってしまう等の工夫は必要になると思われます。
液晶の場合、この目的に適合する部品が見つからないですね。考え方を変えて、市販の大型液晶表示時計で格安な物がありますので、これに照明を付加すれば一丁上がりです。( 2〜3000円程度)
比較的安く入手出来る100mm程度の冷陰極管(要は蛍光灯)で表示器自体を作る事も考えられますが、これだと一般家庭用の掛け時計としては大きすぎます。
実のところ、針式に慣れてしまうと時刻を認識するのが直感的に出来きるので、デジタル表示にはしたくないと思っていました。
●アナログ時計に照明
やはり掛け時計と言えばシンプルな針式の物が、見やすさ良好で大きさも自在、誰でも受け入れ易いと思います。流用出来そうな市販品も安い物が沢山ありますし、ムーブメントも1000円台(東急ハンズ)で入手できるので、安く上げられそうです。また、ステッピングモーター等を使ってデジタル的に実現してみるのも、技術的な興味が湧いてきます。
●擬似的にアナログ針表示
時刻を数値で表現すると言うのは、正確性では良いのですが「読む」事をしなければならないので、寝起きのぼけた頭では認識するのにちょっと考えてしまいます。その点、針式の時計は「直感的」に頭の中に入って来ますし、時間配分を取り易いので、良い表現方法だと思っています。
時計はデジタルで処理するのが楽なので、アナログ的にするのは大変です。ドットマトリックス等の表示器でアナログ針を再現する方法や、細長い導光板・光ファイバ等を多数使って針の様に見せる方法とか、工夫が必要です。費用については設計を進めてみないとわかりません。
選択:とりあえず「擬似的にアナログ針表示」で検討を進める事にします。アナログ時計は、見た目が普通過ぎるし可動部品を使うのでちょっと気乗りしません。7セグ表示は市販品を購入した方が安くなりそうな気がします。
<おおまかな設計>
■表示パネル
擬似的にアナログ針を表示するとなると、次の様な形が考えられます。
▲高解像度の表示器を使用
10インチクラスの液晶ディスプレイを使い、アナログ針時計を描画する方法です。制御するソフトウエアの工夫次第で、かなり見やすいものに出来ます。問題はコストと消費電力です。現在の相場では、うまく作れて1万円の制作費と10Wの電力になると思われますので、これを許容できるか否かです。安いノートPCや、フォトフレームを流用するのが一番近いかもしれません。どちらにしても費用的には許容出来ない小物になりそうですので、今後の表示器事情に期待します。
▲低解像度の表示器を使用
16×16ドット前後の表示器を想定しています。針を表現するにはちょっと厳しい感じにはなりますが、我慢できる範囲かと思います。ドット単位での明るさ階調ができれば、遠目では問題ないレベルになるでしょう。逆に、作り込みをうまくすれば、印象に残る時計になるかもしれません。物理的には、小さくとも100mm角のドットマトリックスのLED表示器を見つけるか、256個の単体のLEDで作り込みする必要があります。そして、駆動回路では32ポート以上を用意する必要があります。
入手可能な部品をさらっと探してみると、38mm角の8x8LEDモジュール(100¥)を4個組み合わせれば、小さ目ですが実現できそうです。駆動回路については、次の手が考えられます。
ドットマトリックス制御ICを使う :入手難、高価
汎用ロジックICでポート数を増やす :フリップフロップやラッチ、シフトレジスタ等を探すが安くない
出物もあったが駆動能力が小さいのでトータルでのコストに要注意
ポート拡張用ICで増やす :汎用ロジックICよりも安く済む
32ポートI/OエキスパンダーTC6367AN (200¥)
12ビットシリアル-パラレル変換NJU3714 (150¥)
マイコンそのものを多ピン品種にする:40ピンPIC16F887 (200¥) に注目、ポート拡張IC代わりに使う手もあり
1000円以内には治まりそうな感触です。
▲限定的な表示方法で最適化
針式時計の表現に特化・最適化すればコスト効率がアップするはずです。
時計を単純化して考えると、時は12種類、分は60種類を区別できれば良いので、72個のランプがあれば表現可能です。秒の情報は、掛け時計の場合あまり重要ではありませんので、省略してもOKと考えます。割り切りを進めれば、通常生活では5分単位の精度でも、十分役に立ちますので、極端な話12+12個=24個のランプで良いのです。
さすがに5分単位というのも強引なので、72個程度のLEDで考えますが、それでも一番安く済む事が期待出来ます。ポートはダイナミック表示する場合、8+9=17本で済みますので、うまくすればマイコンから直接制御できる可能性も生まれます。
針の表現を再現するのであれば、細長く光るランプを円周上に配置します。短針、長針が区別できる様にしなければなりませんが、これは光る長さが変わる様に見せるか色分けする等の工夫をすれば良いでしょう。この辺は、意匠設計の楽しみ(苦しみ)です。
選択:常に考えているのは「安い」事ですので、最後の「限定的な表示方法」で検討を進める事にしました。
表示板の形について幾つか考え、以下の様にしました。
↓ 決定案をPCで描いて感触を確認したもの
一見、どこかの駅にありそうな感じです。円周上に分を表すドットと、時を表す細長いランプを組み合わせて、時・分を表します。
真っ暗では円周上のランプだけでは判りにくいので、中心位置が確認できるように、中心にランプを付けるか、円周上のランプを少し光らるとかしないとダメですね。中心部分に何も無いとさびしい事もあり、コスト見合いなのですが今回は中心部に数値情報を表示するようにしました。表示する情報は、絶対これでなければならないと言う物はなく、何でも良いでしょう。今回は、時(とき)の情報を全て表せる様に、日付を表示するようにしました。年ではなく曜日が良いかもしれません。
大きさは直径200mm位、発光色は白もしくは緑にしたいのですが、部品の入手性や作り易さの制約で、直径100mmの赤でやってみます。大分小さくなってしまったのは、LEDの配線の事を考えたら専用基板を起こして配線の手間を減らしたかったのと、とにかくスケールダウンした物でも良いので実際使った時の感触を得たいと思った為です。
これで、外からの見え方が決まりました。
■停電対策
本小物の予想される消費電力からすると、全てを電池で駆動する事は出来ないので、商用電源より電力を供給する必要があります。そのため、停電時の電力供給の為に蓄電デバイスを持たせます。目的からすると、乾電池で良いと思いますが、本当の停電時に残り少なくなっていたりする不安もあり、できれば二次電池です。
夜明けまでは点灯していて欲しいので、最悪12時間(夕方から明朝)分の電力を保持しておく必要があります。
必要な電力量(概算)は
消費電力×持続時間 = 175mW×12h = 2.1Wh
消費電力 = 電圧×消費電流=5V×35mA = 175mW
消費電流 = 時LED+分LED+7セグLED+制御部 = 35mA
時LED = 1個×20mA÷デューティーレート8 = 2.5mA
分LED = 1個×20mA÷デューティーレート8 = 2.5mA
7セグ = 8桁×8セグ×2.5mA÷デューティーレート8 = 20mA
制御部 = 10mA
なので、コストパフォーマンス的にはNiMH二次電池が適当だと思われます。単4サイズ0.8Ah×3本は2.88Whなので、これ以上のサイズ・本数を要します。
充電方法は、充電時間の制約がない事と、自己放電分の補充が出来る事から、フローティング(トリクル)充電が適していると思われます。注意しなければならないのが過放電で、停電時にバッテリーを新しい物に交換したくなければ、過放電対策が必要です。
■計時
考えなければならない事は、無電源時のカウントと時刻合わせです。
●無電源時のカウント
外部から電源供給とメインバッテリが切れた後のカウントアップをどうするのかです。
・バッテリ保持
サブもしくは大容量コンデンサを使って、カウントを継続できる最小の電源を用意。
カウントを専用のIC、RTC(リアルタイムクロック)を使えば、この問題は簡単に対処。
マイコン内で実現する場合、低電力状態でもカウントできる設計にする必要がある。
大体は、32KHz程度の比較的低速の発振子で低電力分周させ、1秒割込みを発生させる。
別途クリスタルが必要、電源周りも一工夫が必要。
・復帰時、外部から情報を得る
電波時計の技術を使って、標準電波を受信すれば常に正しい日時を得られる。
時刻合わせの問題もクリア。
時刻が合う迄に若干のタイムラグがある。
部品代が高く付いてしまう。(実際どの程度になるか不明)
●時刻合わせ
・標準電波で自動同期
GPS、地上デジタル波に含まれる時刻情報も利用出来る可能性有り
・手入力
人間から入力してもらうので、数字を表示出来る装置と入力ボタンが必要。
数字6桁程度、ボタンは2つあれば良い。表示は問題無し。
テレビリモコンで設定。
リモコンのキーパッドを押した情報を、赤外センサで受けてキーボード代わりに利用する。
複数の種類のリモコンの信号をサポートする必要がある。
選択:「標準電波で自動同期」を使用します。そもそも、停電になる頻度はそう多くない上、メインバッテリで暫くはカウントが持続するので、毎回手入力でも不便はないと思われます。よって、特に対策せずとも良いと言う判断になります。しかしながら、これまでの「小物」では自動同期は案が出るだけで、実際どの程度のコスト、性能、大きさになるのか詳しく検討出来ていませんでしたので、検証と言う意味で良い機会だと考えたのが選択の理由です。
■全体構成
だいたい、次の様な機能になるかと思います。
まず、 全く受信出来ない環境の為に、独立して正確に時を刻む機能が必要です。
次に,1日1回程度の頻度で自動補正で標準電波を受信し「日時」をセットします。
手入力の為に、プッシュスイッチも必要です。壁掛け時計なので、取付されるのが高所ですのでリモコンが良いですが、そもそも使う頻度は極めて少ないので優先度は低いです。
表示部はアナログ風と7セグLEDに出力します。夜間まぶしすぎない様に光量を自動調整する機能を持たせたいと思います。また、電力削減の目的の為にPIR(焦電型赤外線センサ)を使うのも有りですが、人間が動いていないと消えてしまう事になるので、夜見る時計としてはあまり有効ではないかもしれません。
<詳しい設計>
■標準電波受信
ここで言う「標準電波」とは俗に言う長波JJYを指します。独立行政法人・情報通信研究機構(NICT)が、「日本標準時」を電波を媒体として配信しているサービスです。国家予算が厳しいので、永久的に利用出来る保証はありませんが、まず大丈夫と考えます。技術情報はNICTのホームページで公開されています。
標準電波受信用のICが入手可能ですので、これを利用出来ます。セイコーNPCのSM9501AVの場合は、本体800円にJJY用バーアンテナ700円+クリスタル1波100円+デコード用CPU200円で、合計約1800円の費用が自動日時設定の為に必要です。
適当な部品を探している時、AMラジオ用のICが使えるのではないかと気がつきました。これを利用出来れば大幅に簡略化できるので好都合です。ワンチップAMラジオICのUTC7642を調べてましたが、やはり中波用に設計されているので、長波での使用は無理がある様です。ダメ元で、40kHzに同調するような定数のコンデンサに変えてみたら、出力されたのは近所のAMラジオ局の音声でした。
汎用部品で組む場合は、もっと安く出来るでしょうか?
ちょっと、調べてみまました。色々な回路構成がある様ですが、一番単純にすると次の形になると思います。
アンテナで電磁波を電気に変換し、
その微小信号を次段で処理出来る位迄アンプで増幅、
その中からフィルタで必要な信号を取り出し、
JJYプロトコルを解析し日時情報を取り出すという感じです。
性能アップや部品数を減らす為に、複数段になったり複雑になったりしますが、基本はこれです。
●JJY信号
国内2カ所から送信されておりますが、距離の近い福島局をターゲットにします。
どの程度の強さかと言うと、近所のAMラジオ放送局と比較してみます。
電界強度は、NICTが提供しています電界強度予測値計算プログラム「Field Strength Pro」を使い、2010年5月での予測値です。100kmしか!離れていないのですが、約1/7の電波の強さしかありません。AMラジオより大分感度が良くないといけない様なので、簡単にちょこっと作るという訳にはいかないかも。
そうなると、実際JJYを確認してみたくなります。長波帯を受信出来るラジオやスペクトラムアナライザは持ち合わせていないので、色々な情報を探している内に良いものを見つけました。PCのサウンド機能を利用した、スペクトラムアナライザ(バンドスコープ)です。具体的には、ドイツ製のフリーソフトウエアで「Spectrum Lab」という物です。スペアナとしての機能だけでなくラジオとしても使え、音声が出せます。ただ、帯域は長波帯程度に限られます。
これに、缶ビールの段ボール箱に園芸用の電線(100¥)を巻き付けて作った簡易ループアンテナ(マグネチックループアンテナでインターネット検索すれば情報が得られます)を、福島方向に向け、PCのマイク入力に接続しました。ミニピンジャックは手持ちがありましたので、本当にそれで繋いだだけです。
見えました!色々ありました(*1)が40kHzの所にJJYを確認できました。意外と強力です。ここに、赤ひし形を合わせるとビート音も聞こえて来ます。短波で放送されていた時のJJYのようにも聞こえますが、人間のアナウンスは入りません。(そんな事言っても、今時判る人はいないですね)ワイヤアンテナでも受信できましたが、安定した受信が出来ない様ですので、段ボールアンテナを窓際に置くのが確実だと思います。屋内では絶対的に電波が弱く、家電等の電子機器から出ている信号が邪魔するので、窓際でないと難しいでしょう。
注意:*1 サウンド入力のサンプリング周波数が96kHz以上ないと40kHzを正しく観察できないので、PCサウンド機能の仕様に注意が必要です。1〜2年以内のPCであれば大丈夫だと思いますが、古いものはほぼダメです。また、ソフトウエアの設定が若干必要ですが、日本語サイトで判り易く説明している所があります。残念ながら、60kHzのJJYを見るには高性能なサウンドカードが必要な様です。
●アンテナ
通常、空中を飛んでいる数々の電磁波の中から、ある程度選んで電気信号に変換する部分です。
ループアンテナ
扱うのが長波帯で、波長が長いのでかなり大きな物になります。
性能の良さは、段ボールアンテナで実感していますので、捨てがたいのですが、小物では小型化が難しいと思われます。
バーアンテナ
理論まで理解できませんでしたが、要はループアンテナをコア材料で小型化・性能向上したものとの事。
通常、コンデンサと組み合わせて共振回路を構成し、選択機能(フィルタ)を持たせられます。
ワイヤアンテナ
ループアンテナよりデカくなるので論外。というか、余計な信号を拾いまくります。小物では使う場面なし。
小物での使用を考えると、バーアンテナしか選択肢がないと思われます。
最近は、バーアンテナは入手しにくく高価な部品になっています。
メーカor販売元
型番
簡単な仕様
価格/販売店
トライステート
MITSUMI CL80B?
電波時計用、600μH
700円/秋月電子通商
あさひ通信
SL-55GT
AMラジオ用、330μH
400円/共立エレショップ
アイコー電子
PA-63R
AMラジオ用、360μH
330円/共立エレショップ
アイコー電子
BA-200
AMラジオ用、330μH
210円/千石電商
アイコー電子
BA-670
AMラジオ用、670μH
399円/マルツパーツ館
?
AM-88
AMラジオ用、620μH
525円/ 千石電商
現在比較的入手し易い唯一の電波時計用の製品は、トライステート(ミツミ?)の物しかありませんが、安い秋月でも結構な値段になっています。中波AMラジオ用のバーアンテナが使えれば、小型で作り易いのですが、性能上使えるかどうか判りません。自分で、フェライト棒に電線を巻き付けて作る手もありますが、再現性やLCR,Qメータといった測定器が必要になってしまうので、敷居が高い手段です。不安ですが、AMラジオ用の部品にチャレンジしてみる事にしました。
●アンプ
扱う周波数は、50kHz辺りなので高周波と言うよりは音声帯域に近く、難しい部分は少ない(ない?)と考えました。ただ、安いオペアンプでは帯域不足のようなので、ちょっと高めの品種になりそうです。
バーアンテナから出てくる電力は極めて小さいでしょうから、最終的なデジタル処理できるまで増幅するにはかなりの高倍率を要します。AMラジオ用ICを参考にすると、LMF501(ミツミ電機)は電力利得が70dBなので約3000倍(dBから倍数への変換:10^(dB/20):10^n=10のn乗)、山形ではラジオ放送比で1/7程度の信号レベルなので、少なくとも30,000倍の増幅をする必要がある事になります。これだけの、高倍率の増幅を行うとなると、発振等の問題が出て来そうです。
●フィルタ
同調回路はフィルタ機能とは言え、これでは十分ではありません。小さな信号源であっても、近い位置にあれば、かなり強い信号として入って来ます。実際、次の様な感じです。これは、SL-55GTと言うバーアンテナにコンデンサ45nF(0.045μF,45000pF)を取付け約40kHzの同調回路を形成して見たものです。
段ボールループアンテナでは、-90(信号)/-110(雑音)dBでしたが、-100/-110dBと大分信号レベルが小さくなり、もっと問題なのが5kHz上に-70dBの強大な信号が存在します。この画面は比較的綺麗な方で、実際はもっと荒れた状況を見る事になります。ちなみに、この信号はPC用の液晶ディスプレイから発せられていたもので、大体の電子機器は大なり小なり信号が出ているようです。
これを排除するには、かなりエッジの効いたフィルタを用意する必要があります。専用ICでは、クリスタルフィルタを使う方式にしているのが殆ど(全部)ですが、この様な状況に対するためかもしれません。
●デコード
変調を解けば「タイムコード」と呼ばれる、シリアル通信のような0/1のデジタル信号になります。通信速度は約1bpsと、ゆっくりしたものですので、マイコンのソフトウエア処理で容易に変換可能と思われます。
逆に、転送速度が遅く1情報1分と長いのでエラーリカバリに時間がかかってしまいます。何らかの工夫が必要かもしれません。
●回路構成
それでは、実際の回路を考えてみます。特定の周波数の0/1の情報を取り出すだけ(!?)ですので、単純な回路に出来そうな気もしますが、AMラジオを参考にさせてもらうと、次の様な構成になるようです。
レフレックスや再生式は、部品を削減するための工夫なので割愛しました。
①ストレート方式
バーアンテナ → 高周波増幅 → フィルタ → 復調 → 低周波増幅 →
②スーパーヘテロダイン方式
バーアンテナ → 高周波増幅 → 混合 → フィルタ → 中間周波増幅 → 復調 → 低周波増幅 →
|
発振器
③ダイレクトコンバージョン方式
バーアンテナ → 高周波増幅 → 混合 → 低周波増幅 →
|
発振器
実装の仕方として、ハードウエアだけでなく、途中からソフトウエアで信号処理してしまう方式もあります。
各方式の説明は、他にお任せします。①が単純で魅力的に見えますが増幅で問題が出そうです。性能が出し易いのが②との事ですが、使用部品は多めです。 ③は今ひとつ理論についていけないので対応出来ませんでした。
ソフトウエアパワーを使うとした場合、少なくともマイコンで処理出来るぐらいまで増幅するハードウエアは必要で、40kHzの信号処理を行うので、高速なA/D変換器と、まずまずのCPUもしくはDSPも必要かと思います。この実装は非常に興味深いのですが、今回は、RF回路を学ぶ良い機会なので、ソフトウエアでの対応は先送りと言う事にしたいと思います。
結局、試行錯誤的になりますが、とりあえず①を試して、ダメだったら②で進める作戦で行きます。また、試行錯誤しやすいように、ハードウエアの自由度が高いPSoCを選択します。
ここで、概算費用を算出しておきますと、AMラジオバーアンテナ400円+Trアンプ200円+PSoC400円、うまくいけば日時情報受信部は1000円程度で済むかもしれません。
これに行き着く迄に、何十枚もメモを描く事になり、最終的な回路は以下の様になりました。
①ストレート方式はやはり発振を抑える事が出来ず、オーソドックスな②ヘテロダイン方式になってしまいました。
若干説明しますと、
バーアンテナは、性能上不利なのですが入手性・小型化のを重視しAMラジオ用のアイコー電子BA-670にしました。コイルボビンを動かせるので微調整する事が出来るのと、中間タップの巻き線比が大きいので出力電圧を稼ぎ易いためです。良くない使い方なのですが、バイポーラトランジスタで受けてしまっているので、ベース電流により共振回路への影響が出てしまっています。計算上の共振周波数(f=1/(2π√LC))ではコンデンサが24nF位になるはずなのに、実際は26nFになりました。このせいでQが悪くなっていると思われます。FETで受ける回路も試行しましたが、ノイズ問題があってこの形にしています。
初段の高周波増幅は、トランジスタを使いました。これは信号/雑音比を稼ぐ為です。最初は部品数を増やさない為に、PSoC内のアナログブロック(PGAやINSAMP)を使いましたが、本格的なソフトウエア処理を加えると内部雑音を抑え込む事ができず実現できませんでした。そのため、外付けで低雑音・高倍率の増幅をする作戦としました。この為のコスト増は、汎用NPN品の2SC1815が使えましたので、+50円程度で済みました。電源は100Ωの抵抗を通していますが、これはRCフィルタで電源から入る雑音を低減させる目的です。また、受信を行わなくとも約3mAのバイアス電流が常に流れてしまいますので、PSoCのピンから電源を取る様にし、必要な時のみオンする事により電力節約します。以下の図はトランジスタの出力です。-80dB(信号)/-100dB(雑音)のレベルまで引上げ出来ています。なお、この図以前のPCスペアナのマイク入力は直結でしたが、この図からPCからのノイズが入らないように2SK241を使用したフォロア回路(sc00dad32f10.jpg)を通していますので、信号レベルの基準が異なります。
二次高周波増幅以降は全てPSoC上に形成しています。今回はPGA(非反転増幅器)+AMPINV(反転増幅器)を組み合わせて1〜100倍程度まで増幅します。これらの実態は、オペアンプなので入力オフセット電圧がいくらかあります。データシートによると4.5mV程ですが、最大100倍時には+450mVオフセットされてしまう事になり、稼働レンジを17%失います。そこで、オフセットキャンセル対策を行う事にしました。今回は、アプリケーションノートの「AN2320 Offset Compensation for High Gain AC Amplifiers」の方法です。若干外部部品が必要になりますが、AGNDを外部に出力しなくとも済みますのでピンを節約出来ます。PGAとAMPINVはゲインを動的に変更する事が出来ますので、AGCをソフトウエアで実現できます。下の図は15×16=240倍での出力です。40kHzに線が無い様に見えますが、色合いで見にくいだけです。-30dB(信号)/-50dB(雑音)のレベルまで引上げ出来ています。
混合器と初段のフィルタが、PSoCでは一体で実現出来ます。ヘテロダインをPSoCで実現する方法は、アプリケーションノート「AN2111 heterodyne with quadrature outputs psoc style」に従いました。 実体をBPF4と呼ばれるバンドパスフィルタにしました。設定パラメタに、変調信号の入力を指定する事が出来ますので、周波数変換機能を簡単に付加させる事が出来ます。与える変調信号はデジタル(矩形波)なので、好都合、発振器は簡単なカウンタ/タイマで済みます。中間周波数値を3kHzに設定したのは、高調波の影響が出にくいと思われる物を何種類か試した結果です。また、可聴周波数でもあるので、確認し易いのではないかと思いました。バンドパスフィルタについては、可能な限り余計な信号を排除したかったのですが、1段だけでは十分に減衰させる事が出来きません。そこで、2段重ねてフィルタ能力を上げるようにしましたが、これでも十分とは言えません。下の図が出力で、3kHzにJJYが移動している事が見て取れます。
3kHzの信号なので音声として聞けるはずです。PCのライン入力につなぎ、取込んでみました。
復調回路は、AM変調の場合、包絡線検波が一般的で、ここでもこの手法を使っています。具体的には、全波整流(半波でも可)して、ローパスフィルタをかける方法です。判った様な事を書いて済みません、これもアプリケションノート「AN2044 Signal Rectification, using Switched Capacitor Modulators」に従い、PSoCでは一体で実現出来きます。
今回はLPF2に変調信号を与える事により実現出来ました。変調信号に、入力信号の符号与える事により、全波整流になります。符号は、コンパレータでAGNDと比較する事により簡単に得られます。このコンパレータは、通常のユーザモジュールを使わず、PGAに内蔵されている物を使いましたが、これはモジュール配置の制約を回避するためです。また、残念なのですが、LPF2での変調入力指定と、PGAのコンパレータ機能の有効化については、特殊な方法(レジスタを直接操作する)を使う必要がありますので、敷居が高い所です。
下の図はオシロスコープで、復調前(赤)、復調後(黄)の信号を観察した様子です。
復調前の信号を見て判る通り、あまり受信状態が良くない時のものなので、例としてはふさわしくありませんが、黄色の波形で左からデューティーが80%、50%、80%、80%と並んでいるのが何とか読み取れると思います。JJY信号は、1波1秒間隔でデューティー50%=1、80%=0、20%=ポジションマーカーの識別となります。
ところで、復調前の赤色の波形にJJYの信号が含まれていると読み取れますでしょうか?最初の頃は、オシロで簡単に観察できるものと思っていたので、何をやってもJJY信号が出てこない事に困惑していました。JJYが放送されていないのではと思った程です。重要なのは波形ではなく、周波数成分だと改めて認識させられました。スペアナが無ければ、開発を諦めていたと思います。
PSoC内部のオペアンプは40kHzを越える周波数を扱う場合、パワーレベルをHIGHにする事が推奨されています。そのせいで、受信中の消費電流は約100mAも流れます。1日5分程度の事なので、全体の消費電力としては大した事は無いと考え、特に節電対策は行っていません。
実は、苦労したのはここからで、デジタル処理を付け加るとノイズが増えて来て、小信号を扱っていると言う事を再認識させられます。
PSoC自身で発生するノイズもあり、これはパスコンである程度押さえ込めますが、CPU処理内容によってはかなり出て来ます。単純な処理を繰り返しているとノイズは目立たなくなります。M8Cではchar型のカウンタで空ループさせると一番少ないようです。
気をつけた方が良いのは、使用したキャラクタLCDモジュールが、丁度40kHzにかぶる信号出てくる事があり、受信回路に入り込んでしまいます。もちろん表示更新するたびにノイズは出ますが、表示しているだけでも、また出力内容によってノイズパターンが変わったり、電源電圧によって周波数が変位しましたので、LCDの駆動信号と考えられます。LCDモジュール本体を薄いアルミ板でシールド(要GND接続)すると効果的でした。また、表示更新時のノイズはPSoCからのLCDにデータを送り込む時の信号だと考えられます。これは、PSoCの出力ピンの設定でStrongをSlowに変更すると軽減できました。
■表示部
72個の単体LEDと7セグメントLED8個の、総数136個のLED素子を駆動する回路です。
ダイナミック表示する場合、最小で縦12+横12=24線要します。デユーティーレートを1/12からもう少し上げたいのと、ソフトウエアでの制御をやり易くするため、針表示と7セグ部分を分けて、針:縦8+横8=16線、7セグ:縦8+横8=16線、合計32線で考えます。
マイコンで直接制御するには、足の多い品種を使う必要がありますが、入手しにくいものは使いたくはありません。次の様な方法を検討してみました。
10本程度のポート数が用意出来るのであれば、汎用ロジックICの3-8デコーダを使う方法が単純かつ安いのですが、ポート数を増やしたくない条件では、ATtinyを使ったものが良いと言う結果になりました。今回はLCDモジュールも付けたかったので、ポート数の少ない後者を使います。これだと7セグ表示を付けても、I2Cバスなのでポートを共有出来るので2本で済みます。ATtiny側の制御ソフトウエアは、本サイトのTIPS「I2C接続7セグLEDドライバ」にあります。
ダイナミック表示なので、通常パルス条件でLED駆動しないと十分な輝度が確保できませんが、暗い部屋を想定しているので、手を抜いて一般的な20mA/セグメントにしました。共通線には、最大20mA×8=160mA流れるのでトランジスタを入れて補強します。使用したLEDの性能が良かった事もあり、問題ない光量でした。データシートが残っている様なLEDであれば、使える使えないがある程度判断出来ますが、現物しかない場合、よく確認しておいた方が良いでしょう。次の写真は手持ちの2V系LEDに20mA(直列接続なので全て同じ電流値のはずです)を流した時状況です。
同じ電流を消費しているのに、かなり輝度が違うのが判ると思います。(カメラと目で見た感触は若干違いますが)中央の明る赤緑はOSxx5113A、近い位置の小さいものがOSxx3113Aです。昔、ミックス袋で買っておいたようなLEDは全部これより暗いのにはがっかりしました。最近の物は、価格に対する輝度が良くなっています。右の表はLED探しした時のメモです。
7セグ部分のGL9A040Gは、マイコンから6桁をダイレクトドライブさせても良好な表示が出来ていたので、もっと手を抜いて8桁ダイレクトにしてしまいましたが、やはり掛け時計で使うには光量不足でした。改良時は要増強です。
予期していた事とは言え、ダイナミック表示で発生するノイズでJJY受信が出来ません。パスコン盛りやシールド板等を試しましたが、大きな改善になりませんでしたので、受信中はダイナミック表示を止める対策としました。
■電源部
外部から電源供給する必要がありますので、商用AC100V電源からDCを得る事とします。ACアダプタの出番となりますので、今回も汎用性の良いUSB-ACアダプタを選択します。入手性・価格、良好です。
概要設計通り、バッテリは最小限の単四型を3本、停電時は3.6Vでの運用とします。
複雑さをいとわなければ、PSoCのSMP機能+外付けFETで電池本数を単三2本に減らす事も可能ですが、コストを大きく減らす事は出来ないと思われます。
充電回路と過放電防止は以下の様に考えました。
フロート充電では10mA以上にならない様に抵抗器で制限します。充電電流は、だいたい1%の充電レートとしました。これは、充電完了迄の時間は別に急ぐ物でもありませんし、常時流れる電流が少ない方が充電池の寿命が延びるので、自己放電を補う程度の少なさで良いと考えました。放電方向では制限抵抗をパスする様に、ダイオードを付けておきます。
一応、ACアダプタ側に戻って行かない様に、ここにもダイオードを入れておきます。
過放電防止は、MOS-FETのカットオフ電圧(データシートにはVGS(off), VGS(th)等と表記されている)を利用して、バッテリの電圧が設定を下回ったら、電流が流れない様にします。発想としては単純ですが、都合良いFETが無いのがネックです。VGS(off)値もさることながら、個体差の幅が大きい品種ばかりなので探すのが大変です。なお、分圧抵抗等で調整しても良いのですが、僅かですがバイアス電流を流さなければならないので、放置すればいつか過放電してしまうので要注意です。
ほとんどのUSB-ACアダプタの出力には、大きなノイズが乗っており、排除するのに苦戦しました。製品によって発生するノイズパターンが異なるのも面倒な所です。単純なバイパスコンデンサで、ある程度は小さく出来るのですが、減衰量は十分ではありませんでした。そこで、部品代との兼ね合いですが、出来るだけ低周波までカットするラインフィルタ、要はコイル系の回路でノイズを減らす事になります。これで、だいたいのUSBアダプタで使える様になりましたが、それでもダメな物もあります(使ってみないと判らないのがつらい所)。PCのUSBポートの方がノイズが少ない位です。
■制御部
設計中はPSoCで確認して行きましたので、そのままPSoC1を使用する事とします。
メモリは10KB程使用する見込みですので「CY8C27443」となります。
<回路図>
ハンダ付けがしやすい様に、SMD(表面実装部品)はあまり使わず、リード型の部品を選定してあります。また、出来るだけ入手しやすいもので、種類も少なくしたつもりです。本当は、SMD部品の方が安いのですけどね。
<部品表>
細かいので、クリックして拡大して下さい。
USB-AC電源アダプタ、基板関係、ケース、送料/交通費を除きます。
合計2800円です。
<ソフトウエア>
■開発に必要な物
Windows PC(パソコン)
Cypress Semiconductor PSoC Designer 5.0 (*1)
ImageCraft C compiler Release V7 (*1)
Cypress Semiconductor PSoC Programmer 3 (*1)
PSoC MiniProg 等のプログラム書込み器
*1: Cypress社のサイトからダウンロード可能
■コンフィギュレーション
これだけでは分りにくいと思いますので、補助図を以下に示します。 詳しくは、プロジェクトファイルをダウンロードして開いて下さい。
空きブロックはデジタル、アナログそれぞれ1つありますし、VC3は未使用なのでカウンタを減らしたり、AGND出力をレジスタ操作してブロックを使わずに済ます方法もありますので、もう少し機能を追加する事も可能かと思います。
■属性定義
私のPCだけかもしれませんが、BPF4のフィルターウイザードが誤動作するので、実際のパラメタ設計はExcel版で行い、Cxxパラメタに入力しました。Qを稼ぐ為にBandwidth値を小さく設定しC2を変えて調整しますが、指定通りのQにならないし、中心周波数も変わったりするのでるので、Centerをわざとずらしたり、色々試行錯誤してもあまり改善されません。結局、判り易い様に単純なパラメタにしてあります。
■ソースコード
C言語にてコード化しております。ソースファイルは main.c , t_sprintf.c , t_sprintf.hの3つです。main.c にローカルなサブルーチンや割込ルーチン等、全てのアプリケーションコードが記述されています。 t_sprintfはstdioのsprintf()のサブセットで、デバッグ用LCD表示の為に使っています。
メインのフローチャートを以下に示します。
無限ループが1つあるだけの簡単な物です。ループは一定時間間隔ではなく、通常時は1秒単位、時刻合わせ中は待ち無しに回り続けます。時刻合わせ中は、タイマカウンタ値を見て1/8秒に回毎にJJY受信処理に飛ばしています。
JJY受信では、1/8秒毎にA/D変換で信号レベルを読取り、AGC処理と、タイムコードのデコードを行います。AGCではしきい値をハイ/ロー2つ用意し、信号平均値(流動)がハイを越えていた場合はゲインを1つ下げ、ローを下回った場合はゲインを1つ上げるという単純な処理です。ただし、デコード中にゲインをコロコロ変えると影響がありますので、一定時間間隔となるようにします。また、1回のゲイン変化量は少ない方が良いのですが、 PGA,AMPINV の設定は細かくないので、1.5倍ステップにしています。
デコードも単純に考え、しきい値で二値化し(LED_1ピンにデバッグ出力しています)立ち上がりタイミングを検出します。そこを基準として8個の二値データ、つまり1秒間の信号の変化をテーブルに当てはめ、長音・単音・マーカ音・不明の4種類に分類します。あとは、10秒を1フレームとして日時情報を組立て、毎分59秒時にサムチェック等を行い問題なければ時刻をセットします。エラーの場合、最大3回リトライします。1分間:6フレーム連続全てノーエラーというのは、信号レベルが低いと、条件としてかなり厳しいので、フレーム単位でエラー/ノーエラーを管理して全ての情報を受信できたかどうかを判断しています。ただし、エラー検出情報は時と分にしかありませんしパリティチェックなので検出精度が低く、複数回受信した結果の突き合わせ等の工夫をした方が良いのですが、この辺りは実装されていません。
ちなみに、設定した午前3時33分は、古典的なUNIXコンピュータの時刻同期を行う時刻に習い、また多くの人はぐっすり眠っていると思われる時刻と言う事で、これに決めました。
キャラクタLCDが付いている場合、次の情報も表示します。デバッグ情報としてですが...
1行1〜8桁目は年月日、2行1〜8桁目は時分秒。
JJY受信中は、1行10桁目がリトライの残り数、11〜16桁が受信状態を1桁=10秒1フレームで表示(■が正常受信、0/1/?が受信中、Xがエラー、Sがサムチェックエラー)し、受信完了すると■■■■■■となります。
2行10桁目がAGCレベルを数字1桁で表し、11〜16桁にバーグラフで受信している信号レベルをリアルタイム表示します。うまく受信出来ている時は、バーグラフが1秒毎に大きく振れます。
<ダウンロード>
ライセンス: フリーソフトウエア(GPL v3)
作成者:富樫豊彦 tog001@nifty.com
開発環境:
Windows2000 SP6 / VMware Fusion 3.0.2 / Mac OS X 10.5
CadSoft Computer EAGLE 5.6 Light Edition for Mac
Cypress Semiconductor PSoC Designer 5.0 (SP6 Build1127)
ImageCraft C compiler Release V7.02
Cypress Semiconductor PSoC Programmer 3.06
Cypress Semiconductor PSoC MiniProg
<基板>
単体LEDが60個、7セグ×8個と配線量が多いので、専用プリント基板を作りました。表示基板と制御基板の2枚構成です。それぞれ、二層で設計していますが、1層目分をジャンパ線で配線すれば片面基板でいけます。なお、キャラクタLCDモジュールのコントラストを決める半固定抵抗は、本基板上ではなくLCDモジュール上に半田付けする方法にしていますので、LCDモジュールの加工が必要です。
基板設計ツールは、Cadsoft社のEAGLEと、表計算ソフトを組み合わせて作っています。EAGLEはフリー版ですので、作成出来る基板サイズに制約があり、直径100mmの表示基板は作れません。そこで、LEDの円形配置する部分は、表計算ソフトで作成し、PDF上で合成する作戦を取りました。意外とうまく行きました。
制御基板の表と裏
表示基板の表と裏と、アルミシールド板装着状態
テスト表示させてみた所
<ケース>
使用した材料。塩ビパイプと乳白色アクリル板。
塩ビパイプをカットして黒で塗装。アクリル板は円形に切り出し、パイプにぎっちりはまる様に紙ヤスリ等で大きさを調整。接着しなくとも良い位にかなり強引にはめ込みました。2010年も黒枠に白パネルのスタイルです。
基板を装着。固定は両面テープで適当に。裏蓋は特に作らない。
<使用状況>
左下は市販時計、右下は試作品です。
夕方、夜、真っ暗時の見え方。
<性能検証>
■受信感度
数値的な確認は出来ませんでしたが、市販の電波時計と比べると同期確率はやや悪いです。窓際や木造建物のように電波の通りが良い場合は問題ないのですが、鉄骨構造の建物の中央は、ほぼ同期されません。感度が悪い事は、ブレッドボードでの実験中に判りました。屋内の信号レベルが1桁以上低くなるという事実を知らなかったので、設定した増幅率が不足したためと思われます。また、屋内では関係ない信号源も多数入り込みますので、この対応もしなければならず、基本から設計を見直さなければなりません。しかしながら、取付けるつもりの外壁に近い位置では、安定して同期出来きていましたので、この設計でとりあえず使ってみる事にしました。
関係ない信号の影響が大きいようなので何らかの対策を行った方が良いと思われます。最初の入力段であるバーアンテナの選択性能を上げれ効果的でしょうし、帯域を絞り込む為にBPFを重ねた位では不十分なのであれば、より急峻に絞れるクリスタルフィルタやデジタルフィルタ等にする検討が必要です。やはり市販品の回路構成がコスト・性能上ベストなのですね。
<関連>
<あとがき>
突然ですが「真っ暗闇」と言うのを体験した事はありますでしょうか?左右はもちろんですが、上下さえも分らなくなる位の闇です。田舎では新月の夜に電灯を消すとすぐ真っ暗になりますので、この感覚は分って頂けると思いますが、いつも薄明るい都会で暮らして来た方は衝撃的な出来事になるかもしれません。今、電気が通じなくなると、まずこの状態になります。日本では、電気が極めて安定していますので、このような状況は災害位しかないと思い、このような小物はきっと有用だと考えました。
初めてのアナログ高周波回路は、かなり大変でした。確認するたびに違う結果が出るので、ほとほと疲れました。考えなければならないレンジが広すぎます。開発途中、何度となく壁にぶつかり諦めかけた事もありましたが、とりあえず当初考えていた最低限の機能は実現出来、と・り・あ・え・ず・満足です。
デバッグのため、秒針表示を付けましたが、思った程うるさく感じなかったのでそのままにしています。アナログ針式と違い全くの無音なので、山形の夜もぐっすりです。
hayakawaさんの「PSoCをつかったワンチップ電波時計の製作」から、たくさんの知識と勇気をもらいました。PSoCにアンテナ直結、外部部品無しでも受信出来ているという事実が、この小物を完成させる原動力になったようなものです。ありがとうございました。
2011.3.13 3.11震災に起因する原子力発電所の問題のためJJY福島局は停波しているようで、ずっと“unsync”表示のままです。実は、2011年1月ぐらいから、それ以前では全く無かった受信エラーが出る様になっていたのです。本当に地震の前兆としての影響なのか今になっては判りません。もう少し真面目に、受信実績情報を記録する仕組みを持たせなかったのか後悔しています。
2011.4.21 家に帰ると”unsync”表示ではなく、今日の日付が出ていました。おかしいと思いつつ、jjy.nict.go.jpのサイトを確認すると今回は大きく再開のアナウンスがあったので、正しく同期してくれたようです。あまり、この様な長期間同期出来ない状況を想定して設計した訳ではないのですが、問題なく動くと嬉しい物です。
富樫 豊彦 tog001@nifty.com
Wall Clock for dark room.
Circle dot display, auto adjust by radio wave, anti power down.
Photo: Today is “TANABATA” night.