CR発振でLチカ [74Logic]
@lyricalmagical 2019年11月12日に作成  (2019年11月13日に更新)

投稿2回目ですが懲りずにLチカします。
今回は74シリーズといわれる、単機能ICを使っています。

使用した物

  • TC74HC14AP
  • LED
  • 電解コンデンサ 16V 470μF
  • 抵抗 1KΩ
  • 抵抗 330Ω

以下、それぞれの部品について記載します

TC74HC14AP

冒頭で書いたとおり、74シリーズといわれる単機能ICのうちの一つ、74HC14です。
TCとAPは東芝独自型番です。他のメーカーでも74HC14は製造されていますので、製造メーカーによって型番は微妙に異なります。
パーツショップで74HC14くださいといえば、提携メーカーの物を売ってもらえるでしょう。
74HC14は「NOT回路(インバーター回路)」が6つ入っています。
1を入力すると0を、0を入力すると1を出力するだけの回路です。
また、シュミットトリガという特性があります(後述)。

抵抗 330Ω

LEDの輝度調整用です、Arduino等のLチカと考え方は同じです。

抵抗 1KΩ/電解コンデンサ 470μF

点滅速度を決定します。速度の求め方は後ほど。

LED

光ってくれる奴です。

Lチカ回路を作成する


今回作成した回路はこのようになっています。

74HC14にはNOT回路が6個入っていますが、今回のLチカの為に必要なのは2個です。
残り4つは使用しないのですが、使用しない回路も入力は0か1を入力しないと故障の原因となるため、回路図右側の4つにも入力を接続しています。1(5V)に繋ぐか、0(GND)に繋ぐかは、近い方でどちらでもかまいません。

Lチカした!


回路を作って電源を入れるとLチカしますね。
ちなみに、NOTが4つ余っていますので、同時に3つのLEDを別々の速度で点滅させたりもできます。

動作理論

さて、一つのLEDをLチカさせるためにNOTが2つ必要と書きましたが、厳密には1つでできます。
ただし、計算がめんどくさくなるので、2つ使用しています。
その「点滅を担っているNOT」というのが回路図中の※1のNOTです。抵抗やコンデンサがついていますが、なんとなく自分の出力が自分の入力に繋がっているのがわかりますね。
NOT回路の出力を自身の入力にいれると、なんとなく超高速で1/0が繰り返しそうなのはイメージ付きますね。
そこに、抵抗とコンデンサを使って点滅時間の調整をします。

まず、電源を入れた段階で、コンデンサに溜まっている電荷は0とします。
この場合、NOTの入力が「0(0V)」となるので、NOTの出力は「1(5V)」となります。
そのため、その「1(5V)」出力が抵抗を通してコンデンサに電荷として溜まります。
徐々にコンデンサに電荷が溜まっていくため、NOTの入力は「0V」から徐々に電圧があがっていきます。
ここで、ある一定の閾値(くわしくはデータシート参照、後述)を超えると、NOTの出力が「0(0V)」となります。
そうすると、今度は、今までとは逆に、コンデンサの電荷が抵抗を通して放電することになります。
そのため、NOTの入力は徐々に電圧が下がっていきます。
そして、ある一定の閾値を下回ると、NOTの出力が「1(5V)」となり、また、コンデンサに電荷が溜まり始めます。
この動作を繰り返すことで、出力の0/1が定期的に切り替わります。
このように、抵抗とコンデンサの組み合わせで0/1の繰り返しを続ける回路全般を、一般的にCR発振回路といいます。実現方法はこれ以外にも様々な方法があります。

さて、この一定の閾値、というのは、データシートのDC特性の「しきい値電圧」という欄に記載されています。
VCCが4.5V(今回は5.0Vで実験していますので一番近い値です)の場合、2.7V以上で「1」と認識(=NOTなので0出力)、1.6V以下で「0」と認識するのが標準値のようです。

ここでA点をオスロスコープで実測した値ですが、

今回使ったICでは、実測で約2.92V(山の頂点)を上回った段階で「1」と認識され、NOTなので「0(5V)」出力に切り替わり、実測約1.88V(谷の頂点)を下回った段階で「0」と認識され「1(5V)」出力に切り替わるようです。
ほぼデータシート通りの標準値です。
この0と1の閾値の差が点滅速度の計算には重要で、今回使ったICでは約1.04Vです。この値は、データシートのDC特性の「ヒステリシス電圧」に記載されております。
記載によると、VCCが4.5Vの時、標準値で1.1Vと記載されているので、ほぼ標準値となります。

