目次>5章 第2ステップ(色々な実験)>ステッピングモータを回す(ユニポーラ型)>ソース

ステッピングモータを回す(2相励磁)

更新日2008.5.17

以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。

; ========================== ここから ==============================
;	PIC16F84A
;	CLOCK : 20MHz
;
;	ステッピングモータ(ユニポーラ型)の制御
;	(2相励磁)
;
;	プリスケーラ	: 16
;	TMR0	: フリーラン
;	TMR0割込み周期	: 819.2uS
;

       LIST    P=PIC16F84A
       INCLUDE P16F84A.INC
       __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

	CBLOCK	0Ch
	save_st		;STATUSのセーブ
	save_w		;W-regのセーブ
	interval	;インターバル
	interval_i	;インターバル初期値
	motor_data	;パルスモータ制御ビット
	flag		;処理フラグ
			; bit0:1ステップ時間経過
	ENDC

f_step	EQU	0	;flag[0]:1ステップ時間経過

; ============================================
	ORG	0		;リセットベクタ
	GOTO	init

; ========= 割り込み処理 (タイマ)=============
	ORG	4		;割込みベクタ
intr
	MOVWF	save_w		;W-regセーブ
	SWAPF	STATUS,W
	MOVWF	save_st		;STATUSレジスタセーブ

	BCF	INTCON,T0IF	;割込みフラグクリア

	DECFSZ	interval,F	;ステッピングモータ1ステップ時間経過?
	GOTO	intr90		; No
	MOVF	interval_i,W
	MOVWF	interval	;インターバル初期値設定

	BSF	flag,f_step	;1ステップ時間経過

intr90
	SWAPF	save_st,W
	MOVWF	STATUS		;STATUSレジスタロード
	SWAPF	save_w,F
	SWAPF	save_w,W	;W-regロード
	RETFIE			;割込み許可リターン

; ================ 初期処理 ================
init
	BSF	STATUS,RP0	;■バンク1に切替え
	MOVLW	0Fh		;RB0-3:input,RB4-7:output
	MOVWF	TRISB
	MOVLW	083h		;プリスケーラ:16
	MOVWF	OPTION_REG
	BCF	STATUS,RP0	;■バンク0に切替え

				;0.2uS×256×16×30=24.576mS
	MOVLW	d'30'		;ステッピングモータ1ステップのカウンタ
	MOVWF	interval_i	;初期値
	MOVWF	interval	;現在値

	MOVLW	030h
	MOVWF	motor_data	;ステッピングモータ制御信号

	CLRF	TMR0
	MOVLW	0A0h		;TMR0割り込みを使用する
	MOVWF	INTCON

; ================ メイン処理 ===============
main
	BTFSC	flag,f_step
	CALL	step_2R
	GOTO	main


; ====== ステッピングモータ制御(2相励磁,右回転) ======
step_2R
	BCF	flag,f_step

	BCF	STATUS,C
	RLF	motor_data,F
	BTFSC	STATUS,C
	BSF	motor_data,4

	MOVLW	0Fh
	ANDWF	PORTB,W
	IORWF	motor_data,W
	MOVWF	PORTB

	RETURN

	END
; =========================== ここまで ===============================