Memorandumの小部屋
本ページは金銭授受を伴う行為を含むAuctionや商用Web
Pageからの無断リンク・無断参照を禁じます。
無断リンク・無断参照が判明した時点で然るべき処置をとらさせて頂きます。
50/60Hzはどこにある!!
PICマイコン分周器の製作
1.背景
1970年代にデジタルクロックの自作が流行っていました。 当方もLEDモジュール付きの部品セットを購入して製作して実用に供していました。 しかし、最近は当時のLSIを使用したキットはほとんど見かけません。 現在の技術では、わざわざ当時の時計用LSIを使って時計を作ることはないでしょう。 でしたが、たまたまLM8361を入手してしまいました。 そうなると、部品集めをしないといけません。
【 LM8361外観 】
回路図を調べるとカソードコモン7セグメントLEDが使用できるので表示器は問題なさそうでした。 しかし、時計用のクロック信号は電源同期です。 そういえば、昔は電源同期が当たり前でした。 三洋電機の時計用LSIはそうでした。 下記に当時の時計用LSIの電源同期回路例を示します。 電源は今のように定電圧回路を有しているものは少ないですが、そのかわり電源トランスをほとんどのケースで使用していましたので電源同期であっても簡単に実現できました。
【 三洋電機 時計用LSI 電源同期信号 】
当初は「50Hz超高精度クリスタルタイムベースキット」、「超高精度クリスタルタイムベースキット」を使用すればよいかと思っていましたが、50/60Hzの信号を得るのに結構な配線本数となります。 また、他の標準ロジックを使っても、分周比が大きいため、配線本数や部品実装面積の小さいものが出来そうにありません。
このキット以外に、DDS(「DDSキット」「USBシグナル・ジェネレータキット(USB−DDS) [ #52003 ]」)やPLL回路を利用することもできますが、逆に回路規模が大きくなるだけです。
このため、いまひとつ製作に踏ん切りが付かなかったですが、「24年後の再設計!!! 音声波形モニタの製作」を思い出し、PICマイコンで50/60Hzを作ることのできる分周器を製作することにしました。
2.PICマイコン分周器の仕様
時計用クロックはPICマイコンのクロックを利用することにします。
クロック発信源は外付けの温度補償型水晶発振器に対応できるように、PICマイコンのクロックは外部入力に対応できるようにします。
温度補償型水晶発振器 を使用しない場合は、PICマイコンの発振回路を使用して水晶振動子、セラミック発振子も使用できるよにする。
外部入力信号で、分周を起動、停止できるようにする。 この外部入力信号はLowレベル、もしくは、Highレベルのいずれかで起動、停止できるようにする。
PICマイコンは、省スペースのためにPIC12F683-I/Pを使用する。
分周比はPICマイコンのEEPROMに数値を書き込んで設定する。 但し、分周比の分解能は、PICマイコンの1命令に要するクロック(通常4クロック分)とする。
これらの機能を満足するPICマイコン分周器の試験回路図を下記に示します。
【 PICマイコン分周器試験回路 】
PICマイコン分周器用PIC12F683のピンアサイメントを下記表に記載します。 分周機能起動停止については、以下のようになります。
起動停止入力1と起動停止入力2の両方の条件を満足した場合、分周機能が起動します。
停止時は、停止時の出力状態を保持します。(停止直前のレベル出力時間経過後の場合)
停止から起動に変化した場合、出力が反転する状態から起動します。(停止直前のレベル出力時間経過後の場合)
PIN |
信号 |
方向 |
信 号 |
1 |
VDD |
− |
2.2〜5V (クロック周波数により電源電圧に制限有り) |
2 |
GP5 |
入力 |
外部クロック入力、もしくは、水晶振動子、セラミック発振子接続 |
3 |
GP4 |
入力 |
水晶振動子、セラミック発振子接続。 外部クロック入力の場合は未設続。 |
4 |
GP3 |
入力 |
分周機能起動停止入力2 (Highレベルで起動) |
5 |
GP2 |
入力 |
分周機能起動停止入力1 (Lowレベルで起動) |
6 |
GP1 |
出力 |
分周出力OUT1信号の反転信号。 |
7 |
GP0 |
出力 |
分周出力OUT1信号。 |
8 |
VSS |
− |
GND (電源の−側) |
試験回路はマイコンのデバッグを目的としていますので、いろいろな発振方式にも対応できるようにジャンパーピンを多用しています。 ジャンパーピンの用途を下記します。 なお、実際のアプリケーションでは、試験回路のように汎用性を持たせる必要はありません。
No. |
用 途 |
JP1,JP2 |
水晶発振子を使用する場合、JP1,JP2を短絡することでC4,C5を有効にします。 |
JP3 |
「超高精度クリスタルタイムベースキット」のKTXO−18Sを使用する場合、DCバイアスを印加するためにR1,R2を有効にします。 |
JP4,JP5 |
分周機能起動停止入力レベル設定。 短絡でLow、開放でHigh。 |
分周仕様は、下記の式で表されます。 Foscは外部クロック入力、もしくは、水晶振動子、セラミック発振子の周波数です。 Foutが分周出力OUT1の周波数となります。
Counter1、Counter2はPICマイコン内EEPROMの分周比率設定パラメータです。 各パラメータの説明を下表に記載します。 下記のCounter1、Counter2の範囲でFout範囲が決まります。 特に周波数の高い範囲では周波数分解能が悪くなっていますので、得ることのできる周波数Foutについて注意が必要です。
No. |
説 明 |
Counter1 |
OUT1信号がHighレベルの時間を設定するカウンタです。 |
Counter2 |
OUT2信号がLowレベルの時間を設定するカウンタです。 |
上記のようにLowレベル時間とHighレベル時間を独立することで結果的に分周機能を果たすようになっています。 また、Counter1、Counter2の設定値を別々に設定できますのである程度の範囲でデューティを変更することができます。
なお、上記式の分母の4は、PICマイコンの1命令辺りのクロック数、56は、Counterのカウント及び分周機能起動停止入力チェックに要する命令数を意味しています。 このカウンタの数値はEEPROMに書込みます。
上記の仕様を盛り込んだPICマイコン分周器のプログラムへのリンクをを下記に添付します。
上記HEXファイルのEEPROMは下表の設定となっています。 下記デフォルトはFosc=12.8MHzの場合、Fout=50Hz、テューティ=50%の場合の設定値です。 また、クロックは外部クロック入力設定(ECとなっています。)
アドレス |
内 容 |
デフォルト |
0 |
OUT1 Highレベルカウンタ 1,000,000位 仮数数値。 |
’0’ |
1 |
OUT1 Highレベルカウンタ 100,000位 仮数数値。 |
’0’ |
2 |
OUT1 Highレベルカウンタ 10,000位 仮数数値。 |
’3’ |
3 |
OUT1 Highレベルカウンタ 1,000位 仮数数値。 |
’1’ |
4 |
OUT1 Highレベルカウンタ 100位 仮数数値。 |
’9’ |
5 |
OUT1 Highレベルカウンタ 10位 仮数数値。 |
’4’ |
6 |
OUT1 Highレベルカウンタ 1位 仮数数値。 |
’4’ |
7 |
OUT1 Lowレベルカウンタ 1,000,000位 仮数数値。 |
’0’ |
8 |
OUT1 Lowレベルカウンタ 100,000位 仮数数値。 |
’0’ |
9 |
OUT1 Lowレベルカウンタ 10,000位 仮数数値。 |
’3’ |
A |
OUT1 Lowレベルカウンタ 1,000位 仮数数値。 |
’1’ |
B |
OUT1 Lowレベルカウンタ 100位 仮数数値。 |
’9’ |
C |
OUT1 Lowレベルカウンタ 10位 仮数数値。 |
’4’ |
D |
OUT1 Lowレベルカウンタ 1位 仮数数値。 |
’4’ |
3.PICマイコン分周器の製作
上記仕様、回路、PICマイコンプログラムで製作した製作例を下記に示します。
【 製作例1 】
左側にあるのが「超高精度クリスタルタイムベースキット」に付属の温度補償型水晶発振器です。
緑色の5ピン×1列のソケットが水晶発振子もしくはセラミック振動子用です。
緑色のソケット下側のジャンパーピンがJP1、JP2です。
茶色のセラミックコンデンサは手持ちに10pFが無かったため、22pFを2個直列にしています。 そのため、合計で4個のコンデンサ実装となっています。
温度補償型水晶発振器の右側にある黒いジャンパーピンがJP3です。
実際に動作させたときの出力波形を下図に示します。 周波数測定器での測定ではありませんが、50Hz出力となっていることを確認できました。
【 出力波形測定結果 】
上記の応用例として、秋月電子通商で販売している「 [P-988]3本足クリスタルオシレータ 11.776MHz(5個入) 」や、「 [P-988]3本足クリスタルオシレータ 1.308MHz(5個入)」を接続した例を下記します。
【 製作例2 】
上記のHEXファイルでは、外部クロック(EC)やCounter1、Counter2が決められていますが、PICマイコンプログラマを使用することで設定変更することができます。 例えば、秋月電子通商の「PIC Programmerv4」では以下のように設定することで変更できます。
クロックの選択を行う場合は、下記の右下のタブ「CFG1」のFOSCをピックして必要な設定に変更することで、外部/内部などに変更できます。
【 クロック選択画面 】
この設定を変更する場合は、上記画面の「拡張機能」をクリックして「拡張プログラミング機能」Windowを開き、「PCバッファメモリ修正」を選択してEEPROMの内容を書き換えることで設定変更できます。
【 拡張プログラミング機能 メニュー 】
下記が「PCバッファメモリ修正」Windowです。 この0〜D番地までの内容を書き換えることで変更できます。 下記例では、Counter1、Counter2を共に「3199944」に設定して0.5Hzの信号を得ています。
【 PCバッファメモリ修正 画面 】
上記設定変更を行って、1MHzの水晶発振子で試験を行ったときの基板外観を下図に示します。
【 製作例3 】
下図はセラミック振動子で試験を行ったときの基板外観です。
【 製作例4 】
4.機能拡張、応用例
4.1 最高周波数改善版
上記のプログラムではCounter1、Counter2を共に0設定してもFout=Fosc/ 448となりますので、高い周波数を出力することが難しくなっています。 これを少しでも改善するために、最高周波数上昇を下記式のように改善するようにプログラムを変更したものを下記に示します。 この場合、Fout=Fosc/80となりますので約5倍の周波数まで対応できます。
この場合のPICマイコン分周器プログラムへのリンクをを下記に添付します。
上記HEXファイルのEEPROMは下表の設定となっています。 下記デフォルトはFosc=12.8MHzの場合、Fout=10kHz、テューティ=50%の場合の設定値です。 また、クロックは外部クロック入力設定(ECとなっています。)
アドレス |
内 容 |
デフォルト |
0 |
OUT1 Highレベルカウンタ 設定範囲:0〜255 |
'140' / 0x8C |
1 |
OUT1 Lowレベルカウンタ 設定範囲:0〜255 |
'140' / 0x8C |
4.2 赤外線リモコン改善
赤外線リモコン関係では38kHzの発振を行っています。 この38kHzのクロックを得る方法として「リモコンリモコン その1 (おまけはリモコンガチャガチャ迷惑防止器!!!)」のように38kHzの水晶発振子を使う方法があります。 しかし、この38kHz発振回路は、38kHzの水晶発振子やICとの相性によってうまく発振しないなどの問題があります。 また、「電池ボックス電子工作(その5) どこでもリモコンリモコン2(リモコンレピータ) どこでも電圧安定化回路付き」のようにタイマーICを使用する方法もありますが、周波数の安定度に心配があります。
これらの回路に今回製作した分周器を適用することができます。 適用回路図を下記に掲載します。 この分周器を使用することで発振を確実に行え、また、周波数もタイマICに比べて格段に改善されます。 また、38kHz発振回路の部品点数も減ります。
【 「リモコンリモコン その1」 受信ユニット回路図 改善回路 】
【 「リモコンリモコン その1」 リモコンガチャガチャ迷惑防止器 改善回路 】
【 「どこでもリモコンリモコン2(リモコンレピータ) どこでも電圧安定化回路付き」改善回路 】
なお、この上記3例では、分周機能停止時にはPICマイコンの出力/OUT2が必ずLowにならないといけません。 残念ながら上記HEXファイルのプログラムでは、分周機能停止時には出力保持であり、出力は不定です。
この対応として、分周機能停止時にはOUT1=High、/OUT1=Lowとなるようにプログラムを変更したHEXファイルを下記に掲載します。
FOSC設定 |
外部クロック(EC)設定 |
HS設定 |
通常版の分周機能停止時出力固定版 |
FOSC=12.8MHz |
FOSC=12.8MHz |
最高周波数改善版の分周機能停止時出力固定版 |
FOSC=12.8MHz |
FOSC=20MHz |
なお、EEPROM及びクロックの選択については、前記と同様になっていますので、ご利用状態に合わせて設定変更を行って下さい。
参考例として、jsk37_v3b.hex を用いた場合、クロック20MHzとすればCounter1=45、Counter2=46とするこで約38.2kHzで発振できる予定です。(クロック源に合わせてFoscの設定変更も行って下さい。) 上記の例の製作例、及び、hexファイルを「電池ボックス電子工作(その 11) いつどこ リモコンリモコン3(赤外線増幅器)」にも掲載しておりますので参照してみて下さい。
4.3 赤外線リモコン改善(その2)
赤外線リモコンレピータの動作安定化に関する改善を行うに機会がありましたので、その際の対策について記載します。
(1) 電源回路の安定化
赤外線リモコン受信モジュールとしては秋月電子通商で購入した下記の3種類について使用する機会を得ましたが、(a)→(b)→(c)と下段側ほど動作が安定化しない感じでした。 レピータの赤外線リモコン受信モジュールで使用していて、よくこのようなリモコンの向きでもちゃんと動作すると感心するくらい感度が高い増幅器が内部にあるようです。
(a) 赤外線リモコン受信モジュール SPS−443−1
(b) 赤外線リモコン受信モジュール PL−IRM0101(38kHz)シールド付
(c) 赤外線リモコン受信モジュール PL−IRM0208(38kHz)
(b)の例として「電池ボックス電子工作(その 11) いつどこ リモコンリモコン3(赤外線増幅器)」の赤外線リモコン受信モジュール変更の事例があります。 これ以外の経験を踏まえ、特に(c)は非常に扱い辛い印象を非常に持っています。
なお、(a)についても、比較的安定に動作しているわけではなく、長期に渡ってレピータに使用していると、時たまリモコンの動作を受け付けておらず2、3回操作しないといけなかったり、電源オンオフを何度か繰り返すこともありました。
結局、この対応としては電源ラインにL、Cフィルタを追加することで非常に改善されました。 「電池ボックス電子工作(その
11) いつどこ リモコンリモコン3(赤外線増幅器)」の場合についても、L、Cフィルタを追加することで、少しは改善したかもしれません。 具体的な回路は後述します。
(2) 負荷回路のハイインピーダンス化
赤外線リモコン受信モジュールの商品紹介ページを見ると「TTL(C−MOS)出力 」と記載されていて、これを鵜呑みして通常のロジックICのつもりで製作すると痛い目にあいます。 上記(a)のデータシート資料をよくよく見ていくと、出力段はトランジスタのコレクタを15〜51kΩの抵抗でプルアップしている回路となっています。 つまり、出力ハイレベル時の出力インピーダンスが15〜51kΩあり、電流出力で使用するのは適切ではなく、電圧出力のつもりで設計する必要があることを意味しています。
【 SPS−443シリーズデータシート抜粋 】
今回、データシートを見直すまでは赤外線リモコン受信モジュールの出力負荷として「10kΩ+NPNトランジスタベース」の回路となっていますので、赤外線リモコン受信モジュールの出力からベース電流を流す回路設計となっていました。 この回路設計は間違いではありませんが、適切ではありません。 赤外線リモコン受信モジュールのロットばらつき、個体差を低減するためには、電流を流さないで済むような負荷に変えることが望ましいです。
また、(b)(c)の赤外線リモコン受信モジュールのデータシートでは出力回路部分の説明が無く、Io=5mA、Voh=4.5〜5.0Vと記載されていますので、如何にもロジック出力です。 しかし、今回の調査で、これは前提条件があっての数値のようです。 やはり、出力ハイレベル時の出力インピーダンスが(a)と同様に高いようです。
この対応として赤外線リモコン受信モジュールの出力をPICマイコン分周器用PIC12F683の5番ピンに直接接続することにしました。 (b)(c)の赤外線リモコン受信モジュールでは、この対応も効果的なようです。
上記(1)(2)の改善点を反映した回路図を下記します。
【 見直し回路図 2009年10月25日版 】
L1,C3が(1)項に記載のL、Cフィルタ回路です。 L1は少なくとも100μH以上欲しいです。 また、この部分のL1は本来は電源回路用ですが、負荷が赤外線リモコン受信モジュールだけということで10mA程度流すことができるインダクタンスを選定すればよいと思います。 C3は電解コンデンサ(10μF以上)だけでもよいですが、できれば0.1μFのセラミックコンデンサを並列に設けておくとベターです。
また、赤外線リモコン受信モジュールを直接5番ピンに入力し、4番ピンは10kΩでプルアップしております。 この回路とすることで抵抗とトランジスタを各1個削減できました。
今回削除した抵抗とトランジスタを当初設けていた理由は、「電池ボックス電子工作(その5)
どこでもリモコンリモコン2(リモコンレピータ) どこでも電圧安定化回路付き」のタイマーIC ICM7555の代わりにPICマイコン分周器用PIC12F683を適用したためです。 新たに製作するならなば上記見直し回路図とすべきですが、このようなご紹介をできておりませでした。
(3) 搬送波周波数の調整
ここまで対策しても、機器によってはレピータを介するとリモコン操作できない機器があるケースもありました。 最終的にはダメもとで搬送波周波数(38kHz)を微調整することで動作したとのご報告を頂きました。 (群馬県のM様、ご協力有り難うございました。)
そもそも搬送波周波数が38kHzになっているのは過去には汎用品で安価に入手できた455kHz用部品に端を発していると勝手に思っていますので、周波数精度にそんなに注意を払う必要もなく±1%以内の精度で十分と勝手思っていました。 また、FM放送用のパイロット信号用38kHzが頭にあったのも間違いのようでした。
455kHzをベースに考えれば約37.9kHzが中心になっていますので、EEPROMのCounter1、Counter2の値を少し大きめにした方がよいかもしれません。 また、セラミック振動子もそんなに精度の高い部品ではありませんので、これの個体差もあると思います。 さらには、搬送波周波数が40kHzの場合も想定されます。 これらの対応としてCounter1、Counter2の値をいくつか変えたものを下記に掲載しておきます。
もし、(1)(2)の対策をしても動作しない場合は、下記のHEXを試してみて下さい。
No. |
HEXファイル |
用途 |
発振周波数(計算上) |
Counter1 |
Counter2 |
1 |
38kHz用 |
38.168kHz |
2D |
2E |
|
2 |
38kHz用 |
37.879kHz |
2E |
2E |
|
3 |
38kHz用 |
38.462kHz |
2D |
2D |
|
4 |
40kHz用 |
40.000kHz |
2A |
2B |
End of This Page.