目次

モーター制御

 IchigoJamにモーター制御用ICを接続して
 プログラムで動かしてみます。

 モーター制御用ICの回路は、以下。



 IchigoJamがOUT命令で出力できる電圧は3V程度
 なので、モーター制御用ICを動かすには、不足です。

 モーター制御用ICを動かせる程度までに電圧を
 引き上げるため、インバータを2つ接続します。

 OUT命令で出力する電圧が3V程度でも、インバータを
 2つ接続した後で出てくる電圧は5Vくらいになります。

 インバータの入力にはLEDを接続し、IchigoJamが論理値
 の'1'を出力したとき、点灯させてプログラムの動作を
 わかりやすくします。

 利用しているモーター制御用ICは、2ビットで次の
 動作をさせられます。



 モーター制御用ICは、2個使うので、ツインギアモーター
 を利用すると、前進、後退、右回転、左回転、停止が可能。

 ツインギアモータは、次のフォークリフトを
 使えばメカと一緒に入手できます。



 前進、後退、右回転、左回転、停止を
 サブルーチンで定義してみます。

200 ' forward
210 OUT 3,1 : OUT 4,0 : OUT 5,1 : OUT 6,0
220 RETURN
230 ' reverse
240 OUT 3,0 : OUT 4,1 : OUT 5,0 : OUT 6,1
250 RETURN
260 ' right
270 OUT 3,1 : OUT 4,0 : OUT 5,0 : OUT 6,1
280 RETURN
290 ' left
300 OUT 3,0 : OUT 4,1 : OUT 5,1 : OUT 6,0
320 RETURN
330 ' stop
340 OUT 3,0 : OUT 4,1 : OUT 5,1 : OUT 6,0
350 RETURN

 各サブルーチンは、ピン3から6に4つの値
 を出力するだけになっています。FOR...NEXT
 で、配列に入れた値をOUT命令で与えればよい
 でしょう。これをサブルーチンにまとめます。

100 ' impress
110 FOR I=3 TO 6 : OUT I,[I] : NEXT
120 RETURN

 サブルーチンを使う方は、配列[3][4][5][6]に
 論理値の'1'か'0'を入れ、呼び出せば、うまく
 いきそう。

100 ' impress
110 FOR I=3 TO 6 : OUT I,[I] : NEXT
120 RETURN
200 ' forward
210 LET [3],1,0,1,0 : GOSUB 100 : RETURN
220 ' reverse
230 LET [3],0,1,0,1 : GOSUB 100 : RETURN
240 ' right
250 LET [3],1,0,0,1 : GOSUB 100 : RETURN
260 ' left
270 LET [3],0,1,1,0 : GOSUB 100 : RETURN
280 ' stop
290 LET [3],0,0,0,0 : GOSUB 100 : RETURN

 モーターを回している時間が必要になるので
 WAIT命令を利用して、サブルーチンを呼出す
 方は、指定して貰いましょう。

 前進、右回転、後退、左回転、停止をさせてみます。

 停止状態から動き出すとします。

10 ' moving
20 LET D,1200 : LET W,60 : GOSUB 280
30 GOSUB 200 : WAIT D : GOSUB 280 : WAIT W : ' forward & stop
40 GOSUB 240 : WAIT D : GOSUB 280 : WAIT W : ' right   & stop
50 GOSUB 220 : WAIT D : GOSUB 280 : WAIT W : ' reverse & stop
60 GOSUB 260 : WAIT D : GOSUB 280 : WAIT W : ' left    & stop
70 END
100 ' impress
110 FOR I=3 TO 6 : OUT I,[I] : NEXT
120 RETURN
200 ' forward
210 LET [3],1,0,1,0 : GOSUB 100 : RETURN
220 ' reverse
230 LET [3],0,1,0,1 : GOSUB 100 : RETURN
240 ' right
250 LET [3],1,0,0,1 : GOSUB 100 : RETURN
260 ' left
270 LET [3],0,1,1,0 : GOSUB 100 : RETURN
280 ' stop
290 LET [3],0,0,0,0 : GOSUB 100 : RETURN

 前後左右の移動のために、サブルーチンの行番号を
 区別するのは面倒なので、変数で移動の仕方を変え
 られるようにします。

10 ' moving
20 D=1200 : W=60
30 C=0:GOSUB 100: ' stop
40 C=3:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' forward & stop
50 C=1:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' right   & stop
60 C=4:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' reverse & stop
70 C=2:Z=D:GOSUB 100:C=0:Z=W:GOSUB 100:' left    & stop
80 END
100 ' control
110 IF C>4 GOTO 190
120 IF C=1 LET [3],1,0,0,1 : ' right
130 IF C=2 LET [3],0,1,1,0 : ' left
140 IF C=3 LET [3],1,0,1,0 : ' forward
150 IF C=4 LET [3],0,1,0,1 : ' reverse
160 IF C=0 LET [3],0,0,0,0 : ' stop
170 FOR I=3 TO 6 : OUT I,[I] : NEXT
180 WAIT Z
190 RETURN

 ラベル利用で、次のようにもかけます。

10 ' moving
20 D=1200 : W=60
30 C=0:GSB @CON: ' stop
40 C=3:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' forward & stop
50 C=1:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' right   & stop
60 C=4:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' reverse & stop
70 C=2:Z=D:GSB @CON:C=0:Z=W:GSB @CON:' left    & stop
80 END
100 @CON
110 IF C>4 GOTO 190
120 IF C=1 LET [3],1,0,0,1 : ' right
130 IF C=2 LET [3],0,1,1,0 : ' left
140 IF C=3 LET [3],1,0,1,0 : ' forward
150 IF C=4 LET [3],0,1,0,1 : ' reverse
160 IF C=0 LET [3],0,0,0,0 : ' stop
170 FOR I=3 TO 6 : OUT I,[I] : NEXT
180 WAIT Z
190 RTN

 移動に利用している変数Cは、2進数で表現すると以下。

  C=0 -> `000
  C=1 -> `001
  C=2 -> `010
  C=3 -> `011
  C=4 -> `100

 右のモータを回転させるときには、`001
 左のモータを回転させるときには、`010
 として、両方のモータを回転させるとき
 `011として、どちらのモータかがわかる
 ようにしてみました。

 サブルーチンの先頭で、変数値として
 正しくない場合の処理をしています。

 モーター制御回路のICの数を減らすには、次のように
 します。




目次

inserted by FC2 system