モータ制御

ハードウェア

仕様

1.5V 500mA から 12V 5A 程度のモータの制御を行います。 制御は5V の On, Off で停止、正転の切り替えと、 3bit の入力で PWM のコ ントロールします。

GP5 がモータの ON-OFF で、 GP0-2 が PWM のduty 比です。 GP4 が FET 2SK2232 のスイッチング回路に接続されます。

回路図

回路図

ソフトウェア

動作の概要

モータ制御は入力により次のような動作をする。

入力出力
GR5=ONGP4 duty比=100%
GR5=OFF, GR0-2=0duty比=0%
GR5=OFF, GR0-2=1duty比=1.5625%
GR5=OFF, GR0-2=2duty比=3.125%
GR5=OFF, GR0-2=3duty比=6.25%
GR5=OFF, GR0-2=4duty比=12.5%
GR5=OFF, GR0-2=5duty比=25%
GR5=OFF, GR0-2=6duty比=50%
GR5=OFF, GR0-2=7duty比=100%

プログラムの動作

準備

  1. 各ポートの準備
  2. 割り込みの設定。割り込み間隔は最小にする。

主ルーチン

無限ループ

割り込み処理

  1. GR5=ON なら GP4=ON で終了する。
  2. 入力値に応じて比較用の値を設定する。 比較用の値は次のように設定する。
    GP0-2比較用の値
    00
    11
    22
    34
    48
    516
    632
    764
  3. カウンタ値を更新する。1を減らし、0だったら64にする。
  4. カウンタ値と比較値を比べ、カウンタ値の値が比較値以上なら OFF の処 理、比較値未満なら ON の処理をする。

プログラム

プログラムを以下に示す。


	#include	"sakamoto629.inc"

	org	0x0000
	goto	start
	org	0x0004
	goto	timer0
	org	0x0008
start	
	calibrate

	movlw	0x07
	movwf	CMCON
	banksel	TRISIO
	movlw	b'00101111'
	movwf	TRISIO

	timer0_init	b'11010000' ; 内部クロック、 PS=1:2
	duty_init
	movlw	d'64'
	movwf	duty_period
main
	movf	GPIO,0
	andlw	b'00000111'
	call	getduty
	movwf	duty_ratio
	goto	main

getduty
        addwf   PCL,1
startduty
	retlw	d'0'
	retlw   d'1'
	retlw   d'2'
	retlw   d'4'
	retlw   d'8'
	retlw   d'16'
	retlw   d'32'
	retlw   d'64'
endduty

	timer0_prg	control

control
	btfss	GPIO,5
	goto	duty
	goto	gp4on

	duty_prg	gp4off,gp4on

gp4off
	bcf	GPIO,4
	return
gp4on
	bsf	GPIO,4
	return
	end

坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科