§5.パーフェクトダンスマシーンの製作2(モーターの駆動制御)
PICがあるなら、制御ソフト側のほうは、何ら問題がないはずだ。というか、小さくてもマイコンなわけで、ある程度複雑なことでも、本気でかかればなんとかなる。進研ゼミ高校講座みたいな奴だ。(どんなたとえやねん!)
しかし、PICの出力は、TTLだ。TTLってゆーのは、トランジスタ・トランジスタ・ロジックの略で、なんかよー知らんけど、たいてい電流は微小なわけだ。まあ、ロジックゆうぐらいだから、そりゃON/OFFだけやねんから、こいつ以上の電圧やったらON,こいつ以下の電圧やったらOFFやで〜とか、電圧だけの話で、電流なんか微小で構わない。極端なことを言えば、流れてなくても良い。そのほうが、電気を食わなくて済むのだから...
そんなわけで、PICの出力ピンを直接、モーターにつないでも仕方がないわけだ。せいぜい、LEDの点灯が出来るかな、という程度。実のところ、ドライブ(駆動)するLEDの数が増えてくると、それすら怪しかったりする。ちなみに、PICは、結構がんばりよる奴で、LEDの点灯は可能である。なんか、新しいPICにはもっと大電流を制御できるシリーズもあるようだが、そんなもんはやねうらおには高くて買えないからして、現実的でないのだ。
パワーが足りないなら、トランジスタをかませばそれで済む話なのだが、この手の工作で、モーターとなると、一般に逆回転させるために正負の反転が必要なので、そのへんをどうするかが今回の課題である。今回使用するのは、フツーのマブチモータである。マブチモータとは、小学校のときに夏休みの工作で使って以来なので、ほぼ20年来の再会である。サイチェン!馬渕君!(お前ゆうてること、わけわからんがな...)
ともかく。モータで正確な動きが必要な場合には、一般にステッピングモータを使用する。なんかカタカナで書いてあると、とても読みづらい。やねうらおは、かつて「すっぴん徳島」をステッピン徳島と読んで大笑いされたことがあるが、それぐらい読みづらいのである。(俺だけなんやろな...)
ステッピングモータは、交互にパルスを送っていかないといけないので、結構、手のかかる奴だ。ただ、PICなどを使っていれば、それはプログラムレベルの話なので、何とかなる。ところが、出力がフツーのモータに比べて弱いのである。精度を競うならともかく、速度やパワーで勝負のつく電子工作のコンテストでなら、ステッピングモータなど使わないほうが無難かも知れない。
そのへんの話は、また別の機会に譲るとして、ここでは、モータの制御のためのICを紹介する。
やねうらおが買いに行ったときは、東芝のTA7288Pが150円と一番安かった。こいつは、2本の入力ピン(実際は3本だが1つのモータのみの制御なら2本と考えて良い)にTTLレベルで入力を与えると、モーター正回転/負回転/停止/ブレーキと4つの状態を制御できる。よーするに、こいつの入力をPICのI/Oピン,出力をモーターと接続して電源さえ与えてやれば、PICからモータの制御が出来るということである。実にわかりやすい。これなら、多い日も安心!である。(何がやねんな...)
モータの停止とブレーキの違いがわからない人もいるかも知れない(とゆーか、フツーわからんか...)が、停止(ストップ)は、DCモータの端子をどこにもつながない状態で、モータの軸はフリー。ブレーキは、モータの+側と−側の端子をショートした状態で、モータ軸を外部からまわしたときに発生する逆起電力(フレミングの法則ね)によって、外部から加わった力とは逆方向の力(=ブレーキ)が発生する。
実は、モータの制御ICは、数や種類が限られていて、低電圧タイプは入手困難である。PICがせっかく2Vで動作しても、モータのICが5V食うのでは、話にならない。このICと等価なものをMOS FETで組んでしまえば良いのだが、めんどくさがりなやねうらおは、今回はパス。まあ、機会があったらやります。
ところで、モータを駆動させるということは、まず、位置の検出が必要な場合が多い。どれだけモータが回転したか、それがわからないことには、次の制御が出来ないというような場合である。そのへんは、センサーでなんとかなるだろう。そんな都合のいいセンサーあるんかいな?とか言う人には、センサー万別ですなどと阪大の某教授のギャグをパクって、お返しする。
あと、出力レベル(モータの回転速度ね)の制御が必要な場合もある。このTA7288Pには、制御電源ピン(そこに入力された電圧と同じ出力電圧が得られる。もちろん、出力側電源電圧を上回るような出力は出来ないが)というのがあって、そいつの電圧を下げてモータの出力を抑えることは出来るが、この参照電圧を動作中に可変させるのは、あまり一般的でない(と思う)
フツー、この手の出力制御は、PWMという方式を使う。PWMとは、フルでONにするのではなくて、小刻みにON/OFFを繰り返して、たとえば、1秒間にON/OFFを1回繰り返して、フルパワーの半分の出力に抑えるというような方式である。
これなら、PIC側のプログラムで対処できる。要するに、余分なハードは不要なわけである。ただ、PWM出力は、PIC側は、そいつにかかりっきりになってしまうわけで、平行して何か別の処理をさせたいときは、もうひとつPICを使うとか(笑) いや、PWM制御専用のICとかもある。PICに無縁の人は、フツー、そういうのを使う。(個人的には、あれ使うよりは、PICの12C508とか使ったほうが低コスト、低電圧、低消費電力で良いような気もしなくはない...)
今回は、出力レベルの制御は不要なので、このへん深入りはせずに、ちゃっちゃと次に行きます。
パーフェクトダンスマシーン試作1号機のコンパネ(左の写真)と、その裏面(右の写真)。
ハンダ付けするのは今回が始めてだが、セコセコなやねうらおは、集積度に命をかけている。
右の写真の右上に写っているのは、モーター用のドライブIC。左の写真の右上に写っているのが噂のPIC16F84。その左が、水晶発振器。正確なタイマーを得るために必要。あと、モータが動いたあと、逆起電力等により発振してしまい、リセットがかかるんで、バイパスコンデンサとして、アルミの0.1μFのコンデンサを入れている。(右の写真の右端のやつ)これは、しばらく原因がわからずに悩んだ。この手の回路設計の常識らしいが...
そんなわけで、PICを動かすには、電気が必要です。Vddに電池のプラス側,Vssに電池のマイナス側を接続するだけでは動作しない。
まずは、~MCLR端子。こいつが、リセット信号を受付る。このピンは、アクティブローリセット(しばらく0Vになったらリセットがかかる)なので、こいつも、とりあえず、電池のプラス側につないでおきます。
あと、PICのプログラミングでWatchdogTimer(=番犬タイマ。一定時間経つごとにリセットしてくれる便利な奴)やら、オシレータやらがあるかも知れませんが、前者はオフ、後者は、外部からクロック信号をもらうのでなければ内部のRC共振回路を使うように選択します。
今回のダンスマシーンは、音楽に合わせて踊るというもので、正確なタイマーが必要なので水晶発振子を使用しています。16F84は、10Mzで動作するのですが、10MHzの100円水晶だけが全部売りきれ(誰や〜大量に買いこむ奴は〜!!)だったので、機嫌を悪くしたやねうらおは、自宅にゴミマイコンを分解。なぜか、2.4576MHzと書かれた水晶が出てきました。2.457600MHz = 2^15 * 3 * 5^2 Hzですか?うーん。まあ、何でもいいや。やってやろうじゃないの。
一応、PICはクロック回路は内臓しているので、外部に水晶発信器さえつけてあれば動く。(下の回路図) 22pFのコンデンサを入れてます。詳しくは、発振回路について調べると良いでしょう。簡単に言うと、コルピッツ型発振回路のLを水晶に置き換えたようなもの。あと、インバータは、トランジスタで置き換えられることを考慮に入れて水晶がインダクティブに動作する領域で使うようにすればOK。そのへんは、今回は、深くは立ち入らない。ちゅーか、まだ電子工作1年生なもんで、そんなことまで詳しく知らないのだ(笑) とにかく10〜20pFぐらいのん付けとけや!(無責任)
あと、PICのデータシートにはMCLRが、電源投入後や、リセットスイッチ押し下げ後は、一定時間LOWになっていて、そのあとHIGHになるというリセット回路が掲載されているが、リセット回路が不要な場合は、MCLRピンは5Vに接続しておいて構わない。やねうらおの計算によると、あのリセット回路を使うと、~MCLR = Vdd * (1-exp(-t/RC))になる。(間違ってたらゴメン)
注意点は、それくらいです。あとは、ポートを出力・入力を考えて、テキトーに(?)LEDとスイッチを配置します。この手の回路の常識ですが、天落および地絡させているポートを出力ポートにしないこと。たとえば天落しているポートを、無理にLOWレベルにドライブしに行くと、最悪ICを破損します。そこで、配線ミス(イモハンダとか)をしてもいいように、開放している入出力ポートは、入力設定にしておいたほうが良いでしょう。~MCLRですが、リセットスイッチを用意しないにせよ、直接5Vに接続するよりは、プルアップ(100KΩほどの抵抗をかましてから、5Vに接続する)しておいたほうが消費電力が少なくて良いかも知れません。
あと、スイッチの入力も負論理にしておけば抵抗をかましたあと5Vにつなぐことになるので、一連のプルアップ抵抗をラダー抵抗(集合抵抗)で代用できます。これで、配線が大幅に省略、小スペース化が図れます。
あとLEDを使用する場合は、かならず抵抗を入れて使いましょう。LEDは、オームの法則に依存しない一定レベルの電圧降下を引き起こすので、抵抗を入れずにLEDを使うということは、プラスとマイナスをショートさせているのに近いものがあります。(ちゅーか、やねうらおは、最初それで失敗したという話もある)
ちゅーことで、その他、PICや一般的な電子工作のことでわからないことがあれば、後閑さんのHPが詳しい。PICユーザーで知らなければモグリだとも言われるほど有名なところ。後閑さんは、やねうらおが尊敬している人の一人である。一般的なPICのプログラム上の問題は、ここを見ればたいていは解決する。
後閑さんのHP:
http://www.bekkoame.ne.jp/~gokan/
とりあえず、基本的な部分の解説は終わったので、データシートに書いてある程度のこと書いてても仕方ないので、次回からは、後閑さんの記事の間隙を縫うようにして、TA7288Pでモーター2つを制御する方法と、製作上の技術、PICプログラミングの技巧についてマニアックな話をする。