実験の目的
手でステッピングモータの励磁パルスを作るのでは、あまり実用的ではなく回転速度も上げられない。次にプログラムが起動するとモータが回り続けるようなプログラムを作成する。
実験手順
実験回路の結線
回路の接続は実験3と同じである。
プログラム
以下のプログラムよりHEXファイルを作成し、PICにプログラムせよ。
;
; 実験4 1相励磁ステッピングモータ駆動プログラム
;
; CONFIG1
__CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CCPMX_RB0 & _CP_OFF
; CONFIG2
__CONFIG _CONFIG2, _FCMEN_ON & _IESO_ON
list p=16F87
#include <p16F87.inc>
ORG 0x000 ; リセットベクタを 0番地に指定
BSF STATUS,RP0 ; STATUSのビットPR0をセット(BANK 1)
MOVLW B'00001111' ; WレジスタにB'00001111'を転送
MOVWF TRISA ; Aポートの下位4bitを入力に設定
CLRF TRISB ; Bポートを全て出力に設定
BCF STATUS,RP0 ; STATUSのビットPR0をセット(BANK 0)
COUNT1 EQU 0x20
COUNT2 EQU 0x21
LOOP0 MOVLW B'00001' ; WレジスタにB'00001'を転送
MOVWF PORTB ; Wレジスタの値をBポートに転送
CALL WAIT
MOVLW B'00010' ; WレジスタにB'00010'を転送
MOVWF PORTB ; Wレジスタの値をBポートに転送
CALL WAIT
MOVLW B'00100' ; WレジスタにB'00100'を転送
MOVWF PORTB ; Wレジスタの値をBポートに転送
CALL WAIT
MOVLW B'01000' ; WレジスタにB'01000'を転送
MOVWF PORTB ; Wレジスタの値をBポートに転送
CALL WAIT
GOTO LOOP0 ; ラベルLOOP0へジャンプ
; 無駄時間待ち処理 WAIT
WAIT MOVLW 0xFF ; Wレジスタに0xFFを転送(回転数調整用)
MOVWF COUNT1 ; COUNT1にWレジスタの内容を転送
LOOP1 CALL WAIT1 ; WAIT1をサブルーチンコール
DECFSZ COUNT1,F ; COUNT1を減算してCOUNT1に格納
GOTO LOOP1 ; COUNT1が0でなければ繰り返す
RETURN ; COUNT1が0になったら戻る。
WAIT1 MOVLW 0xFF ; Wレジスタに0xFFを転送(回転数調整用)
MOVWF COUNT2 ; COUNT2にWレジスタの内容を転送
LOOP2 NOP ; 1命令サイクル消費
DECFSZ COUNT2,F ; COUNT2を減算してCOUNT2に格納
GOTO LOOP2 ; COUNT2が0でなければ繰り返す
RETURN ; COUNT2が0になったら戻る。
END
List.2 1相励磁ステッピングモータ駆動プログラム
MPLAB IDEでアセンブルする際、[Source Files]下にファイルが複数あるとエラーが発生することがある。その場合は使わないファイルを右クリックし[Remove]を選択し削除する必要がある。
動作させると、ステッピングモータが回り続ける(図4-1)
図4-1 ステッピングモータ動作の様子
励磁波形の観測ならびに回転数の測定
オシロスコープにより、X、X、Y、Y の各相の励磁波形を観測せよ(図4-2)。また、この励磁波形より、ステッピングモータの回転数を求めよ。
図4-2 励磁波形の観測
応用
- 回転数を変化させてみなさい。このとき、プログラムの各設定値と、これに対する回転数を記録しておくこと。
- 回転方向を逆にしてみなさい。このときの励磁波形を記録しておくこと。