アフィリエイト広告
アフィリエイト広告

シフトレジスタ 74HC595 を使う (1) 回路図

これまでにも何回か使っているシフトレジスタ 74HC595 。先日の Larson Scanner でも使っているのですが、ちょっと気になることがあったので、再度、回路を組んでみました。

Larson Scanner の記事はこちら。

Arduino Nano Every を使ってみる - Larson Scanner
先日、LED を 8 個並べて、小さなイルミネーションを作ってみました。 その後、ネットで見つけたのが Larson Scanner (ラーソンスキャナ) っていうもの。なんかねぇ、キットも売られているし、Arduino で作ったという記事...

気になったことってのは、OESRCLR の使い方について、です。
ググってみると、だいたいは OE は High に、SRCLR は Low にしておきましょ、って感じです。まぁ、それで動くからいいんですけど。

シフトレジスタの仕組みや使い方などは、詳しいサイトがたくさんありますので、そちらを参照下さい。今回は、シフトレジスタを使うための俺的周辺回路について記録しておきます。

データシートを見てみよう

74HC595 のファンクションテーブルです。OESRCLR の動きを確認しましょう。

OE

まず、OE (Output Enable) ですが。
上線がついているので負理論です。負理論とは、Low のときに有効になる、って意味です。つまり、OE は Low のときに出力が有効になる。だから GND につないでおけばよろしい、と。

でも、これを High にすると、出力がハイインピーダンス (Qn = Z) になる。いわゆるスリーステートという出力状態にできる。それは、回路が切断された状態ってこと。

Shift register clear. Parallel outputs in high-impedance OFF-state

利用方法をよく知らないのだけれど、たとえば、複数の 74HC595 の出力をバスにつないで切り替える、とか?
とりあえず俺レベルで使えそうなのは、ここに PWM 信号を放り込んで、LED の輝度調整をするってことぐらいで、これは前回の Larson Scanner でもやってました。

SRCLR

つぎに、SRCLR (Shift Register Clear) です。
これも負理論なので、Low にするとシフトレジスタがクリアされる。だから Vcc につないどけ、となる。

こいつの動きがいまいちわかりにくいのだけれど、とにかく SRCLR を Low にするとシフトレジスタがすべて Low になる (QH’ = L)。ストレージレジスタにはつながっていない (Qn = NC) ので、出力には影響しない。

A Low-Level on SRCLR only affects the shift registers.

でも、RCLK を立ち上げる (↑) と、クリアされたシフトレジスタがストレージレジスタへ転送され、出力は Low になる (Qn = L)。

Empty shift register loaded into storage register.

シフトレジスタもストレージレジスタも電源投入時の値は不定 (High か Low か定まらない) なので、出力に LED とかつなぐと不規則に点灯することがあります。出力を初期化するには、OE を Low、SRCLR も Low にした状態で、クロック RCLK を一発放り込む、という操作が必要ということです。

LED Scanner 回路図

Larson Scanner の真似して、「LED Scanner」です (^_^;)

全体の回路図。
シフトレジスタを使って、8 組の LED を点滅させます。制御は Arduino Nano Every。点滅パターンを出力して、8 組の LED を自由に点滅させるようにしようと思います。

シフトレジスタ 74HC595 を使った LED Scanner

中央下が Arduino、その右が 74HC595。
上が LED の駆動回路。LED を 2 個ずつ点灯させるようにしてあるけど、特段の意味はないです。明るく賑やかにしたいなぁと思っただけ。

左上は、電源投入時、Arduino が起動してから LED に電源を供給するためのスイッチ。電源投入時の無用な点灯を抑止します。

左下は電源回路。電源は DC12V の AC アダプタを使用しています。

LED 駆動部

シフトレジスタの出力を受け取って、LED を駆動する回路。同じ回路が 8 組あります。

LED を明るく点灯させるために流したい電流は 20mA。対して 74HC595 の最大出力電流は ±20mA、全体で ±75mA までです。直接駆動することはできませんので、トランジスタ 2SC1815 を使います。

明るく賑やかにしたいと思ったので、LED も 2 個つけることにしました。そのために、電源電圧を 12V にしています。
LED の順方向電圧は 2V、2 個で 4V なので、抵抗 R1 にかかる電圧は 8V。電流を 20mA とすると R1 は、