ここでやっと点滅速度の計算をしたいのですが、点滅条件は実は2通りあり、電源を入れた直後と、2回目以降の点滅で条件がことなります。
というのは、NOTの出力が1→0に切り替わるまでの時間というのは、
・電源投入直後はコンデンサが0Vから2.92Vまで充電される時間
・2回目以降はコンデンサが1.88Vから2.92Vまで充電される時間
となります。
ここでは点滅速度を求めたいので、2回目以降の時間を算出します。

まず、コンデンサの充電時間(1.88Vから2.92Vまで充電される時間)を求めるための公式は、

t=(CR)loge(VVLVVH)t = (CR)log_e(\frac{V-VL}{V-VH})

です。なんでこうなるかは電磁気学とかその辺の分野でおおよそ回路設計から離れていくので割愛しますし正しく説明できる自信もありません(逃げ)。

ここに出てくるVは充電電圧(=NOTの出力電圧≒5V)で、VLは充電開始時のコンデンサの電圧、VHは充電完了時の電圧です。
つまり、VL=1.88、VH=2.92です。
Rは抵抗値、1KΩ=1000、Cはコンデンサの容量、470μF=0.00047です。
tは秒単位なので、計算すると約190msとなります。

次に、コンデンサの放電時間(2.92Vから1.88Vまで放電される時間)を求めるための公式は、

t=(CR)loge(VHVL)t = (CR)log_e(\frac{VH}{VL})

です。
VHは放電開始時のコンデンサの電圧で、VLは放電完了時の電圧です。つまり、先ほどと同じです。
計算すると約207msとなります。
つまり、1出力の時間は190ms、0出力の時間は207msで、合計397ms程度の周期で1/0を繰り返すことになります。
これが「A」点での動作となります。

以上のような計算で、点滅周期は求まります。

ここで、先ほどのA点の測定結果を時間軸で見てみます。

山から山への時間が364.0msとなっているので、誤差約8%でおおよそ計算通りの値となっています。

点滅速度が計算できましたので、ここでやっと※2のNOTの出番です。
こちらは点滅回路の要素、というより、LEDの駆動用としての意味があります。
点滅回路(※1)の出力をさらにNOTして、LEDに接続しています。
つまり、A点が「0(0V)」の場合、NOTの動作によりLEDが点灯します。
実際のところ、A点に抵抗とLEDを繋いでも点滅はします。
ただし、LEDを光らせるために、A点に流れる電流がわりと無視できない量増加します。
今、コンデンサの充電時の電圧を5V(電源電圧と同じ)として計算していますが、A点に流れる電流が増えた場合、NOTの出力電圧がさがります。
こちらもデータシートに記載があり、DC特性の出力電圧欄です。
"H"レベル出力のとき、仮にLEDに4mAの電流が流れたとすると、IOH=-4mAとなり、最小条件で出力電圧は4.18Vまで下がると記載があります。あくまで最小条件なので、下がらないこともあります。
なので、A点から直接LEDを駆動すると、周期の計算の精度が悪くなります。
※2のNOTの入力を駆動するための電流はほぼ0のため、このようにLED駆動用にNOTを一つ入れると計算がしやすくなります。
ちなみにA点にはコンデンサの充電電流も流れますので、出力電圧は5Vよりは多少下がる=周期は若干長くなります。

シュミットトリガについて

さて、今回の回路にもう一つ重要なポイントがあり、「シュミットトリガ」といわれるものです。
たとえば今回使用した74HC14は「6連シュミットトリガ付きNOT」なのですが、同様な物として、74HC04は「6連(シュミットトリガ無し)NOT」があります。

この違いを見るため、74HC04のデータシートも見てみましょう。
こちらもDC特性ページに着目するのですが、最初の項目の記載が74HC14とやや異なっております。
74HC14では「しきい値電圧」となっていますが、74HC04では「入力電圧」となっています。
以下、VCC=4.5V標準条件での記載です。
74HC14の「しきい値電圧」では、入力が2.7Vを超えた段階で入力を「1」と認識し、出力が「0」に切り替わり、入力が1.6Vを下回った段階で出力が「1」に切り替わります。
それに対し、74HC04の「入力電圧」では、入力が3.15Vを超えていあ場合に「1」と認識し、入力が1.35Vを下回っている場合に「0」と認識します。
これだけ書くと、閾値の電圧が違うだけにしか見えませんが、これは表記の揺らぎではなく明確に動作が異なります。
74HC04では、
・入力電圧が1.35V以下の場合、出力は「1」
・入力電圧が3.15V以上の場合、出力は「0」
・入力電圧が1.35V~3.15Vの場合、出力は「保証されない」
です。実際のところ「保証されない」だけであり、どこか1点に閾値があります。
たとえば閾値が2.5Vだったとしましょう。その場合、2.5V以上であれば出力は「0」、以下であれば出力は「1」となります。

