2003/08/28
バイポーラ駆動ステッパーモータ制御装置の製作
神崎正美（固体地球研究センター）
mkanzaki@misasa.okayama-u.ac.jp

SPring-8の実験でステッパーモータをちょっと使う予定があったので，制御装置を作成した．モーターはロープロファイルのものが必要だったので，探したらRS（アールエスコンポーネンツ）のカタログにあったが，駆動方法がバイポーラでしか使えないと書いてあった．バイポーラとはモータに流れるஏ流の極性が変わるタイプの駆動方式であり，ユニポーラは極性が１つに決まっているタイプである．ユニポーラだと秋月ஏ子などでドライバーキットがあるし，実際いくつか手持ちもあるのだが，バイポーラは複߆なためかキットもなく，自作することにした．ドライバー回路の自作は面倒そうなので，ドライバーICを探したところSGS-ThomsonMicroelectronicsのPBL3717Aがあって，アプリケーションノートもpdfでウェブ上から入手できるし，RSから購入できることが分かったのでこれを使った．ドライバーに制御信号を与えるശ分はワンチップマイコンである
PIC16F84Aを使った．これにプログラムを書き込むことでいろいろな動作をさせることが可能になる．PIC16F84Aへのプログラムの書き込みには秋月ஏ子のAKI-PICプログラ
マーを使った．AKI-PICプログラマーとPIC16F84Aの利用については遠藤敏夫さんの「わかるPICマイコン制御」誠文堂新光社刊がいい入ใ書である．
ശ品
ACアダプタஏ源以外全てRSから手に入る．ただしPIC16F84Aは秋月ஏ子の値段のほぼ４倍‫ة‬くする．ACアダプタは秋月で150円だったが，ちょっと重い．

回路図
ドライバーശ分の回路はSGS-ThomsonMicroelectronicsのアプリケーションノートの回路図をそのままを使った．PIC側では，発振にはセラロックを使用．RA2,3ピンはSW入力用に空けている．SWを付ける場合は10kの抵抗を付けてSW開放時にグラウンドへ落ちるようにする．RB0-3はI0A等の制御に使う．RA0,1ピンは位相の制御に使った．
RB4-8は不使用なのでグランドに落とした．PICはセラロック以外に外付けശ品が必要な
く，೗常に便利である．
使用するステッパーモーターは10VDC用でバイポーラ駆動のみ可能，ドライバーIC用のஏ源はmin10Vなので，DC10V出力のACアダプタஏ源を使っている．PICとドライバーのロジック用ஏ源はDC5Vが必要であるため，10VからレギュレータICの78L05を使って5Vを作っている（緑線ശ分）．
ドライバーICの1番と15番ピンがモーターのコイルにつながる．アプリケーションノートの回路図を見ると２つの出力はモーターの２つのコイルに対して逆相にするようだ．回路図のICのピン配置はtopview．

+10V

78L05
1W 1kW

820pF

16I0A

5V
0.1mF

47mFx2

PBL3717A
I1A phase A

1820pF

11W

820pF

1kW

1820pF
56kW

I1B phase B

RB0
RB1
RB2
RB3

0.1mF
100mF

PIC16F84

PBL3717A

RA1 phase B
RA0 phase A

I0B

161856kW

