ウィークリー・タイマーです。市販の24時間タイマーでは不便を感じ、製作しました。
電子機器を時間帯に応じて自動的にON/FFします。
例えば、ADSLモデムや無線LANなど使用しない深夜時間帯に自動的にOFFにします。
基板はOLIMEXに発注しました。
時刻機能 PIC24FJの内蔵RTCC機能 スイッチ間隔 曜日ごとに10分単位 最大制御電流 5A
- 時刻に応じてAC電源を自動制御
- 週単位のスケジュール制御
- 10分単位でON/OFFを設定
- 時計機能、カレンダー機能
- 強制ON機能
- 祝日制御(日曜と同じ扱い)
- トランスレス電源でAC100Vから直接DC3.3Vを生成しています。感電にご注意ください。
- LCDを3V電源で使用しているため、コントラスト不足となります。コッククロフト回路でマイナス電源を供給します。
- LEDでON/OFF状態を確認できます。
値 数 備考 PIC24FJ64GA002 1 IC1 マイクロチップ MAX600 1 IC2 AC-DCレギュレータ、代替品MAX610 SC1602 1 LCD1 16x2行表示 10K 2 R1,R3 カーボン皮膜抵抗1/4W 15K 1 R2 カーボン皮膜抵抗1/4W 510 1 R7 カーボン皮膜抵抗1/4W 330 1 R5 カーボン皮膜抵抗1/4W 100 1 R6 カーボン皮膜抵抗1/4W 47 1 R4 カーボン皮膜抵抗1/4W 1M 1 R8 カーボン皮膜抵抗1/4W 10pF 2 C1,C2 セラミックコンデンサ 33pF 2 C3,C4 セラミックコンデンサ 0.01uF 2 C5,C6 セラミックコンデンサ 10uF 1 C7 縦型電解コンデンサ(耐圧16V) 47uF 2 C8,C9 縦型電解コンデンサ(耐圧16V) 1uF 2 C10,C11 ポリプロピレン・フィルムコンデンサ(耐圧250V) LED 1 LED1 3mm黄色 1N4148 2 D1,D2 汎用シリコンダイオード 32.768KHz 1 XTAL1 CF-308, シチズン MCP3022Z 1 PHOTOTRIAC ホトトライアック、代替品MOC3041 TMG20C6F 1 TRIAC トライアック、代替品BTA24-600CW CNR07D151K 1 ZNR1 サージアブゾーバ 5A 1 FUSE ミゼット
- 4ボタンで操作します。
mode,set,+,-- 時刻設定
年、月、日、時、分、秒- タイマーのON/OFF設定
週、時、分(10単位)- 強制ON
ON/OFF- クロックのキャリブレーション
[-128,+128]
祝日のポイント
- 開発はMPLAB, C30です。
- PIC24FJは内蔵発振8MHzで動作しています。
- コントラスト用のクロックはタイマ2のPWMで10KHzを生成しています。
- RTCC機能で時を刻みます。
国民の祝日
- 祝日は固定ではない。
成人の日=1月の第2月曜日
春分の日、秋分の日は地球の公転周期により毎年変わる。- 振り替え休日は月曜固定ではない。
祝日直後の平日のため、祝日が続くと振替休日が移動する。- 特殊な「国民の休日」
祝日と祝日の間の平日を休日とする。
以前は5月であったが、現在は9月のみ発生する可能性あり。
国民の祝日 現在(1948年以降) 昔 元旦 1月1日 成人の日 1月の第2月曜日(2000年以降) 1月15日(1999年以前) 建国記念日 2月11日(1967年以降) 春分の日 3月21日前後 昭和の日 4月29日(2007年以降) みどりの日 5月4日(2007年以降) 4月29日(1989-2006) 憲法記念日 5月3日 子供の日 5月5日 海の日 7月の第3月曜日(2003年以降) 7月20日(1996-2002) 敬老の日 9月の第3月曜日(2003年以降) 9月15日(1966-2002) 秋分の日 9月23日前後 体育の日 10月の第2月曜日(2000年以降) 10月10日(1966-1999) 文化の日 11月3日 勤労感謝の日 11月23日 天皇誕生日 12月23日(1989以降) 4月29日(1988年以前) 振替休日 国民の祝日が日曜日となった日の後の最初の平日(2008年以降) 国民の祝日が日曜日となった日の翌日(1973-2007) 国民の休日 2つの祝日に挟まれた平日(1988年以降)
PIC24FJのRTCC機能のポイントタイマーON/OFF制御のポイント
- 自動的に曜日を判断しないため、曜日設定に工夫が必要
曜日のつじつまを合わせる必要がある。
ツェラーの公式(西暦から曜日を算出)を利用。- 2099年まで自動閏年補正するが、設定時に工夫が必要
閏年ではない年でも2/29を設定できてしまうため。
基本的に4で割り切れる年は閏年。
ただし、100で割り切れる年は閏年ではない。
ただし、400で割り切れる年は閏年。- 時刻較正することで月差3秒以内(キャリブレーション調整)
- 曜日ごと、10分単位でテーブルを用意
- ON/OFFの状態を設定、保持
- 時刻に達すると設定状態に応じてAC制御
- 祝日は日曜日のテーブルを参照
PIC24FJ64GA002でRTCCを利用したところ、時刻が1時間に1秒程度進む(+278ppmに相当)という不可解な現象に見舞われました。(C)2010 All rights reserved by Y.Onodera.
テスト中は気づきませんでしたが、本格稼動をはじめて発覚しました。
使用した水晶はシチズンのCF-308(32.768KHz)です。
この誤差はRTCCのキャリブレーション範囲(260ppm)を超えており、補正のしようがないほど大きいものです。
(RTCCの補正機能についてはAN1155を参照のこと。)
CF-308の仕様
公称周波数 f0 32.768KHz 周波数偏差 Δf/f0 ±20ppm 負荷容量 CL 12.5pF 動作温度範囲 T -20C〜70C 頂点温度 Tm 25C±5C 周波数温度係数 β -0.034±0.006ppm/C 等価直列抵抗 R1 35K(max) 励振レベル DL 1uW(max) 経時変化 Δf/f0 ±3ppm(max) Q値 Q 85000(type) 並列容量 C0 1.6pF(type)
- 負荷容量CLマッチングを疑う
まずは定番として負荷容量CLマッチングされていないことを疑いました。 水晶の発振は指定された負荷容量を掛けることで周波数が安定するように設計されています。 時刻が進むということは遅らせる必要があるため、マッチング用のコンデンサC1, C2を33pFから47pFに変更してみました。 (逆に時刻が遅れる場合にはC1,C2を小さくします。) しかし、効果はみられませんでした。 どうやら負荷容量マッチングの問題ではなさそうです。 本格的な調査が必要となりました。- 励起レベル(ドライブレベル)を疑う
RTCC用セカンダリ発信器は低消費電力発振のため、高インピーダンスの測定器を利用しないと接続した途端に発振が停止してしまい測定できません。 案の定、手持ちのオシロスコープでは発振が停止してしまいました。 そこで高インピーダンスのオペアンプを間に入れて波形を観測したところ、発振波形の歪みがみられました。 波形も大きめであり水晶をオーバードライブしているようにみえます。 電源電圧Vdd=3.5V(内蔵レギュレータ有効)と標準の3.3Vより若干高めなことが影響しているのかもしれません。 周波数を測定してみたところ、下3桁が不安定でやや高めの値を示していることがわかりました。 どうやらハードウェア的な問題がありそうです。
あれこれ悩んでいたところ、PIC24FJ64GA002のデータシートが改定されており、 コンフィグレーションワード2にSOSCSEL_LPSOSCの設定項目がひそかに追加されていることに気づきました。 この設定は低消費電力(ドライブレベルの低い)の水晶32.768KHzなどをローパワー・ドライブするときに指定するものです。 ただし、これはリビションB以降のデバイスからの追加機能です。 手持ちのデバイスはリビションAのため、この指定は効きません。 古いマニュアルによればPIC24FJのSOSCはローパワー・ドライブ対応のはずです。 ちなみにですが、PIC24FJのエラッタには50件の問題が掲載されています。時間とともに問題が発覚します。
時計用水晶のドライブレベルは通常の水晶(HC-49/Uの場合0.1mW)よりも遥に小さく、最高でも1uWと規定されており、 オーバードライブは周波数の不安定さを招きます。 そこでドライブレベルを下げてみることにします。 具体的にはダンピング抵抗Rdを追加してドライブレベルを下げます。 ダンピング抵抗値Rdの決定はカットアンドトライが必要ですが、CF-308の等価直列抵抗が35KΩ以下ですので、この前後をあたります。 オシロスコープで波形を観察しながら、最適なダンピング抵抗値=47KΩを探し出しました。- まとめ
ダンピング抵抗を追加することで、いままでのことが嘘のように正確な時を刻み始めました。 RTCCの補正なしに24時間の誤差は-1秒(-12ppm)に収まりました(電波時計を基準)。 あとはRTCCの補正で追い込むことができます。 今回、時計用水晶でいろいろ実験し、通常の水晶とはかなり異なっていることを勉強しました。 低消費電力と小型化という特徴が、特殊な水晶特性をもたらしています。 PIC24FJとの相性問題もあり、一般的な負荷容量CLからC1,C2を求める計算式にも若干のずれを生じていることもわかりました。 PIC24FJと時計用水晶の場合は、指定のC1=C2=33pFが最適なようです。 (ちなみにPIC16F84と時計用水晶の場合は、C1=C2=100pFが最適) 加えてPIC24FJのSOSCは若干オーバードライブ気味のようですので、もし時刻が不安定な場合にはダンピング抵抗Rdを追加みると良いでしょう。