2012.12.31
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第280回]


●チャタリング回避回路

前回はスイッチ入力回路の74HC123によるワンショット回路がスイッチのチャタリングを避ける目的で入れられていると書きました(そのほかの目的もありますが)。
実はIMSAI8080の回路図を調べていて気がついたのですが、IMSAI8080ではスイッチのチャタリング対策として、74HC123によるワンショットパルスの出力のほかにも、非常に興味深い回路が組まれています。
不勉強にしてそのような回路は今まで見たことがなかったのですが、スイッチのチャタリング対策としてなかなかに有効な方法であると感じ入りましたので、E−80(仮称)ミニコンでも同じ回路を使うことにいたしました。
今回はそのユニークなチャタリング回避回路について説明をいたします(私はこういう回路を知らなかったので「ユニーク」と表現しましたが、私が知らなかっただけで、よく知られている回路なのかも知れません)。

[第274回]でお見せしたフロントパネル回路図の一部を下に示します。



WRITE、READなどのスイッチ入力はSTOPスイッチが入力されてCPUが停止したあとでなければ入力が有効にならない仕組みになっています。
図の74HC73のpin13の出力がHのときは各スイッチの入力信号はLになりませんから、スイッチを押しても後段の回路には伝達されません。
そのpin13からの出力ラインをたどっていくと途中に270KΩの抵抗と0.1μFのコンデンサが入れられていることに気がつきます。
これは何のためのものなのでしょうか。
コンデンサが信号ラインに直列に入っていますから遅延回路ではありません。

これはなかなかに面白い回路です。
コンデンサは直流を通しませんから、74HC73のL出力をスイッチに伝えることができません?
ほんとうに?
270KΩはスイッチのプルアップ抵抗2.2KΩに比べて非常に大きな値ですから、この抵抗を通じてpin13のL出力がスイッチに伝わることはありません。

このコンデンサの役目は、74HC73のpin13出力がLのときに、READ、WRITEスイッチ(READ NEXT、WRITE NEXTも同じ)がONになったときを考えてみるとわかります。
スイッチがONになると、そのとき一瞬だけスイッチのプルアップ抵抗2.2KΩを通じてコンデンサ0.1μFに充電電流が流れます。
すると0.1〜0.2ms(≒2.2×0.1×0.7〜0.8)の間だけスイッチ入力がLになって後段のワンショット74HC123に伝わります(上の回路では74HC123は省略してあります)。
実はこの間にスイッチ入力のチャタリングによって、数回程度スイッチ入力のON/OFFが74HC123に伝わると思われます(74HC123はその繰り返し入力されるパルスを吸収する役目で使われています)。
スイッチ接点が閉じたときだけコンデンサの充電が行われ、スイッチ入力回路の電位が上がっていきます。
コンデンサの電位が+2.5Vを越えると、たとえスイッチのチャタリングが続いていても後段へはスイッチ入力は伝わりません。
つまりこのコンデンサはスイッチのチャタリングが入力回路に伝わるのを短い時間で遮断する役目を果たしていると考えられます。

ところでそれではスイッチが離れたときはどうなるでしょうか。
スイッチが離れるときもチャタリングが発生します。
(以下の動作はスイッチがONになったときのチャタリングで瞬間的に接点が離れたときにもあてはまります)
スイッチが離れると、スイッチのプルアップ抵抗によって+5Vにつながっていたコンデンサのスイッチ側端子が開放されます。
すると今度は270KΩの抵抗を通してコンデンサが放電されます。
放電が進むにつれてコンデンサの電位は下がっていきますが、270KΩという大きな抵抗を通じての放電ですから非常にゆっくりとした動きになります。
しかもその動きはスイッチの接点が開放されている期間だけ進行します。
コンデンサの電位が+2.5V以下になって、そのときにもしまだスイッチのチャタリングが残っていて後段にスイッチ入力信号が伝わってしまうようになるまでの時間はおおよそ20msていど(≒270×0.1×0.7〜0.8)です。
スイッチのチャタリングが継続していて、その間の瞬間的なスイッチ接点のOFF時間だけコンデンサの放電が行われる(逆にON時間は充電が行われる)ことを考慮すると、実際には20msよりもはるかに長い時間チャタリングが回避できると考えられます。
そのように考えると特にスイッチが離れるときのチャタリングは、このコンデンサ回路によって完全に遮断されるのではないかと思われます。

