石岡マロンズ Ishioka Marons is survival game club founded in 1991.

石岡マロンズ > 石岡マロンズ技術研究本部 > 電子式セミ/フル切替器 > 制御ソフト解説

制御ソフト解説

今回作成したソフトを提供します。

プログラム本体:GP01-090.hex
ソースファイル:GP01-090.asm

※ 本ソフトは、無償頒布いたします。複製・改変も自由です。但し、著作権は、石岡マロンズに帰属します。著作権者の許可なく、有償で再頒布することを禁じます。また、本ソフトを使用したことによって蒙った損害について、著作権者はその責任を負いかねます。 

制御の概要

セレクターに設けたスイッチの設定により、セミ/フルを撃ち分けます。3点バーストもできます。メカボックス内のセクターギアに貼りつけた磁石を磁気センサで検知することにより、1発発射したことを検知し、セミの場合は1回目でモータ停止、バーストの場合は3回目でモータ停止します。フルの場合は、センサに関係なく、引金を引いている限りはモータが回転します。

制御プログラム解説

通常PICは外部にクロック発振用の発振器が必要なのですが、PIC12F629は、RC発振回路を内蔵しているため、発振回路を外付けする必要がなく、電源以外の全てのピンを入出力に割り当てることが可能です。RC発振の場合、クロック周波数が4MHz(このPIC自体は20MHzまで対応)に制約される上、発振周波数の精度が悪いのですが、今回の場合は時計を作るわけでもなく、また処理も単純なので、特に問題ありません。

定数宣言

使用するマイコンがPIC12F629であること、演算結果を入れておく変数をここで宣言しています。また、発振モードをRC発振に設定します。

割込ルーチン

割込みとは、普段は実行しないが、何か突発的な出来事があったときに、処理を飛び込みで行わせることをいいます。PIC12F629は、GP2端子の電圧レベルを変化させると、割込み処理に移行します。

ここでは、モータの回転検知を割込み処理としています。セクターギヤは70ms程度で1回転するのに対し、通常のルーチンは1周期100ms以上あり、回転検知を通常のルーチンに含めてしまうと、折角回転検知を行っても、カットオフ処理を行うのが最悪100ms後ということになり、その間モータが止まらずに1〜2回転してしまうからです。

そこで、センサからの出力を割込み入力(GP2)に割当て、センサからの出力があったときは、通常ルーチンを停止させ、割込みルーチンに移動させます。これにより、センサで1回転を検知したら即座に(約50μs程度)モータを停止させることができるようになります。

割込み処理では、モータの回転数を数え、セミなら1発目で、3点バーストなら3発目でモータを止める処理を行っています。

なお、フルモードではこの処理が不要のため、センサの出力に関係なく、割込みを行わないようにしています。

外部スイッチ入力処理

モード切換スイッチと引金スイッチの入力判定を行っています。ノイズによる誤動作防止のため、20msの遅れ時素を入れています。オンに変化してから20ms待ち、20ms後もオンであれば、ノイズではないと判断します。

ここでは、セミ・3点・フルのいずれもオフの場合はセフティ位置と判断し、オン禁止とする処理も行っています。

点弧指令処理

オン禁止条件(セフティおよびカットオフ)がないかどうか確認し、なければFETをオンする処理をここで行っています。この処理が終わると、外部スイッチ入力処理に戻り、バッテリーの電源がある限り、延々と繰り返します。

サブルーチン

20μs,1ms,20msの遅れ時素(時間稼ぎ)を作るためのルーチンです。今回は、PIC内蔵のRC発振器を用いているため、多少の誤差が出ますが、今回の用途では問題なしです。

余談

本当は、各種保護機能(過電流保護など)を付けたかったのですが、そうするとピン数が足りなくなってしまうため、今回は必要最低限の機能としました。電子回路の収納スペースに余裕があれば、もっとピン数の多いPIC(例えばPIC16F84A)を使うこともできるのですが…。

Copyright (C) 1998-2006 Ishioka Marons. All Rights Reserved.