【4】ハードウエアが先かプログラムが先か・・・密接した関係
さて、今回からハードウエアの話に入リます。
前々回で述べましたが、このホームページではFlash PICという架空のトレーニングボードを使って勉強していきます。ボードは2種類あり〝ツールボックス〟の〝ボードの変更ボタン〟を押すと切り替わります。初めはボード1を利用しましよう。左がボード1の写真です。
ボード1が実際どのようなカタチをしているのか、試しにFlash PICのページへ飛んでご覧になってみてください。マウスでイロイロなボタンを押しても結構です。まだプログラムが入っていませんので何も動きませんし、壊れることもありませんので安心してください。(笑)
Flash PIC のページを開く
これ以降 Flash PICに載っているPIC特有のことを指すときはFPICと書き、MicroChip社のPICとFPICに共通の事柄は単にPICと書きます。
基板の左に歯車が付いた妙なカタチをした〝ちきどん2号〟というマシンが配線されていますが、これはモータで歯車を廻してイロイロなタイミングでマイクロスイッチをON/OFFさせて、プログラムの勉強に利用しようというだけのものです。 余談1
基板上にはこのモーターをON/OFFさせるリレーや8個のLEDと1個の7セグメント表示器と1個の汎用ボタン、リセットボタンなどが搭載されています。これらはすべて基板上のFPICのプログラムでコントロール可能です。
基板の話が出たのでそろそろ本題に入ります。
基板に載っているFPICは16F999という架空の型番が付いています。ピン配置は異なりますが基本的な部分はミッドレンジPIC(16F84、877)とほぼ一緒です。しかし割り込み機能やウォッチドッグタイマーなどは搭載されていません。あくまでも基本的なモノだけです。
PICが正常に動くためには最低限の条件があります。
① 配線が正しく確実にされていること。いも半田は論外
② 供給電源が安定していて規定値内であること
③ 入出力端子の加電圧が正しい範囲内であること
④ 安定したクロックが供給されていること
⑤ リセット信号が正しく規定内で入っていること
などが上げられます。余談2
プログラムが完全なものであっても上の条件から外れると誤動作を起こします。そして最悪なのは、ビギナーな人ほどこの条件を軽んじている傾向があります。組込み制御は先に述べましたが、ハードとソフトが一体となっていなければいけません。これからプログラムをしようという時に、ハードの最低限の条件がクリアされないと先に進むことができません。
Flash PICのボードは架空のトレーニングボードですので、パソコンが正しくインターネットに接続されていて、Flashプレーヤーがインストールされている限りこの条件はクリアされます。それも無料で・・・(笑)
Windows以外のパソコンやiE以外のブラウザでの動作保障はされていませんのでご了承ください。また、Flash PIC自体にバグがあった場合この条件から外れます。不運にもバグに遭遇された方はそのときの状況を詳しくお知らせください。早急に修正致します。
ハードの準備ができました。これでプログラムだけに専念できます。と言いたいところですが、ファームウエアを作るにはPICの構造とFlash PICのボード1の回路を詳しく知る必要があります。
PICの構造については後閑先生のホームページのPICとは?で詳しく説明されていますのでそちらに譲るとして、ここではFlash PICを中心にPICについて最低限のことと、慣れた人でも陥りやすい事柄について説明していきます。
まずは左の欄からボード1の回路図を出して眺めて見てください。前回の回路図の説明の通りに描かれていますので、とりあえず、解らない部分があるかもしれませんがご覧ください。
組み込み制御をする上で最初にすることは、ハードウエアの入出力がどうなっているか、あるいはどうするかを把握することです。〝入力〟〝出力〟とは字の如く、何らかの情報が入ってくることと出すことです。何が入ったり出たりするのかといいますと、デジタル回路ですので電圧の高い状態と低い状態の二つの情報です。ここでは高い状態を〝H(ハイ)〟あるいは〝1〟、低い状態を〝 L (ロー)〟あるいは〝0〟と表現を統一します。
PICには、この出したり入れたりするピンが何本も準備されています。まずはFlashPICで使用されているデバイス、FPIC 16F999のピン配置をご覧ください。左の絵です。
Vddと書かれたピンは電源供給ピンで5Vに接続します。1番ピンはリセット端子で抵抗を通って5Vに接続されています。途中にあるボタンがリセットボタンで基板上に〝RESET〟と書かれたボタンがそうです。マウスでそれを押すとGNDに接続されて、リセット端子が電圧の低い状態= L になり、ボタンを離すと、GNDから離れますので元の 〝H〟 状態になります。電源5Vとのあいだに4.7KΩが接続されているのは、ボタンを押した時にGNDと電源がショート状態になるのを防ぐのとボタンを放した時に、リセット端子を5Vに吊り上げておくためのものです。これをプルアップ抵抗といいます。14番ピンのGND端子に0.1μFのコンデンサが付いていますが、これがパスコンです。パスコンはIC自身が出すノイズを弱める働きをします。
H や L を出したり入れたりという話が出てきましたが、左図の赤色のピン(端子)がその部分です。〝RA0~RA6〟〝RB0~RB7〟〝RC0~RC7〟とグループ分けした名前が付いています。これらはポートと呼ばれ、8本ずつのグループになっています。ポートAは7本しかありませんが、これはFPICを28ピンデバイスにしたために、ピンが足りなくなったので、ポートAだけ犠牲になってもらっただけです(笑)実際のPICでもポートAは他のポートより少ないです。
ポートの中で H や L を出すピンを出力ピンと呼び、 H や L に変化するのを読み取るピンを入力ピンと呼びます。PICはプログラムで、すべてのポートのピンを入力ピンにも出力ピンにも設定することが可能ですので、自由な回路が組めることになります。
Flash PICのボード1の場合はRA0~RA5〟を入力ピンに、他はすべて出力ピンに設定するような回路が組まれています。
それではまず、出力ピンの話から・・・。
プログラムで H を出すと、どれぐらいの電圧が出るのか?ですが、ほぼPICの電源電圧まで上がります。ただしここから電流を出せば出すほど H の電圧は低くなっていきます。
L の時はどれぐらい低いのか? ほぼ0V近くまで下がります。0Vですので電流が流れ込んできます。流し込めば流し込むほど、こんどは逆に電圧が上昇します。そのため限度を超えると H なのか L なのかの区別がつかない状態にまでなります。したがって出し入れする電流値には限界があります。
では、どれぐらいの電流を出し入れできるかという話に進みます。出す場合は吐き出し電流とかソース電流と呼んでいて、ピン1本に25mAまでです。入れる場合は、流れ込み電流とかシンク電流と呼び、同じく1本あたり25mAまでです。ポートA,B,C全部でピンは23本あるので、23×25mA=575mAも流せると喜んではいけません。PICでは同時に吐き出し、流し込みできる電流の合計値は200mAまでです。23本中8本までしか25mAの電流を同時に出し入れすることしかできません。(8×25mA=200mA)
FPICでもそのあたりを考慮して回路を作ってあります。本当は何アンペア流しても壊れませんが・・・。(笑)
まずはLED回路とクロック回路の部分を抜き出しましたのでご覧ください。
FPICはクロック端子〝OSC1(27番)〟〝OSC2(26番)〟からクロックを与えます。秋月電子通商で売られているセラロックという3本足のパーツを使うとコンデンサ(20p)は必要なく便利です。セラロックの真ん中の足をGNDに接続して両端を〝OSC1〟〝OSC2〟に繋ぐだけです。順番はありません。
ポートBとポートCにそれぞれ8個、合計16個のLEDが接続されています。ちなみにポートBには7セグメント表示器が付いていますが、これは単純にLEDを〝8〟の字に並べてあるだけで、8個のLEDが接続されていると思ってください。〝8〟の字の場合7個で済みますので残りの1個は〝DP〟と呼ばれる小数点のLEDになります。
ボード1ではプログラムの時に理解しやすいように、 〝H〟 にするとLEDが点灯するように回路を組みました。そのためLEDの先はGNDになっています。
これらのLEDにはすべて470Ωが配線されています。これで電流の流れすぎを防いでいます。LEDは10mAほど流すときれいに光りますのでそれに合わせて抵抗値を計算しました。
FPICでは赤色のLEDを想定してますので、10mA流すとLEDの両端は約1.5Vになります。それをVF(直流順電圧)と呼んでいますが、5Vで光らすには、残り5-1.5=3.5Vを抵抗で消費しなければいません。流れる電流は抵抗もLEDも同じなので(直列接続ですから)、オームの法則 R=E÷Iより3.5÷0.01=350Ωとなります。市販している抵抗で近い値は330Ωか470Ωですので、安全な方を取って一段上の470Ωにしました。
これでポートB、Cすべてのピンを 〝H〟 にしても、最大で160mAの電流が流れてLEDが点灯します。実際は470Ωですのでもっと少ない電流になるはずです。抵抗は1/6W(0.17W)でもじゅうぶんですがFPICでは1/4Wの絵になっています。
ところで、なぜこんなに何本もの抵抗がいるのでしょうか。16個のLEDを点灯するのに16本も使っています。それなら、GNDにまとまっているところで1本の抵抗を入れて省略すればよいように思えますが、そう簡単な話にはなりません。1本の抵抗にまとめると、点灯しているLEDの数によって、流れる電流値が変化します。そうすると抵抗の両端の電圧も変化して、結果的にLEDの明るさが、点灯しているLEDの数によって変化してしまいます。そのためLED1本に抵抗1本となっています。
次にポートAを見ていきましょう。全体回路図からポートAの部分だけを抜き出しました。
ポートAの6番ピン〝RA6〟は後で述べますのでここでは飛ばします。
〝RA0~RA4〟の接続先はすべてスイッチ類です。〝RA5〟は空きです。どこにも接続されていません。〝RA1~RA4〟は途中コネクターを通って〝ちきどん〟のスイッチへ配線されています。そしてスイッチの片側はGNDへ繋がっています。〝RA0〟はコネクタへは接続されずに部品名〝SW1〟の片側へ。そのボタンの片側も同じようにGNDに接続されています。どのスイッチ、ボタンともに押されるとGNDに繋がるようになっています。接続先がスイッチ類ということなので、ポートAの〝RA0~RA4〟までを入力ピンとして使っています。ここを 〝H〟 か 〝L〟 の状態にしてやるとPICは読み取ってくれます。
入力ピンに共通しているのは、途中に〝4.7K9P〟と書かれた抵抗アレイに繋がっていることです。抵抗アレイは【 回路図を描こう 】の項目で触れましたが中身は抵抗です。抵抗のすべての片側はまとめて1ピンから出ています。残りの片側が2~9番ピンになっています。ということは〝RA0~RA5〟はすべて抵抗4.7KΩを通って電源に接続されていることになります。(抵抗アレイの2,3番ピンが電源に接続されているのは空きピン処理のためです)
PICでは入力になっているピンからは何も出ません。入力ピンですので、ここに 〝H〟 か 〝L〟 を与えてやらなければいけません。ようするにスイッチを押すと 〝L〟 、放している時に 〝H〟 になればよいわけです。スイッチを押すとGNDに繋がりますので 〝L〟 になることは分ります。放すと 〝H〟 になるのはなぜでしょう。それが先ほどの抵抗です。 〝H〟 の状態を作るために1本ずつ抵抗を通して電源に接続していたのです。このように入力ピンを強制的に 〝H〟 に吊り上げる抵抗をプルアップ抵抗と呼びます。通常は10KΩ~1KΩを使います。リセット端子に使っていた抵抗と同じ目的です。
スイッチから手を離した状態ではGNDから離ていますので、〝RA0~RA4〟は電源5Vから抵抗4.7KΩを通して、ほぼ5Vの 〝H〟 状態になります。スイッチが押されるとスイッチ側でGNDに接続されますので、ピン部分もほぼGNDと同じ電圧、0Vになります。PICは 〝L〟 と認識します。この時、抵抗が無ければショートして大電流が流れますが、電流は4.7KΩを通りますので1ピンあたり約1mAだけで済みます。抵抗値を上げると消費電流を抑えられますが、 〝L〟 から 〝H〟 に上がる時間が鈍くなっていきます。
最後に残っていた〝RA6〟のピンの説明をします。
〝RA6〟は抵抗を通って〝PNP〟タイプのトランジスタ〝2SA1015〟のベースに繋がっています。このトランジスタはアナログ回路の増幅器に使っているのではありません。デジタルの世界でのトランジスタは、ほとんどの場合、スイッチング回路になります。簡単に説明するとオーディオアンプのボリューム0とボリューム最大の二つの状態にしてONとOFFを作っているようなものです。
トランジスタのコレクタの先はオムロン製の〝G5V1〟というDC5V用のリレーのコイルに繋がっています。〝RA6〟を出力ピンに設定して、〝L〟にすると、トランジスタのエミッタからベース抵抗4.7KΩを通って〝RA6〟に電流が流れます。ベース電流が流れるとエミッタとコレクタがボリューム最大状態のONになり、コレクタから電流が吐き出されてきます。このようなスイッチング回路を吐き出し型(ソースドライブ)と呼びます。電流が流れてリレーのコイルが電磁石になると、内蔵されている接点が左側へくっ付きます。
このような接点構造を持つリレーを〝C接点〟とか〝トランスファー接点〟と呼びます。ちなみにこのオムロン製の〝G5V1〟は、サイコロぐらいの大きさで、コイルに5Vを流しますと約10~15mAで接点がONになります。接点に流せる電流は30V1Aほどですが、使いやすいリレーで多用します。よく似たリレーで、秋月電子通商で売られている5Vリレー〝Y14H-1C-5DS〟というのがありますが、カタチもピン配置もオムロンの〝G5V1〟と同じです。カタログでは5Vで30mAと書かれていますので置き換えが可能のように思いますが、70mA以上流さないとONにならないものが混ざっています。気を付けないとオムロンでは動いたのに〝Y14H-1C-5DS〟では動かないというトラブルが起きることがあります。
接点が左にくっ付いてGNDと繋がるとラベル名〝COM〟のラインがGNDに落ちます。〝COM〟は〝ちきどん〟のモーター回路に入っており、 〝L〟 になるとモーターが回転を始めるようになっています。つまり、〝RA6〟を 〝L〟 にすると〝ちきどん〟が回転して、 〝H〟 にすると停止するようになります。
リレーのコイルの両端にダイオードが逆向き(カソードが電源側に向いている)に接続されています。理由はリレーのコイルをOFFにすると逆起電力というのが起きます。これはサージ電圧とも呼ばれて、コイルに掛けられた電圧の5~10倍以上の逆向きの高電圧が発生します。この起電力を逆向きに接続したダイオードでショートさせて消す役目を持っています。普段は逆向きなので何の問題もありません。
コイル類に電圧を与えておいて、いきなりOFFにすると必ずこのサージが起きます。ですのでリレーなどを使う時はこのダイオードを忘れずに付けましよう。つけずに作動させると、高圧のパルスがPICに飛び込んで誤作動を起こしたり、スイッチングしているトランジスタやPIC自身が焼損してしまいます。
トランジスタ〝2SA1015〟のベース端子から10KΩが5Vへ接続されていますが、これは誤動作防止用です。
どのような誤動作が起きるのかといいますと、PICは電源が入った直後のポートはすべて入力ピンに設定されてスタートします。処理数やクロック数にもよりますが、初期設定でRA6を出力設定にするまでのあいだ、数mS期間はRA6が何も出力されない(入力ピンですので)非常に不安定な状態ですので、いきなりトランジスタがONになることがあります。接続先が〝ちきどん〟ですから、そうなっても問題はありませんが、そうではない制御の場合は大変危険です。そこで、出力ピンに設定されるまでのあいだ、この10KΩが 〝H〟 に吊り上げているのです。これも例のプルアップ抵抗です。
補足:入力ピン(RA0~RA5)に接続している抵抗アレイの2、3番が空きになっているので、この10KΩの抵抗を使わずに、抵抗アレイの方を使っても同じです。その方が部品コストも下がりますし、組み立てコストも安くなりますね。
今回は〝2SA1015〟を使って 〝L〟 でリレーをONさせていましたが、 〝H〟 でリレーをONさせる方法もあります。その時は〝NPN〟タイプの〝2SC1815〟が使えます。
制御は逆で、RA6を 〝H〟 にするとベース電流が流れてトランジスタがONになり、〝L〟 にするとOFFになります。このようなスイッチング回路を吸い込み型(シンクドライブ)と呼びます。誤動作防止用の抵抗も通常OFFにするためにGNDへ繋がれてます。この場合は〝プルダウン〟抵抗と呼びます。
リレーが小型の10~50mAでON/OFFするものを動かしていましたので、小さなトランジスタで済んでいましたが、もっと大型のリレーを動かす時はトランジスタのスイッチング回路に工夫が必要になってきます。このあたりはもっと進んでから説明します。
これで、Flash PICのボード1の説明はだいたい終わりました。次回は少しプログラム側の話。これも避けては通れない、2進数とビットの説明に入ります。
【4】ハードウエアが先かプログラムが先か…密接した関係 ---(ここまで)
Copyright(C) 2004. D-Space Keyoss. All rights reserved