製作
汎用基板にICソケットを３つ載っけて，その間を配線して作った．ドライバーIC周辺ശ分が結構混み合うので，プリント基板があった方がいい．アプリケーションノートにプリント基板の例が載っている．
ステッパーモータを動かしてみる
さて基板をよくチェックしたら，PICをプログラムして動かしてみる．その前に回転させるためにプログラムに必要な知࠭は．．．
I0AとI1Aの৓定でモータのコイルに流れるஏ流を変えられる．I0A=High,I1A=Highでஏ流0,I0A=Low,I1A=Hで低ஏ流，I0A=H,I1A=Lで中ஏ流，I0A=L,I1A=Lで݄ஏ流となる．I0B,I1Bも同様．必要なトルクに応じて使い分ける．
フルステップドライブの場合は上記のようにI0A等でஏ流を最初に৓定しておいて，PhaseA,Bのみを変化させて制御する．PhaseAとBで90度位相のずれた矩形波を与えると，モーターが回転する．４つのステップで１サイクルであるが，PhaseA側で1100,
PhaseB側で0110と順番に信号を送る．この各ステップでステップӿだけ（このモータの場合は1,8度）回転する．上記回路の場合，上記の通り信号を与えるとCCW方向（モーター࠰上から見て）に回転した．逆向きに動かすには位相を逆にすればよい．この駆動方式の場合は常に二つのコイルにはஏ流が流れているのが特徴．
この通りのパルスシーケンスをPICで作ってやるとモータが回転した®各パルス間に待ち時間用のループを入れてあるが，その回数を変化させることで回転数を制御することができる．
ハーフステップドライブの場合はさらにஏ流のON/OFFも加わり，ステップの半分ではどちらかのコイルがOFFである状態が存在する．そのため８つのステップで１サイクルとなり，PhaseA側は11110000,PhaseB側は11000011の順に信号を送る，I0A等はドライブஏ流値の応じて異なるが，A側は1と5ステップ目でஏ流がOFFになるように，B側は3と7ステップ目でஏ流がOFFになるようにする（デューティ比1/4）．この駆動方式の場合は２ステップで１ステップӿ回転する．
この通りのパルスシーケンスをPICで与えてやるとモータはちゃんと回転した．こちらの方がより細かいӿ度制御となめらかな回転が可能であるが，トルクは少し弱い．
ホールドする場合はI0A等でஏ流を0以外に৓定して，PhaseA,Bを任意の値に固定すればよい．モータ࠰を回転させようとするとトルクがかかっていることがわかる．ホール
ド時には当然ஏ流が流れているので，そのままでଥ時間放置するとモータ自体やドライバがかなり熱を持つので注意する．モータを回転していない時で，ホールドが不要な時はI0A等の৓定でஏ流0となるようにプログラムする．
プログラム例
PICのプログラムは基本的にアセンブラで作る(Cも存在するが）．アセンブラを秋月のpa.exeでマシン۰(hex形式）に変換して，picw（ライターソフト）を使ってマシン۰になったプログラムを，AKI-PICプログラマーに刺したPICICに書き込む．
この例では１回転(360度)させて停止するだけのプログラムである．フルステップドラ
イブ方式を使っている．基本的なശ分は最初にRA,RBの該当するポートを出力用に৓定して，I0A等でஏ流値৓定のためにRB0-3のL,Hを৓定する．それからループを使って4ス

テップ動作を50回だけ回す（1.8*4*50=360)．速度調整のためにwaitループを各ステッ
プ後にcallしている．ループ終了後はIA0等でஏ流を0に৓定して終了．
;***motor.asm***;Testprogramtodrivebipolarsteppermotor;ra0,1:phaseA,B;rb0,1,2,3:I0A,I1A,I0B,I1B
include16f84.h

tim1
tim2
cnt1

start

.osc.wdt

hs
off

org
ds
ds
ds

0ch
1
1
1

org
goto

0start

;変数;宣‫׼‬;;
clr rb;ポートBをクリア
mov !rb,#11110000b;ポートB下位4ビット出力用にmovrb,#00001010b;ポートB下位4ビットでે流低にऋ定
mov !ra,#11111100b;ポートA下位2ビット出力用に

main
mov

cnt1,#50;５０回転のためのカウンタ

mov
call
mov
call
mov
call
mov
call
djnz

ra,#00000001b
wait
ra,#00000011b
wait
ra,#00000010b
wait
ra,#00000000b
wait
cnt1,lop1

lop1

movrb,#00001111b;PhA=1,PhB=0とऋ定fullstepdrive;時間稼ぎ;PhA=1,PhB=1とऋ定;時間稼ぎ;PhA=0,PhB=1とऋ定;時間稼ぎ;PhA=0,PhB=0とऋ定;時間稼ぎ;cnt1を１つ減じ，0でないならlop1へ;ે流を0にする

loop
goto

loop

wait
wa1
wa2

movclr
nop
djnz
djnz
ret

tim1,#32
tim2
tim2,wa2
tim1,wa1;無限ループに入って終了．
;「時間稼ぎ」のサブルーチン;ここの数値を変えて速度を੘整; 0-1->255となる;何もしない命令（時間稼ぎのため）;tim2を１つ減らして，0でないならwa2へ;tim1を１つ減らして，0でないならwa1へ;サブルーチンを終了