MIRS0905 ステッピングモータボード制御プログラム仕様書
MIRS0905-ELEC-0003
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2010.03.04 森川 栗田 初版

目次

1. 本ドキュメントについて
2. 本プログラムのアルゴリズム
3. テスト仕様
4. プログラム

1. 本ドキュメントについて

    本ドキュメントでは、アーム制御のためのステッピングモータボードに搭載するPICプログラム作成に関して記す。


2. 本プログラムのアルゴリズム

     はじめに、本プログラムはMIRS0905に搭載されているアームを制御ユニットを制御させるため、ステッピングモータボード上のPIC16F628aに書き込むプログラムである。
     そもそもステッピングモータは回転軸に取付けられた磁石と固定された電磁石からなっている。これを回転させるためには、固定された方の電磁石に電流を流して磁化し、回転軸の磁石を引きつけるという作業をFig.2.1の@ABCの順番のように繰り返して行う。

    Fig.2.1 ステッピングモータボード回路図


    したがって、プログラムのアルゴリズムとしては、Fig2.2の回路上において上のような回転をさせるようにPIC16F628aのPORTB4〜PORTB7の値を変化させていくプログラムを作成すればよい。

    Fig.2.2 ステッピングモータボード回路図


     今回使用したステッピングモータは、ユニポーラ型で励磁シーケンスは2相としてトルクが高くなるように制御するので、table.1に示したとおりの順番でPORTBの順番を変化させていく。
    table.1
    X Xn Y Yn
    1 0 0 1
    1 0 1 0
    0 1 1 0
    0 1 0 1

     table.1の順で信号が1サイクル信号が送られると、ステッピングモータは7.5[deg]回転する。  以上の動作を繰り返すことにより、table.1を1サイクルとして、サイクル数(角度)を指定するモータの回転を実現することができる。

3. テスト仕様

     本プログラムは、PICを制御して回路が動作するか確認するため、1次試験ではブレッドボードを使用してステッピングモータを接続する代わりに、LEDを点灯させそのパターンを確認する。  1次試験をクリアしたら、Fig.2の回路に接続し動作の確認を行う事とする。

4. プログラム

    作成したプログラムを以下に示す。
    
    
    #include <16f628a.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP     //低電圧プログラミングは無効にする(NOLVP)
    #use delay(CLOCK=4000000)
    #byte port_b=6
    
    #define NUM 5    //回転速度
    #define ROT 340      //回転数
    
    static int count=0;
    static long i;
    
    void main(){
       set_tris_b(0x0f);    //PB0-3入力,PB4-7出力に設定
       port_b=0x50;
       while(1){
    		  if(input(pin_b0)==1){
    		         delay_ms(1000);
    		         count++;
    		         if(count==5){
                   delay_ms(5000);
    					for(i=0;i<ROT;i++){      //ROT=12で1回転
    						   port_b=0x50;		//反転
    						   delay_ms(NUM);
    						   port_b=0x60;
    						   delay_ms(NUM);
    						   port_b=0xA0;
    						   delay_ms(NUM);
    						   port_b=0x90;
    						   delay_ms(NUM);
    				   }
    				   delay_ms(3000);
    				   for(i=0;i<ROT;i++){
    						   port_b=0x90;
    						   delay_ms(NUM);	//正転
    						   port_b=0xA0;
    						   delay_ms(NUM);
    						   port_b=0x60;
    						   delay_ms(NUM);
    						   port_b=0x50;
    						   delay_ms(NUM);
    				   }
    				   }
    		}else{
    			count=0;
    		}
      }
    }
    
    
     尚、サイクル数を340と指定しているので、変数の型はint型ではなくlong型を用いる。



     データ CLICK ME(akb628a.c)
関連文書