むむむ。
確かに理屈ではそうなると思いますけれど。
やっぱり実際に確かめてみたくなってしまいますですね。
うう。
年の瀬も押し迫ってきてやらなくてはならないことが山積しているといいますのに。

オシロで確認してみました。
図の2箇所の信号を観測しました。



STOPした状態でREAD NEXTスイッチを押しました。

上(CH1)がコンデンサの端子の電圧の動きです。
スイッチが押されると短時間で+5Vになり、それはスイッチが押されている間(このときは約0.3秒)継続しています。
その後スイッチが離れると電圧はゆっくりと低下していきます。
下(CH2)はスイッチの入力を後段の74HC123に伝える74HC00の出力端子(pin3)の波形です。
スイッチが入力されたとき、ほんの一瞬だけですがHになっています(見えますでしょうか?)。
スイッチが離れるときにはH出力は見られません。

時間軸を拡大して、再度スイッチ入力をしてみました。

おお。
今度ははっきり見えますね。
スイッチが押されたとき0.2msほどスイッチ接点が閉じて、74HC00の出力がHになっています。
その間コンデンサが充電されて電位が上がっていくのがわかります。
そのあと0.3msほどチャタリングによってでしょうか、スイッチの接点が開いたようです。
この間はコンデンサの充電が止まってCH1の波形はフラットになっているように見えます(実際にはこの間は270KΩを通じて放電されているはずですが、その動きはゆっくりなのでこの程度の時間軸ではほとんど認識できません)。
そのあとまた短い期間だけCH2がHになっています。
CH1の波形を見ますとその時点からはふたたび充電波形になっていますから、おそらくこのCH2の2回目のH出力はチャタリングが終息してスイッチが閉じ、ふたたび充電が開始されたときに出力され、そのすぐ後にコンデンサの電圧が1/2VDD(2.5V)に達してしまったため、短時間でLになってしまったものと考えられます。
CH1の波形から、その後もコンデンサが充電され続けていることがわかります。
ということはこの間はスイッチの接点が閉じていることになりますが、CH2にはもうH信号出力は見られません。
スイッチが押されたとき最初のわずかな期間だけその信号が後段に伝えられ、それをトリガにして74HC123が安定した信号パルスとして出力するという、なんとも絶妙な回路だと感服してしまいました。

もっと拡大した時間軸で観測してみました。

CH2の出力波形から、スイッチ接点が閉じた直後にかなり激しいチャタリングが発生しているらしいということが見て取れます。
スイッチやリレーなどの機械接点からの入力では、チャタリング対策を避けて通ることはできません。
それにしてもIMSAI8080のこの回路は実にうまく考えたものだと思います。
なんでもIMSAI8080はその前に発売された、世界初の低価格ミニコン組立キットといわれたALTAIR8800の完全互換機として開発されたものなのだそうでありますが。
しかしIMSAI8080は互換機でありながら独自の回路を工夫し、より完成度の高いミニコンとして、「最も完成されたALTAIR8800」と評されたとも伝えられています。
今回説明いたしました巧妙なチャタリング回避回路が、すでにALTAIR8800に備わっていたものであるのか、あるいはIMSAI8080において工夫された独自の回路であったのか、ALTAIR8800の回路図が不明ですので、そのいずれであったのかはわかりませんが、いずれにしましても、昔の先達はまさに尊敬と賞賛に値するすばらしい方達だったとあらためて感心いたします。

あっという間に過ぎてしまった一年でした。
本年もあと残り2時間を切りました。
今年一年のご愛顧を感謝いたします。
来年もよろしくお願い申し上げます。
皆様よいお年をお迎えください。

ワンボードマイコンでCP/Mを![第280回]
2012.12.31upload

前へ
次へ
ホームページトップへ戻る