( 12 - 2 x 2 ) / 20 = 0.4 [KΩ]

です。E6 系列の抵抗器で 330Ω としました。電流値は 24mA になりますが、この LED の最大電流は 30mA なので大丈夫でしょう。
ちなみに、実測値では 23mA でした。

ベース入力は 74HC595 の出力です。OE で PWM 制御するとハイインピーダンスになる場合がありますので、ベース入力が不定にならないように、ベースエミッタ間抵抗 R2 が必須です。前回の Larson Scanner の回路では付けサボってます。なくても動くことは動くのですが、良くないです。
R2 は、まぁ 22KΩ ぐらいでよろしいんじゃないでしょーか。

トランジスタ 2SC1815 の増幅率を 40、コレクタ電流を 20mA とすると、必要なベース電流は 0.5mA です。ベースエミッタ間電圧を 0.7V として、R2 に流れる電流は 0.03mA。74HC595 の出力電圧を 5V とすると、ベース抵抗 R3 は、

(5 - 0.7) / (0.5 + 0.03) = 8.1 [KΩ]

E6 系列の抵抗器では 6.8KΩ になりますが、手持ちの関係で 4.7KΩ にしています。誤差の範囲ですが? なにか? こーゆーのはてきとーでいいんですぅ (^_^;)

シフトレジスタ 74HC595

Arduino Nano Every と 74HC595 のまわりです。

左のボリュームは、スキャン速度調整用 (VR1)、LED 輝度調整用 (VR2) です。入力ピンのコンデンサは、インピーダンスを下げることが目的です。Arduino の入力ピンのインピーダンスは 10KΩ 以下にすることとなっていますので、まぁボリュームを 10KΩ にするって手もありますが、ノイズ防止ってのもありますし、まぁあっても邪魔にならないし。
74HC595 の Vcc のコンデンサ C3 は、おまじないです。基本、Vcc と GND ピンの最短につけます。回路図に書いてなくても、つけるんです。

74HC595 を使うと 3 ピンで 8 ピン分使える、ってよく目にしますが、ここでは OESRCLR も制御しますので、5 ピン使います。ピン数削減効果を重視する方は、OE は GND に、SRCLR は Vcc にどうぞ。ついでに、ストレージレジスタなしのシフトレジスタ 74HC164 なら、2 ピンでいけまっせ。

LED 電源制御部

Arduino が起動してから、LED に電源を供給するスイッチ部分です。お好みでどうぞ。

電源投入時のシフトレジスタの出力は不定です。初期化について、ソフト的にああしてこうしてってのはありますが、そのソフトが起動するまで、Arduino が起動するまではどーするの?って話。
なので、Arduino が起動して、初期化して、そのあとで SRCLR を High にして、LED への電源も立ち上げる。まぁ電源投入時の過渡的な云々はあるけど、とりあえずこれで十分機能してます。

ちなみに Q9 は、前回の Larson Scanner では MOSFET 2N7000 を使ってました。今回は 2SC1815 ですが、どっちでもいいです。部品箱覗いて、そこあるやつで。
Q10 は、やっぱり MOSFET がいいですね。2SJ681 が部品箱にあったので使いましたけど、2SJ680 とか安いやつで十分です。

電源部

5V を供給するための電源回路です。三端子レギュレータ 7805 を使ってます。
入力は DC12V の AC アダプタを利用しています。

えーと、5V に関しては、シフトレジスタとボリュームに使っているだけなので、Arduino の 5V 出力を使うことができます。お好みでどうぞ。
ただし、LED も 5V で駆動するなら、Arduino の 5V 出力をつかうのはやめたほうが吉です。

回路図のなかの、宙に浮いたような C7、C8 は、電源回路の任意の位置に挿入しているコンデンサです。俺は、ブレッドボード間の電源の渡り部分には、基本的につけるようにしています。まぁ効果の程は?ですが。
ちなみに、ブレッドボードで電源と GND のラインを適当に配線していると、誤動作の原因になります。接続ワイヤは太めにするのが吉です。

次回はスケッチを書きましょう

今回は、LED Scanner の回路を作りました。
俺にしては、ちょっと詳細に書いてますねぇ。まぁプロじゃないんでマズイところもあるでしょうけど、回路作りの参考にでもなれば。

では、次回は、この回路を動かすためのスケッチを書くことにしましょう。

タイトルとURLをコピーしました