井土です。
先週ロボット技術研究会の役員が交代し、1年間の部長としての役割が終わりました。
今年度になって部員数は200人を突破し、色々ありましたが無事に終わりました。
これも支援してくださった皆様のおかげです。どうもありがとうございました。
さて、今回の本題は
トランジスタで作った時計
(トランジスタ時計)
についてです。
id研の井土・齋藤・大貫・中村の4人で製作しました。
まず、完成品なのですがこんな感じです。
すべてディスクリートのトランジスタで作りました。
◯なぜ作ったのか
話は 1 年前にさかのぼります。
昨年は論理演算であるNANDのみを用いて時計 (NAND 時)を製作し、
MFT2013で展示しました。(以前、少し紹介しました)
すると
「トランジスタでやってみてよ (笑)」
「あっちにリレーだけの時計があるよ」
という意見・煽りを多く頂きました。
「あの人たちをを見返してやりたい」
「そうだ次はトランジスタだけで作った時計を展示しよう」
そこから、トランジスタだけで時計を作るプロジェクトは始まりました。
さて、ここからは設計・製作の過程を紹介していきます。
◯おおまかな構成
各機能を図にするとこんな感じです。
強制的にクロックを送ることで時刻合わせの機能を実装しています。
このスイッチのチャタリング防止にシュミットトリガー回路をつけているのですが、
これももちろんトランジスタ(2SC1815)でできています。
◯トランジスタによる論理演算
カウンタやデコーダはすべてAND,OR,NOTなどの基本的な論理回路の組み合わせでできます。
ということでまずは基本的な論理回路をトランジスタで作りました。
簡単に作れるNOT・NAND・NORはこんな感じです。
負荷の抵抗は10kΩで、50kHzくらいまでなら問題なく動きます。
◯デコーダの設計
論理回路はNANDもしくはNORだけで全部作れます。
去年はそれに基づき、NANDだけで時計を作ったわけです。
今年はトランジスタでせっかくなのでNANDではなくNORを作り、
そのNORを基本として組み合わせて上位のカウンタやデコーダを作っていきました。
デコーダはどうやって作るのでしょうか。
小さいものなら以下の手順が簡単です。
1.真理値表を書く
2.論理式(加法標準形)にする
3.カルノー図を使って論理式を簡単化する
簡単化についてはここがわかりやすいです。
http://akita-nct.jp/yamamoto/lecture/2003/2E/karnaugh_diagram/node1.html
論理式を式変形して項の数を減らせると、回路が小さくなるので簡単化をします。
もちろん論理式上での簡単=トランジスタ数が少ないではありませんが、
論理式の簡単化くらいしかわからなうのでとりあえず簡単化を行います。
去年のNAND計はカルノー図を使って、すべて手作業で行いました。
今回はクワインマクラスキー法というアルゴリズムを使ってコンピュータでこの作業を行いました。
クワインマクラスキー法で論理回路を簡単化するツールをC++で自作し、
それによってデコーダ・カウンタの設計を自動化したのが今回の設計における特徴です。
この簡単化ツールは真理値表に当たるデータの書かれた入力ファイル(画像では 37dec.txt)を用意すれば
自動でその真理値表をみたす論理式を出し、論理式の簡単化を行ってくれます。
真理値表を読み取って論理式にしたものが画像のinputに表示され、
それを簡単化したものがoutputのところに表示されます。
1,2,3...は変数のA,B,C、-は否定を意味しています。
input1の例だと、真理値表は
で、それを簡単化すると
になるという意味です。
真理値表のdon't careにもちゃんと対応をしていて、don't careを考慮した上で簡単化をしてくれます。
また、簡単化した結果が複数個あるときはそれらを全部出してくれます。
このツールによってデコーダの設計がとても楽になりました。
この時点でデコーダはNOT,AND,ORで構成されているので、
それらをNORにしてNOR特有の簡単化などを行ってデコーダの完成です。
◯カウンタの設計
カウンタはD-FFを元に設計をしていきます。
フリップフロップならなんでもいいんですが、D-FFだと考えるのが楽なのでD-FFを選択しました。
そのD-FFはトランジスタでNORを作り、それらを以下のように組み合わせることで実現します。
長くなるので省略しますが、下の図のような感じで
D-FFの出力→組み合わせ回路→D-FFとやってやることで順序回路が作れます。
ここでも組み合わせ回路(デコーダ)を作る必要があるのですが、
先ほどと同様に、自作の簡単化ツールを使うことで自動で小さい回路を設計することができます。
◯実装
設計ができたら今度は実装です。
本当はユニバーサル基板でやりたかったのですが、
MFTに間に合いそうになかったのでプリント基板を使いました。
学校のものつくり支援センターには基板切削機があるので、それを使って片面のプリント基板を作ります。
そのために設計した論理回路たちをトランジスタレベルでCADに入力し、配線図を作成します。
最終的に6種類くらいの基板を設計しました。
参考までに、これが4bitの2進数を入力して7segLED用のデータを出すデコーダの配線図です。
標準ロジックでいう7447と同じような機能です。
基板データができたら基板切削機に基板を作ってもらい、はんだ付けをするのみです。
材料は大量のトランジスタと抵抗、少しの電解コンデンサとコネクタのみです。
できた基板の一部を並べるとこんな感じです。
トランジスタの森
整列するトランジスタたち
最後に組み上げて、コネクタを圧着しまくって配線したら完成です。
◯おわりに
MFT2014にトランジスタ時計を展示した結果、まぁまた煽られますね。
次は真空管らしいです。
先週ロボット技術研究会の役員が交代し、1年間の部長としての役割が終わりました。
今年度になって部員数は200人を突破し、色々ありましたが無事に終わりました。
これも支援してくださった皆様のおかげです。どうもありがとうございました。
さて、今回の本題は
トランジスタで作った時計
(トランジスタ時計)
についてです。
id研の井土・齋藤・大貫・中村の4人で製作しました。
まず、完成品なのですがこんな感じです。
Maker Faire Tokyo2014(MFT2014)のロボット技術研究会ブースで展示をしました。
トランジスタとして2N7000(Nch MOS-FET)を640個使用しています。
マイコンや74系のICは使わずに、クロックの分周器・カウンタ・7segデコーダはトランジスタとして2N7000(Nch MOS-FET)を640個使用しています。
すべてディスクリートのトランジスタで作りました。
◯なぜ作ったのか
話は 1 年前にさかのぼります。
昨年は論理演算であるNANDのみを用いて時計 (NAND 時)を製作し、
MFT2013で展示しました。(以前、少し紹介しました)
すると
「トランジスタでやってみてよ (笑)」
「あっちにリレーだけの時計があるよ」
という意見・煽りを多く頂きました。
「あの人たちをを見返してやりたい」
「そうだ次はトランジスタだけで作った時計を展示しよう」
そこから、トランジスタだけで時計を作るプロジェクトは始まりました。
さて、ここからは設計・製作の過程を紹介していきます。
◯おおまかな構成
各機能を図にするとこんな感じです。
基板は全部で17枚(切削によるプリント基板)で、
各基板一枚で10進カウンタなどの機能を一つが完結しています。
図にはありませんがカウンタの桁上りのところにスイッチが入れてあり、各基板一枚で10進カウンタなどの機能を一つが完結しています。
強制的にクロックを送ることで時刻合わせの機能を実装しています。
このスイッチのチャタリング防止にシュミットトリガー回路をつけているのですが、
これももちろんトランジスタ(2SC1815)でできています。
◯トランジスタによる論理演算
カウンタやデコーダはすべてAND,OR,NOTなどの基本的な論理回路の組み合わせでできます。
ということでまずは基本的な論理回路をトランジスタで作りました。
簡単に作れるNOT・NAND・NORはこんな感じです。
負荷の抵抗は10kΩで、50kHzくらいまでなら問題なく動きます。
バイポーラトランジスタだとベース電流がまあまあ必要で、
この回路が数百個もあると消費電流が大きくなってしまうので、FETを選択しました。
この回路が数百個もあると消費電流が大きくなってしまうので、FETを選択しました。
また、プッシュプルにしないのかと思われる人もいるとは思いますが、
PchのFETが安く手に入らなかったのでNchFETと抵抗で作ることにしました。
チップのFETを許せばPchの低価格なものもあるのですが、
PchのFETが安く手に入らなかったのでNchFETと抵抗で作ることにしました。
チップのFETを許せばPchの低価格なものもあるのですが、
どうしてもDIPで作りたかったのでこのような回路になりました。
(DIP部品で基板がでごちゃごちゃしてるほうが好きなので)
(DIP部品で基板がでごちゃごちゃしてるほうが好きなので)
◯デコーダの設計
論理回路はNANDもしくはNORだけで全部作れます。
去年はそれに基づき、NANDだけで時計を作ったわけです。
今年はトランジスタでせっかくなのでNANDではなくNORを作り、
そのNORを基本として組み合わせて上位のカウンタやデコーダを作っていきました。
デコーダはどうやって作るのでしょうか。
小さいものなら以下の手順が簡単です。
1.真理値表を書く
2.論理式(加法標準形)にする
3.カルノー図を使って論理式を簡単化する
簡単化についてはここがわかりやすいです。
http://akita-nct.jp/yamamoto/lecture/2003/2E/karnaugh_diagram/node1.html
論理式を式変形して項の数を減らせると、回路が小さくなるので簡単化をします。
もちろん論理式上での簡単=トランジスタ数が少ないではありませんが、
論理式の簡単化くらいしかわからなうのでとりあえず簡単化を行います。
去年のNAND計はカルノー図を使って、すべて手作業で行いました。
今回はクワインマクラスキー法というアルゴリズムを使ってコンピュータでこの作業を行いました。
クワインマクラスキー法で論理回路を簡単化するツールをC++で自作し、
それによってデコーダ・カウンタの設計を自動化したのが今回の設計における特徴です。
この簡単化ツールは真理値表に当たるデータの書かれた入力ファイル(画像では 37dec.txt)を用意すれば
自動でその真理値表をみたす論理式を出し、論理式の簡単化を行ってくれます。
真理値表を読み取って論理式にしたものが画像のinputに表示され、
それを簡単化したものがoutputのところに表示されます。
1,2,3...は変数のA,B,C、-は否定を意味しています。
input1の例だと、真理値表は
で、それを簡単化すると
になるという意味です。
真理値表のdon't careにもちゃんと対応をしていて、don't careを考慮した上で簡単化をしてくれます。
また、簡単化した結果が複数個あるときはそれらを全部出してくれます。
このツールによってデコーダの設計がとても楽になりました。
この時点でデコーダはNOT,AND,ORで構成されているので、
それらをNORにしてNOR特有の簡単化などを行ってデコーダの完成です。
◯カウンタの設計
カウンタはD-FFを元に設計をしていきます。
フリップフロップならなんでもいいんですが、D-FFだと考えるのが楽なのでD-FFを選択しました。
そのD-FFはトランジスタでNORを作り、それらを以下のように組み合わせることで実現します。
長くなるので省略しますが、下の図のような感じで
D-FFの出力→組み合わせ回路→D-FFとやってやることで順序回路が作れます。
ここでも組み合わせ回路(デコーダ)を作る必要があるのですが、
先ほどと同様に、自作の簡単化ツールを使うことで自動で小さい回路を設計することができます。
◯実装
設計ができたら今度は実装です。
本当はユニバーサル基板でやりたかったのですが、
MFTに間に合いそうになかったのでプリント基板を使いました。
学校のものつくり支援センターには基板切削機があるので、それを使って片面のプリント基板を作ります。
そのために設計した論理回路たちをトランジスタレベルでCADに入力し、配線図を作成します。
最終的に6種類くらいの基板を設計しました。
参考までに、これが4bitの2進数を入力して7segLED用のデータを出すデコーダの配線図です。
標準ロジックでいう7447と同じような機能です。
基板データができたら基板切削機に基板を作ってもらい、はんだ付けをするのみです。
材料は大量のトランジスタと抵抗、少しの電解コンデンサとコネクタのみです。
できた基板の一部を並べるとこんな感じです。
トランジスタの森
整列するトランジスタたち
最後に組み上げて、コネクタを圧着しまくって配線したら完成です。
◯おわりに
MFT2014にトランジスタ時計を展示した結果、まぁまた煽られますね。
次は真空管らしいです。