それに対し、74HC14では、
・入力電圧が1.6V以下の場合、出力は「1」
・入力電圧が2.7V以上の場合、出力は「0」
・入力電圧が1.6V~2.7Vの場合、出力は「現状維持」
となります。
つまり、現在「0」出力中の場合の閾値は1.6V、現在「1」出力中の場合の閾値は2.7Vとなり、閾値が現在の状態で変動します。このような特性を「ヒステリシス特性」といい「ヒステリシス特性」を持つ入力を「シュミットトリガ入力」と言います。

さて、ここまで説明したうえで、今回、74HC14ではなく74HC04を使うとどうなったでしょうか。
もちろん、充放電の基準となる電圧差(ヒステリシス電圧)が存在しないため、点滅はしません。

そして、点滅回路以外にどのような実用的な用途があるのかというと、たとえば暖房の温度設定を想像して下さい。室温25度に設定して暖房を入れ、室温が25度になると暖房は止まります。
厳密にいえば止まった瞬間に部屋の室温は下がり始めるので、直後25度を下回ります。すると暖房が即座に入れます。
そして入った瞬間に25度を超えるのでまた即座に止まります。こんな融通の利かない動作をされては困りますね。
なので、25度設定のときは、動作中は25度を超えたら止まる、停止中は20度を下回ったら動作を開始する、などのようにする必要があります。これがまさにヒステリシス特性です。
このように、アナログ値をデジタル化するときには、ヒステリシス特性を持たせることが必要です。

また、速度差がある装置同士を接続するときにもシュミットトリガは必要となる場合があります。
たとえばとても古い古い回路、ファミコンのCPU 1.8MHz動作があったとします。
こいつがたまになにか信号をぽちっと出してくるとします。このCPUでLチカさせるなどです。

このLチカした回数を別のCPU・・・たとえば最新のPC、CPU 1.8GHzで数えるとしましょう。
コンスタントに1000倍の速度差があります(IO速度でいうとわりと大嘘ですが)。
低速な回路がピッと1信号を出したとしますが、0→1への変化というのは高速な回路から見るととても遅いです。
たとえば、誰かが挙手するのに1秒かかったとして、それを見ている人は1000秒かけてゆっくり手を上げているように見える感じですね。
ここで、ヒステリシス特性がない入力にそのような(相対的に)遅い信号が入力されると、閾値付近でノイズが乗った場合、1/0が高速に切り替わっているように見える事があります。
たとえば閾値が2.5Vだったとして、0Vから5Vに(相対的に)ゆっくり電圧があがってきて、2.5Vになった段階で受け側は「1」と認識できますが、次の瞬間、2.51Vになったときに一瞬-0.02Vのノイズが乗ってしまうと、また2.49Vとなり受け側は「0」として認識します。そしてノイズ以上に出力側の電圧が上がるか、ノイズが消えるとまた「1」として認識してしまいます。
すると、低速回路側の情報(たとえばLチカの回数)が正しく認識できないというような状況が起きます。
ですので、このような場合には入力側にシュミットトリガが必要となることがあります。

他には、同じ速度同士の回路を接続する場合でも、配線が長い場合は01の変化が遅くなります。
ちなみになぜ遅くなるかというと、配線自体には抵抗があります。また、配線自体が静電容量(コンデンサ)としても見えます。
つまり、今回の点滅回路と原理的には同じ事が発生します。
そのような使用用途の場合も、入力側にシュミットトリガが必要となることがあります。

最後に

74Logicというとデジタル回路を作るときの構成部品として使うのが一般的ですが、いきなりこのようなアナログな使い方でLチカさせてみました。
昔は連射コントローラーなどにも良く使われた回路です(今はCPUが乗っているのでCPUで処理していると思いますが)。
CR発振のお友達としては、ド定番のタイマーIC555などもあります。
あとは、そもそもICを使わずに、トランジスタ2個の無安定マルチバイブレーターという回路もあります。
単純にLチカさせたりなど、単機能な物を作るときは、このような部品を使う方法を知っていると役に立つこともあると思います。

参考文献

1
2
1
lyricalmagical さんが 2019/11/12 に 編集 をしました。 (メッセージ: 初版)
lyricalmagical さんが 2019/11/13 に 編集 をしました。
ログインしてコメントを投稿する