自作CPU #3

今日はスタック周りと昨日やってたプログラムカウンタ周りの電源線を配線しました。

あとクロックジェネレーターとクロック選択回路が少し不安だったので、ブレッドボードへ組み、テストしてみました。問題なく動いたっぽいです。クロックの選択はロータリーDIPSWで16パターン選択できるようにします。

L固定,H固定,手動クロック,低周波数クロック約0.33Hz~約66.66Hz(VRで可変)

976Hz,1.953kHz,3.906kHz,7.813kHz,15.625kHz,31.25kHz,

62.5kHz,125kHz,250kHz,500kHz,1MHz,2MHz

の16パターンです。このうち低周波クロックについて自分でも動作原理を忘れてしまいそうなのでメモしておきます。

低周波クロックの約0.33Hz~約66.66Hzというのはオシロスコープで観察した結果であって理論値とは少しずれています。低周波クロックの回路は、

f:id:Hamakita:20171130002154p:plain

こんな感じです。

  1. 電源投入始めコンデンサは充電されていない。
  2. 入力がLとなる。
  3. OUTがHとなる。
  4. OUTから電流が抵抗を通りコンデンサに充電される。
  5. インバーターの+閾値まで充電されると論理がひっくり返りOUTがLに
  6. コンデンサから電流が抵抗を通り放電する。
  7. インバーターのー閾値まで放電されると論理がひっくり返りOUTがHに

この繰り返しで動作する。このインバーターは普通のNOT素子(HC04)とは違ってシュミットトリガインバータというもので閾値を二つ持っているのが特徴。このおかげでアナログ的なカーブを描いた電圧の立ち上がり(コンデンサの充電)を入力にしても出力が乱れない。普通のインバーターでは閾値付近の電圧を入力されると出力がチャタリングのように乱れてしまう恐れがある。また閾値を二つ持つことでコンデンサの充放電の時間稼ぎができるためクロックを生成できる。

回路図の可変抵抗によって充放電の時間を調整し、クロックの速さを変える。

データシート

によると+閾値は2.5V,-閾値は1.6Vらしい。

RC直列回路の過渡現象解析からコンデンサの電位差の式はt=0で5vのステップ入力とすると

\[V_C = E(1-e^{-\frac{1}{RC}t})\]

変形して

\[t=-RC\ln(1-\frac{V_C}{E})\]

 半周期は\[V_C=2.5\]までの時間から\[V_C=1.6\]までの時間を引いたものだから

(1.6Vまで充電された状態で充電が始まる。)

R=100k+470の時の周期は2.9sゆえに周波数0.34Hz

さらに

R=0+470の時の周期は13.56msゆえに周波数73.75Hz

0.33Hzの方は辻褄があったのですが66Hzの方が少しずれてしまいました。

放電のケースも考えなければならないかな。 

 

171130追記

もう少し理論値に近いっぽいです。もう一度観測したら

76.92Hzでした。